Module

PrincipalUnitExpLog.lean

Nyll.Yamaguchi26AbfaithfulGalois.Analytic.PrincipalUnitExpLog
1 declaration indexed from sourceView source β†—

Exponential and logarithm on pΒ²π’ͺ_K

Lines 460–467 of Section 3. P is literally pΒ²π’ͺ_K and U is 1 + pΒ²π’ͺ_K. The canonical evaluated series give inverse additive and multiplicative homomorphisms on these sets. This statement makes no finiteness assumption on the residue field.

Declarations

Yamaguchi26AbfaithfulGalois.principal_unit_exp_log

The usual exponential and logarithm series are inverse group isomorphisms between pΒ²π’ͺ_K and 1 + pΒ²π’ͺ_K.

Source context 4 commands

Surrounding namespaces, section variables, and local commands at this declaration.

noncomputable section
namespace Yamaguchi26AbfaithfulGalois
open LocalFieldTheory.DiscreteValuationField.MultiplicativeIntegerValuation
universe u
theorem principal_unit_exp_log
    {K : Type u} [Field K] [CharZero K]
    (v : Valuation K (WithZero (Multiplicative β„€)))
    [ValuationTheory.DiscreteValuationField.Valuation.IsCompleteDiscrete v]
    (p : β„•) [Fact p.Prime]
    [CharP (IsLocalRing.ResidueField v.valuationSubring) p] :
    let P : Set K := {x | βˆƒ a : v.valuationSubring, x = (p : K) ^ 2 * (a : K)}
    let U : Set K := {u | βˆƒ x : K, x ∈ P ∧ u = 1 + x}
    let exp : K β†’ K := fun x =>
      expSeriesFieldOfWithZeroValuation v x
        (fun m => Nat.cast_ne_zero.mpr (Nat.factorial_ne_zero m))
    let log : K β†’ K := fun u =>
      logOnePlusSeriesFieldOfWithZeroValuation v (u - 1)
        (fun m => Nat.cast_ne_zero.mpr (Nat.succ_ne_zero m))
    (βˆ€ x : K, x ∈ P β†’ exp x ∈ U) ∧
      (βˆ€ u : K, u ∈ U β†’ log u ∈ P) ∧
      (βˆ€ x : K, x ∈ P β†’ log (exp x) = x) ∧
      (βˆ€ u : K, u ∈ U β†’ exp (log u) = u) ∧
      (βˆ€ x y : K, x ∈ P β†’ y ∈ P β†’ exp (x + y) = exp x * exp y) ∧
      (βˆ€ u w : K, u ∈ U β†’ w ∈ U β†’ log (u * w) = log u + log w) := by
  let q : K := (p : K) ^ 2
  let P : Set K := {x | βˆƒ a : v.valuationSubring, x = q * (a : K)}
  let U : Set K := {u | βˆƒ x : K, x ∈ P ∧ u = 1 + x}
  have hnexp : βˆ€ n : β„•, (n.factorial : K) β‰  0 :=
    fun n => Nat.cast_ne_zero.mpr (Nat.factorial_ne_zero n)
  have hnlog : βˆ€ n : β„•, ((n + 1 : β„•) : K) β‰  0 :=
    fun n => Nat.cast_ne_zero.mpr (Nat.succ_ne_zero n)
  let E : K β†’ K := fun x => expSeriesFieldOfWithZeroValuation v x hnexp
  let L : K β†’ K := fun u => logOnePlusSeriesFieldOfWithZeroValuation v (u - 1) hnlog
  change (βˆ€ x : K, x ∈ P β†’ E x ∈ U) ∧
    (βˆ€ u : K, u ∈ U β†’ L u ∈ P) ∧
    (βˆ€ x : K, x ∈ P β†’ L (E x) = x) ∧
    (βˆ€ u : K, u ∈ U β†’ E (L u) = u) ∧
    (βˆ€ x y : K, x ∈ P β†’ y ∈ P β†’ E (x + y) = E x * E y) ∧
    (βˆ€ u w : K, u ∈ U β†’ w ∈ U β†’ L (u * w) = L u + L w)
  let e : β„• := v.residueRamificationIndex p
  have hvexp : βˆ€ n : β„•, v (n.factorial : K) =
      WithZero.exp (-((e : β„€) * (padicValNat p n.factorial : β„€))) :=
    fun n => v.natCast_eq_exp_neg_ramificationIndex_mul_padicValNat p
      n.factorial (Nat.factorial_ne_zero n)
  have hvlog : βˆ€ n : β„•, v ((n + 1 : β„•) : K) =
      WithZero.exp (-((e : β„€) * (padicValNat p (n + 1) : β„€))) :=
    fun n => v.natCast_eq_exp_neg_ramificationIndex_mul_padicValNat p
      (n + 1) (Nat.succ_ne_zero n)
  have hcomplete : @CompleteSpace K (Valued.mk' v).toUniformSpace :=
    ValuationTheory.DiscreteValuationField.Valuation.completeSpace_ofWithZeroValuation v
  have hq : q β‰  0 := by
    exact pow_ne_zero 2 (Nat.cast_ne_zero.mpr (Fact.out : Nat.Prime p).ne_zero)
  have memP_iff (z : K) : z ∈ P ↔ v z ≀ v q := by
    constructor
    · rintro ⟨a, rfl⟩
      rw [v.map_mul]
      calc
        v q * v (a : K) ≀ v q * 1 := mul_le_mul_of_nonneg_left a.property zero_le
        _ = v q := mul_one _
    Β· intro hz
      refine ⟨⟨z / q, ?_⟩, ?_⟩
      Β· change v (z / q) ≀ 1
        rw [v.map_div]
        exact (div_le_oneβ‚€ ((v.pos_iff).mpr hq)).mpr hz
      Β· change z = q * (z / q)
        field_simp
  have threshold {x : K} (hxP : x ∈ P) :
      βˆ€ hx : x β‰  0,
        (e : ℝ) / ((p : ℝ) - 1) <
          ((ofWithZeroValuation v).val (Units.mk0 x hx) : ℝ) := by
    obtain ⟨a, rfl⟩ := hxP
    exact fun hx => exp_threshold_natCast_sq_mul v p a hx
  have hvlt {x : K} (hxP : x ∈ P) : v x < 1 :=
    valuation_lt_one_ofWithZeroValuation_scaled_threshold_real
      (p := p) v e (threshold hxP)
  refine ⟨?_, ?_, ?_, ?_, ?_, ?_⟩
  Β· intro x hxP
    refine ⟨E x - 1, ?_, by ring⟩
    apply (memP_iff _).mpr
    by_cases hx : x = 0
    Β· simp only [hx, E, expSeriesField_zero_ofWithZeroValuation, sub_self, v.map_zero]
      exact zero_le
    Β· have hrat : (e : β„š) / ((p : β„š) - 1) <
          ((ofWithZeroValuation v).val (Units.mk0 x hx) : β„š) := by
        exact_mod_cast threshold hxP hx
      calc
        v (E x - 1) = v x :=
          valuation_expSeriesField_sub_one_eq_self_ofWithZeroValuation_scaled_of_threshold
            (p := p) v e hx hnexp hvexp hrat hcomplete
        _ ≀ v q := (memP_iff x).mp hxP
  Β· intro u hu
    obtain ⟨x, hxP, rfl⟩ := hu
    apply (memP_iff _).mpr
    change v (logOnePlusSeriesFieldOfWithZeroValuation v ((1 + x) - 1) hnlog) ≀ v q
    rw [add_sub_cancel_left]
    by_cases hx : x = 0
    Β· simp only [hx, logOnePlusSeriesField_zero_ofWithZeroValuation, v.map_zero]
      exact zero_le
    Β· have hrat : (e : β„š) / ((p : β„š) - 1) <
          ((ofWithZeroValuation v).val (Units.mk0 x hx) : β„š) := by
        exact_mod_cast threshold hxP hx
      calc
        v (logOnePlusSeriesFieldOfWithZeroValuation v x hnlog) = v x :=
          valuation_logOnePlusSeriesField_eq_self_of_scaled_inv_sub_one_lt
            (p := p) v e hx hnlog hvlog (hvlt hxP) hrat hcomplete
        _ ≀ v q := (memP_iff x).mp hxP
  Β· intro x hxP
    exact logOnePlusSeries_expSeries_sub_one_eq_self_ofWithZeroValuation_scaled_of_threshold
      (p := p) v e x hnexp hvexp hnlog hvlog (threshold hxP) hcomplete
  Β· intro u hu
    obtain ⟨x, hxP, rfl⟩ := hu
    have h := expSeries_logOnePlusSeries_eq_one_add_ofWithZeroValuation_scaled_of_threshold
      (p := p) v e x hnlog hvlog hnexp hvexp (threshold hxP) hcomplete
    simpa only [L, E, add_sub_cancel_left] using h
  Β· intro x y hxP hyP
    exact expSeriesField_add_eq_mul_ofWithZeroValuation_scaled_of_threshold
      (p := p) v e x y hnexp hvexp (threshold hxP) (threshold hyP) hcomplete
  Β· intro u w hu hw
    obtain ⟨x, hxP, rfl⟩ := hu
    obtain ⟨y, hyP, rfl⟩ := hw
    have h := logOnePlusSeriesField_mul_argument_eq_add_ofWithZeroValuation_scaled
      (p := p) v e x y hnlog hvlog (hvlt hxP) (hvlt hyP) hcomplete
    simpa only [L, show (1 + x) * (1 + y) - 1 = x + y + x * y by ring,
      add_sub_cancel_left] using h