@@ -34,7 +34,7 @@ if `f` is a monomorphism which is a quasi-isomorphism in degrees `≤ n₀` and
3434where `ι` is a monomorphism that is a quasi-isomorphism in degrees `≤ n₁`,
3535and `π` is an isomorphism in degrees `≤ n₀` that is also a degreewise
3636epimorphism with an injective kernel. The proof of `step` decomposes
37- a two separate lemmas `step₁` and `step₂` (TODO) : we first ensure that `ι`
37+ a two separate lemmas `step₁` and `step₂`: we first ensure that `ι`
3838induces a monomorphism in homology in degree `n₁`, and we proceed further
3939in `step₂`.
4040
@@ -197,10 +197,8 @@ instance : Mono (homologyMap (ι f n₁) n₁) := by
197197
198198end step₁
199199
200- -- This lemma and a few definitions above are made public only in order to please CI.
201- -- They will be made private again when the proofs of `cm5a_cof` and `cm5a` are added.
202200open step₁ in
203- public lemma step₁ [EnoughInjectives C] [Mono f] (n₀ n₁ : ℤ)
201+ lemma step₁ [EnoughInjectives C] [Mono f] (n₀ n₁ : ℤ)
204202 (hf : ∀ i ≤ n₀, QuasiIsoAt f i) (hn₁ : n₀ + 1 = n₁ := by lia) :
205203 ∃ (F : (cofFib f).FullSubcategory), quasiIsoLE n₀ F ∧ isIsoLE n₀ F ∧
206204 Mono (homologyMap F.obj.ι n₁) :=
@@ -210,13 +208,213 @@ public lemma step₁ [EnoughInjectives C] [Mono f] (n₀ n₁ : ℤ)
210208 fun i hi ↦ isIso_π_f K L n₁ i (by lia),
211209 inferInstance⟩
212210
213- proof_wanted step₂ [EnoughInjectives C] [Mono f] (n₀ n₁ : ℤ)
211+ namespace step₂
212+
213+ /-!
214+ This section provides the material in order to prove the lemma `step₂` below.
215+ Given a monomorphism `f : K ⟶ L` that is a quasi-isomorphism in degrees `< n`
216+ and which induces a monomorphism in homology in degree `n`, we construct
217+ a factorisation of `f` as `ι f n ≫ π f n = f` where
218+ `ι f n : K ⟶ mid f n` is a monomorphism which is a quasi-isomorphism
219+ in degrees `≤ n`, `π f n` is a degreewise epimorphism with an injective kernel
220+ which also induces isomorphisms in degrees `≤ n`.
221+ -/
222+
223+
224+ open HomComplex
225+
226+ variable [EnoughInjectives C] (n : ℤ)
227+
228+ /-- Given a morphism `f : K ⟶ L`, this is the single cochain complex in degree `n`
229+ which is given an injective object which contains `((cokernel f).truncGE n).X n`,
230+ i.e. the object in degree `n` of the canonical truncation `≥ n` of `cokernel f`. -/
231+ noncomputable abbrev S :=
232+ (single C (.up ℤ) n).obj (Injective.under (((cokernel f).truncGE n).X n))
233+
234+ /-- The morphism `(cokernel f).truncGE n ⟶ S f n` which in degree `n` is
235+ given by `Injective.ι _`. -/
236+ noncomputable def p : (cokernel f).truncGE n ⟶ S f n :=
237+ mkHomToSingle (Injective.ι _) (fun i hi ↦ by
238+ simp only [ComplexShape.up_Rel] at hi
239+ exact (isZero_of_isStrictlyGE _ n _).eq_of_src _ _)
240+
241+ instance : Mono ((p f n).f n) := by
242+ simp only [p, mkHomToSingle_f, mono_comp_iff_of_mono]
243+ infer_instance
244+
245+ /-- The obvious morphism `L ⟶ S f n`. -/
246+ noncomputable def α : L ⟶ S f n := cokernel.π f ≫ (cokernel f).πTruncGE n ≫ p f n
247+
248+ @ [reassoc (attr := simp)]
249+ lemma comp_α : f ≫ α f n = 0 := by simp [α]
250+
251+ @ [reassoc (attr := simp)]
252+ lemma comp_α_f (i : ℤ) : f.f i ≫ (α f n).f i = 0 := by simp [← comp_f]
253+
254+ /-- The intermediate object in the factorisation. -/
255+ noncomputable abbrev mid := mappingCocone (α f n)
256+
257+ /-- The first morphism of the factorisation. -/
258+ noncomputable abbrev ι : K ⟶ mid f n := mappingCocone.lift (α f n) f 0 (by simp)
259+
260+ /-- The second morphism of the factorisation. -/
261+ noncomputable abbrev π : mid f n ⟶ L := mappingCocone.fst (α f n)
262+
263+ @[reassoc]
264+ lemma ι_π : ι f n ≫ π f n = f := by simp
265+
266+ instance [Mono f] : Mono (ι f n) := mono_of_mono_fac (ι_π f n)
267+
268+ lemma degreewiseEpiWithInjectiveKernel_π :
269+ degreewiseEpiWithInjectiveKernel (π f n) := by
270+ intro i
271+ rw [epiWithInjectiveKernel_iff]
272+ exact ⟨_, inferInstance, (mappingCocone.inr (α f n)).1 .v (i - 1 ) i (by lia), by simp,
273+ ⟨{r := (mappingCocone.snd (α f n)).v _ _ (by lia)
274+ s := (mappingCocone.inl (α f n)).v _ _ (by lia)
275+ id := (add_comm _ _).trans (by simp [mappingCocone.id_X]) }⟩⟩
276+
277+ lemma isIso_π_f (i : ℤ) (hi : i ≤ n) : IsIso ((π f n).f i) := by
278+ refine ⟨(mappingCocone.inl (α f n)).v i i (add_zero i), ?_, by simp⟩
279+ simp [← mappingCocone.id_X (α f n) i (i - 1 ) (by lia),
280+ (isZero_single_obj_X _ _ _ _ (by lia)).eq_of_src
281+ ((mappingCocone.inr (α f n)).1 .v (i - 1 ) i (by lia)) 0 ]
282+
283+ section
284+
285+ attribute [local instance ] HasDerivedCategory.standard
286+
287+ lemma mono_homologyMap_π (q : ℤ) (hq : q ≤ n) : Mono (homologyMap (π f n) q) :=
288+ (CochainComplex.homologyMap_exact₁_of_distTriang _
289+ (DerivedCategory.mappingCocone_triangle_distinguished (α f n)) (q - 1 ) q (by lia)).mono_g
290+ ((ExactAt.isZero_homology (exactAt_single_obj _ _ _ _ (by lia))).eq_of_src _ _)
291+
292+ lemma epi_homologyMap_π (q : ℤ) (hq : q < n) : Epi (homologyMap (π f n) q) :=
293+ (CochainComplex.homologyMap_exact₂_of_distTriang _
294+ (DerivedCategory.mappingCocone_triangle_distinguished (α f n)) q).epi_f
295+ ((ExactAt.isZero_homology (exactAt_single_obj _ _ _ _ (by lia))).eq_of_tgt _ _)
296+
297+ end
298+
299+ lemma quasiIsoAt_π (q : ℤ) (hq : q < n) : QuasiIsoAt (π f n) q := by
300+ have := mono_homologyMap_π f n q (by lia)
301+ have := epi_homologyMap_π f n q hq
302+ rw [quasiIsoAt_iff_isIso_homologyMap]
303+ apply Balanced.isIso_of_mono_of_epi
304+
305+ /-- The (exact) short complex `K.homology n ⟶ L.homology n ⟶ (S f n).homology n`. -/
306+ @[simps]
307+ noncomputable def homologyShortComplex : ShortComplex C :=
308+ ShortComplex.mk (homologyMap f n) (homologyMap (α f n) n) (by
309+ rw [← homologyMap_comp, comp_α, homologyMap_zero])
310+
311+ instance [Mono (homologyMap f n)] :
312+ Mono (homologyShortComplex f n).f := by
313+ assumption
314+
315+ instance : Mono (homologyMap (p f n) n) := by
316+ have := (S f n).isIso_homologyπ (n - 1 ) n (by simp) (by simp)
317+ have : Mono ((truncGE (cokernel f) n).homologyπ n ≫ homologyMap (p f n) n) := by
318+ rw [homologyπ_naturality (p f n) n]
319+ infer_instance
320+ have := (truncGE (cokernel f) n).isIso_homologyπ (n - 1 ) n (by simp)
321+ ((isZero_of_isStrictlyGE _ n _ (by lia)).eq_of_src _ _)
322+ rw [← IsIso.inv_hom_id_assoc ((truncGE (cokernel f) n).homologyπ n) (homologyMap (p f n) n)]
323+ infer_instance
324+
325+ omit [EnoughInjectives C] in
326+ lemma shortExact [Mono f] : (ShortComplex.mk _ _ (cokernel.condition f)).ShortExact where
327+ exact := ShortComplex.exact_of_g_is_cokernel _ (cokernelIsCokernel f)
328+
329+ lemma exact_homologyShortComplex [Mono f] :
330+ (homologyShortComplex f n).Exact := by
331+ let T := ShortComplex.mk (homologyMap f n) (homologyMap (cokernel.π f) n)
332+ (by rw [← homologyMap_comp, cokernel.condition, homologyMap_zero])
333+ let φ : T ⟶ homologyShortComplex f n :=
334+ { τ₁ := 𝟙 _
335+ τ₂ := 𝟙 _
336+ τ₃ := homologyMap ((cokernel f).πTruncGE n ≫ p f n) n
337+ comm₂₃ := by
338+ dsimp
339+ rw [Category.id_comp, ← homologyMap_comp, α] }
340+ obtain ⟨_, _, _⟩ : Mono φ.τ₃ ∧ IsIso φ.τ₂ ∧ Epi φ.τ₁ := by
341+ dsimp [φ]
342+ rw [homologyMap_comp]
343+ exact ⟨inferInstance, inferInstance, inferInstance⟩
344+ rw [← ShortComplex.exact_iff_of_epi_of_isIso_of_mono φ]
345+ exact (shortExact f).homology_exact₂ n
346+
347+ variable (hf : ∀ i < n, QuasiIsoAt f i)
348+
349+ include hf
350+
351+ omit [EnoughInjectives C] in
352+ lemma isGE_cokernel [Mono f] [Mono (homologyMap f n)] : (cokernel f).IsGE n := by
353+ rw [isGE_iff]
354+ intro i hi
355+ rw [exactAt_iff_isZero_homology]
356+ refine ((shortExact f).homology_exact₃ i (i + 1 ) (by simp)).isZero_X₂ ?_ ?_
357+ · have := hf i hi
358+ rw [← ((shortExact f).homology_exact₂ i).epi_f_iff]
359+ infer_instance
360+ · rw [← ((shortExact f).homology_exact₁ i (i + 1 ) (by simp)).mono_g_iff]
361+ by_cases hi' : i + 1 < n
362+ · have := hf (i + 1 ) (by lia)
363+ infer_instance
364+ · obtain rfl : n = i + 1 := by lia
365+ infer_instance
366+
367+ omit [EnoughInjectives C] in
368+ lemma quasiIso_truncGEπ [Mono f] [Mono (homologyMap f n)] :
369+ QuasiIso ((cokernel f).πTruncGE n) := by
370+ rw [quasiIso_πTruncGE_iff]
371+ exact isGE_cokernel f n hf
372+
373+ attribute [local instance ] HasDerivedCategory.standard in
374+ lemma quasiIsoAt_ι [Mono f] [Mono (homologyMap f n)] (q : ℤ) (hq : q ≤ n) :
375+ QuasiIsoAt (ι f n) q := by
376+ obtain hq | rfl := hq.lt_or_eq'
377+ · have := quasiIsoAt_π f n q hq
378+ rw [← quasiIsoAt_iff_comp_right _ (π f n), mappingCocone.lift_fst]
379+ exact hf q hq
380+ · have := mono_homologyMap_π f n n (by lia)
381+ have : Mono (homologyMap (mappingCocone.triangle (α f n)).mor₁ n) :=
382+ by dsimp; infer_instance
383+ have h₁ := (exact_homologyShortComplex f n).fIsKernel
384+ have h₂ := (CochainComplex.homologyMap_exact₂_of_distTriang _
385+ (DerivedCategory.mappingCocone_triangle_distinguished (α f n)) n).fIsKernel
386+ have : homologyMap (ι f n) n = (IsLimit.conePointUniqueUpToIso h₁ h₂).hom := by
387+ simp [← cancel_mono (homologyMap (π f n) n),
388+ dsimp% IsLimit.conePointUniqueUpToIso_hom_comp h₁ h₂ .zero,
389+ ← homologyMap_comp, mappingCocone.lift_fst]
390+ rw [quasiIsoAt_iff_isIso_homologyMap, this]
391+ infer_instance
392+
393+ end step₂
394+
395+ -- This lemma and a few definitions above are made public only in order to please CI.
396+ -- They will be made private again when the proofs of `cm5a_cof` and `cm5a` are added.
397+ open step₂ in
398+ lemma step₂ [EnoughInjectives C] [Mono f] (n₀ n₁ : ℤ)
214399 (hf : ∀ i ≤ n₀, QuasiIsoAt f i) [Mono (homologyMap f n₁)] (hn₁ : n₀ + 1 = n₁ := by lia) :
215- ∃ (F : (cofFib f).FullSubcategory), quasiIsoLE n₁ F ∧ isIsoLE n₁ F
400+ ∃ (F : (cofFib f).FullSubcategory), quasiIsoLE n₁ F ∧ isIsoLE n₁ F :=
401+ ⟨.mk { mid := mid f n₁, ι := ι f n₁, π := π f n₁}
402+ ⟨inferInstance, degreewiseEpiWithInjectiveKernel_π f n₁⟩,
403+ fun i hi ↦ quasiIsoAt_ι f n₁ (fun j hj ↦ hf j (by lia)) _ hi,
404+ isIso_π_f f n₁⟩
216405
217- proof_wanted step [EnoughInjectives C] [Mono f] (n₀ n₁ : ℤ) (hn₁ : n₀ + 1 = n₁)
406+ public lemma step [EnoughInjectives C] [Mono f] (n₀ n₁ : ℤ) (hn₁ : n₀ + 1 = n₁)
218407 (hf : ∀ i ≤ n₀, QuasiIsoAt f i) (hn₁ : n₀ + 1 = n₁ := by lia) :
219- ∃ (F : (cofFib f).FullSubcategory), quasiIsoLE n₁ F ∧ isIsoLE n₀ F
408+ ∃ (F : (cofFib f).FullSubcategory), quasiIsoLE n₁ F ∧ isIsoLE n₀ F := by
409+ obtain ⟨F₁, h₁, h₂, _⟩ := step₁ f n₀ n₁ hf
410+ obtain ⟨F₂, h₃, h₄⟩ := step₂ F₁.obj.ι n₀ n₁ h₁
411+ refine ⟨.mk { mid := F₂.obj.mid, ι := F₂.obj.ι, π := F₂.obj.π ≫ F₁.obj.π }
412+ ⟨by dsimp; infer_instance, MorphismProperty.comp_mem _ _ _ F₂.property.2 F₁.property.2 ⟩,
413+ ⟨h₃, fun i hi ↦ ?_⟩⟩
414+ have := h₂ i hi
415+ have := h₄ i (by lia)
416+ dsimp
417+ infer_instance
220418
221419end cm5a_cof
222420
0 commit comments