Paper XI · Lean source

AbstractHeisenberg.lean

Selected results recorded Coverage and evidence

Compiler/replay evidence is reported for a subset or bounded block. No whole-work coverage is implied.

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

Local imports (1)

PaperXI/AbstractHeisenberg.lean184 lines

Original source pathformalization/PaperXI/AbstractHeisenberg.lean
Skip declarations and read code

Skip source text

1 import PaperXI.CentralExtension
2 import Mathlib.LinearAlgebra.BilinearForm.Properties
3 import Mathlib.RingTheory.Finiteness.Cardinality
4 import Mathlib.Algebra.Group.TypeTags.Basic
5 import Mathlib.Tactic
6 
7 /-! Actual Heisenberg groups on abstract bilinear spaces, their central extensions,
8 and center-preserving lifts of arbitrary form-preserving linear equivalences.
9 No choice of symplectic coordinates is used. -/
10 set_option autoImplicit false
11 noncomputable section
12 namespace PaperXI.AbstractHeisenberg
13 
14 variable {K V : Type*} [Field K] [AddCommGroup V] [Module K V]
15 
16 /-- The actual group space attached to a bilinear form. -/
17 @[ext]
18 structure Element (b : LinearMap.BilinForm K V) where
19   vector : V
20   central : K
21 
22 variable (b : LinearMap.BilinForm K V)
23 
24 instance instMul : Mul (Element b) where
25   mul h k := ⟨h.vector + k.vector,
26     h.central + k.central + (2 : K)⁻¹ * b h.vector k.vector⟩
27 
28 instance instOne : One (Element b) where
29   one := ⟨0, 0⟩
30 
31 /-- The correction allows the group construction for every bilinear form.
32 For an alternating form the correction vanishes. -/
33 instance instInv : Inv (Element b) where
34   inv h := ⟨-h.vector, -h.central + (2 : K)⁻¹ * b h.vector h.vector⟩
35 
36 @[simp] theorem mul_vector (h k : Element b) : (h * k).vector = h.vector + k.vector := rfl
37 @[simp] theorem mul_central (h k : Element b) :
38     (h * k).central = h.central + k.central + (2 : K)⁻¹ * b h.vector k.vector := rfl
39 @[simp] theorem one_vector : (1 : Element b).vector = 0 := rfl
40 @[simp] theorem one_central : (1 : Element b).central = 0 := rfl
41 @[simp] theorem inv_vector (h : Element b) : h⁻¹.vector = -h.vector := rfl
42 @[simp] theorem inv_central (h : Element b) :
43     h⁻¹.central = -h.central + (2 : K)⁻¹ * b h.vector h.vector := rfl
44 
45 instance instGroup : Group (Element b) where
46   mul_assoc h k l := by
47     ext <;> simp [map_add, add_assoc]
48     ring
49   one_mul h := by ext <;> simp
50   mul_one h := by ext <;> simp
51   inv_mul_cancel h := by
52     ext <;> simp
53 
54 /-- The group is literally a copy of the abstract vector space times the center. -/
55 def coordinates : Element b ≃ V × K where
56   toFun h := (h.vector, h.central)
57   invFun h := ⟨h.1, h.2⟩
58   left_inv h := by cases h; rfl
59   right_inv h := by cases h; rfl
60 
61 instance instFinite [Finite V] [Finite K] : Finite (Element b) :=
62   Finite.of_injective (coordinates b) (coordinates b).injective
63 
64 /-- Over a finite field, a finite-dimensional abstract space gives a finite actual group. -/
65 theorem finite_of_finite_field [Finite K] [FiniteDimensional K V] : Finite (Element b) := by
66   let : Finite V := Module.finite_of_finite K
67   infer_instance
68 
69 /-- The distinguished central element with scalar coordinate `z`. -/
70 def centralElement (z : K) : Element b := ⟨0, z⟩
71 
72 @[simp] theorem centralElement_vector (z : K) : (centralElement b z).vector = 0 := rfl
73 @[simp] theorem centralElement_central (z : K) : (centralElement b z).central = z := rfl
74 @[simp] theorem centralElement_zero : centralElement b 0 = 1 := rfl
75 @[simp] theorem centralElement_mul (z t : K) :
76     centralElement b z * centralElement b t = centralElement b (z + t) := by
77   ext <;> simp
78 
79 theorem centralElement_commute (z : K) (h : Element b) :
80     centralElement b z * h = h * centralElement b z := by
81   ext <;> simp [add_comm]
82 
83 /-- The actual central inclusion, using multiplicative notation for the additive field. -/
84 def inclusion : Multiplicative K →* Element b where
85   toFun z := centralElement b z.toAdd
86   map_one' := rfl
87   map_mul' z t := (centralElement_mul b z.toAdd t.toAdd).symm
88 
89 /-- The actual quotient homomorphism onto the additive abstract vector space. -/
90 def quotient : Element b →* Multiplicative V where
91   toFun h := Multiplicative.ofAdd h.vector
92   map_one' := rfl
93   map_mul' _ _ := rfl
94 
95 @[simp] theorem inclusion_apply (z : Multiplicative K) :
96     inclusion b z = centralElement b z.toAdd := rfl
97 @[simp] theorem quotient_apply (h : Element b) :
98     quotient b h = Multiplicative.ofAdd h.vector := rfl
99 
100 /-- The abstract group gives an actual central extension with all exactness proofs. -/
101 def datum : CentralExtension.Datum (Multiplicative K) (Element b) (Multiplicative V) where
102   i := inclusion b
103   q := quotient b
104   i_injective := by
105     intro z t h
106     exact congrArg (fun h : Element b => Multiplicative.ofAdd h.central) h
107   q_surjective a := ⟨⟨a.toAdd, 0⟩, rfl⟩
108   range_i_eq_ker_q := by
109     ext h
110     constructor
111     · rintro ⟨z, rfl⟩
112       rfl
113     · intro hh
114       change h.vector = 0 at hh
115       refine ⟨Multiplicative.ofAdd h.central, ?_⟩
116       ext
117       · exact hh.symm
118       · rfl
119   central z h := centralElement_commute b z.toAdd h
120 
121 @[simp] theorem datum_i (z : Multiplicative K) : (datum b).i z = centralElement b z.toAdd := rfl
122 @[simp] theorem datum_q (h : Element b) : (datum b).q h = Multiplicative.ofAdd h.vector := rfl
123 
124 /-- For an alternating form the inverse has the expected negated coordinates. -/
125 theorem inv_central_of_isAlt (hb : b.IsAlt) (h : Element b) :
126     h⁻¹.central = -h.central := by simp [hb h.vector]
127 
128 /-- The actual group commutation law has the bilinear scalar in odd characteristic. -/
129 theorem mul_swap (hb : b.IsAlt) (h2 : (2 : K) ≠ 0) (h k : Element b) :
130     h * k = centralElement b (b h.vector k.vector) * (k * h) := by
131   ext
132   · simp [add_comm]
133   · simp only [mul_central, centralElement_central, centralElement_vector, map_zero,
134       LinearMap.zero_apply, mul_zero, add_zero]
135     rw [← hb.neg_eq h.vector k.vector]
136     field_simp
137     ring
138 
139 /-- The commutator is proved on actual abstract group elements, without a coordinate model. -/
140 theorem commutator (hb : b.IsAlt) (h2 : (2 : K) ≠ 0) (h k : Element b) :
141     h * k * h⁻¹ * k⁻¹ = centralElement b (b h.vector k.vector) := by
142   rw [mul_swap b hb h2 h k]
143   group
144 
145 section Lift
146 
147 variable {V' : Type*} [AddCommGroup V'] [Module K V']
148 variable (b' : LinearMap.BilinForm K V')
149 
150 /-- A form-preserving map of arbitrary abstract spaces lifts by its literal action on vectors. -/
151 def lift (e : V ≃ₗ[K] V') (he : ∀ v w, b' (e v) (e w) = b v w) :
152     Element b ≃* Element b' where
153   toFun h := ⟨e h.vector, h.central⟩
154   invFun h := ⟨e.symm h.vector, h.central⟩
155   left_inv h := by ext <;> simp
156   right_inv h := by ext <;> simp
157   map_mul' h k := by
158     ext
159     · exact e.map_add h.vector k.vector
160     · simp only [mul_central]
161       rw [he]
162 
163 @[simp] theorem lift_vector (e : V ≃ₗ[K] V')
164     (he : ∀ v w, b' (e v) (e w) = b v w) (h : Element b) :
165     (lift b b' e he h).vector = e h.vector := rfl
166 
167 @[simp] theorem lift_central (e : V ≃ₗ[K] V')
168     (he : ∀ v w, b' (e v) (e w) = b v w) (h : Element b) :
169     (lift b b' e he h).central = h.central := rfl
170 
171 @[simp] theorem lift_inclusion (e : V ≃ₗ[K] V')
172     (he : ∀ v w, b' (e v) (e w) = b v w) (z : Multiplicative K) :
173     lift b b' e he ((datum b).i z) = (datum b').i z := by
174   ext <;> simp [lift]
175 
176 /-- The lift induces the supplied abstract linear equivalence on the actual quotients. -/
177 theorem lift_quotient (e : V ≃ₗ[K] V')
178     (he : ∀ v w, b' (e v) (e w) = b v w) (h : Element b) :
179     (datum b').q (lift b b' e he h) =
180       Multiplicative.ofAdd (e ((datum b).q h).toAdd) := rfl
181 
182 end Lift
183 
184 end PaperXI.AbstractHeisenberg

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: d83045df228867234c49fb9dd9e838bbf810394614dd22dce2401c6744e3dacd

Original source on GitHub

Back to Paper XI: Packets, Arithmetic Realization, and Conditional Comparison