mathlib documentation

data.​padics.​padic_numbers

data.​padics.​padic_numbers

p-adic numbers

This file defines the p-adic numbers (rationals) ℚ_p as the completion of ℚ with respect to the p-adic norm. We show that the p-adic norm on ℚ extends to ℚ_p, that ℚ is embedded in ℚ_p, and that ℚ_p is Cauchy complete.

Important definitions

Notation

We introduce the notation ℚ_[p] for the p-adic numbers.

Implementation notes

Much, but not all, of this file assumes that p is prime. This assumption is inferred automatically by taking [fact (prime p)] as a type class argument.

We use the same concrete Cauchy sequence construction that is used to construct ℝ. ℚ_p inherits a field structure from this construction. The extension of the norm on ℚ to ℚ_p is not analogous to extending the absolute value to ℝ, and hence the proof that ℚ_p is complete is different from the proof that ℝ is complete.

A small special-purpose simplification tactic, padic_index_simp, is used to manipulate sequence indices in the proof that the norm extends.

padic_norm_e is the rational-valued p-adic norm on ℚ_p. To instantiate ℚ_p as a normed field, we must cast this into a ℝ-valued norm. The ℝ-valued norm, using notation ∥ ∥ from normed spaces, is the canonical representation of this norm.

simp prefers padic_norm to padic_norm_e when possible. Since padic_norm_e and ∥ ∥ have different types, simp does not rewrite one to the other.

Coercions from ℚ to ℚ_p are set up to work with the norm_cast tactic.

References

Tags

p-adic, p adic, padic, norm, valuation, cauchy, completion, p-adic completion

def padic_seq (p : ℕ) [fact (nat.prime p)] :
Type

The type of Cauchy sequences of rationals with respect to the p-adic norm.

Equations
theorem padic_seq.​stationary {p : ℕ} [fact (nat.prime p)] {f : cau_seq ℚ (padic_norm p)} :
¬f ≈ 0 → (∃ (N : ℕ), ∀ (m n : ℕ), N ≤ m → N ≤ n → padic_norm p (⇑f n) = padic_norm p (⇑f m))

The p-adic norm of the entries of a nonzero Cauchy sequence of rationals is eventually constant.

def padic_seq.​stationary_point {p : ℕ} [fact (nat.prime p)] {f : padic_seq p} :
¬f ≈ 0 → ℕ

For all n ≥ stationary_point f hf, the p-adic norm of f n is the same.

Equations
def padic_seq.​norm {p : ℕ} [fact (nat.prime p)] :

Since the norm of the entries of a Cauchy sequence is eventually stationary, we can lift the norm to sequences.

Equations
theorem padic_seq.​norm_zero_iff {p : ℕ} [fact (nat.prime p)] (f : padic_seq p) :
f.norm = 0 ↔ f ≈ 0

theorem padic_seq.​equiv_zero_of_val_eq_of_equiv_zero {p : ℕ} [fact (nat.prime p)] {f g : padic_seq p} :
(∀ (k : ℕ), padic_norm p (⇑f k) = padic_norm p (⇑g k)) → f ≈ 0 → g ≈ 0

theorem padic_seq.​norm_eq_norm_app_of_nonzero {p : ℕ} [fact (nat.prime p)] {f : padic_seq p} :
¬f ≈ 0 → (∃ (k : ℚ), f.norm = padic_norm p k ∧ k ≠ 0)

theorem padic_seq.​norm_nonneg {p : ℕ} [fact (nat.prime p)] (f : padic_seq p) :
0 ≤ f.norm

An auxiliary lemma for manipulating sequence indices.

theorem padic_seq.​lift_index_left {p : ℕ} [fact (nat.prime p)] {f : padic_seq p} (hf : ¬f ≈ 0) (v1 v3 : ℕ) :

An auxiliary lemma for manipulating sequence indices.

