@@ -70,6 +70,10 @@ variable {Z : LightProfinite} {f : X ⟶ Z} {g : Y ⟶ Z}
7070
7171end
7272
73+ /- Given a map `π : T → S ⨯ Option X` and maps `σ : Option X → S → T`,
74+ `fibresOfOption` gives the set containing union of the images of `σ (Some x)`
75+ for all `x : X`, together with the fibre over `None : Option X` of the
76+ composition `T → S ⨯ Option X → Option X `. -/
7377def fibresOfOption {S T X : Type *} (π : T → S × Option X) (σ : Option X → S → T) : Set T :=
7478 {t : T | (π t).2 = none} ∪ (⋃ (x : X), Set.range (σ x))
7579
@@ -155,6 +159,11 @@ lemma smartCoverToFun_surjective {S T X : Type*} (π : T → S × Option X) (σ
155159 · obtain ⟨n, hn⟩ := Option.ne_none_iff_exists'.mp h
156160 exact ⟨Sum.inl ⟨σ n (π t).1 , by grind⟩, by grind⟩
157161
162+ /- This object is used to show that a certain map `T ⟶ X` descends
163+ to a map `S ⊗ N∪{∞} → X`. Because epimorphisms in `LightProfinite`
164+ are effective, it does so if the two maps `pullback π π → T → S ⊗ N∪{∞}`
165+ are equal. This can be checked by precomposing with an epimorphism,
166+ which is given by this morphism. -/
158167def smartCoverNew {S T : LightProfinite} (π : T ⟶ S ⊗ ℕ∪{∞}) :
159168 (of _ (T ⊕ (pullback (fibre_incl ∞ (π ≫ snd S ℕ∪{∞}) ≫ π)
160169 (fibre_incl ∞ (π ≫ snd S ℕ∪{∞}) ≫ π)))) ⟶ pullback π π := ⟨{
@@ -165,6 +174,18 @@ def sectionOfFibreIncl {S T X : Type*} (π : T → S × Option X) (σ : Option X
165174 (hσ' : ∀ (x : Option X) (s : S), (π (σ x s)).2 = x) : S → (Prod.snd ∘ π_r π σ) ⁻¹' {none} :=
166175 fun s ↦ ⟨⟨σ none s, by grind⟩, by grind⟩
167176
177+ /- Given a map `π : T → S × OnePoint X`, define a new space `S'` and a map
178+ `y : S' ⟶ S` which has the property that in the Cartesian diagram
179+ ``
180+ T' -> S' ⨯ OnePoint X
181+ | |
182+ v v
183+ T -> S ⨯ OnePoint X
184+ ``
185+ there are maps `σ x : S' ⟶ T'` for each `x : OnePoint X` such that
186+ `S' ⨯ OnePoint X ⟶ S' ⟶ T' ⟶ S' ⨯ OnePoint X` is the identity for
187+ all points `⟨s, x⟩ : S' ⨯ OnePoint X`.
188+ -/
168189def S' {S T X : Type *} (π : T → S × OnePoint X) :
169190 Set (∀ x : OnePoint X, (Prod.snd ∘ π) ⁻¹' {x}) :=
170191 {x | ∀ n m, (π (x n).val).1 = (π (x m).val).1 }
@@ -205,9 +226,16 @@ lemma S'_compactSpace {S T X : Type*} [TopologicalSpace S] [T2Space S] [Topologi
205226 refine (isClosed_iInter fun n ↦ isClosed_iInter fun m ↦ isClosed_eq ?_ ?_).isCompact
206227 all_goals fun_prop
207228
229+ /- Given a map `π : T ⟶ S ⊗ ℕ∪{∞}` and map `g : (free R) T.toCondensed ⟶ X`,
230+ the corresponding map of free condensed R modules, construct a cocone
231+ for the parallel pair of both projections of the pullback, which will
232+ descend down to a map `S ⊗ ℕ∪{∞} ⟶ X` by the universal property of
233+ effective epimorphisms. The cocone is constructed by modifying `g` at the
234+ at the fibre over `∞` using the retraction `r_inf`.
235+ -/
208236open Limits in
209237@ [simps! pt ι_app]
210- noncomputable def c {X : LightCondMod R} {S T : LightProfinite} (π : T ⟶ ( S ⊗ ℕ∪{∞}) )
238+ noncomputable def c {X : LightCondMod R} {S T : LightProfinite} (π : T ⟶ S ⊗ ℕ∪{∞})
211239 [Epi ((lightProfiniteToLightCondSet ⋙ (free R)).map <| smartCoverNew π)]
212240 (g : ((lightProfiniteToLightCondSet ⋙ free R).obj T) ⟶ X)
213241 (r_inf : T ⟶ (fibre ∞ (π ≫ snd _ _))) (σ : S ⟶ (fibre ∞ (π ≫ snd _ _)))
@@ -242,11 +270,26 @@ noncomputable def c {X : LightCondMod R} {S T : LightProfinite} (π : T ⟶ (S
242270 simp only [← assoc, hr, id_comp, sub_self, zero_add]
243271 simp [pullback.condition]
244272
273+ /- Given a surjective map of light profinite spaces `T ⟶ S ⊗ ℕ∪{∞}`,
274+ construct a (non-cartesian) commutative square
275+ ```
276+ T' -> S' ⨯ OnePoint X
277+ | |
278+ v v
279+ T -> S ⨯ OnePoint X
280+ ```
281+ where every map is epi. The map
282+ `(π ≫ Prod.snd) ⁻¹' ∞ ⟶ T' ⟶ S' ⨯ ℕ∪{∞}` is split epi and `smartCoverNew`
283+ is epi. The argument of (TODO cite) is modified here and `S'` is constructed
284+ in one step by immediate ly taking `S'` to be the pullback of all the fibres.
285+ instead of first over `ℕ` and then taking the fibre at `∞`. -/
245286lemma aux {S T : LightProfinite} (π : T ⟶ S ⊗ ℕ∪{∞}) [Epi π] :
246287 ∃ (S' T' : LightProfinite) (y' : S' ⟶ S) (π' : T' ⟶ S' ⊗ ℕ∪{∞}) (g' : T' ⟶ T),
247288 Epi π' ∧ Epi y' ∧ π' ≫ (y' ▷ ℕ∪{∞}) = g' ≫ π ∧
248289 IsSplitEpi (fibre_incl ∞ (π' ≫ snd S' ℕ∪{∞}) ≫ π' ≫ fst S' ℕ∪{∞}) ∧
249290 Epi (smartCoverNew π') := by
291+ -- Construct the space `S'` space which has functions `σ'` we can plug into
292+ -- `fibresOfOption`.
250293 have := S'_compactSpace π (by fun_prop)
251294 let S'π (n : ℕ∪{∞}) : LightProfinite.of (S' π) ⟶ fibre n (π ≫ snd _ _) :=
252295 ⟨{ toFun x := x.val n, continuous_toFun := by refine (continuous_apply _).comp ?_; fun_prop }⟩
@@ -257,6 +300,9 @@ lemma aux {S T : LightProfinite} (π : T ⟶ S ⊗ ℕ∪{∞}) [Epi π] :
257300 apply CartesianMonoidalCategory.hom_ext<;> ext x; exacts [x.prop n ∞, (x.val n).prop]
258301 have hσ (x : ℕ∪{∞}) (s : LightProfinite.of (S' π)) : (π' (σ' x s)).1 = s := rfl
259302 have hσ' (x : ℕ∪{∞}) (s : LightProfinite.of (S' π)) : (π' (σ' x s)).2 = x := rfl
303+ -- The space `T'` is given by the union of the images of the `σ'` together
304+ -- with the whole fibre over `∞`. Here `smartCoverNew` is an epimorphism
305+ -- because the projection is an isomorphism away from the fibre at `∞`.
260306 have : CompactSpace (fibresOfOption π' σ') := isCompact_iff_compactSpace.mp
261307 (fibresOfOption_closed π' (by fun_prop) σ' (by fun_prop) hσ').isCompact
262308 refine ⟨LightProfinite.of (S' π), LightProfinite.of (fibresOfOption π' σ'), y',
@@ -286,23 +332,36 @@ theorem LightCondensed.internallyProjective_free_natUnionInfty :
286332 intro X Y p hp S f
287333 obtain ⟨T, π, g, hπ, comm⟩ := comm_sq R p f
288334 obtain ⟨S', T', y', π', g', hπ', hy', comp, ⟨⟨split⟩⟩, epi⟩ := aux π
289- refine ⟨S', y', ?_⟩
335+ refine ⟨S', y', (LightProfinite.epi_iff_surjective _).mp inferInstance, ?_⟩
336+ -- There is a commutative square
337+ -- T' -> S' ⊗ ℕ∪{∞}
338+ -- | |
339+ -- v v
340+ -- X -> Y
341+ -- and the goal is a diagonal map such that the lower right triangle
342+ -- commutes. The diagonal map is obtained by using the cone `c` and the fact
343+ -- that T' -> S' ⊗ N∪{∞} is an effective epimorphism.
290344 by_cases hS' : Nonempty S'
291- · have : Mono (fibre_incl ∞ (π' ≫ snd _ _)) := by
345+ · -- First construct a splitting of the fibre inclusion using injectivity
346+ -- of light profinite sets.
347+ have : Mono (fibre_incl ∞ (π' ≫ snd _ _)) := by
292348 rw [CompHausLike.mono_iff_injective]
293349 exact Subtype.val_injective
294350 have : Nonempty (fibre ∞ (π' ≫ snd _ _)) := by
295351 obtain ⟨x, hx⟩ := (.comp ((fun y ↦ ⟨(Nonempty.some inferInstance, y), rfl⟩))
296352 ((LightProfinite.epi_iff_surjective _).mp hπ') : ((snd S' ℕ∪{∞}) ∘ π').Surjective) ∞
297353 exact ⟨x, by simpa using hx⟩
298354 obtain ⟨r_inf, hr⟩ := Injective.factors (𝟙 _) (fibre_incl ∞ (π' ≫ snd _ _))
355+ -- Use the effective epimorphism to descend the map from `T'` to `S' ⊗ ℕ∪{∞}`
299356 have hc := Limits.isColimitOfPreserves (free R) (explicitRegularIsColimit π')
300- refine ⟨(LightProfinite.epi_iff_surjective _).mp inferInstance,
301- hc.desc (c R π' ((lightProfiniteToLightCondSet ⋙ (free R)).map g' ≫ g)
357+ refine ⟨ hc.desc (c R π' ((lightProfiniteToLightCondSet ⋙ (free R)).map g' ≫ g)
302358 r_inf split.section_ hr), ?_⟩
303359 rw [← cancel_epi ((lightProfiniteToLightCondSet ⋙ (free R)).map π'),
304360 ← Functor.comp_map, ← map_comp_assoc]
305361 change _ = (((free R).mapCocone _).ι.app .one ≫ hc.desc (c R π' _ r_inf split.section_ hr)) ≫ p
362+ -- Because the top in the square above is epic, proving that the lower
363+ -- triangle commutes is equivalent to proving that the upper triangle
364+ -- commutes, which is true by the universal property of the colimit.
306365 rw [hc.fac]
307366 -- simp? [← comm]:
308367 simp only [comp_obj, Limits.parallelPair_obj_one, Functor.comp_map, Functor.map_comp,
@@ -319,5 +378,5 @@ theorem LightCondensed.internallyProjective_free_natUnionInfty :
319378 · have h : IsEmpty (S' ⊗ ℕ∪{∞}) := isEmpty_prod.mpr <| Or.inl <| by simpa using hS'
320379 have : IsIso π' := ⟨ConcreteCategory.ofHom ⟨(h.elim ·), continuous_of_const <| by aesop⟩,
321380 by ext x; exact h.elim (π' x), by ext x; all_goals exact h.elim x⟩
322- exact ⟨(LightProfinite.epi_iff_surjective _).mp inferInstance,
381+ exact ⟨
323382 (lightProfiniteToLightCondSet ⋙ (free R)).map (inv π' ≫ g') ≫ g, by grind⟩
0 commit comments