Komorebi Space · Lean source
EffectiveCocycleDescent.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/EffectiveCocycleDescent.lean146 lines
Original source path
lean/KomorebiSpace/EffectiveCocycleDescent.leanSkip declarations and read code
1 import KomorebiSpace.CocycleDescent
2
3 set_option autoImplicit false
4
5 /-!
6 # Effective descent of cocycles with specified overlap isomorphisms
7
8 Patches need not have equal labels. An overlap gauge from patch i to patch j
9 has values a_ij, with a_ik = a_jk * a_ij. A composition cover lets us choose
10 local reference frames, strictify the labels, and invoke strict cocycle gluing.
11 The result includes its local gauges and their compatibility with the supplied
12 overlap gauges. No site, topology, or unrestricted stack condition is assumed.
13 -/
14 universe u v w z
15 namespace KomorebiSpace
16 open CategoryTheory
17 namespace GroupViewSystem
18 variable {V : Type u} [Category.{v} V]
19 variable {G : V → Type w} [∀ a, Group (G a)]
20 variable {I : Type z}
21 variable (F : GroupViewSystem V G)
22
23 namespace PatchCocycle
24 variable {F}
25
26 /-- A change of frame inside a full patch. -/
27 def gauge {S : Set V} (a : ∀ x : S, G x.val) (c : F.PatchCocycle S) :
28 F.PatchCocycle S where
29 edge := fun {x y} f => a x * c.edge f * (F.pull f (a y))⁻¹
30 edge_id := by intro x; rw [c.edge_id, F.pull_id]; simp
31 edge_comp := by
32 intro x y z f g
33 simp only [c.edge_comp, F.pull_comp, map_mul, map_inv]
34 group
35
36 @[simp] theorem gauge_edge {S : Set V} (a : ∀ x : S, G x.val)
37 (c : F.PatchCocycle S) {x y : S} (f : x.val ⟶ y.val) :
38 (c.gauge a).edge f = a x * c.edge f * (F.pull f (a y))⁻¹ := rfl
39 end PatchCocycle
40
41 /-- Descent data with actual overlap gauges, not just pairwise existence of an isomorphism. -/
42 structure CocycleDescentData (U : I → Set V) where
43 patch : ∀ i, F.PatchCocycle (U i)
44 change : ∀ (i j : I) (x : V), x ∈ U i → x ∈ U j → G x
45 change_edge : ∀ (i j : I) (x y : V) (hxi : x ∈ U i) (hyi : y ∈ U i)
46 (hxj : x ∈ U j) (hyj : y ∈ U j) (f : x ⟶ y),
47 change i j x hxi hxj * (patch i).edge (a := ⟨x,hxi⟩) (b := ⟨y,hyi⟩) f *
48 (F.pull f (change i j y hyi hyj))⁻¹ =
49 (patch j).edge (a := ⟨x,hxj⟩) (b := ⟨y,hyj⟩) f
50 change_comp : ∀ (i j k : I) (x : V) (hi : x ∈ U i) (hj : x ∈ U j) (hk : x ∈ U k),
51 change i k x hi hk = change j k x hj hk * change i j x hi hj
52
53 namespace CocycleDescentData
54 variable {F} {U : I → Set V}
55
56 /-- Identity and inverse overlap laws follow from the triple-overlap equation. -/
57 theorem change_self (D : F.CocycleDescentData U) (i : I) (x : V) (hi : x ∈ U i) :
58 D.change i i x hi hi = 1 := by
59 have h := D.change_comp i i i x hi hi hi
60 have h' : D.change i i x hi hi * 1 = D.change i i x hi hi * D.change i i x hi hi := by
61 simpa only [mul_one] using h
62 exact (mul_left_cancel h').symm
63
64 theorem change_reverse (D : F.CocycleDescentData U) (i j : I) (x : V)
65 (hi : x ∈ U i) (hj : x ∈ U j) :
66 D.change j i x hj hi = (D.change i j x hi hj)⁻¹ := by
67 have h := D.change_comp i j i x hi hj hi
68 rw [D.change_self] at h
69 exact eq_inv_of_mul_eq_one_left h.symm
70
71 /-- A global representative with isomorphisms to all local cocycles. -/
72 structure Effectuation (D : F.CocycleDescentData U) where
73 global : F.Cocycle
74 compare : ∀ i, ∀ x : U i, G x.val
75 local_eq : ∀ (i : I) (x y : U i) (f : x.val ⟶ y.val),
76 compare i x * global.edge f * (F.pull f (compare i y))⁻¹ = (D.patch i).edge f
77 overlap : ∀ (i j : I) (x : V) (hi : x ∈ U i) (hj : x ∈ U j),
78 compare j ⟨x,hj⟩ = D.change i j x hi hj * compare i ⟨x,hi⟩
79
80 /-- Choose a reference patch independently at each view. This is choice data. -/
81 noncomputable def reference (h : ViewSystem.ObjectCover U) (x : V) : I :=
82 Classical.choose (h x)
83
84 omit [Category.{v} V] in
85 theorem reference_mem (h : ViewSystem.ObjectCover U) (x : V) :
86 x ∈ U (reference h x) := Classical.choose_spec (h x)
87
88 /-- The gauge from the selected reference frame at x into patch i. -/
89 noncomputable def frame (D : F.CocycleDescentData U) (h : ViewSystem.ObjectCover U)
90 (i : I) (x : U i) : G x.val :=
91 D.change (reference h x.val) i x.val (reference_mem h x.val) x.property
92
93 theorem frame_overlap (D : F.CocycleDescentData U) (h : ViewSystem.ObjectCover U)
94 (i j : I) (x : V) (hi : x ∈ U i) (hj : x ∈ U j) :
95 D.frame h j ⟨x,hj⟩ = D.change i j x hi hj * D.frame h i ⟨x,hi⟩ :=
96 D.change_comp (reference h x) i j x (reference_mem h x) hi hj
97
98 /-- Rewrite every patch in the independently selected reference frames. -/
99 noncomputable def strictify (D : F.CocycleDescentData U) (h : ViewSystem.ObjectCover U) :
100 F.CocycleMatching U where
101 patch := fun i => (D.patch i).gauge (fun x => (D.frame h i x)⁻¹)
102 agree := by
103 intro i j x y hxi hyi hxj hyj f
104 simp only [PatchCocycle.gauge_edge, map_inv, inv_inv]
105 rw [D.frame_overlap h i j x hxi hxj, D.frame_overlap h i j y hyi hyj,
106 ← D.change_edge i j x y hxi hyi hxj hyj f, map_mul]
107 group
108
109 /-- Construct an effectuation from arbitrary coherent overlap isomorphisms. -/
110 noncomputable def effectuate (D : F.CocycleDescentData U) (h : CompositionCover U) :
111 D.Effectuation where
112 global := (D.strictify (ViewSystem.TransitionCover.objectCover U h.transitionCover)).glue h
113 compare := D.frame (ViewSystem.TransitionCover.objectCover U h.transitionCover)
114 local_eq := by
115 intro i x y f
116 let ho := ViewSystem.TransitionCover.objectCover U h.transitionCover
117 have he := (D.strictify ho).assembleEdge_local h.transitionCover i x.val y.val
118 x.property y.property f
119 change D.frame ho i x * (D.strictify ho).assembleEdge h.transitionCover f *
120 (F.pull f (D.frame ho i y))⁻¹ = (D.patch i).edge f
121 rw [he]
122 simp only [strictify, PatchCocycle.gauge_edge, map_inv, inv_inv]
123 group
124 overlap := D.frame_overlap (ViewSystem.TransitionCover.objectCover U h.transitionCover)
125
126 /-- The existence conclusion is derived, not a field in descent data. -/
127 theorem effective (D : F.CocycleDescentData U) (h : CompositionCover U) :
128 Nonempty D.Effectuation := ⟨D.effectuate h⟩
129
130 /-- Each local identification satisfies the original overlap law. -/
131 theorem effectuate_overlap (D : F.CocycleDescentData U) (h : CompositionCover U)
132 (i j : I) (x : V) (hi : x ∈ U i) (hj : x ∈ U j) :
133 (D.effectuate h).compare j ⟨x,hj⟩ =
134 D.change i j x hi hj * (D.effectuate h).compare i ⟨x,hi⟩ :=
135 (D.effectuate h).overlap i j x hi hj
136
137 /-- Inverse form of the local comparison equation, useful for uniqueness. -/
138 theorem Effectuation.global_local {D : F.CocycleDescentData U} (E : D.Effectuation)
139 (i : I) (x y : U i) (f : x.val ⟶ y.val) :
140 E.global.edge f = (E.compare i x)⁻¹ * (D.patch i).edge f * F.pull f (E.compare i y) := by
141 rw [← E.local_eq i x y f]
142 group
143
144 end CocycleDescentData
145 end GroupViewSystem
146 end KomorebiSpace
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: 065f3d83402ac5c771032ee9207c7d65e898f379ac244061d6981d9f8e33b096