theorem padic_seq.​lift_index_right {p : ℕ} [fact (nat.prime p)] {f : padic_seq p} (hf : ¬f ≈ 0) (v1 v2 : ℕ) :

An auxiliary lemma for manipulating sequence indices.

Valuation on padic_seq

The p-adic valuation on ℚ lifts to padic_seq p. valuation f is defined to be the valuation of the (ℚ-valued) stationary point of f.

Equations
theorem padic_seq.​norm_eq_pow_val {p : ℕ} [fact (nat.prime p)] {f : padic_seq p} :
¬f ≈ 0 → f.norm = ↑p ^ -f.valuation

theorem padic_seq.​val_eq_iff_norm_eq {p : ℕ} [fact (nat.prime p)] {f g : padic_seq p} :
¬f ≈ 0 → ¬g ≈ 0 → (f.valuation = g.valuation ↔ f.norm = g.norm)

This is a special-purpose tactic that lifts padic_norm (f (stationary_point f)) to padic_norm (f (max _ _ _)).

theorem padic_seq.​norm_mul {p : ℕ} [hp : fact (nat.prime p)] (f g : padic_seq p) :
(f * g).norm = f.norm * g.norm

theorem padic_seq.​norm_values_discrete {p : ℕ} [hp : fact (nat.prime p)] (a : padic_seq p) :
¬a ≈ 0 → (∃ (z : ℤ), a.norm = ↑p ^ -z)

theorem padic_seq.​norm_one {p : ℕ} [hp : fact (nat.prime p)] :
1.norm = 1

theorem padic_seq.​norm_equiv {p : ℕ} [hp : fact (nat.prime p)] {f g : padic_seq p} :
f ≈ g → f.norm = g.norm

theorem padic_seq.​norm_nonarchimedean {p : ℕ} [hp : fact (nat.prime p)] (f g : padic_seq p) :
(f + g).norm ≤ max f.norm g.norm

theorem padic_seq.​norm_eq {p : ℕ} [hp : fact (nat.prime p)] {f g : padic_seq p} :
(∀ (k : ℕ), padic_norm p (⇑f k) = padic_norm p (⇑g k)) → f.norm = g.norm

theorem padic_seq.​norm_neg {p : ℕ} [hp : fact (nat.prime p)] (a : padic_seq p) :
(-a).norm = a.norm

theorem padic_seq.​norm_eq_of_add_equiv_zero {p : ℕ} [hp : fact (nat.prime p)] {f g : padic_seq p} :
f + g ≈ 0 → f.norm = g.norm

theorem padic_seq.​add_eq_max_of_ne {p : ℕ} [hp : fact (nat.prime p)] {f g : padic_seq p} :
f.norm ≠ g.norm → (f + g).norm = max f.norm g.norm

def padic (p : ℕ) [fact (nat.prime p)] :
Type

The p-adic numbers Q_[p] are the Cauchy completion of ℚ with respect to the p-adic norm.

Equations
@[instance]

The discrete field structure on ℚ_p is inherited from the Cauchy completion construction.

Equations
@[instance]

Equations
def padic.​mk {p : ℕ} [fact (nat.prime p)] :

Builds the equivalence class of a Cauchy sequence of rationals.

Equations
theorem padic.​mk_eq (p : ℕ) [fact (nat.prime p)] {f g : padic_seq p} :

def padic.​of_rat (p : ℕ) [fact (nat.prime p)] :
ℚ → ℚ_[p]

Embeds the rational numbers in the p-adic numbers.

Equations
@[simp]
theorem padic.​of_rat_add (p : ℕ) [fact (nat.prime p)] (x y : ℚ) :

@[simp]
theorem padic.​of_rat_neg (p : ℕ) [fact (nat.prime p)] (x : ℚ) :

@[simp]
theorem padic.​of_rat_mul (p : ℕ) [fact (nat.prime p)] (x y : ℚ) :

@[simp]
theorem padic.​of_rat_sub (p : ℕ) [fact (nat.prime p)] (x y : ℚ) :

