Skip to content

Commit 0647d35

Browse files
Merge master into nightly-testing
2 parents 5b25c4e + caf1dee commit 0647d35

22 files changed

Lines changed: 662 additions & 70 deletions

File tree

.github/actions/get-mathlib-ci/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ inputs:
1010
# Default pinned commit used by workflows unless they explicitly override.
1111
# Update this ref as needed to pick up changes to mathlib-ci scripts
1212
# This is also updated automatically by .github/workflows/update_dependencies.yml
13-
default: b6def9edd1c39de8602b8c177c66e9416e5dbc60
13+
default: 8c3d31d2beba80d86de30b6ccd373d2c3a76b26e
1414
path:
1515
description: Checkout destination path.
1616
required: false

Mathlib.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,6 +1510,7 @@ public import Mathlib.AlgebraicTopology.SimplicialObject.Homotopy
15101510
public import Mathlib.AlgebraicTopology.SimplicialObject.II
15111511
public import Mathlib.AlgebraicTopology.SimplicialObject.Op
15121512
public import Mathlib.AlgebraicTopology.SimplicialObject.Split
1513+
public import Mathlib.AlgebraicTopology.SimplicialSet.AnodyneExtensions.Basic
15131514
public import Mathlib.AlgebraicTopology.SimplicialSet.AnodyneExtensions.IsUniquelyCodimOneFace
15141515
public import Mathlib.AlgebraicTopology.SimplicialSet.AnodyneExtensions.Op
15151516
public import Mathlib.AlgebraicTopology.SimplicialSet.AnodyneExtensions.Pairing
@@ -3638,6 +3639,7 @@ public import Mathlib.Condensed.Light.InternallyProjective
36383639
public import Mathlib.Condensed.Light.Limits
36393640
public import Mathlib.Condensed.Light.Module
36403641
public import Mathlib.Condensed.Light.Monoidal
3642+
public import Mathlib.Condensed.Light.Sequence
36413643
public import Mathlib.Condensed.Light.Small
36423644
public import Mathlib.Condensed.Light.TopCatAdjunction
36433645
public import Mathlib.Condensed.Light.TopComparison
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
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.SimplicialSet.AnodyneExtensions.RankNat
9+
public import Mathlib.AlgebraicTopology.SimplicialSet.AnodyneExtensions.RelativeCellComplex
10+
public import Mathlib.AlgebraicTopology.SimplicialSet.CategoryWithFibrations
11+
public import Mathlib.AlgebraicTopology.SimplicialSet.Presentable
12+
public import Mathlib.CategoryTheory.SmallObject.Basic
13+
14+
/-!
15+
# Anodyne extensions
16+
17+
Anodyne extensions form a property of morphisms in the category of simplicial
18+
sets. It contains horn inclusions and it is closed under coproducts, pushouts,
19+
transfinite compositions and retracts. Equivalently, using the small
20+
object argument, anodyne extensions can be defined (and are defined here)
21+
as the class of morphisms that satisfy the left lifting property with respect
22+
to the class of fibrations (for the Quillen model category structure:
23+
fibrations are morphisms that have the right lifting property with respect
24+
to horn inclusions). When the Quillen model category structure is fully
25+
upstreamed (TODO @joelriou), it can be shown that a morphism `f` is an
26+
anodyne extension iff `f` is a cofibration that is also a weak equivalence.
27+
28+
We also introduce the class of strong anodyne extensions that could be defined
29+
as a closure similarly as anodyne extensions, but without taking the closure
30+
under retracts. Sean Moss has given a combinatorial description of these
31+
strong anodyne extensions: the inclusion `A.ι : A ⟶ X` of a subcomplex `A`
32+
of a simplicial set `X` is a strong anodyne extension iff there exists
33+
a regular pairing for `A`. In this file, we define strong anodyne extensions
34+
in terms of such regular pairings, and using the main result of the file
35+
`Mathlib/AlgebraicTopology/SimplicialSet/AnodyneExtensions/RelativeCellComplex.lean`
36+
we show that a strong anodyne extension is an anodyne extension.
37+
38+
## TODO
39+
* introduce inner variants of these definitions
40+
* show that strong anodyne extensions are indeed stable under coproducts,
41+
transfinite compositions and pushouts (the proof should reduce to the
42+
construction of pairings)
43+
* study the interaction between anodyne extension and binary products:
44+
the critical case consists in showing that inclusions
45+
`Λ[m, i] ⊗ Δ[n] ∪ Δ[m] ⊗ ∂Δ[n] ⟶ Δ[m] ⊗ Δ[n]` are strong anodyne extensions (@joelriou)
46+
* show that anodyne extensions are stable under the subdivision functor (@joelriou)
47+
48+
## References
49+
* [P. Gabriel, M. Zisman, *Calculus of fractions and homotopy theory*, IV.2][gabriel-zisman-1967]
50+
* [Sean Moss, *Another approach to the Kan-Quillen model structure*][moss-2020]
51+
52+
-/
53+
54+
@[expose] public section
55+
56+
universe u
57+
58+
open CategoryTheory HomotopicalAlgebra Simplicial
59+
60+
namespace SSet
61+
62+
open MorphismProperty
63+
64+
open modelCategoryQuillen in
65+
/-- In the category of simplicial sets, an anodyne extension is a morphism
66+
that has the left lifting property with respect to fibrations, where
67+
a fibration is a morphism that has the right lifting property with respect
68+
to horn inclusions. We do not introduce a typeclass for anodyne extensions
69+
because when the Quillen model structure is fully upstreamed (TODO @joelriou),
70+
the assumption `anodyneExtensions f` can be spelled as
71+
`[Cofibration f] [WeakEquivalence f]`. -/
72+
def anodyneExtensions : MorphismProperty SSet.{u} := (fibrations _).llp
73+
deriving IsMultiplicative, RespectsIso, IsStableUnderCobaseChange,
74+
IsStableUnderRetracts, IsStableUnderTransfiniteComposition,
75+
IsStableUnderCoproducts
76+
77+
lemma anodyneExtensions.of_isIso {X Y : SSet.{u}} (f : X ⟶ Y) [IsIso f] :
78+
anodyneExtensions f :=
79+
MorphismProperty.of_isIso anodyneExtensions f
80+
81+
lemma anodyneExtensions_eq_llp_rlp :
82+
anodyneExtensions.{u} = modelCategoryQuillen.J.rlp.llp :=
83+
rfl
84+
85+
lemma anodyneExtensions.horn_ι {n : ℕ} [NeZero n] (i : Fin (n + 1)) :
86+
anodyneExtensions.{u} Λ[n, i].ι := by
87+
rw [anodyneExtensions_eq_llp_rlp]
88+
exact le_llp_rlp _ _ (modelCategoryQuillen.horn_ι_mem_J n i)
89+
90+
attribute [local instance] Cardinal.fact_isRegular_aleph0
91+
Cardinal.orderBotAleph0OrdToType
92+
93+
instance (n : ℕ) : MorphismProperty.IsSmall.{u}
94+
(MorphismProperty.ofHoms.{u} (fun (i : Fin (n + 2)) ↦ Λ[n + 1, i].ι)) :=
95+
isSmall_ofHoms ..
96+
97+
instance : MorphismProperty.IsSmall.{u} modelCategoryQuillen.J.{u} :=
98+
isSmall_iSup ..
99+
100+
instance : IsCardinalForSmallObjectArgument modelCategoryQuillen.J.{u} Cardinal.aleph0.{u} where
101+
preservesColimit {A B X Y} i hi f hf := by
102+
have : IsFinitelyPresentable.{u} A := by
103+
simp only [modelCategoryQuillen.J, iSup_iff] at hi
104+
obtain ⟨n, ⟨i⟩⟩ := hi
105+
infer_instance
106+
infer_instance
107+
108+
instance : HasSmallObjectArgument.{u} modelCategoryQuillen.J.{u} :=
109+
⟨.aleph0, inferInstance, inferInstance, inferInstance⟩
110+
111+
lemma anodyneExtensions_eq_retracts_transfiniteCompositions :
112+
anodyneExtensions = (transfiniteCompositions.{u}
113+
(coproducts.{u} modelCategoryQuillen.J.{u}).pushouts).retracts := by
114+
rw [anodyneExtensions_eq_llp_rlp, llp_rlp_of_hasSmallObjectArgument]
115+
116+
lemma anodyneExtensions_eq_retracts_transfiniteCompositionsOfShape :
117+
anodyneExtensions = (transfiniteCompositionsOfShape
118+
(coproducts.{u} modelCategoryQuillen.J.{u}).pushouts ℕ).retracts := by
119+
rw [anodyneExtensions_eq_llp_rlp,
120+
SmallObject.llp_rlp_of_isCardinalForSmallObjectArgument_aleph0]
121+
122+
/-- In the category of simplicial sets, a strong anodyne extension is a morphism
123+
which belongs to the closure of horn inclusions by pushouts, coproducts,
124+
transfinite compositions (but not by retracts). We define this class here
125+
by saying that `f : X ⟶ Y` is a strong anodyne extension if `f` is a monomorphism
126+
and there exists a regular pairing (in the sense of Moss) for the subcomplex
127+
`Subcomplex.range f` of `Y`. -/
128+
def strongAnodyneExtensions : MorphismProperty SSet.{u} :=
129+
fun _ _ f ↦ Mono f ∧ ∃ (P : (Subcomplex.range f).Pairing), P.IsRegular
130+
131+
lemma Subcomplex.Pairing.strongAnodyneExtensions {X : SSet.{u}} {A : X.Subcomplex}
132+
(P : A.Pairing) [P.IsRegular] :
133+
strongAnodyneExtensions A.ι :=
134+
⟨inferInstance, by
135+
generalize h : Subcomplex.range A.ι = B
136+
obtain rfl : B = A := by simpa using h.symm
137+
exact ⟨P, inferInstance⟩⟩
138+
139+
lemma strongAnodyneExtensions_ι_iff {X : SSet.{u}} (A : X.Subcomplex) :
140+
strongAnodyneExtensions A.ι ↔ ∃ (P : A.Pairing), P.IsRegular :=
141+
fun hA ↦ by
142+
obtain ⟨_, P, _, rfl⟩ :
143+
∃ (B : X.Subcomplex) (P : B.Pairing), P.IsRegular ∧ B = A := by
144+
obtain ⟨_, P, _⟩ := hA
145+
exact ⟨_, P, inferInstance, by simp⟩
146+
exact ⟨P, inferInstance⟩,
147+
fun ⟨P, _⟩ ↦ P.strongAnodyneExtensions⟩
148+
149+
lemma Subcomplex.Pairing.anodyneExtensions {X : SSet.{u}} {A : X.Subcomplex}
150+
(P : A.Pairing) [P.IsRegular] :
151+
anodyneExtensions A.ι :=
152+
transfiniteCompositionsOfShape_le _ _ _
153+
⟨P.rankFunction.relativeCellComplex.toTransfiniteCompositionOfShape, fun j hj ↦ by
154+
refine (?_ : (_ : MorphismProperty _) ≤ _ ) _
155+
(P.rankFunction.relativeCellComplex.attachCells j hj).pushouts_coproducts
156+
simp only [pushouts_le_iff, coproducts_le_iff]
157+
rintro _ _ _ ⟨c⟩
158+
exact .horn_ι c.index⟩
159+
160+
lemma strongAnodyneExtensions_le_anodyneExtensions :
161+
strongAnodyneExtensions.{u} ≤ anodyneExtensions := by
162+
rintro X Y f ⟨_, P, _⟩
163+
rw [← Subfunctor.toRange_ι f]
164+
exact comp_mem _ _ _ (.of_isIso _) P.anodyneExtensions
165+
166+
end SSet

