Paper X · Lean source

CommutativeLogarithm.lean

Declared contract recorded Coverage and evidence

The cited release explicitly reports completion of its registered formal contract, under its exact hypotheses.

This viewer reads the retained source; it does not run Lean or assign new claim mappings.

Local imports (2)

PaperX/CommutativeLogarithm.lean58 lines

Original source pathcurrent_continuation/lean/PaperX/CommutativeLogarithm.lean
Skip declarations and read code

Skip source text

1 import PaperX.NilpotentSeries
2 import PaperX.FiniteLogarithm
3 
4 set_option autoImplicit false
5 
6 namespace PaperX.CommutativeLogarithm
7 
8 open PaperX.NilpotentSeries
9 open scoped BigOperators
10 
11 variable {A : Type*} [CommRing A] [Algebra ℚ A]
12 
13 theorem eval_log {u : A} (hu : IsNilpotent (u - 1)) :
14     eval (u - 1) (PowerSeries.log A) = FiniteLogarithm.log u := by
15   obtain ⟨k, hk⟩ := hu
16   rw [eval_eq_sum hk, FiniteLogarithm.log_eq_sum hk]
17   apply Finset.sum_congr rfl
18   intro n _
19   by_cases hn : n = 0
20   · subst n
21     simp
22   · simp [PowerSeries.coeff_log, hn, Algebra.smul_def]
23 
24 theorem subst_log {u : A} (hu : IsNilpotent (u - 1)) :
25     (PowerSeries.log A).subst (PowerSeries.C (u - 1)) =
26       PowerSeries.C (FiniteLogarithm.log u) := by
27   rw [subst_C_eq_C_eval hu, eval_log hu]
28 
29 theorem subst_exp {a : A} (ha : IsNilpotent a) :
30     (PowerSeries.exp A).subst (PowerSeries.C a) = PowerSeries.C (IsNilpotent.exp a) := by
31   rw [subst_C_eq_C_eval ha, eval_exp ha]
32 
33 /-- The finite logarithm recovers a nilpotent element with no bound on its nilpotency class. -/
34 theorem log_exp {a : A} (ha : IsNilpotent a) :
35     FiniteLogarithm.log (IsNilpotent.exp a) = a := by
36   have h := PowerSeries.subst_comp_subst_apply
37     (PowerSeries.HasSubst.exp_sub_one (A := A)) (hasSubst_C ha) (PowerSeries.log A)
38   rw [PowerSeries.subst_log_exp_sub_one, PowerSeries.subst_X (hasSubst_C ha),
39     PowerSeries.subst_sub (hasSubst_C ha), subst_exp ha] at h
40   have hone : (1 : PowerSeries A).subst (PowerSeries.C a) = 1 := by
41     rw [← PowerSeries.coe_substAlgHom (hasSubst_C ha), map_one]
42   rw [hone, ← map_one PowerSeries.C, ← map_sub, subst_log ha.isNilpotent_exp_sub_one] at h
43   exact (PowerSeries.C_injective h).symm
44 
45 /-- Exponentiation recovers every unipotent element from its finite logarithm. -/
46 theorem exp_log {u : A} (hu : IsNilpotent (u - 1)) :
47     IsNilpotent.exp (FiniteLogarithm.log u) = u := by
48   have h := PowerSeries.subst_comp_subst_apply
49     (PowerSeries.HasSubst.log (A := A)) (hasSubst_C hu) (PowerSeries.exp A)
50   rw [PowerSeries.subst_exp_log, PowerSeries.subst_add (hasSubst_C hu),
51     PowerSeries.subst_X (hasSubst_C hu), subst_log hu] at h
52   have hone : (1 : PowerSeries A).subst (PowerSeries.C (u - 1)) = 1 := by
53     rw [← PowerSeries.coe_substAlgHom (hasSubst_C hu), map_one]
54   rw [hone, subst_exp (FiniteLogarithm.isNilpotent_log hu)] at h
55   have hc := congrArg (PowerSeries.constantCoeff (R := A)) h
56   simpa using hc.symm
57 
58 end PaperX.CommutativeLogarithm

Back to source controls

Original file and source record

This copy matches the recorded source file. Its publication here does not change the work’s review status.

SHA-256: 11a1270bcfa19774e84205994b1c760cb6124ec5a0acefd5d8a5bf09d8877b2f

Original source on GitHub

Back to Paper X: Universal Residual Seeds and Conditional Occupied-System Completion