@[simp]
theorem padic.​of_rat_div (p : ℕ) [fact (nat.prime p)] (x y : ℚ) :

@[simp]
theorem padic.​of_rat_one (p : ℕ) [fact (nat.prime p)] :

@[simp]
theorem padic.​of_rat_zero (p : ℕ) [fact (nat.prime p)] :

theorem padic.​cast_eq_of_rat (p : ℕ) [fact (nat.prime p)] (q : ℚ) :

theorem padic.​coe_add (p : ℕ) [fact (nat.prime p)] {x y : ℚ} :
↑(x + y) = ↑x + ↑y

theorem padic.​coe_neg (p : ℕ) [fact (nat.prime p)] {x : ℚ} :

theorem padic.​coe_mul (p : ℕ) [fact (nat.prime p)] {x y : ℚ} :
↑(x * y) = ↑x * ↑y

theorem padic.​coe_sub (p : ℕ) [fact (nat.prime p)] {x y : ℚ} :
↑(x - y) = ↑x - ↑y

theorem padic.​coe_div (p : ℕ) [fact (nat.prime p)] {x y : ℚ} :
↑(x / y) = ↑x / ↑y

theorem padic.​coe_one (p : ℕ) [fact (nat.prime p)] :
↑1 = 1

theorem padic.​coe_zero (p : ℕ) [fact (nat.prime p)] :
↑0 = 0

theorem padic.​of_rat_eq (p : ℕ) [fact (nat.prime p)] {q r : ℚ} :

theorem padic.​coe_inj (p : ℕ) [fact (nat.prime p)] {q r : ℚ} :
↑q = ↑r ↔ q = r

@[instance]

Equations
  • _ = _
def padic_norm_e {p : ℕ} [hp : fact (nat.prime p)] :
ℚ_[p] → ℚ

The rational-valued p-adic norm on ℚ_p is lifted from the norm on Cauchy sequences. The canonical form of this function is the normed space instance, with notation ∥ ∥.

Equations
theorem padic_norm_e.​defn {p : ℕ} [fact (nat.prime p)] (f : padic_seq p) {ε : ℚ} :
0 < ε → (∃ (N : ℕ), ∀ (i : ℕ), i ≥ N → padic_norm_e (⟦f⟧ - ↑(⇑f i)) < ε)

theorem padic_norm_e.​zero_iff {p : ℕ} [fact (nat.prime p)] (q : ℚ_[p]) :

@[simp]
theorem padic_norm_e.​zero {p : ℕ} [fact (nat.prime p)] :

@[simp]
theorem padic_norm_e.​one' {p : ℕ} [fact (nat.prime p)] :

Theorems about padic_norm_e are named with a ' so the names do not conflict with the equivalent theorems about norm (∥ ∥).

@[simp]
theorem padic_norm_e.​neg {p : ℕ} [fact (nat.prime p)] (q : ℚ_[p]) :

Theorems about padic_norm_e are named with a ' so the names do not conflict with the equivalent theorems about norm (∥ ∥).

Theorems about padic_norm_e are named with a ' so the names do not conflict with the equivalent theorems about norm (∥ ∥).

theorem padic_norm_e.​triangle_ineq {p : ℕ} [fact (nat.prime p)] (x y z : ℚ_[p]) :

theorem padic_norm_e.​image' {p : ℕ} [fact (nat.prime p)] {q : ℚ_[p]} :
q ≠ 0 → (∃ (n : ℤ), padic_norm_e q = ↑p ^ -n)

theorem padic_norm_e.​sub_rev {p : ℕ} [fact (nat.prime p)] (q r : ℚ_[p]) :

theorem padic.​rat_dense' {p : ℕ} [fact (nat.prime p)] (q : ℚ_[p]) {ε : ℚ} :
0 < ε → (∃ (r : ℚ), padic_norm_e (q - ↑r) < ε)

