Skip to content

Commit 7948ce3

Browse files
committed
feat(AlgebraicTopology): transport a model category structure by an equivalence (#39032)
In a future PR, this will be used in order to dualise the model category structure from #38850 in order to get the projective model category structure on bounded above cochain complexes in a category that has enough projectives.
1 parent e336692 commit 7948ce3

4 files changed

Lines changed: 124 additions & 1 deletion

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1489,6 +1489,7 @@ public import Mathlib.AlgebraicTopology.ModelCategory.Opposite
14891489
public import Mathlib.AlgebraicTopology.ModelCategory.Over
14901490
public import Mathlib.AlgebraicTopology.ModelCategory.PathObject
14911491
public import Mathlib.AlgebraicTopology.ModelCategory.RightHomotopy
1492+
public import Mathlib.AlgebraicTopology.ModelCategory.Transport
14921493
public import Mathlib.AlgebraicTopology.MooreComplex
14931494
public import Mathlib.AlgebraicTopology.Quasicategory.Basic
14941495
public import Mathlib.AlgebraicTopology.Quasicategory.Nerve
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/-
2+
Copyright (c) 2026 Joël Riou. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Joël Riou
5+
-/
6+
module
7+
8+
public import Mathlib.AlgebraicTopology.ModelCategory.Basic
9+
public import Mathlib.CategoryTheory.Adjunction.Limits
10+
11+
/-!
12+
# Transport a model category via an equivalence
13+
14+
Given an equivalence of categories `e : C ≌ D`, we transport
15+
a model category structure on `D` in order to obtain a model
16+
category structure on `C`. More precisely, we assume
17+
that `C` has been equipped with notions of cofibrations, fibrations
18+
and weak equivalences and that these properties of morphisms
19+
are the inverse images of the corresponding properties of
20+
morphisms by the functor `e.functor : C ⥤ D`. Under these
21+
assumptions, we show that the model category axioms for `C`
22+
hold if they hold for `D`.
23+
24+
-/
25+
26+
@[expose] public section
27+
28+
namespace HomotopicalAlgebra
29+
30+
open CategoryTheory Limits
31+
32+
/-- Transport of a model category structure on a category `D` via an equivalence of
33+
categories `e : C ≌ D`. We assume that the category `C` is already endowed
34+
with a `CategoryWithFibrations` instance (and similarly for cofibrations and weak
35+
equivalences), and that the three properties of morphisms (fibrations, cofibrations,
36+
weak equivalences) in `C` coincide with the inverse images by `e.functor : C ⥤ D`
37+
of the corresponding properties of morphisms in `D`. -/
38+
@[implicit_reducible]
39+
def ModelCategory.transport
40+
{C D : Type*} [Category* C] [Category* D] [ModelCategory D]
41+
[CategoryWithCofibrations C] [CategoryWithFibrations C]
42+
[CategoryWithWeakEquivalences C] (e : C ≌ D)
43+
(h₁ : cofibrations C = (cofibrations D).inverseImage e.functor)
44+
(h₂ : fibrations C = (fibrations D).inverseImage e.functor)
45+
(h₃ : weakEquivalences C = (weakEquivalences D).inverseImage e.functor) :
46+
ModelCategory C := by
47+
have h₁' : trivialCofibrations C = (trivialCofibrations D).inverseImage e.functor := by
48+
simp [trivialCofibrations, h₁, h₃]
49+
have h₂' : trivialFibrations C = (trivialFibrations D).inverseImage e.functor := by
50+
simp [trivialFibrations, h₂, h₃]
51+
have {X Y : C} (f : X ⟶ Y) [hf : Cofibration f] : Cofibration (e.functor.map f) := by
52+
simpa [cofibration_iff, h₁] using hf
53+
have {X Y : C} (f : X ⟶ Y) [hf : Fibration f] : Fibration (e.functor.map f) := by
54+
simpa [fibration_iff, h₂] using hf
55+
have {X Y : C} (f : X ⟶ Y) [hf : WeakEquivalence f] : WeakEquivalence (e.functor.map f) := by
56+
simpa [weakEquivalence_iff, h₃] using hf
57+
exact {
58+
cm1a := ⟨fun _ _ _ ↦ Adjunction.hasLimitsOfShape_of_equivalence e.functor⟩
59+
cm1b := ⟨fun _ _ _ ↦ Adjunction.hasColimitsOfShape_of_equivalence e.functor⟩
60+
cm2 := by rw [h₃]; infer_instance
61+
cm3a := by rw [h₃]; infer_instance
62+
cm3b := by rw [h₂]; infer_instance
63+
cm3c := by rw [h₁]; infer_instance
64+
cm4a _ _ _ _ _ := by
65+
rw [← e.functor.hasLiftingProperty_iff_of_isEquivalence]
66+
infer_instance
67+
cm4b _ _ _ _ _ := by
68+
rw [← e.functor.hasLiftingProperty_iff_of_isEquivalence]
69+
infer_instance
70+
cm5a := by rw [h₁', h₂]; infer_instance
71+
cm5b := by rw [h₁, h₂']; infer_instance }
72+
73+
end HomotopicalAlgebra

Mathlib/CategoryTheory/MorphismProperty/Factorization.lean

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ namespace CategoryTheory
3939

4040
namespace MorphismProperty
4141

42-
variable {C : Type*} [Category* C] (W₁ W₂ : MorphismProperty C)
42+
variable {C D : Type*} [Category* C] [Category* D] (W₁ W₂ : MorphismProperty C)
4343

4444
/-- Given two classes of morphisms `W₁` and `W₂` on a category `C`, this is
4545
the data of the factorization of a morphism `f : X ⟶ Y` as `i ≫ p` with
@@ -245,6 +245,31 @@ instance [HasFunctorialFactorization W₁ W₂] (J : Type*) [Category* J] :
245245
HasFunctorialFactorization (W₁.functorCategory J) (W₂.functorCategory J) :=
246246
⟨⟨(functorialFactorizationData W₁ W₂).functorCategory J⟩⟩
247247

248+
variable {W₁ W₂} in
249+
/-- The term in `MapFactorizationData (W₁.inverseImage F) (W₂.inverseImage F) f`
250+
deduced from `h : MapFactorizationData W₁ W₂ (F.map f)` when `F` is an equivalence
251+
of categories and both `W₁` and `W₂` respect isomorphisms. -/
252+
noncomputable def MapFactorizationData.ofIsEquivalence {F : D ⥤ C}
253+
[F.IsEquivalence] [W₁.RespectsIso] [W₂.RespectsIso]
254+
{X Y : D} {f : X ⟶ Y} (h : MapFactorizationData W₁ W₂ (F.map f)) :
255+
MapFactorizationData (W₁.inverseImage F) (W₂.inverseImage F) f where
256+
Z := F.objPreimage h.Z
257+
i := F.preimage (h.i ≫ (F.objObjPreimageIso h.Z).inv)
258+
p := F.preimage ((F.objObjPreimageIso h.Z).hom ≫ h.p)
259+
hi := by
260+
refine (W₁.arrow_mk_iso_iff ?_).1 h.hi
261+
exact Arrow.isoMk (Iso.refl _) (F.objObjPreimageIso h.Z).symm
262+
hp := by
263+
refine (W₂.arrow_mk_iso_iff ?_).1 h.hp
264+
exact Arrow.isoMk (F.objObjPreimageIso h.Z).symm (Iso.refl _)
265+
fac := F.map_injective (by simp)
266+
267+
instance (F : D ⥤ C) [F.IsEquivalence]
268+
[W₁.RespectsIso] [W₂.RespectsIso] [HasFactorization W₁ W₂] :
269+
HasFactorization (W₁.inverseImage F) (W₂.inverseImage F) where
270+
nonempty_mapFactorizationData f :=
271+
⟨(factorizationData W₁ W₂ (F.map f)).ofIsEquivalence⟩
272+
248273
end MorphismProperty
249274

250275
end CategoryTheory

Mathlib/CategoryTheory/MorphismProperty/LiftingProperty.lean

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,30 @@ lemma rlp_retracts : T.retracts.rlp = T.rlp := by
166166
· rw [← le_llp_iff_le_rlp]
167167
exact T.retracts_le_llp_rlp
168168

169+
lemma rlp_ofHoms_iff_hasLiftingProperty (ι : Type*) [Nonempty ι] {A B X Y : C}
170+
(i : A ⟶ B) (p : X ⟶ Y) :
171+
(MorphismProperty.ofHoms (fun (_ : ι) ↦ i)).rlp p ↔ HasLiftingProperty i p :=
172+
fun hp ↦ hp _ ⟨Classical.arbitrary ι⟩,
173+
by rintro _ _ _ _ ⟨⟩; assumption⟩
174+
175+
lemma llp_ofHoms_iff_hasLiftingProperty (ι : Type*) [Nonempty ι] {A B X Y : C}
176+
(i : A ⟶ B) (p : X ⟶ Y) :
177+
(MorphismProperty.ofHoms (fun (_ : ι) ↦ p)).llp i ↔ HasLiftingProperty i p :=
178+
fun hp ↦ hp _ ⟨Classical.arbitrary ι⟩,
179+
by rintro _ _ _ _ ⟨⟩; assumption⟩
180+
169181
end MorphismProperty
170182

183+
lemma Functor.hasLiftingProperty_iff_of_isEquivalence
184+
{D : Type*} [Category* D] (G : C ⥤ D) [G.IsEquivalence]
185+
{A B X Y : C} (i : A ⟶ B) (p : X ⟶ Y) :
186+
HasLiftingProperty (G.map i) (G.map p) ↔
187+
HasLiftingProperty i p := by
188+
simp only [dsimp% G.asEquivalence.toAdjunction.hasLiftingProperty_iff,
189+
← MorphismProperty.rlp_ofHoms_iff_hasLiftingProperty Unit]
190+
exact MorphismProperty.arrow_mk_iso_iff _
191+
(Arrow.isoMk (G.asEquivalence.unitIso.symm.app _)
192+
(G.asEquivalence.unitIso.symm.app _)
193+
(G.asEquivalence.unitIso.inv.naturality p).symm)
194+
171195
end CategoryTheory

0 commit comments

Comments
 (0)