Documentation

Mathlib.NumberTheory.Padics.PadicIntegers

p-adic integers #

This file defines the p-adic integers ℤ_[p] as the subtype of ℚ_[p] with norm ≤ 1. We show that ℤ_[p]

The relation between ℤ_[p] and ZMod p is established in another file.

Important definitions #

Notation #

We introduce the notation ℤ_[p] for the p-adic integers.

Implementation notes #

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

Coercions into ℤ_[p] are set up to work with the norm_cast tactic.

References #

Tags #

p-adic, p adic, padic, p-adic integer

def PadicInt (p : ) [hp : Fact (Nat.Prime p)] :

The p-adic integers ℤ_[p] are the p-adic numbers with norm ≤ 1.

Equations
    Instances For

      The ring of p-adic integers.

      Equations
        Instances For

          Ring structure and coercion to ℚ_[p] #

          instance PadicInt.instCoePadic {p : } [hp : Fact (Nat.Prime p)] :
          Equations
            theorem PadicInt.ext {p : } [hp : Fact (Nat.Prime p)] {x y : ℤ_[p]} :
            x = yx = y

            The p-adic integers as a subring of ℚ_[p].

            Equations
              Instances For
                @[simp]
                theorem PadicInt.mem_subring_iff (p : ) [hp : Fact (Nat.Prime p)] {x : ℚ_[p]} :
                Equations
                  Equations
                    @[simp]
                    theorem PadicInt.mk_zero {p : } [hp : Fact (Nat.Prime p)] {h : 0 1} :
                    0, h = 0
                    @[simp]
                    theorem PadicInt.coe_add {p : } [hp : Fact (Nat.Prime p)] (z1 z2 : ℤ_[p]) :
                    ↑(z1 + z2) = z1 + z2
                    @[simp]
                    theorem PadicInt.coe_mul {p : } [hp : Fact (Nat.Prime p)] (z1 z2 : ℤ_[p]) :
                    ↑(z1 * z2) = z1 * z2
                    @[simp]
                    theorem PadicInt.coe_neg {p : } [hp : Fact (Nat.Prime p)] (z1 : ℤ_[p]) :
                    ↑(-z1) = -z1
                    @[simp]
                    theorem PadicInt.coe_sub {p : } [hp : Fact (Nat.Prime p)] (z1 z2 : ℤ_[p]) :
                    ↑(z1 - z2) = z1 - z2
                    @[simp]
                    theorem PadicInt.coe_one {p : } [hp : Fact (Nat.Prime p)] :
                    1 = 1
                    @[simp]
                    theorem PadicInt.coe_zero {p : } [hp : Fact (Nat.Prime p)] :
                    0 = 0
                    @[simp]
                    theorem PadicInt.coe_eq_zero {p : } [hp : Fact (Nat.Prime p)] {x : ℤ_[p]} :
                    x = 0 x = 0
                    theorem PadicInt.coe_ne_zero {p : } [hp : Fact (Nat.Prime p)] {x : ℤ_[p]} :
                    x 0 x 0
                    @[simp]
                    theorem PadicInt.coe_natCast {p : } [hp : Fact (Nat.Prime p)] (n : ) :
                    n = n
                    @[simp]
                    theorem PadicInt.coe_intCast {p : } [hp : Fact (Nat.Prime p)] (z : ) :
                    z = z

                    The coercion from ℤ_[p] to ℚ_[p] as a ring homomorphism.

                    Equations
                      Instances For
                        @[simp]
                        theorem PadicInt.coe_pow {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) (n : ) :
                        ↑(x ^ n) = x ^ n
                        theorem PadicInt.mk_coe {p : } [hp : Fact (Nat.Prime p)] (k : ℤ_[p]) :
                        k, = k
                        def PadicInt.inv {p : } [hp : Fact (Nat.Prime p)] :

                        The inverse of a p-adic integer with norm equal to 1 is also a p-adic integer. Otherwise, the inverse is defined to be 0.

                        Equations
                          Instances For
                            theorem PadicInt.intCast_eq {p : } [hp : Fact (Nat.Prime p)] (z1 z2 : ) :
                            z1 = z2 z1 = z2
                            def PadicInt.ofIntSeq {p : } [hp : Fact (Nat.Prime p)] (seq : ) (h : IsCauSeq (padicNorm p) fun (n : ) => (seq n)) :

                            A sequence of integers that is Cauchy with respect to the p-adic norm converges to a p-adic integer.

                            Equations
                              Instances For

                                Instances #

                                We now show that ℤ_[p] is a

                                Equations
                                  instance PadicInt.instNorm (p : ) [hp : Fact (Nat.Prime p)] :
                                  Equations
                                    theorem PadicInt.norm_def {p : } [hp : Fact (Nat.Prime p)] {z : ℤ_[p]} :

                                    Norm #

                                    theorem PadicInt.norm_le_one {p : } [hp : Fact (Nat.Prime p)] (z : ℤ_[p]) :
                                    theorem PadicInt.norm_eq_of_norm_add_lt_right {p : } [hp : Fact (Nat.Prime p)] {z1 z2 : ℤ_[p]} (h : z1 + z2 < z2) :
                                    theorem PadicInt.norm_eq_of_norm_add_lt_left {p : } [hp : Fact (Nat.Prime p)] {z1 z2 : ℤ_[p]} (h : z1 + z2 < z1) :
                                    @[simp]
                                    @[simp]
                                    theorem PadicInt.norm_eq_padic_norm {p : } [hp : Fact (Nat.Prime p)] {q : ℚ_[p]} (hq : q 1) :
                                    @[simp]
                                    theorem PadicInt.norm_p {p : } [hp : Fact (Nat.Prime p)] :
                                    p = (↑p)⁻¹
                                    theorem PadicInt.norm_p_pow {p : } [hp : Fact (Nat.Prime p)] (n : ) :
                                    p ^ n = p ^ (-n)
                                    theorem PadicInt.exists_pow_neg_lt (p : ) [hp : Fact (Nat.Prime p)] {ε : } ( : 0 < ε) :
                                    ∃ (k : ), p ^ (-k) < ε
                                    theorem PadicInt.exists_pow_neg_lt_rat (p : ) [hp : Fact (Nat.Prime p)] {ε : } ( : 0 < ε) :
                                    ∃ (k : ), p ^ (-k) < ε
                                    theorem PadicInt.norm_int_lt_one_iff_dvd {p : } [hp : Fact (Nat.Prime p)] (k : ) :
                                    k < 1 p k
                                    theorem PadicInt.norm_int_le_pow_iff_dvd {p : } [hp : Fact (Nat.Prime p)] {k : } {n : } :
                                    k p ^ (-n) p ^ n k

                                    Valuation on ℤ_[p] #

                                    theorem PadicInt.valuation_coe_nonneg {p : } [hp : Fact (Nat.Prime p)] {x : ℤ_[p]} :
                                    0 (↑x).valuation
                                    def PadicInt.valuation {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) :

                                    PadicInt.valuation lifts the p-adic valuation on to ℤ_[p].

                                    Equations
                                      Instances For
                                        @[simp]
                                        theorem PadicInt.valuation_coe {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) :
                                        (↑x).valuation = x.valuation
                                        @[simp]
                                        theorem PadicInt.valuation_zero {p : } [hp : Fact (Nat.Prime p)] :
                                        @[simp]
                                        theorem PadicInt.valuation_one {p : } [hp : Fact (Nat.Prime p)] :
                                        @[simp]
                                        theorem PadicInt.valuation_p {p : } [hp : Fact (Nat.Prime p)] :
                                        (↑p).valuation = 1
                                        theorem PadicInt.le_valuation_add {p : } [hp : Fact (Nat.Prime p)] {x y : ℤ_[p]} (hxy : x + y 0) :
                                        @[simp]
                                        theorem PadicInt.valuation_mul {p : } [hp : Fact (Nat.Prime p)] {x y : ℤ_[p]} (hx : x 0) (hy : y 0) :
                                        @[simp]
                                        theorem PadicInt.valuation_pow {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) (n : ) :
                                        (x ^ n).valuation = n * x.valuation
                                        theorem PadicInt.norm_eq_zpow_neg_valuation {p : } [hp : Fact (Nat.Prime p)] {x : ℤ_[p]} (hx : x 0) :
                                        x = p ^ (-x.valuation)
                                        @[simp]
                                        theorem PadicInt.valuation_p_pow_mul {p : } [hp : Fact (Nat.Prime p)] (n : ) (c : ℤ_[p]) (hc : c 0) :
                                        (p ^ n * c).valuation = n + c.valuation

                                        Units of ℤ_[p] #

                                        theorem PadicInt.mul_inv {p : } [hp : Fact (Nat.Prime p)] {z : ℤ_[p]} :
                                        z = 1z * z.inv = 1
                                        theorem PadicInt.inv_mul {p : } [hp : Fact (Nat.Prime p)] {z : ℤ_[p]} (hz : z = 1) :
                                        z.inv * z = 1
                                        theorem PadicInt.isUnit_iff {p : } [hp : Fact (Nat.Prime p)] {z : ℤ_[p]} :
                                        theorem PadicInt.norm_lt_one_add {p : } [hp : Fact (Nat.Prime p)] {z1 z2 : ℤ_[p]} (hz1 : z1 < 1) (hz2 : z2 < 1) :
                                        z1 + z2 < 1
                                        theorem PadicInt.norm_lt_one_mul {p : } [hp : Fact (Nat.Prime p)] {z1 z2 : ℤ_[p]} (hz2 : z2 < 1) :
                                        z1 * z2 < 1
                                        theorem PadicInt.not_isUnit_iff {p : } [hp : Fact (Nat.Prime p)] {z : ℤ_[p]} :
                                        def PadicInt.mkUnits {p : } [hp : Fact (Nat.Prime p)] {u : ℚ_[p]} (h : u = 1) :

                                        A p-adic number u with ‖u‖ = 1 is a unit of ℤ_[p].

                                        Equations
                                          Instances For
                                            @[simp]
                                            theorem PadicInt.mkUnits_eq {p : } [hp : Fact (Nat.Prime p)] {u : ℚ_[p]} (h : u = 1) :
                                            (mkUnits h) = u
                                            @[simp]
                                            theorem PadicInt.norm_units {p : } [hp : Fact (Nat.Prime p)] (u : ℤ_[p]ˣ) :
                                            u = 1
                                            def PadicInt.unitCoeff {p : } [hp : Fact (Nat.Prime p)] {x : ℤ_[p]} (hx : x 0) :

                                            unitCoeff hx is the unit u in the unique representation x = u * p ^ n. See unitCoeff_spec.

                                            Equations
                                              Instances For
                                                @[simp]
                                                theorem PadicInt.unitCoeff_coe {p : } [hp : Fact (Nat.Prime p)] {x : ℤ_[p]} (hx : x 0) :
                                                (unitCoeff hx) = x * p ^ (-x.valuation)
                                                theorem PadicInt.unitCoeff_spec {p : } [hp : Fact (Nat.Prime p)] {x : ℤ_[p]} (hx : x 0) :
                                                x = (unitCoeff hx) * p ^ x.valuation

                                                Various characterizations of open unit balls #

                                                theorem PadicInt.norm_le_pow_iff_le_valuation {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) (hx : x 0) (n : ) :
                                                x p ^ (-n) n x.valuation
                                                theorem PadicInt.mem_span_pow_iff_le_valuation {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) (hx : x 0) (n : ) :
                                                theorem PadicInt.norm_le_pow_iff_mem_span_pow {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) (n : ) :
                                                x p ^ (-n) x Ideal.span {p ^ n}
                                                theorem PadicInt.norm_le_pow_iff_norm_lt_pow_add_one {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) (n : ) :
                                                x p ^ n x < p ^ (n + 1)
                                                theorem PadicInt.norm_lt_pow_iff_norm_le_pow_sub_one {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) (n : ) :
                                                x < p ^ n x p ^ (n - 1)
                                                theorem PadicInt.norm_lt_one_iff_dvd {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) :
                                                x < 1 p x
                                                @[simp]
                                                theorem PadicInt.pow_p_dvd_int_iff {p : } [hp : Fact (Nat.Prime p)] (n : ) (a : ) :
                                                p ^ n a p ^ n a

                                                Discrete valuation ring #

                                                theorem PadicInt.p_nonunit {p : } [hp : Fact (Nat.Prime p)] :
                                                @[deprecated PadicInt.p_nonunit (since := "2025-07-27")]
                                                theorem PadicInt.p_nonnunit {p : } [hp : Fact (Nat.Prime p)] :

                                                Alias of PadicInt.p_nonunit.

                                                theorem PadicInt.prime_p {p : } [hp : Fact (Nat.Prime p)] :
                                                Prime p
                                                theorem PadicInt.ideal_eq_span_pow_p {p : } [hp : Fact (Nat.Prime p)] {s : Ideal ℤ_[p]} (hs : s ) :
                                                ∃ (n : ), s = Ideal.span {p ^ n}
                                                instance PadicInt.algebra {p : } [hp : Fact (Nat.Prime p)] :
                                                Equations
                                                  @[simp]
                                                  theorem PadicInt.algebraMap_apply {p : } [hp : Fact (Nat.Prime p)] (x : ℤ_[p]) :