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 uLean source Β· full declaration
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