Paper X · Lean source

WeilExamples.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 (3)

PaperX/WeilExamples.lean153 lines

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

Skip source text

1 import PaperX.WeilSpecialChain
2 import PaperX.WeilSmooth
3 import PaperX.WeilMorphisms
4 import Mathlib.Data.ZMod.Basic
5 import Mathlib.Tactic.NormNum
6 
7 /-! An infinite finite-by-cyclic group with two actual inertia actions.
8 The same F and the same nonzero N can have different local Euler denominators.
9 No identification with an arithmetic local field's Weil group is asserted. -/
10 set_option autoImplicit false
11 noncomputable section
12 namespace PaperX.WeilExamples
13 open Polynomial PaperX.WeilData PaperX.WeilEuler PaperX.WeilSpecialChain
14 open PaperX.WeilCopies PaperX.CarrierSummands
15 
16 abbrev C2 := Multiplicative (ZMod 2)
17 abbrev G := C2 × Multiplicative ℤ
18 
19 def inertia : Subgroup G := (MonoidHom.snd C2 (Multiplicative ℤ)).ker
20 instance inertiaNormal : inertia.Normal := inferInstanceAs (MonoidHom.ker _).Normal
21 
22 instance inertiaFinite : Finite inertia := Finite.of_injective (fun h : inertia => h.val.1) (by
23   intro h k he
24   apply Subtype.ext
25   apply Prod.ext he
26   exact h.property.trans k.property.symm)
27 
28 instance groupTopology : TopologicalSpace G := ⊥
29 instance groupDiscrete : DiscreteTopology G := ⟨rfl⟩
30 
31 def powerChar (b : ℚˣ) : Multiplicative ℤ →* ℚˣ where
32   toFun z := b ^ z.toAdd
33   map_one' := by simp
34   map_mul' x y := by
35     change b ^ (x.toAdd + y.toAdd) = _
36     rw [zpow_add]
37 
38 def signChar : C2 →* ℚˣ where
39   toFun g := if g.toAdd = 0 then 1 else -1
40   map_one' := by decide +kernel
41   map_mul' := by decide +kernel
42 
43 def ν : G →* ℚˣ :=
44   (powerChar (Units.mk0 (1/3) (by norm_num))).comp (MonoidHom.snd _ _)
45 
46 def α : G →* ℚˣ :=
47   (powerChar (Units.mk0 2 (by norm_num))).comp (MonoidHom.snd _ _)
48 
49 def β : G →* ℚˣ := (signChar.comp (MonoidHom.fst _ _)) * α
50 
51 def φ : G := (1, Multiplicative.ofAdd 1)
52 def τ : inertia := ⟨(Multiplicative.ofAdd 1, 1), rfl⟩
53 
54 theorem norm_inertia (h : inertia) : ν h = 1 := by
55   have hh : h.val.2 = 1 := h.property
56   simp [ν, hh]
57 
58 theorem unramified_inertia (h : inertia) : α h = 1 := by
59   have hh : h.val.2 = 1 := h.property
60   simp [α, hh]
61 
62 theorem ramified_inertia : β τ ≠ 1 := by
63   change (if (1 : ZMod 2) = 0 then (1 : ℚˣ) else -1) * _ ≠ 1
64   rw [unramified_inertia]
65   norm_num
66 
67 theorem character_at_frobenius : α φ = Units.mk0 2 (by norm_num) ∧ β φ = α φ := by
68   constructor <;> simp [α, β, φ, signChar, powerChar]
69 
70 def unramified : Datum ν (Fin 3 → ℚ) := chainDatum ν α 3
71 def ramified : Datum ν (Fin 3 → ℚ) := chainDatum ν β 3
72 
73 def unramifiedInertial : PaperX.WeilSmooth.InertialDatum (ν := ν) inertia (Fin 3 → ℚ) where
74   toDatum := unramified
75   inertia_finite := Set.finite_range _
76   inertia_open := isOpen_discrete _
77 
78 def ramifiedInertial : PaperX.WeilSmooth.InertialDatum (ν := ν) inertia (Fin 3 → ℚ) where
79   toDatum := ramified
80   inertia_finite := Set.finite_range _
81   inertia_open := isOpen_discrete _
82 
83 theorem same_F_and_N : unramified.r φ = ramified.r φ ∧ unramified.N = ramified.N := by
84   constructor
85   · change (PaperX.SpecialMonodromy.diagonalF (ν φ) (α φ) 3).toLinearMap =
86       (PaperX.SpecialMonodromy.diagonalF (ν φ) (β φ) 3).toLinearMap
87     rw [character_at_frobenius.2]
88   · rfl
89 
90 theorem nonzero_monodromy : unramified.N ^ 2 ≠ 0 ∧ unramified.N ^ 3 = 0 :=
91   ⟨PaperX.SpecialMonodromy.shift_previous_power_nonzero 3 (by decide),
92     PaperX.SpecialMonodromy.shift_nilpotent 3⟩
93 
94 theorem local_dimensions : Module.finrank ℚ (fixedKernel unramified inertia) = 1 ∧
95     Module.finrank ℚ (fixedKernel ramified inertia) = 0 := by
96   constructor
97   · exact unramified_dimension ν α 3 (by decide) inertia norm_inertia unramified_inertia
98   · exact ramified_dimension ν β 3 inertia norm_inertia ⟨τ, ramified_inertia⟩
99 
100 theorem local_polynomials : localCharpoly unramified inertia φ = X - C 2 ∧
101     localCharpoly ramified inertia φ = 1 := by
102   constructor
103   · rw [unramified, unramified_charpoly ν α 3 (by decide) inertia norm_inertia
104       unramified_inertia φ, character_at_frobenius.1]
105     rfl
106   · exact ramified_charpoly ν β 3 inertia norm_inertia ⟨τ, ramified_inertia⟩ φ
107 
108 theorem euler_polynomials : eulerPolynomial unramified inertia φ = 1 - C 2 * X ∧
109     eulerPolynomial ramified inertia φ = 1 := by
110   constructor
111   · rw [unramified, unramified_euler ν α 3 (by decide) inertia norm_inertia
112       unramified_inertia φ, character_at_frobenius.1]
113     rfl
114   · exact ramified_euler ν β 3 inertia norm_inertia ⟨τ, ramified_inertia⟩ φ
115 
116 theorem same_F_N_different_euler : unramified.r φ = ramified.r φ ∧
117     unramified.N = ramified.N ∧
118     eulerPolynomial unramified inertia φ ≠ eulerPolynomial ramified inertia φ := by
119   refine ⟨same_F_and_N.1, same_F_and_N.2, ?_⟩
120   rw [euler_polynomials.1, euler_polynomials.2]
121   intro he
122   have hc := congrArg (fun p : Polynomial ℚ => p.coeff 1) he
123   norm_num at hc
124 
125 def family (i : Fin 2) : Datum ν (Fin 3 → ℚ) := if i = 0 then unramified else ramified
126 def multiplicities (i : Fin 2) : ℕ := if i = 0 then 2 else 1
127 
128 theorem mixed_dimension :
129     Module.finrank ℚ (fixedKernel (copiesDatum family multiplicities) inertia) = 2 := by
130   rw [fixed_dimension_sum, Fin.sum_univ_two]
131   change 2 * Module.finrank ℚ (fixedKernel unramified inertia) +
132     1 * Module.finrank ℚ (fixedKernel ramified inertia) = 2
133   rw [local_dimensions.1, local_dimensions.2]
134 
135 theorem mixed_euler : eulerPolynomial (copiesDatum family multiplicities) inertia φ =
136     (1 - C 2 * X)^2 := by
137   rw [euler_product]
138   simp [Fin.prod_univ_two, family, multiplicities, euler_polynomials.1, euler_polynomials.2]
139 
140 
141 theorem geometric_norm : (ν φ : ℚ) = 1/3 := by simp [ν, φ, powerChar]
142 
143 /-- Equal Euler factors do not recover chain length or the monodromy operator. -/
144 theorem same_euler_different_monodromy :
145     eulerPolynomial (chainDatum ν α 1) inertia φ = eulerPolynomial unramified inertia φ ∧
146     (chainDatum ν α 1).N = 0 ∧ unramified.N ^ 2 ≠ 0 := by
147   refine ⟨?_, ?_, nonzero_monodromy.1⟩
148   · rw [unramified, unramified_euler ν α 1 (by decide) inertia norm_inertia
149       unramified_inertia φ, unramified_euler ν α 3 (by decide) inertia norm_inertia
150       unramified_inertia φ]
151   · exact PaperX.SpecialMonodromy.shift_nilpotent 1
152 
153 end PaperX.WeilExamples

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: 9cb2ab34cdb41948f964bdf782d75531da41f4b54b5b4039366cada3120441b7

Original source on GitHub

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