Realization Boundaries · Lean source
ProfiniteCompletion.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)
RealizationBoundaries/ProfiniteCompletion.lean174 lines
Original source path
RealizationBoundaries/ProfiniteCompletion.leanSkip declarations and read code
1 import RealizationBoundaries.FiniteTargets
2 import Mathlib.Topology.Algebra.Category.ProfiniteGrp.Completion
3
4 /-!
5 # The actual profinite-completion identification
6
7 The completion here is Mathlib's limit over ALL finite-index normal additive
8 subgroups. It is not a newly named copy of the desired product. Both comparison
9 maps are constructed and their inverse laws are proved using dense ranges.
10 -/
11 set_option autoImplicit false
12 set_option backward.isDefEq.respectTransparency false
13 noncomputable section
14 open CategoryTheory
15 namespace RealizationBoundaries
16
17 abbrev CanonicalCompletion (W : Submodule ℚ TailSpace) :=
18 ProfiniteAddGrp.ProfiniteCompletion.completion (AddGrpCat.of (preimage W))
19
20 abbrev CompletionIndex (W : Submodule ℚ TailSpace) :=
21 FiniteIndexNormalAddSubgroup (preimage W)
22
23 def quotientProjection (W : Submodule ℚ TailSpace) (K : CompletionIndex W) :
24 preimage W →+ (preimage W ⧸ K.toAddSubgroup) := QuotientAddGroup.mk' K.toAddSubgroup
25
26 def quotientTransition (W : Submodule ℚ TailSpace) {K L : CompletionIndex W} (h : K ≤ L) :
27 (preimage W ⧸ K.toAddSubgroup) →+ (preimage W ⧸ L.toAddSubgroup) :=
28 QuotientAddGroup.map _ _ (AddMonoidHom.id _) h
29
30 @[simp] theorem quotientTransition_projection (W : Submodule ℚ TailSpace)
31 {K L : CompletionIndex W} (h : K ≤ L) :
32 (quotientTransition W h).comp (quotientProjection W K) = quotientProjection W L := by
33 ext x
34 rfl
35
36 /-- Assemble the extended quotient maps into a point of the genuine inverse limit. -/
37 def ambientToCompletion (W : Submodule ℚ TailSpace) : Ambient →+ CanonicalCompletion W where
38 toFun x := ⟨fun K => finiteTargetExtension W _ (quotientProjection W K) x, by
39 intro K L f
40 change quotientTransition W f.le
41 (finiteTargetExtension W _ (quotientProjection W K) x) =
42 finiteTargetExtension W _ (quotientProjection W L) x
43 have h := finiteTargetExtension_natural W _ _
44 (quotientProjection W K) (quotientTransition W f.le)
45 rw [quotientTransition_projection] at h
46 exact (DFunLike.congr_fun h x).symm⟩
47 map_zero' := by
48 apply Subtype.ext
49 funext K
50 exact map_zero (finiteTargetExtension W _ (quotientProjection W K))
51 map_add' x y := by
52 apply Subtype.ext
53 funext K
54 exact map_add (finiteTargetExtension W _ (quotientProjection W K)) x y
55
56 theorem ambientToCompletion_continuous (W : Submodule ℚ TailSpace) :
57 Continuous (ambientToCompletion W) := by
58 apply continuous_induced_rng.mpr
59 apply continuous_pi
60 intro K
61 let : TopologicalSpace (preimage W ⧸ K.toAddSubgroup) := ⊥
62 exact finiteTargetExtension_continuous W _ (quotientProjection W K)
63
64 @[simp] theorem ambientToCompletion_subtype (W : Submodule ℚ TailSpace) (x : preimage W) :
65 ambientToCompletion W x.val =
66 ProfiniteAddGrp.ProfiniteCompletion.etaFn (AddGrpCat.of (preimage W)) x := by
67 apply Subtype.ext
68 funext K
69 exact finiteTargetExtension_subtype W _ (quotientProjection W K) x
70
71 /-- The individual prime coordinate, as a homomorphism on the actual dense subgroup. -/
72 def primeCoordinate (W : Submodule ℚ TailSpace) (p : Prime) : preimage W →+ Coordinate p where
73 toFun x := x.val p
74 map_zero' := rfl
75 map_add' _ _ := rfl
76
77 /-- Its kernel is an actual finite-index normal subgroup in the completion diagram. -/
78 def primeCoordinateIndex (W : Submodule ℚ TailSpace) (p : Prime) : CompletionIndex W :=
79 FiniteIndexNormalAddSubgroup.ofAddSubgroup (primeCoordinate W p).ker
80
81 /-- Read one prime coordinate from Mathlib's actual profinite completion. -/
82 def completionCoordinate (W : Submodule ℚ TailSpace) (p : Prime) :
83 CanonicalCompletion W →+ Coordinate p where
84 toFun x := QuotientAddGroup.lift (primeCoordinate W p).ker (primeCoordinate W p) le_rfl
85 (x.val (primeCoordinateIndex W p))
86 map_zero' := map_zero _
87 map_add' x y := map_add _ (x.val (primeCoordinateIndex W p))
88 (y.val (primeCoordinateIndex W p))
89
90 theorem completionCoordinate_continuous (W : Submodule ℚ TailSpace) (p : Prime) :
91 Continuous (completionCoordinate W p) := by
92 let : TopologicalSpace (preimage W ⧸ (primeCoordinate W p).ker) := ⊥
93 let : DiscreteTopology (preimage W ⧸ (primeCoordinate W p).ker) := ⟨rfl⟩
94 exact (continuous_of_discreteTopology : Continuous
95 (QuotientAddGroup.lift (primeCoordinate W p).ker (primeCoordinate W p) le_rfl)).comp
96 ((continuous_apply (primeCoordinateIndex W p)).comp continuous_subtype_val)
97
98 @[simp] theorem completionCoordinate_eta (W : Submodule ℚ TailSpace) (p : Prime)
99 (x : preimage W) : completionCoordinate W p
100 (ProfiniteAddGrp.ProfiniteCompletion.etaFn (AddGrpCat.of (preimage W)) x) = x.val p := rfl
101
102 /-- The comparison map from the actual profinite completion to the fixed product. -/
103 def completionToAmbient (W : Submodule ℚ TailSpace) : CanonicalCompletion W →+ Ambient where
104 toFun x p := completionCoordinate W p x
105 map_zero' := by funext p; exact map_zero (completionCoordinate W p)
106 map_add' x y := by funext p; exact map_add (completionCoordinate W p) x y
107
108 theorem completionToAmbient_continuous (W : Submodule ℚ TailSpace) :
109 Continuous (completionToAmbient W) :=
110 continuous_pi fun p => completionCoordinate_continuous W p
111
112 @[simp] theorem completionToAmbient_eta (W : Submodule ℚ TailSpace) (x : preimage W) :
113 completionToAmbient W
114 (ProfiniteAddGrp.ProfiniteCompletion.etaFn (AddGrpCat.of (preimage W)) x) = x.val := rfl
115
116 /-- The comparison is an inverse on the entire ambient product, not just on H_W. -/
117 theorem completionToAmbient_ambientToCompletion (W : Submodule ℚ TailSpace) (x : Ambient) :
118 completionToAmbient W (ambientToCompletion W x) = x := by
119 have heq : (fun y => completionToAmbient W (ambientToCompletion W y)) = id := by
120 apply (preimage_denseRange W).equalizer
121 ((completionToAmbient_continuous W).comp (ambientToCompletion_continuous W)) continuous_id
122 funext y
123 simp
124 exact congrFun heq x
125
126 /-- The reverse inverse law uses the dense canonical map into Mathlib's completion. -/
127 theorem ambientToCompletion_completionToAmbient (W : Submodule ℚ TailSpace)
128 (x : CanonicalCompletion W) : ambientToCompletion W (completionToAmbient W x) = x := by
129 have heq : (fun y => ambientToCompletion W (completionToAmbient W y)) = id := by
130 apply (ProfiniteAddGrp.ProfiniteCompletion.denseRange (AddGrpCat.of (preimage W))).equalizer
131 ((ambientToCompletion_continuous W).comp (completionToAmbient_continuous W)) continuous_id
132 funext y
133 simp
134 exact congrFun heq x
135
136 /-- Monograph completion theorem: the canonical profinite completion is topologically
137 and additively isomorphic to P, with the canonical embedding respected. -/
138 def profiniteCompletionEquiv (W : Submodule ℚ TailSpace) : CanonicalCompletion W ≃ₜ+ Ambient where
139 toFun := completionToAmbient W
140 invFun := ambientToCompletion W
141 left_inv := ambientToCompletion_completionToAmbient W
142 right_inv := completionToAmbient_ambientToCompletion W
143 map_add' := map_add (completionToAmbient W)
144 continuous_toFun := completionToAmbient_continuous W
145 continuous_invFun := ambientToCompletion_continuous W
146
147 @[simp] theorem profiniteCompletionEquiv_eta (W : Submodule ℚ TailSpace) (x : preimage W) :
148 profiniteCompletionEquiv W
149 (ProfiniteAddGrp.ProfiniteCompletion.etaFn (AddGrpCat.of (preimage W)) x) = x.val := rfl
150
151 /-- The canonical map is a topological embedding for the induced product topology. -/
152 theorem completion_eta_isEmbedding (W : Submodule ℚ TailSpace) :
153 Topology.IsEmbedding (ProfiniteAddGrp.ProfiniteCompletion.etaFn
154 (AddGrpCat.of (preimage W))) := by
155 have heq : ProfiniteAddGrp.ProfiniteCompletion.etaFn (AddGrpCat.of (preimage W)) =
156 (profiniteCompletionEquiv W).symm ∘ (fun x : preimage W => x.val) := by
157 funext x
158 exact (ambientToCompletion_subtype W x).symm
159 rw [heq]
160 exact (profiniteCompletionEquiv W).symm.toHomeomorph.isEmbedding.comp
161 Topology.IsEmbedding.subtypeVal
162
163 /-- The full profinite topology is the initial topology of the canonical map into
164 the limit of all finite quotient groups. -/
165 @[instance_reducible] def fullProfiniteTopology (W : Submodule ℚ TailSpace) : TopologicalSpace (preimage W) :=
166 TopologicalSpace.induced (ProfiniteAddGrp.ProfiniteCompletion.etaFn
167 (AddGrpCat.of (preimage W))) inferInstance
168
169 /-- No topology from the finite quotients is missing from the induced product topology. -/
170 theorem fullProfiniteTopology_eq (W : Submodule ℚ TailSpace) :
171 fullProfiniteTopology W = (inferInstance : TopologicalSpace (preimage W)) :=
172 (completion_eta_isEmbedding W).isInducing.eq_induced.symm
173
174 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: 5333f11109f1a309db0b9749d017221e9839c902dd29fb56c307ab497863482c