Skip to content

Commit 5ab3947

Browse files
authored
Merge pull request #8 from jonasvanderschaaf/master
Add comments to Proj.lean
2 parents de8a2f6 + c7d404e commit 5ab3947

1 file changed

Lines changed: 65 additions & 6 deletions

File tree

LeanCondensed/Projects/Proj.lean

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ variable {Z : LightProfinite} {f : X ⟶ Z} {g : Y ⟶ Z}
7070

7171
end
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 `. -/
7377
def 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. -/
158167
def 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+
-/
168189
def 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+
-/
208236
open 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 `∞`. -/
245286
lemma 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

Comments
 (0)