Mathlib/AlgebraicTopology/SimplicialSet/CategoryWithFibrations.lean

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,12 @@ which consists of horn inclusions `Λ[n, i].ι : Λ[n, i] ⟶ Δ[n]` (for positi
4646
def J : MorphismProperty SSet.{u} :=
4747
⨆ n, .ofHoms (fun (i : Fin (n + 2)) ↦ Λ[n + 1, i].ι)
4848

49-
lemma horn_ι_mem_J (n : ℕ) (i : Fin (n + 2)) :
50-
J (horn.{u} (n + 1) i).ι := by
51-
simp only [J, iSup_iff]
52-
exact ⟨n, ⟨i⟩⟩
49+
lemma horn_ι_mem_J (n : ℕ) [NeZero n] (i : Fin (n + 1)) :
50+
J (horn.{u} n i).ι := by
51+
obtain _ | n := n
52+
· exact (NeZero.ne 0 rfl).elim
53+
· simp only [J, iSup_iff]
54+
exact ⟨n, ⟨i⟩⟩
5355

5456
lemma I_le_monomorphisms : I.{u} ≤ monomorphisms _ := by
5557
rintro _ _ _ ⟨n⟩

Mathlib/CategoryTheory/ConcreteCategory/Basic.lean

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,7 @@ instance InducedCategory.concreteCategory {C : Type u} {D : Type u'} [Category.{
195195
comp_apply _ _ _ := ConcreteCategory.comp_apply _ _ _
196196
id_apply _ := ConcreteCategory.id_apply _
197197

198-
open ObjectProperty in
199-
instance FullSubcategory.concreteCategory {C : Type u} [Category.{v} C]
198+
instance ObjectProperty.FullSubcategory.concreteCategory {C : Type u} [Category.{v} C]
200199
{FC : C → C → Type*} {CC : C → Type w} [∀ X Y, FunLike (FC X Y) (CC X) (CC Y)]
201200
[ConcreteCategory.{w} C FC]
202201
(P : ObjectProperty C) : ConcreteCategory P.FullSubcategory (fun X Y => FC X.1 Y.1) where
@@ -207,6 +206,9 @@ instance FullSubcategory.concreteCategory {C : Type u} [Category.{v} C]
207206
comp_apply _ _ _ := ConcreteCategory.comp_apply _ _ _
208207
id_apply _ := ConcreteCategory.id_apply _
209208

209+
@[deprecated (since := "2026-04-18")] alias FullSubcategory.concreteCategory :=
210+
ObjectProperty.FullSubcategory.concreteCategory
211+
210212
end ConcreteCategory
211213

212214
variable {C : Type u} [Category.{v} C]

Mathlib/CategoryTheory/ConcreteCategory/Forget.lean

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,14 @@ instance InducedCategory.hasForget₂ (f : C → D) : HasForget₂ (InducedCateg
111111
forget₂ := inducedFunctor f
112112
forget_comp := rfl
113113

114-
instance FullSubcategory.hasForget₂ (P : ObjectProperty C) : HasForget₂ P.FullSubcategory C where
114+
instance ObjectProperty.FullSubcategory.hasForget₂ (P : ObjectProperty C) :
115+
HasForget₂ P.FullSubcategory C where
115116
forget₂ := P.ι
116117
forget_comp := rfl
117118

119+
@[deprecated (since := "2026-04-18")] alias FullSubcategory.hasForget₂ :=
120+
ObjectProperty.FullSubcategory.hasForget₂
121+
118122
/-- In order to construct a “partially forgetting” functor, we do not need to verify functor laws;
119123
it suffices to ensure that compositions agree with `forget₂ C D ⋙ forget D = forget C`.
120124
-/

Mathlib/CategoryTheory/MorphismProperty/IsSmall.lean

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,18 @@ lemma isSmall_iff_eq_ofHoms :
6060
· rintro ⟨_, _, _, _, rfl⟩
6161
infer_instance
6262

63+
instance isSmall_iSup {α : Type*} (W : α → MorphismProperty C)
64+
[Small.{w} α] [∀ a, IsSmall.{w} (W a)] :
65+
IsSmall.{w} (iSup W) where
66+
small_toSet := by
67+
rw [toSet_iSup]
68+
refine small_of_surjective (f := fun (⟨i, f⟩ : Σ i, (W i).toSet) ↦
69+
⟨f, by rw [Set.mem_iUnion]; exact ⟨i, f.prop⟩⟩) ?_
70+
rintro ⟨f, hf⟩
71+
simp only [Set.mem_iUnion] at hf
72+
obtain ⟨i, hf⟩ := hf
73+
exact ⟨⟨i, ⟨_, hf⟩⟩, rfl⟩
74+
6375
end MorphismProperty
6476

6577
end CategoryTheory

Mathlib/CategoryTheory/MorphismProperty/LiftingProperty.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ instance llp_isStableUnderCoproductsOfShape (J : Type*) :
9090
have := fun j ↦ hf j _ hp
9191
infer_instance
9292

93+
instance : IsStableUnderCoproducts.{w} T.llp where
94+
9395
instance rlp_isStableUnderProductsOfShape (J : Type*) :
9496
T.rlp.IsStableUnderProductsOfShape J := by
9597
apply IsStableUnderProductsOfShape.mk

Mathlib/CategoryTheory/SmallObject/IsCardinalForSmallObjectArgument.lean

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,18 @@ lemma llp_rlp_of_isCardinalForSmallObjectArgument' :
477477
{ i := Arrow.homMk (𝟙 _) sq.lift
478478
r := Arrow.homMk (𝟙 _) (πObj I κ f) }
479479

480+
omit κ in
481+
attribute [local instance] Cardinal.fact_isRegular_aleph0
482+
Cardinal.orderBotAleph0OrdToType in
483+
lemma llp_rlp_of_isCardinalForSmallObjectArgument_aleph0
484+
[I.IsCardinalForSmallObjectArgument Cardinal.aleph0.{w}] :
485+
I.rlp.llp = (transfiniteCompositionsOfShape (coproducts.{w} I).pushouts ℕ).retracts := by
486+
let e : ℕ ≃o Cardinal.aleph0.{w}.ord.ToType :=
487+
ULift.orderIso.{w}.symm.trans
488+
(OrderIso.ofRelIsoLT (Nonempty.some (by simp [← Ordinal.type_eq])))
489+
rw [SmallObject.llp_rlp_of_isCardinalForSmallObjectArgument' _ Cardinal.aleph0,
490+
MorphismProperty.transfiniteCompositionsOfShape_eq_of_orderIso _ e]
491+
480492
/-- If `κ` is a suitable cardinal for the small object argument for `I : MorphismProperty C`,
481493
then the class `I.rlp.llp` is exactly the class of morphisms that are retracts
482494
of transfinite compositions of pushouts of coproducts of maps in `I`. -/

Mathlib/CategoryTheory/SmallObject/TransfiniteCompositionLifting.lean

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ instance isStableUnderTransfiniteCompositionOfShape_llp :
264264
exact (MorphismProperty.arrow_mk_iso_iff _
265265
(Arrow.isoMk h.isoBot.symm (Iso.refl _))).2 this
266266

267+
instance : MorphismProperty.IsStableUnderTransfiniteComposition.{w} W.llp where
268+
267269
lemma transfiniteCompositionsOfShape_le_llp_rlp :
268270
W.transfiniteCompositionsOfShape J ≤ W.rlp.llp := by
269271
have := W.rlp.isStableUnderTransfiniteCompositionOfShape_llp J
@@ -288,7 +290,7 @@ lemma transfiniteCompositions_le_llp_rlp :
288290

289291
lemma transfiniteCompositions_pushouts_coproducts_le_llp_rlp :
290292
(transfiniteCompositions.{w} (coproducts.{w} W).pushouts) ≤ W.rlp.llp := by
291-
simpa using transfiniteCompositions_le_llp_rlp (coproducts.{w} W).pushouts
293+
simpa using transfiniteCompositions_le_llp_rlp.{w} (coproducts.{w} W).pushouts
292294

293295
lemma retracts_transfiniteComposition_pushouts_coproducts_le_llp_rlp :
294296
(transfiniteCompositions.{w} (coproducts.{w} W).pushouts).retracts ≤ W.rlp.llp := by

0 commit comments

Comments
 (0)