Komorebi Space · Lean source

GroupViewSystems.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 (1)

KomorebiSpace/GroupViewSystems.lean174 lines

Original source pathlean/KomorebiSpace/GroupViewSystems.lean
Skip declarations and read code

Skip source text

1 import KomorebiSpace.ViewSections
2 import Mathlib.Algebra.Group.Pi.Basic
3 import Mathlib.Algebra.Group.Subgroup.Basic
4 import Mathlib.Tactic.Group
5 
6 set_option autoImplicit false
7 
8 /-!
9 # Group-valued views and nonabelian coherence
10 
11 Groups need not commute. Cocycle labels obey a transported multiplication law.
12 The associated twisted set-valued system and its sections are constructed from
13 these labels. No site, stackification or higher category is asserted here.
14 -/
15 universe u v w
16 namespace KomorebiSpace
17 open CategoryTheory
18 
19 structure GroupViewSystem (V : Type u) [Category.{v} V]
20     (G : V → Type w) [∀ a, Group (G a)] where
21   pull : {a b : V} → (a ⟶ b) → (G b →* G a)
22   pull_id : ∀ a (x : G a), pull (𝟙 a) x = x
23   pull_comp : ∀ {a b c : V} (f : a ⟶ b) (g : b ⟶ c) (x : G c),
24     pull (f ≫ g) x = pull f (pull g x)
25 
26 namespace GroupViewSystem
27 variable {V : Type u} [Category.{v} V]
28 variable {G : V → Type w} [∀ a, Group (G a)]
29 variable (F : GroupViewSystem V G)
30 
31 /-- Underlying strict set-valued view system. -/
32 abbrev views : ViewSystem V where
33   Obj := G
34   pull := fun f => F.pull f
35   pull_id := F.pull_id
36   pull_comp := F.pull_comp
37 
38 /-- Multiplicative transition data, including normalization and all composable pairs. -/
39 structure Cocycle where
40   edge : ∀ {a b : V}, (a ⟶ b) → G a
41   edge_id : ∀ a, edge (𝟙 a) = 1
42   edge_comp : ∀ {a b c : V} (f : a ⟶ b) (g : b ⟶ c),
43     edge (f ≫ g) = edge f * F.pull f (edge g)
44 
45 namespace Cocycle
46 variable {F}
47 @[ext] theorem ext {c d : F.Cocycle}
48     (h : ∀ a b (f : a ⟶ b), c.edge f = d.edge f) : c = d := by
49   cases c with
50   | mk ce ci cc =>
51     cases d with
52     | mk de di dc =>
53       have he : @ce = @de := by funext a b f; exact h a b f
54       cases he
55       rfl
56 end Cocycle
57 
58 /-- Trivial transition labels, not an assumed preferred trivialization. -/
59 def trivial : F.Cocycle where
60   edge := fun _ => 1
61   edge_id := by intros; rfl
62   edge_comp := by intros; simp
63 
64 /-- A raw viewwise change of trivialization acts on a cocycle. -/
65 def gauge (a : ∀ v, G v) (c : F.Cocycle) : F.Cocycle where
66   edge := fun {v w} f => a v * c.edge f * (F.pull f (a w))⁻¹
67   edge_id := by intro v; rw [c.edge_id, F.pull_id]; simp
68   edge_comp := by
69     intro v w z f g
70     simp only [c.edge_comp, F.pull_comp, map_mul, map_inv]
71     group
72 
73 @[simp] theorem gauge_edge (a : ∀ v, G v) (c : F.Cocycle)
74     {v w : V} (f : v ⟶ w) :
75     (F.gauge a c).edge f = a v * c.edge f * (F.pull f (a w))⁻¹ := rfl
76 
77 @[simp] theorem gauge_one (c : F.Cocycle) : F.gauge 1 c = c := by
78   apply Cocycle.ext
79   intro v w f
80   simp [gauge]
81 
82 theorem gauge_mul (a b : ∀ v, G v) (c : F.Cocycle) :
83     F.gauge a (F.gauge b c) = F.gauge (a * b) c := by
84   apply Cocycle.ext
85   intro v w f
86   simp only [gauge_edge, Pi.mul_apply, map_mul]
87   group
88 
89 @[simp] theorem gauge_inv_gauge (a : ∀ v, G v) (c : F.Cocycle) :
90     F.gauge a⁻¹ (F.gauge a c) = c := by rw [F.gauge_mul]; simp
91 
92 @[simp] theorem gauge_gauge_inv (a : ∀ v, G v) (c : F.Cocycle) :
93     F.gauge a (F.gauge a⁻¹ c) = c := by rw [F.gauge_mul]; simp
94 
95 /-- The cocycle is used in the restriction functions, not hidden in a truth flag. -/
96 abbrev twistedViews (c : F.Cocycle) : ViewSystem V where
97   Obj := G
98   pull := fun f x => c.edge f * F.pull f x
99   pull_id := by intro v x; rw [c.edge_id, F.pull_id, one_mul]
100   pull_comp := by
101     intro v w z f g x
102     simp only [c.edge_comp, F.pull_comp, map_mul, mul_assoc]
103 
104 @[simp] theorem twisted_pull (c : F.Cocycle) {v w : V} (f : v ⟶ w) (x : G w) :
105     (F.twistedViews c).pull f x = c.edge f * F.pull f x := rfl
106 
107 theorem twisted_coherent_iff (c : F.Cocycle) (x : ∀ v, G v) :
108     (∀ v w (f : v ⟶ w), (F.twistedViews c).pull f (x w) = x v) ↔
109       ∀ v w (f : v ⟶ w), c.edge f = x v * (F.pull f (x w))⁻¹ := by
110   constructor
111   · intro h v w f
112     have he := h v w f
113     change c.edge f * F.pull f (x w) = x v at he
114     exact (eq_mul_inv_iff_mul_eq).mpr he
115   · intro h v w f
116     change c.edge f * F.pull f (x w) = x v
117     rw [h v w f]
118     group
119 
120 /-- An invertible coordinate change induces an equivalence of actual section sets. -/
121 def gaugeSections (a : ∀ v, G v) (c : F.Cocycle) :
122     (F.twistedViews c).Ambient ≃ (F.twistedViews (F.gauge a c)).Ambient where
123   toFun x := ⟨fun v => a v * x.val v, by
124     intro v w f
125     change (a v * c.edge f * (F.pull f (a w))⁻¹) *
126       F.pull f (a w * x.val w) = a v * x.val v
127     rw [map_mul]
128     have hx := x.property v w f
129     change c.edge f * F.pull f (x.val w) = x.val v at hx
130     calc
131       _ = a v * (c.edge f * F.pull f (x.val w)) := by group
132       _ = _ := by rw [hx]⟩
133   invFun y := ⟨fun v => (a v)⁻¹ * y.val v, by
134     intro v w f
135     change c.edge f * F.pull f ((a w)⁻¹ * y.val w) = (a v)⁻¹ * y.val v
136     have hy := y.property v w f
137     change (a v * c.edge f * (F.pull f (a w))⁻¹) *
138       F.pull f (y.val w) = y.val v at hy
139     rw [map_mul, map_inv]
140     calc
141       _ = (a v)⁻¹ * ((a v * c.edge f * (F.pull f (a w))⁻¹) *
142         F.pull f (y.val w)) := by group
143       _ = _ := by rw [hy]⟩
144   left_inv x := by apply ViewSystem.Ambient.ext; intro v; change _⁻¹ * (_ * _) = _; group
145   right_inv x := by apply ViewSystem.Ambient.ext; intro v; change _ * (_⁻¹ * _) = _; group
146 
147 @[simp] theorem gaugeSections_coordinate (a : ∀ v, G v) (c : F.Cocycle)
148     (x : (F.twistedViews c).Ambient) (v : V) :
149     ((F.gaugeSections a c) x).val v = a v * x.val v := rfl
150 
151 /-- Flattening labels and solving the twisted section equations are equivalent. -/
152 theorem flatten_iff_section (a : ∀ v, G v) (c : F.Cocycle) :
153     F.gauge a c = F.trivial ↔
154       ∀ v w (f : v ⟶ w), c.edge f * F.pull f ((a w)⁻¹) = (a v)⁻¹ := by
155   constructor
156   · intro h v w f
157     have he := congrArg (fun t : F.Cocycle => t.edge f) h
158     change a v * c.edge f * (F.pull f (a w))⁻¹ = 1 at he
159     rw [map_inv]
160     calc
161       _ = (a v)⁻¹ * (a v * c.edge f * (F.pull f (a w))⁻¹) := by group
162       _ = _ := by rw [he, mul_one]
163   · intro h
164     apply Cocycle.ext
165     intro v w f
166     change a v * c.edge f * (F.pull f (a w))⁻¹ = 1
167     have he := h v w f
168     rw [map_inv] at he
169     calc
170       _ = a v * (c.edge f * (F.pull f (a w))⁻¹) := by group
171       _ = _ := by rw [he]; group
172 
173 end GroupViewSystem
174 end KomorebiSpace

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

Original source on GitHub

Back to Komorebi Space