Paper XI · Lean source
TwistedAlgebra.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/TwistedAlgebra.lean109 lines
Original source path
formalization/PaperXI/TwistedAlgebra.leanSkip declarations and read code
1 import PaperXI.TwistedRegular
2 import Mathlib.LinearAlgebra.Dimension.StrongRankCondition
3 import Mathlib.LinearAlgebra.FiniteDimensional.Defs
4
5 /-! A concrete realization of the complex twisted group algebra, including its
6 actual basis, multiplication, units, and dimension. The ambient endomorphism
7 algebra supplies the ring laws; all closure and basis assertions are proved. -/
8 set_option autoImplicit false
9 noncomputable section
10 namespace PaperXI.TwistedAlgebra
11
12 open CocycleCommutator TwistedRegular Module
13 variable {A : Type*} [CommGroup A]
14
15 /-- Linear span of all twisted left regular operators. -/
16 def operatorSpan (c : Cocycle A ℂˣ) : Submodule ℂ (Module.End ℂ (A → ℂ)) :=
17 Submodule.span ℂ (Set.range (regular c))
18
19 theorem regular_mem (c : Cocycle A ℂˣ) (a : A) : regular c a ∈ operatorSpan c :=
20 Submodule.subset_span (Set.mem_range_self a)
21
22 theorem one_mem (c : Cocycle A ℂˣ) (hc : Normalized c) :
23 (1 : Module.End ℂ (A → ℂ)) ∈ operatorSpan c := by
24 rw [← regular_one c hc]
25 exact regular_mem c 1
26
27 theorem mul_mem (c : Cocycle A ℂˣ) {x y : Module.End ℂ (A → ℂ)}
28 (hx : x ∈ operatorSpan c) (hy : y ∈ operatorSpan c) : x * y ∈ operatorSpan c := by
29 induction hx using Submodule.span_induction with
30 | mem x hx =>
31 obtain ⟨a, rfl⟩ := hx
32 induction hy using Submodule.span_induction with
33 | mem y hy =>
34 obtain ⟨b, rfl⟩ := hy
35 rw [regular_mul]
36 exact (operatorSpan c).smul_mem _ (regular_mem c (a * b))
37 | zero => simp
38 | add x y _ _ hx hy => simpa [mul_add] using (operatorSpan c).add_mem hx hy
39 | smul z y _ hy => simpa [mul_smul_comm] using (operatorSpan c).smul_mem z hy
40 | zero => simp
41 | add x y _ _ hx hy => simpa [add_mul] using (operatorSpan c).add_mem hx hy
42 | smul z x _ hx => simpa [smul_mul_assoc] using (operatorSpan c).smul_mem z hx
43
44 /-- The normalized twisted algebra as a concrete complex subalgebra. -/
45 def subalgebra (c : Cocycle A ℂˣ) (hc : Normalized c) :
46 Subalgebra ℂ (Module.End ℂ (A → ℂ)) where
47 carrier := operatorSpan c
48 zero_mem' := (operatorSpan c).zero_mem
49 add_mem' := (operatorSpan c).add_mem
50 one_mem' := one_mem c hc
51 mul_mem' := mul_mem c
52 algebraMap_mem' z := by
53 rw [Algebra.algebraMap_eq_smul_one]
54 exact (operatorSpan c).smul_mem z (one_mem c hc)
55
56 /-- The actual complex twisted group algebra ℂᶜ[A]. -/
57 abbrev Algebra (c : Cocycle A ℂˣ) (hc : Normalized c) := subalgebra c hc
58
59 variable [Fintype A]
60
61 /-- Its canonical basis is proved independent by acting on the identity point mass. -/
62 def basis (c : Cocycle A ℂˣ) (hc : Normalized c) : Basis A ℂ (Algebra c hc) :=
63 (Basis.span (regular_linearIndependent c hc)).map (subalgebra c hc).toSubmoduleEquiv
64
65 @[simp] theorem coe_basis (c : Cocycle A ℂˣ) (hc : Normalized c) (a : A) :
66 (basis c hc a : Module.End ℂ (A → ℂ)) = regular c a := by
67 unfold basis
68 erw [Basis.map_apply]
69 exact Basis.coe_span_apply (regular_linearIndependent c hc) a
70
71 theorem basis_mul (c : Cocycle A ℂˣ) (hc : Normalized c) (a b : A) :
72 basis c hc a * basis c hc b = (c.coeff a b : ℂ) • basis c hc (a * b) := by
73 apply Subtype.ext
74 change (basis c hc a : Module.End ℂ (A → ℂ)) * basis c hc b =
75 (c.coeff a b : ℂ) • (basis c hc (a * b) : Module.End ℂ (A → ℂ))
76 simp only [coe_basis, regular_mul]
77
78 @[simp] theorem basis_one (c : Cocycle A ℂˣ) (hc : Normalized c) :
79 basis c hc 1 = 1 := by
80 apply Subtype.ext
81 simpa using regular_one c hc
82
83 /-- Every canonical basis vector has an explicit two-sided inverse. -/
84 def basisUnit (c : Cocycle A ℂˣ) (hc : Normalized c) (a : A) : (Algebra c hc)ˣ where
85 val := basis c hc a
86 inv := ((c.coeff a a⁻¹)⁻¹ : ℂˣ) • basis c hc a⁻¹
87 val_inv := by
88 rw [Units.smul_def, mul_smul_comm, basis_mul, mul_inv_cancel, basis_one, smul_smul]
89 simp
90 inv_val := by
91 have h : c.coeff a a⁻¹ = c.coeff a⁻¹ a := by
92 simpa [hc.1, hc.2] using c.assoc a a⁻¹ a
93 rw [Units.smul_def, smul_mul_assoc, basis_mul, inv_mul_cancel, basis_one, smul_smul, h]
94 simp
95
96 @[simp] theorem coe_basisUnit (c : Cocycle A ℂˣ) (hc : Normalized c) (a : A) :
97 (basisUnit c hc a : Algebra c hc) = basis c hc a := rfl
98
99 theorem basis_isUnit (c : Cocycle A ℂˣ) (hc : Normalized c) (a : A) :
100 IsUnit (basis c hc a) := (basisUnit c hc a).isUnit
101
102 instance finiteDimensional (c : Cocycle A ℂˣ) (hc : Normalized c) :
103 FiniteDimensional ℂ (Algebra c hc) := Module.Finite.of_basis (basis c hc)
104
105 theorem finrank_eq_card (c : Cocycle A ℂˣ) (hc : Normalized c) :
106 Module.finrank ℂ (Algebra c hc) = Fintype.card A :=
107 Module.finrank_eq_card_basis (basis c hc)
108
109 end PaperXI.TwistedAlgebra
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: 578da8f15a3a094d50dbc2d501fc66ea1c8ad354c2a29fb8acb5fd3f4c7b2020
Back to Paper XI: Packets, Arithmetic Realization, and Conditional Comparison