Paper XI · Lean source

HeisenbergGroup.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.

PaperXI/HeisenbergGroup.lean109 lines

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

Skip source text

1 import Mathlib.LinearAlgebra.Dual.Lemmas
2 import Mathlib.Tactic.Ring
3 
4 /-! The Heisenberg group in position, frequency, and central coordinates.
5 The alternating bilinear cocycle defines a group in every characteristic.
6 Identifying its commutator with the symplectic pairing additionally needs 2 ≠ 0. -/
7 set_option autoImplicit false
8 
9 namespace PaperXI.Heisenberg
10 
11 @[ext]
12 structure Element (K X : Type*) [Field K] [AddCommGroup X] [Module K X] where
13   position : X
14   frequency : Module.Dual K X
15   central : K
16 
17 variable {K X : Type*} [Field K] [AddCommGroup X] [Module K X]
18 
19 instance instMul : Mul (Element K X) where
20   mul a b := ⟨a.position + b.position, a.frequency + b.frequency,
21     a.central + b.central + (2 : K)⁻¹ * (b.frequency a.position - a.frequency b.position)⟩
22 
23 instance instOne : One (Element K X) where
24   one := ⟨0, 0, 0⟩
25 
26 instance instInv : Inv (Element K X) where
27   inv a := ⟨-a.position, -a.frequency, -a.central⟩
28 
29 @[simp] theorem mul_position (a b : Element K X) :
30     (a * b).position = a.position + b.position := rfl
31 
32 @[simp] theorem mul_frequency (a b : Element K X) :
33     (a * b).frequency = a.frequency + b.frequency := rfl
34 
35 @[simp] theorem mul_central (a b : Element K X) :
36     (a * b).central = a.central + b.central +
37       (2 : K)⁻¹ * (b.frequency a.position - a.frequency b.position) := rfl
38 
39 @[simp] theorem one_position : (1 : Element K X).position = 0 := rfl
40 @[simp] theorem one_frequency : (1 : Element K X).frequency = 0 := rfl
41 @[simp] theorem one_central : (1 : Element K X).central = 0 := rfl
42 @[simp] theorem inv_position (a : Element K X) : a⁻¹.position = -a.position := rfl
43 @[simp] theorem inv_frequency (a : Element K X) : a⁻¹.frequency = -a.frequency := rfl
44 @[simp] theorem inv_central (a : Element K X) : a⁻¹.central = -a.central := rfl
45 
46 /-- The alternating cocycle gives the actual Heisenberg group operation. -/
47 instance instGroup : Group (Element K X) where
48   mul_assoc a b c := by
49     ext <;> simp [add_assoc, map_add]
50     ring
51   one_mul a := by
52     ext <;> simp
53   mul_one a := by
54     ext <;> simp
55   inv_mul_cancel a := by
56     ext <;> simp
57 
58 /-- Pure central elements. -/
59 def centralElement (z : K) : Element K X := ⟨0, 0, z⟩
60 
61 /-- Pure position elements act by translation in the Schrödinger model. -/
62 def translationElement (x : X) : Element K X := ⟨x, 0, 0⟩
63 
64 /-- Pure frequency elements act by modulation in the Schrödinger model. -/
65 def modulationElement (ξ : Module.Dual K X) : Element K X := ⟨0, ξ, 0⟩
66 
67 @[simp] theorem centralElement_position (z : K) :
68     (centralElement (X := X) z).position = 0 := rfl
69 @[simp] theorem centralElement_frequency (z : K) :
70     (centralElement (X := X) z).frequency = 0 := rfl
71 @[simp] theorem centralElement_central (z : K) :
72     (centralElement (X := X) z).central = z := rfl
73 @[simp] theorem translationElement_position (x : X) :
74     (translationElement (K := K) x).position = x := rfl
75 @[simp] theorem translationElement_frequency (x : X) :
76     (translationElement (K := K) x).frequency = 0 := rfl
77 @[simp] theorem translationElement_central (x : X) :
78     (translationElement (K := K) x).central = 0 := rfl
79 @[simp] theorem modulationElement_position (ξ : Module.Dual K X) :
80     (modulationElement ξ).position = 0 := rfl
81 @[simp] theorem modulationElement_frequency (ξ : Module.Dual K X) :
82     (modulationElement ξ).frequency = ξ := rfl
83 @[simp] theorem modulationElement_central (ξ : Module.Dual K X) :
84     (modulationElement ξ).central = 0 := rfl
85 
86 @[simp] theorem centralElement_zero : centralElement (X := X) (0 : K) = 1 := rfl
87 @[simp] theorem translationElement_zero : translationElement (K := K) (0 : X) = 1 := rfl
88 @[simp] theorem modulationElement_zero :
89     modulationElement (0 : Module.Dual K X) = 1 := rfl
90 
91 @[simp] theorem centralElement_mul (z t : K) :
92     centralElement (X := X) z * centralElement t = centralElement (z + t) := by
93   ext <;> simp
94 
95 @[simp] theorem translationElement_mul (x y : X) :
96     translationElement (K := K) x * translationElement y = translationElement (x + y) := by
97   ext <;> simp
98 
99 @[simp] theorem modulationElement_mul (ξ η : Module.Dual K X) :
100     modulationElement ξ * modulationElement η = modulationElement (ξ + η) := by
101   ext <;> simp
102 
103 /-- The central coordinate commutes with every group element. -/
104 theorem centralElement_commute (z : K) (a : Element K X) :
105     Commute (centralElement z) a := by
106   show centralElement z * a = a * centralElement z
107   ext <;> simp [add_comm]
108 
109 end PaperXI.Heisenberg

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: 1a146672c602d8cacb7184a8bf364365676d1766a0ffd7af7a1e1c56652776dd

Original source on GitHub

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