Equations
theorem padic.​exi_rat_seq_conv {p : ℕ} [fact (nat.prime p)] (f : cau_seq ℚ_[p] padic_norm_e) {ε : ℚ} :
0 < ε → (∃ (N : ℕ), ∀ (i : ℕ), i ≥ N → padic_norm_e (⇑f i - ↑(padic.lim_seq f i)) < ε)

theorem padic.​complete' {p : ℕ} [fact (nat.prime p)] (f : cau_seq ℚ_[p] padic_norm_e) :
∃ (q : ℚ_[p]), ∀ (ε : ℚ), ε > 0 → (∃ (N : ℕ), ∀ (i : ℕ), i ≥ N → padic_norm_e (q - ⇑f i) < ε)

@[instance]

Equations
@[instance]

Equations
@[instance]

Equations
@[instance]

Equations
  • _ = _
theorem padic.​rat_dense {p : ℕ} {hp : fact (nat.prime p)} (q : ℚ_[p]) {ε : ℝ} :
0 < ε → (∃ (r : ℚ), ∥q - ↑r∥ < ε)

@[simp]
theorem padic_norm_e.​mul {p : ℕ} [hp : fact (nat.prime p)] (q r : ℚ_[p]) :

theorem padic_norm_e.​is_norm {p : ℕ} [hp : fact (nat.prime p)] (q : ℚ_[p]) :

@[simp]
theorem padic_norm_e.​eq_padic_norm {p : ℕ} [hp : fact (nat.prime p)] (q : ℚ) :

@[simp]
theorem padic_norm_e.​norm_p {p : ℕ} [hp : fact (nat.prime p)] :

@[simp]
theorem padic_norm_e.​norm_p_pow {p : ℕ} [hp : fact (nat.prime p)] (n : ℤ) :

theorem padic_norm_e.​image {p : ℕ} [hp : fact (nat.prime p)] {q : ℚ_[p]} :
q ≠ 0 → (∃ (n : ℤ), ∥q∥ = ↑(↑p ^ -n))

theorem padic_norm_e.​is_rat {p : ℕ} [hp : fact (nat.prime p)] (q : ℚ_[p]) :
∃ (q' : ℚ), ∥q∥ = ↑q'

theorem padic_norm_e.​norm_rat_le_one {p : ℕ} [hp : fact (nat.prime p)] {q : ℚ} :

theorem padic_norm_e.​eq_of_norm_add_lt_right {p : ℕ} {hp : fact (nat.prime p)} {z1 z2 : ℚ_[p]} :
∥z1 + z2∥ < ∥z2∥ → ∥z1∥ = ∥z2∥

theorem padic_norm_e.​eq_of_norm_add_lt_left {p : ℕ} {hp : fact (nat.prime p)} {z1 z2 : ℚ_[p]} :
∥z1 + z2∥ < ∥z1∥ → ∥z1∥ = ∥z2∥

theorem padic.​padic_norm_e_lim_le {p : ℕ} [fact (nat.prime p)] {f : cau_seq ℚ_[p] has_norm.norm} {a : ℝ} :
0 < a → (∀ (i : ℕ), ∥⇑f i∥ ≤ a) → ∥f.lim∥ ≤ a

Valuation on ℚ_[p]

def padic.​valuation {p : ℕ} [fact (nat.prime p)] :
ℚ_[p] → ℤ

padic.valuation lifts the p-adic valuation on rationals to ℚ_[p].

Equations
@[simp]
theorem padic.​valuation_zero {p : ℕ} [fact (nat.prime p)] :

@[simp]
theorem padic.​valuation_one {p : ℕ} [fact (nat.prime p)] :

theorem padic.​norm_eq_pow_val {p : ℕ} [fact (nat.prime p)] {x : ℚ_[p]} :
x ≠ 0 → ∥x∥ = ↑p ^ -x.valuation

@[simp]
theorem padic.​valuation_p {p : ℕ} [fact (nat.prime p)] :