Realization Boundaries · Lean source
ObservationSystems.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 (2)
RealizationBoundaries/ObservationSystems.lean346 lines
Original source path
RealizationBoundaries/ObservationSystems.leanSkip declarations and read code
1 import RealizationBoundaries.ClassificationConsequences
2 import RealizationBoundaries.CompletionReflection
3 import Mathlib.Topology.Algebra.Category.ProfiniteGrp.Completion
4 import Mathlib.CategoryTheory.ObjectProperty.FullSubcategory
5 import Mathlib.CategoryTheory.Filtered.Final
6 import Mathlib.CategoryTheory.Functor.ReflectsIso.Basic
7
8 /-!
9 # Finite observation systems and the completion functor
10
11 The global faithfulness statements below use Mathlib's actual profinite-completion
12 functor on arbitrary groups, rather than a family-specific coordinate extension.
13 -/
14 set_option autoImplicit false
15 set_option backward.isDefEq.respectTransparency false
16 noncomputable section
17 open CategoryTheory
18 namespace RealizationBoundaries
19
20 /-- Naturality on actual canonical points for the official completion functor. -/
21 theorem official_completion_map_eta {G H : GrpCat} (f : G ⟶ H) (x : G) :
22 ProfiniteGrp.profiniteCompletion.map f
23 (ProfiniteGrp.ProfiniteCompletion.etaFn G x) =
24 ProfiniteGrp.ProfiniteCompletion.etaFn H (f x) := by
25 exact ConcreteCategory.congr_hom
26 (ProfiniteGrp.ProfiniteCompletion.lift_eta
27 (f ≫ ProfiniteGrp.ProfiniteCompletion.eta H)) x
28
29 /-- Completion distinguishes maps whenever their target is residually finite.
30 No commutativity, countability, continuity or source residual-finiteness is needed. -/
31 theorem official_completion_map_injective {G H : GrpCat}
32 (hH : Group.ResiduallyFinite H) :
33 Function.Injective (ProfiniteGrp.profiniteCompletion.map (X := G) (Y := H)) := by
34 intro f g h
35 ext x
36 apply (ProfiniteGrp.ProfiniteCompletion.etaFn_injective_iff_residuallyFinite H).mpr hH
37 rw [← official_completion_map_eta f x, ← official_completion_map_eta g x, h]
38
39 /-- The full category of all residually finite groups and all group homomorphisms. -/
40 def residuallyFiniteObjects : ObjectProperty GrpCat := fun G => Group.ResiduallyFinite G
41
42 abbrev ResiduallyFiniteGrp := residuallyFiniteObjects.FullSubcategory
43
44 /-- The restriction of the official profinite-completion functor. -/
45 def residuallyFiniteCompletion : ResiduallyFiniteGrp ⥤ ProfiniteGrp :=
46 residuallyFiniteObjects.ι ⋙ ProfiniteGrp.profiniteCompletion
47
48 /-- Monograph 9.3, the unrestricted categorical faithfulness assertion. -/
49 instance residuallyFiniteCompletion_faithful : residuallyFiniteCompletion.Faithful where
50 map_injective := by
51 intro X Y f g h
52 apply ObjectProperty.hom_ext
53 exact official_completion_map_injective Y.property h
54
55 /-- A presentation of the full source category whose objects are the paired groups.
56 Every abstract additive group homomorphism is a morphism. -/
57 abbrev PairedGroupCategory := InducedCategory AddGrpCat
58 (fun a : ℕ → Bool => AddGrpCat.of (pairedGroup a))
59
60 /-- The family completion functor on actual canonical profinite completions. -/
61 def pairedCompletionFunctor : PairedGroupCategory ⥤ ProfiniteAddGrp where
62 obj a := CanonicalCompletion (selectorLine (pairedSelector a))
63 map f := ProfiniteAddGrp.ofHom (completionHom _ _ f.hom.hom)
64 map_id a := by
65 apply ConcreteCategory.hom_ext
66 intro x
67 have he := completionHom_unique (selectorLine (pairedSelector a))
68 (selectorLine (pairedSelector a)) (AddMonoidHom.id _)
69 (ContinuousAddMonoidHom.id _) (fun _ => rfl)
70 exact congrArg (fun h => h x) he.symm
71 map_comp f g := by
72 apply ConcreteCategory.hom_ext
73 intro x
74 exact congrArg (fun h => h x) (completionHom_comp _ _ _ f.hom.hom g.hom.hom)
75
76 instance pairedCompletionFunctor_faithful : pairedCompletionFunctor.Faithful where
77 map_injective := by
78 intro a b f g h
79 apply InducedCategory.hom_ext
80 apply AddGrpCat.hom_ext
81 apply completionHom_injective (selectorLine (pairedSelector a))
82 (selectorLine (pairedSelector b))
83 exact congrArg (fun m => m.hom) h
84
85 /-- The completion morphism given by the common coordinates has no source lift. -/
86 theorem pairedCompletionFunctor_not_full : ¬ pairedCompletionFunctor.Full := by
87 intro hf
88 let : pairedCompletionFunctor.Full := hf
89 let a : PairedGroupCategory := fun _ => false
90 let b : PairedGroupCategory := fun _ => true
91 let g : pairedCompletionFunctor.obj a ⟶ pairedCompletionFunctor.obj b :=
92 ProfiniteAddGrp.ofHom {
93 toAddMonoidHom := (pairedCommonCompletionEquiv a b).toAddMonoidHom
94 continuous_toFun := (pairedCommonCompletionEquiv a b).continuous_toFun
95 }
96 obtain ⟨f, hfg⟩ := pairedCompletionFunctor.map_surjective g
97 apply no_lift_of_commonCompletionEquiv a b constant_selectors_infinite_disagreement
98 refine ⟨f.hom.hom, ?_⟩
99 intro x
100 have h := ConcreteCategory.congr_hom hfg
101 (ProfiniteAddGrp.ProfiniteCompletion.etaFn (AddGrpCat.of (pairedGroup a)) x)
102 exact h.symm.trans (completionHom_eta _ _ f.hom.hom x)
103
104 /-- Finite sets of primes, ordered in the direction of quotient restriction. -/
105 abbrev CoordinateIndex := OrderDual (Finset Prime)
106
107 /-- The source-free finite coordinate groups. -/
108 abbrev FiniteCoordinates (s : CoordinateIndex) := (p : {p : Prime // p ∈ s.ofDual}) → Coordinate p.val
109
110 def finiteCoordinateProjection (W : Submodule ℚ TailSpace) (s : CoordinateIndex) :
111 preimage W →+ FiniteCoordinates s where
112 toFun x p := x.val p.val
113 map_zero' := rfl
114 map_add' _ _ := rfl
115
116 def finiteCoordinateRestriction {s t : CoordinateIndex} (h : s ≤ t) :
117 FiniteCoordinates s →+ FiniteCoordinates t where
118 toFun x p := x ⟨p.val, h p.property⟩
119 map_zero' := rfl
120 map_add' _ _ := rfl
121
122 /-- This diagram contains no dense source group or evaluations of named elements. -/
123 def coordinateObservation : CoordinateIndex ⥤ FiniteAddGrp where
124 obj s := FiniteAddGrp.of (FiniteCoordinates s)
125 map f := FiniteAddGrp.ofHom (finiteCoordinateRestriction f.le)
126 map_id _ := by ext; rfl
127 map_comp _ _ := by ext; rfl
128
129 /-- The actual kernel indexing the corresponding quotient of the original group. -/
130 def finiteCoordinateIndex (W : Submodule ℚ TailSpace) (s : CoordinateIndex) : CompletionIndex W :=
131 FiniteIndexNormalAddSubgroup.ofAddSubgroup (finiteCoordinateProjection W s).ker
132
133 theorem finiteCoordinateIndex_mono (W : Submodule ℚ TailSpace) :
134 Monotone (finiteCoordinateIndex W) := by
135 intro s t h x hx
136 change finiteCoordinateProjection W t x = 0
137 funext p
138 exact congrFun hx ⟨p.val, h p.property⟩
139
140 /-- The inclusion of the finite-coordinate quotient subsystem in all finite quotients. -/
141 def coordinateIndexFunctor (W : Submodule ℚ TailSpace) : CoordinateIndex ⥤ CompletionIndex W :=
142 (show CoordinateIndex →o CompletionIndex W from
143 ⟨finiteCoordinateIndex W, finiteCoordinateIndex_mono W⟩).monotone.functor
144
145 /-- Every finite quotient is dominated by an actual finite-coordinate quotient. -/
146 theorem finiteCoordinateIndex_cofinal (W : Submodule ℚ TailSpace) (K : CompletionIndex W) :
147 ∃ s : CoordinateIndex, finiteCoordinateIndex W s ≤ K := by
148 let F := preimage W ⧸ K.toAddSubgroup
149 let : Fintype F := Fintype.ofFinite F
150 let m := Fintype.card F
151 have hm : 0 < m := Fintype.card_pos
152 let s : CoordinateIndex := OrderDual.toDual ((exceptional_finite hm).toFinset)
153 refine ⟨s, ?_⟩
154 intro x hx
155 have hcoord : coordinateMap W m x = 0 := by
156 funext p
157 exact congrFun hx ⟨p.val, by
158 change p.val ∈ (exceptional_finite hm).toFinset
159 exact (exceptional_finite hm).mem_toFinset.mpr p.property⟩
160 have hk := finite_target_coordinate_kernel W F (quotientProjection W K) hcoord
161 exact (QuotientAddGroup.eq_zero_iff x).mp hk
162
163 /-- Categorical initiality records genuine cofinal reindexing of this inverse system. -/
164 instance coordinateIndexFunctor_initial (W : Submodule ℚ TailSpace) :
165 (coordinateIndexFunctor W).Initial := by
166 apply (Functor.initial_iff_of_isCofiltered _).mpr
167 constructor
168 · intro K
169 obtain ⟨s, hs⟩ := finiteCoordinateIndex_cofinal W K
170 exact ⟨s, ⟨hs.hom⟩⟩
171 · intro K s f g
172 exact ⟨s, 𝟙 s, Subsingleton.elim _ _⟩
173
174 /-- Extension by zero proves that these are quotient groups, not just finite targets. -/
175 theorem finiteCoordinateProjection_surjective (W : Submodule ℚ TailSpace) (s : CoordinateIndex) :
176 Function.Surjective (finiteCoordinateProjection W s) := by
177 intro z
178 let x : Ambient := fun p => if hp : p ∈ s.ofDual then z ⟨p, hp⟩ else 0
179 have hx : x ∈ finiteSupport := by
180 apply s.ofDual.finite_toSet.subset
181 intro p hp
182 by_contra hn
183 have hn' : p ∉ s.ofDual := hn
184 exact hp (by simp [x, hn'])
185 refine ⟨⟨x, finiteSupport_le_preimage W hx⟩, ?_⟩
186 funext p
187 change x p.val = z p
188 simp [x, p.property]
189
190 /-- The canonical quotient-coordinate comparison. -/
191 def finiteCoordinateQuotientEquiv (W : Submodule ℚ TailSpace) (s : CoordinateIndex) :
192 (preimage W ⧸ (finiteCoordinateIndex W s).toAddSubgroup) ≃+ FiniteCoordinates s :=
193 QuotientAddGroup.quotientKerEquivOfSurjective (finiteCoordinateProjection W s)
194 (finiteCoordinateProjection_surjective W s)
195
196 /-- The genuine all-finite-quotient diagram becomes the common coordinate diagram
197 under the categorically initial finite-coordinate reindexing. -/
198 def coordinateObservationIso (W : Submodule ℚ TailSpace) :
199 coordinateIndexFunctor W ⋙ ProfiniteAddGrp.ProfiniteCompletion.finiteAddGrpDiagram
200 (AddGrpCat.of (preimage W)) ≅ coordinateObservation :=
201 NatIso.ofComponents (fun s => {
202 hom := FiniteAddGrp.ofHom (finiteCoordinateQuotientEquiv W s).toAddMonoidHom
203 inv := FiniteAddGrp.ofHom (finiteCoordinateQuotientEquiv W s).symm.toAddMonoidHom
204 hom_inv_id := by ext x; exact (finiteCoordinateQuotientEquiv W s).symm_apply_apply x
205 inv_hom_id := by ext x; exact (finiteCoordinateQuotientEquiv W s).apply_symm_apply x
206 }) (by
207 intro s t f
208 ext x
209 refine QuotientAddGroup.induction_on x ?_
210 intro y
211 rfl)
212
213 /-- Finite quotient kernels form a nonempty cofiltered index category. -/
214 instance completionIndex_cofiltered (W : Submodule ℚ TailSpace) :
215 IsCofiltered (CompletionIndex W) := by
216 let : Nonempty (CompletionIndex W) := ⟨finiteCoordinateIndex W (OrderDual.toDual ∅)⟩
217 infer_instance
218
219 /-- An unmarked observation contains only a finite-group diagram. In particular
220 there is no source group and no distinguished image of any source element. -/
221 structure FiniteObservation where
222 Index : Type
223 [category : SmallCategory Index]
224 [cofiltered : IsCofiltered Index]
225 diagram : Index ⥤ FiniteAddGrp
226
227 attribute [instance] FiniteObservation.category FiniteObservation.cofiltered
228
229 /-- The actual system over all finite-index normal subgroups. -/
230 def allFiniteObservation (W : Submodule ℚ TailSpace) : FiniteObservation where
231 Index := CompletionIndex W
232 diagram := ProfiniteAddGrp.ProfiniteCompletion.finiteAddGrpDiagram (AddGrpCat.of (preimage W))
233
234 /-- Isomorphism after a common initial (inverse-system cofinal) reindexing.
235 Every pro-object invariant must respect this explicitly certified comparison. -/
236 def CommonCofinalObservation (A B : FiniteObservation) : Prop :=
237 ∃ (I : Type) (_ : SmallCategory I) (F : I ⥤ A.Index) (G : I ⥤ B.Index),
238 IsCofiltered I ∧ F.Initial ∧ G.Initial ∧ Nonempty (F ⋙ A.diagram ≅ G ⋙ B.diagram)
239
240 /-- All rational preimages have the same unmarked finite-quotient observation
241 under a source-free, compatible and genuinely cofinal comparison. -/
242 theorem allFiniteObservation_common (U V : Submodule ℚ TailSpace) :
243 CommonCofinalObservation (allFiniteObservation U) (allFiniteObservation V) := by
244 refine ⟨CoordinateIndex, inferInstance, coordinateIndexFunctor U,
245 coordinateIndexFunctor V, inferInstance, coordinateIndexFunctor_initial U,
246 coordinateIndexFunctor_initial V, ?_⟩
247 exact ⟨(coordinateObservationIso U).trans (coordinateObservationIso V).symm⟩
248
249 /-- An arbitrary decoder invariant under certified pro-object comparisons.
250 No computability or definability restriction is imposed. -/
251 structure ObservationDecoder where
252 decode : FiniteObservation → AddGrpCat
253 invariant : ∀ A B, CommonCofinalObservation A B → Nonempty (decode A ≅ decode B)
254
255 /-- Monograph 9.1: no isomorphism-invariant decoder of the actual unmarked
256 finite-quotient systems recovers every paired source group. -/
257 theorem no_unmarked_observation_decoder (R : ObservationDecoder)
258 (recovers : ∀ a : ℕ → Bool, Nonempty
259 (R.decode (allFiniteObservation (selectorLine (pairedSelector a))) ≅
260 AddGrpCat.of (pairedGroup a))) : False := by
261 obtain ⟨ea⟩ := recovers (fun _ => false)
262 obtain ⟨eb⟩ := recovers (fun _ => true)
263 obtain ⟨er⟩ := R.invariant _ _ (allFiniteObservation_common _ _)
264 exact constant_groups_not_isomorphic
265 ⟨((ea.symm.trans er).trans eb).addGroupIsoToAddEquiv⟩
266
267 /-- The source category with D (the zero-subspace preimage) and all paired groups. -/
268 def boundarySubspace : Option (ℕ → Bool) → Submodule ℚ TailSpace
269 | none => ⊥
270 | some a => selectorLine (pairedSelector a)
271
272 abbrev BoundaryGroupCategory := InducedCategory AddGrpCat
273 (fun i : Option (ℕ → Bool) => AddGrpCat.of (preimage (boundarySubspace i)))
274
275 /-- Completion on the enlarged full source category. -/
276 def boundaryCompletionFunctor : BoundaryGroupCategory ⥤ ProfiniteAddGrp where
277 obj i := CanonicalCompletion (boundarySubspace i)
278 map f := ProfiniteAddGrp.ofHom (completionHom _ _ f.hom.hom)
279 map_id i := by
280 apply ConcreteCategory.hom_ext
281 intro x
282 have he := completionHom_unique (boundarySubspace i) (boundarySubspace i)
283 (AddMonoidHom.id _) (ContinuousAddMonoidHom.id _) (fun _ => rfl)
284 exact congrArg (fun h => h x) he.symm
285 map_comp f g := by
286 apply ConcreteCategory.hom_ext
287 intro x
288 exact congrArg (fun h => h x) (completionHom_comp _ _ _ f.hom.hom g.hom.hom)
289
290 /-- The literal inclusion of the zero-subspace preimage, which equals D. -/
291 def bottomToPaired (a : ℕ → Bool) :
292 preimage (⊥ : Submodule ℚ TailSpace) →+ pairedGroup a :=
293 AddSubgroup.inclusion ((preimage_le_iff ⊥ (selectorLine (pairedSelector a))).mpr bot_le)
294
295 /-- The enlarged full source category contains a proper inclusion. -/
296 theorem bottomToPaired_not_surjective (a : ℕ → Bool) :
297 ¬ Function.Surjective (bottomToPaired a) := by
298 obtain ⟨x, hx⟩ := paired_has_nonfiniteSupport a
299 intro hs
300 obtain ⟨d, hd⟩ := hs x
301 apply hx
302 have hdmem : d.val ∈ finiteSupport := preimage_bot_eq_finiteSupport ▸ d.property
303 exact congrArg Subtype.val hd ▸ hdmem
304
305 /-- This inclusion's induced map is exactly the common-coordinate equivalence. -/
306 theorem bottomToPaired_completion (a : ℕ → Bool) :
307 completionHom ⊥ (selectorLine (pairedSelector a)) (bottomToPaired a) =
308 { toAddMonoidHom := (commonCompletionEquiv ⊥ (selectorLine (pairedSelector a))).toAddMonoidHom
309 continuous_toFun := (commonCompletionEquiv ⊥ (selectorLine (pairedSelector a))).continuous_toFun } := by
310 symm
311 apply completionHom_unique
312 intro x
313 exact commonCompletionEquiv_inclusion ⊥ (selectorLine (pairedSelector a)) bot_le x
314
315 /-- The failure to reflect isomorphisms is categorical, on the precise enlarged
316 full source category, and witnessed by the actual inclusion D → G_a. -/
317 theorem boundaryCompletionFunctor_not_reflects_isomorphisms :
318 ¬ boundaryCompletionFunctor.ReflectsIsomorphisms := by
319 intro hreflect
320 let : boundaryCompletionFunctor.ReflectsIsomorphisms := hreflect
321 let a : ℕ → Bool := fun _ => false
322 let i : BoundaryGroupCategory := none
323 let j : BoundaryGroupCategory := some a
324 let f : i ⟶ j := InducedCategory.homMk (AddGrpCat.ofHom (bottomToPaired a))
325 let e := commonCompletionEquiv ⊥ (selectorLine (pairedSelector a))
326 let iso : boundaryCompletionFunctor.obj i ≅ boundaryCompletionFunctor.obj j := {
327 hom := ProfiniteAddGrp.ofHom {
328 toAddMonoidHom := e.toAddMonoidHom
329 continuous_toFun := e.continuous_toFun }
330 inv := ProfiniteAddGrp.ofHom {
331 toAddMonoidHom := e.symm.toAddMonoidHom
332 continuous_toFun := e.symm.continuous_toFun }
333 hom_inv_id := by ext x; exact e.symm_apply_apply x
334 inv_hom_id := by ext x; exact e.apply_symm_apply x
335 }
336 have hmap : boundaryCompletionFunctor.map f = iso.hom := by
337 apply ConcreteCategory.hom_ext
338 intro x
339 exact congrArg (fun h => h x) (bottomToPaired_completion a)
340 have : IsIso (boundaryCompletionFunctor.map f) := hmap.symm ▸ iso.isIso_hom
341 have : IsIso f := isIso_of_reflects_iso f boundaryCompletionFunctor
342 have : IsIso f.hom := (inducedFunctor
343 (fun k : Option (ℕ → Bool) => AddGrpCat.of (preimage (boundarySubspace k)))).map_isIso f
344 exact bottomToPaired_not_surjective a ((AddGrpCat.epi_iff_surjective f.hom).mp inferInstance)
345
346 end RealizationBoundaries
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: 831fb20150c9783023a6e2450cbbefd3bd5d997dff0b2804d549fe332e2a4020