Skip to content

Commit 7440afb

Browse files
gio256joelriou
andcommitted
refactor(AlgebraicTopology/SimplicialSet): truncated paths (#20668)
We refactor the `StrictSegal` infrastructure, making two notable changes: - The `StrictSegal` class is redefined as a structure, and the class `IsStrictSegal X : Prop` is added in its place. - `Path`, `StrictSegal`, and related constructions are defined for truncated simplicial sets. A path in a simplicial set `X` is then defined as a 1-truncated path in the 1-truncation of `X`. Co-authored-by: gio256 <102917377+gio256@users.noreply.github.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr>
1 parent 43d6127 commit 7440afb

File tree

7 files changed

+668
-189
lines changed

7 files changed

+668
-189
lines changed

Mathlib/AlgebraicTopology/Quasicategory/StrictSegal.lean

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,28 @@ open Simplicial SimplicialObject SimplexCategory
2525
namespace SSet.StrictSegal
2626

2727
/-- Any `StrictSegal` simplicial set is a `Quasicategory`. -/
28-
instance quasicategory {X : SSet.{u}} [StrictSegal X] : Quasicategory X := by
28+
theorem quasicategory {X : SSet.{u}} (sx : StrictSegal X) : Quasicategory X := by
2929
apply quasicategory_of_filler X
3030
intro n i σ₀ h₀ hₙ
31-
use spineToSimplex <| Path.map (horn.spineId i h₀ hₙ) σ₀
31+
use sx.spineToSimplex <| Path.map (horn.spineId i h₀ hₙ) σ₀
3232
intro j hj
33-
apply spineInjective
33+
apply sx.spineInjective
3434
ext k
3535
dsimp only [spineEquiv, spine_arrow, Function.comp_apply, Equiv.coe_fn_mk]
3636
rw [← types_comp_apply (σ₀.app _) (X.map _), ← σ₀.naturality]
3737
let ksucc := k.succ.castSucc
3838
obtain hlt | hgt | heq : ksucc < j ∨ j < ksucc ∨ j = ksucc := by omega
39-
· rw [← spine_arrow, spine_δ_arrow_lt _ hlt]
40-
dsimp only [Path.map, spine_arrow, Fin.coe_eq_castSucc]
39+
· rw [← spine_arrow, spine_δ_arrow_lt sx _ hlt]
40+
dsimp only [Path.map_arrow, spine_arrow, Fin.coe_eq_castSucc]
4141
apply congr_arg
4242
apply Subtype.ext
4343
dsimp [horn.face, CosimplicialObject.δ]
4444
rw [Subcomplex.yonedaEquiv_coe, Subpresheaf.lift_ι, stdSimplex.map_apply,
4545
Quiver.Hom.unop_op, stdSimplex.yonedaEquiv_map, Equiv.apply_symm_apply,
4646
mkOfSucc_δ_lt hlt]
4747
rfl
48-
· rw [← spine_arrow, spine_δ_arrow_gt _ hgt]
49-
dsimp only [Path.map, spine_arrow, Fin.coe_eq_castSucc]
48+
· rw [← spine_arrow, spine_δ_arrow_gt sx _ hgt]
49+
dsimp only [Path.map_arrow, spine_arrow, Fin.coe_eq_castSucc]
5050
apply congr_arg
5151
apply Subtype.ext
5252
dsimp [horn.face, CosimplicialObject.δ]
@@ -68,14 +68,14 @@ instance quasicategory {X : SSet.{u}} [StrictSegal X] : Quasicategory X := by
6868
have hi : ((horn.spineId i h₀ hₙ).map σ₀).interval k 2 (by omega) =
6969
X.spine 2 (σ₀.app _ triangle) := by
7070
ext m
71-
dsimp [spine_arrow, Path.interval, Path.map]
71+
dsimp [spine_arrow, Path.map_interval, Path.map_arrow]
7272
rw [← types_comp_apply (σ₀.app _) (X.map _), ← σ₀.naturality]
7373
apply congr_arg
7474
apply Subtype.ext
7575
ext a : 1
7676
fin_cases a <;> fin_cases m <;> rfl
77-
rw [← spine_arrow, spine_δ_arrow_eq _ heq, hi]
78-
simp only [spineToDiagonal, diagonal, spineToSimplex_spine]
77+
rw [← spine_arrow, spine_δ_arrow_eq sx _ heq, hi]
78+
simp only [spineToDiagonal, diagonal, spineToSimplex_spine_apply]
7979
rw [← types_comp_apply (σ₀.app _) (X.map _), ← σ₀.naturality, types_comp_apply]
8080
apply congr_arg
8181
apply Subtype.ext
@@ -89,4 +89,8 @@ instance quasicategory {X : SSet.{u}} [StrictSegal X] : Quasicategory X := by
8989
rw [mkOfSucc_δ_eq heq]
9090
fin_cases z <;> rfl
9191

92+
/-- Any simplicial set satisfying `IsStrictSegal` is a `Quasicategory`. -/
93+
instance quasicategory' (X : SSet.{u}) [IsStrictSegal X] : Quasicategory X :=
94+
quasicategory <| ofIsStrictSegal X
95+
9296
end SSet.StrictSegal

Mathlib/AlgebraicTopology/SimplexCategory/Defs.lean

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,19 +176,46 @@ noncomputable def inclusion.fullyFaithful (n : ℕ) :
176176
theorem Hom.ext {n} {a b : Truncated n} (f g : a ⟶ b) :
177177
f.toOrderHom = g.toOrderHom → f = g := SimplexCategory.Hom.ext _ _
178178

179+
/-- A quick attempt to prove that `⦋m⦌` is `n`-truncated (`⦋m⦌.len ≤ n`). -/
180+
scoped macro "trunc" : tactic =>
181+
`(tactic| first | assumption | dsimp only [SimplexCategory.len_mk] <;> omega)
182+
179183
open Mathlib.Tactic (subscriptTerm) in
180184
/-- For `m ≤ n`, `⦋m⦌ₙ` is the `m`-dimensional simplex in `Truncated n`. The
181185
proof `p : m ≤ n` can also be provided using the syntax `⦋m, p⦌ₙ`. -/
182186
scoped syntax:max (name := mkNotation)
183187
"⦋" term ("," term)? "⦌" noWs subscriptTerm : term
184188
scoped macro_rules
185189
| `(⦋$m:term⦌$n:subscript) =>
186-
`((⟨SimplexCategory.mk $m, by first | get_elem_tactic |
190+
`((⟨SimplexCategory.mk $m, by first | trunc |
187191
fail "Failed to prove truncation property. Try writing `⦋m, by ...⦌ₙ`."⟩ :
188192
SimplexCategory.Truncated $n))
189193
| `(⦋$m:term, $p:term⦌$n:subscript) =>
190194
`((⟨SimplexCategory.mk $m, $p⟩ : SimplexCategory.Truncated $n))
191195

196+
/-- Make a morphism in `Truncated n` from a morphism in `SimplexCategory`. This
197+
is equivalent to `@id (⦋a⦌ₙ ⟶ ⦋b⦌ₙ) f`. -/
198+
abbrev Hom.tr {n : ℕ} {a b : SimplexCategory} (f : a ⟶ b)
199+
(ha : a.len ≤ n := by trunc) (hb : b.len ≤ n := by trunc) :
200+
(⟨a, ha⟩ : Truncated n) ⟶ ⟨b, hb⟩ :=
201+
f
202+
203+
lemma Hom.tr_comp {n : ℕ} {a b c : SimplexCategory} (f : a ⟶ b) (g : b ⟶ c)
204+
(ha : a.len ≤ n := by trunc) (hb : b.len ≤ n := by trunc)
205+
(hc : c.len ≤ n := by trunc) :
206+
tr (f ≫ g) = tr f ≫ tr g :=
207+
rfl
208+
209+
/-- The inclusion of `Truncated n` into `Truncated m` when `n ≤ m`. -/
210+
def incl (n m : ℕ) (h : n ≤ m := by omega) : Truncated n ⥤ Truncated m where
211+
obj a := ⟨a.1, a.2.trans h⟩
212+
map := id
213+
214+
/-- For all `n ≤ m`, `inclusion n` factors through `Truncated m`. -/
215+
def inclCompInclusion {n m : ℕ} (h : n ≤ m) :
216+
incl n m ⋙ inclusion m ≅ inclusion n :=
217+
Iso.refl _
218+
192219
end Truncated
193220

194221
end SimplexCategory

Mathlib/AlgebraicTopology/SimplicialObject/Basic.lean

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,12 @@ scoped macro_rules
264264
`(($X : CategoryTheory.SimplicialObject.Truncated _ $n).obj
265265
(Opposite.op ⟨SimplexCategory.mk $m, $p⟩))
266266

267+
variable (C) in
268+
/-- Further truncation of truncated simplicial objects. -/
269+
@[simps!]
270+
def trunc (n m : ℕ) (h : m ≤ n := by omega) : Truncated C n ⥤ Truncated C m :=
271+
(whiskeringLeft _ _ _).obj (SimplexCategory.Truncated.incl m n).op
272+
267273
end Truncated
268274

269275
section Truncation
@@ -272,6 +278,11 @@ section Truncation
272278
def truncation (n : ℕ) : SimplicialObject C ⥤ SimplicialObject.Truncated C n :=
273279
(whiskeringLeft _ _ _).obj (SimplexCategory.Truncated.inclusion n).op
274280

281+
/-- For all `m ≤ n`, `truncation m` factors through `Truncated n`. -/
282+
def truncationCompTrunc {n m : ℕ} (h : m ≤ n) :
283+
truncation n ⋙ Truncated.trunc C n m ≅ truncation m :=
284+
Iso.refl _
285+
275286
end Truncation
276287

277288

@@ -717,6 +728,11 @@ scoped macro_rules
717728
`(($X : CategoryTheory.CosimplicialObject.Truncated _ $n).obj
718729
⟨SimplexCategory.mk $m, $p⟩)
719730

731+
variable (C) in
732+
/-- Further truncation of truncated cosimplicial objects. -/
733+
def trunc (n m : ℕ) (h : m ≤ n := by omega) : Truncated C n ⥤ Truncated C m :=
734+
(whiskeringLeft _ _ _).obj <| SimplexCategory.Truncated.incl m n
735+
720736
end Truncated
721737

722738
section Truncation
@@ -725,6 +741,11 @@ section Truncation
725741
def truncation (n : ℕ) : CosimplicialObject C ⥤ CosimplicialObject.Truncated C n :=
726742
(whiskeringLeft _ _ _).obj (SimplexCategory.Truncated.inclusion n)
727743

744+
/-- For all `m ≤ n`, `truncation m` factors through `Truncated n`. -/
745+
def truncationCompTrunc {n m : ℕ} (h : m ≤ n) :
746+
truncation n ⋙ Truncated.trunc C n m ≅ truncation m :=
747+
Iso.refl _
748+
728749
end Truncation
729750

730751
variable (C)

Mathlib/AlgebraicTopology/SimplicialSet/Basic.lean

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,31 +81,45 @@ def uliftFunctor : SSet.{u} ⥤ SSet.{max u v} :=
8181
def Truncated (n : ℕ) :=
8282
SimplicialObject.Truncated (Type u) n
8383

84-
instance Truncated.largeCategory (n : ℕ) : LargeCategory (Truncated n) := by
84+
namespace Truncated
85+
86+
instance largeCategory (n : ℕ) : LargeCategory (Truncated n) := by
8587
dsimp only [Truncated]
8688
infer_instance
8789

88-
instance Truncated.hasLimits {n : ℕ} : HasLimits (Truncated n) := by
90+
instance hasLimits {n : ℕ} : HasLimits (Truncated n) := by
8991
dsimp only [Truncated]
9092
infer_instance
9193

92-
instance Truncated.hasColimits {n : ℕ} : HasColimits (Truncated n) := by
94+
instance hasColimits {n : ℕ} : HasColimits (Truncated n) := by
9395
dsimp only [Truncated]
9496
infer_instance
9597

9698
/-- The ulift functor `SSet.Truncated.{u} ⥤ SSet.Truncated.{max u v}` on truncated
9799
simplicial sets. -/
98-
def Truncated.uliftFunctor (k : ℕ) : SSet.Truncated.{u} k ⥤ SSet.Truncated.{max u v} k :=
100+
def uliftFunctor (k : ℕ) : SSet.Truncated.{u} k ⥤ SSet.Truncated.{max u v} k :=
99101
(whiskeringRight _ _ _).obj CategoryTheory.uliftFunctor.{v, u}
100102

101103
@[ext]
102-
lemma Truncated.hom_ext {n : ℕ} {X Y : Truncated n} {f g : X ⟶ Y} (w : ∀ n, f.app n = g.app n) :
104+
lemma hom_ext {n : ℕ} {X Y : Truncated n} {f g : X ⟶ Y} (w : ∀ n, f.app n = g.app n) :
103105
f = g :=
104106
NatTrans.ext (funext w)
105107

108+
/-- Further truncation of truncated simplicial sets. -/
109+
abbrev trunc (n m : ℕ) (h : m ≤ n := by omega) :
110+
SSet.Truncated n ⥤ SSet.Truncated m :=
111+
SimplicialObject.Truncated.trunc (Type u) n m
112+
113+
end Truncated
114+
106115
/-- The truncation functor on simplicial sets. -/
107116
abbrev truncation (n : ℕ) : SSet ⥤ SSet.Truncated n := SimplicialObject.truncation n
108117

118+
/-- For all `m ≤ n`, `truncation m` factors through `SSet.Truncated n`. -/
119+
def truncationCompTrunc {n m : ℕ} (h : m ≤ n) :
120+
truncation n ⋙ Truncated.trunc n m ≅ truncation m :=
121+
Iso.refl _
122+
109123
open SimplexCategory
110124

111125
noncomputable section

Mathlib/AlgebraicTopology/SimplicialSet/Coskeletal.lean

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ section
4646
open StructuredArrow
4747

4848
namespace StrictSegal
49-
variable (X : SSet.{u}) [StrictSegal X]
49+
variable {X : SSet.{u}} (sx : StrictSegal X)
5050

5151
namespace isPointwiseRightKanExtensionAt
5252

@@ -60,10 +60,10 @@ abbrev strArrowMk₂ {i : ℕ} {n : ℕ} (φ : ⦋i⦌ ⟶ ⦋n⦌) (hi : i ≤
6060
`(proj (op ⦋n⦌) ((Truncated.inclusion 2).op ⋙ (Truncated.inclusion 2).op ⋙ X)` where `X` is
6161
Strict Segal, one can produce an `n`-simplex in `X`. -/
6262
@[simp]
63-
noncomputable def lift {X : SSet.{u}} [StrictSegal X] {n}
63+
noncomputable def lift {X : SSet.{u}} (sx : StrictSegal X) {n}
6464
(s : Cone (proj (op ⦋n⦌) (Truncated.inclusion 2).op ⋙
6565
(Truncated.inclusion 2).op ⋙ X)) (x : s.pt) : X _⦋n⦌ :=
66-
StrictSegal.spineToSimplex {
66+
sx.spineToSimplex {
6767
vertex := fun i ↦ s.π.app (.mk (Y := op ⦋0⦌₂) (.op (SimplexCategory.const _ _ i))) x
6868
arrow := fun i ↦ s.π.app (.mk (Y := op ⦋1⦌₂) (.op (mkOfLe _ _ (Fin.castSucc_le_succ i)))) x
6969
arrow_src := fun i ↦ by
@@ -83,7 +83,7 @@ noncomputable def lift {X : SSet.{u}} [StrictSegal X] {n}
8383
lemma fac_aux₁ {n : ℕ}
8484
(s : Cone (proj (op ⦋n⦌) (Truncated.inclusion 2).op ⋙ (Truncated.inclusion 2).op ⋙ X))
8585
(x : s.pt) (i : ℕ) (hi : i < n) :
86-
X.map (mkOfSucc ⟨i, hi⟩).op (lift s x) =
86+
X.map (mkOfSucc ⟨i, hi⟩).op (lift sx s x) =
8787
s.π.app (strArrowMk₂ (mkOfSucc ⟨i, hi⟩)) x := by
8888
dsimp [lift]
8989
rw [spineToSimplex_arrow]
@@ -92,7 +92,7 @@ lemma fac_aux₁ {n : ℕ}
9292
lemma fac_aux₂ {n : ℕ}
9393
(s : Cone (proj (op ⦋n⦌) (Truncated.inclusion 2).op ⋙ (Truncated.inclusion 2).op ⋙ X))
9494
(x : s.pt) (i j : ℕ) (hij : i ≤ j) (hj : j ≤ n) :
95-
X.map (mkOfLe ⟨i, by omega⟩ ⟨j, by omega⟩ hij).op (lift s x) =
95+
X.map (mkOfLe ⟨i, by omega⟩ ⟨j, by omega⟩ hij).op (lift sx s x) =
9696
s.π.app (strArrowMk₂ (mkOfLe ⟨i, by omega⟩ ⟨j, by omega⟩ hij)) x := by
9797
obtain ⟨k, hk⟩ := Nat.le.dest hij
9898
revert i j
@@ -123,23 +123,22 @@ lemma fac_aux₂ {n : ℕ}
123123
⟨j, by omega⟩ (by simp) (by simp only [Fin.mk_le_mk]; omega))
124124
let α₀ := strArrowMk₂ (mkOfLe (n := n) ⟨i + k, by omega⟩ ⟨j, by omega⟩
125125
(by simp only [Fin.mk_le_mk]; omega))
126-
let α₁ := strArrowMk₂ (mkOfLe (n := n) ⟨i, by omega⟩ ⟨j, by omega⟩
127-
(by simp only [Fin.mk_le_mk]; omega))
126+
let α₁ := strArrowMk₂ (mkOfLe (n := n) ⟨i, by omega⟩ ⟨j, by omega⟩ hij)
128127
let α₂ := strArrowMk₂ (mkOfLe (n := n) ⟨i, by omega⟩ ⟨i + k, by omega⟩ (by simp))
129128
let β₀ : α ⟶ α₀ := StructuredArrow.homMk ((mkOfSucc 1).op) (Quiver.Hom.unop_inj
130129
(by ext x; fin_cases x <;> rfl))
131130
let β₁ : α ⟶ α₁ := StructuredArrow.homMk ((δ 1).op) (Quiver.Hom.unop_inj
132131
(by ext x; fin_cases x <;> rfl))
133132
let β₂ : α ⟶ α₂ := StructuredArrow.homMk ((mkOfSucc 0).op) (Quiver.Hom.unop_inj
134133
(by ext x; fin_cases x <;> rfl))
135-
have h₀ : X.map α₀.hom (lift s x) = s.π.app α₀ x := by
134+
have h₀ : X.map α₀.hom (lift sx s x) = s.π.app α₀ x := by
136135
subst hik
137136
exact fac_aux₁ _ _ _ _ hj
138-
have h₂ : X.map α₂.hom (lift s x) = s.π.app α₂ x :=
137+
have h₂ : X.map α₂.hom (lift sx s x) = s.π.app α₂ x :=
139138
hk i (i + k) (by simp) (by omega) rfl
140-
change X.map α₁.hom (lift s x) = s.π.app α₁ x
141-
have : X.map α.hom (lift s x) = s.π.app α x := by
142-
apply StrictSegal.spineInjective
139+
change X.map α₁.hom (lift sx s x) = s.π.app α₁ x
140+
have : X.map α.hom (lift sx s x) = s.π.app α x := by
141+
apply sx.spineInjective
143142
apply Path.ext'
144143
intro t
145144
dsimp only [spineEquiv]
@@ -162,7 +161,7 @@ lemma fac_aux₂ {n : ℕ}
162161
lemma fac_aux₃ {n : ℕ}
163162
(s : Cone (proj (op ⦋n⦌) (Truncated.inclusion 2).op ⋙ (Truncated.inclusion 2).op ⋙ X))
164163
(x : s.pt) (φ : ⦋1⦌ ⟶ ⦋n⦌) :
165-
X.map φ.op (lift s x) = s.π.app (strArrowMk₂ φ) x := by
164+
X.map φ.op (lift sx s x) = s.π.app (strArrowMk₂ φ) x := by
166165
obtain ⟨i, j, hij, rfl⟩ : ∃ i j hij, φ = mkOfLe i j hij :=
167166
⟨φ.toOrderHom 0, φ.toOrderHom 1, φ.toOrderHom.monotone (by decide),
168167
Hom.ext_one_left _ _ rfl rfl⟩
@@ -176,18 +175,18 @@ open isPointwiseRightKanExtensionAt in
176175
/-- A strict Segal simplicial set is 2-coskeletal. -/
177176
noncomputable def isPointwiseRightKanExtensionAt (n : ℕ) :
178177
(rightExtensionInclusion X 2).IsPointwiseRightKanExtensionAt ⟨⦋n⦌⟩ where
179-
lift s x := lift (X := X) s x
178+
lift s x := lift sx s x
180179
fac s j := by
181180
ext x
182181
obtain ⟨⟨i, hi⟩, ⟨f : _ ⟶ _⟩, rfl⟩ := j.mk_surjective
183182
obtain ⟨i, rfl⟩ : ∃ j, SimplexCategory.mk j = i := ⟨_, i.mk_len⟩
184183
dsimp at hi ⊢
185-
apply StrictSegal.spineInjective
184+
apply sx.spineInjective
186185
dsimp
187186
ext k
188187
· dsimp only [spineEquiv, Equiv.coe_fn_mk]
189188
rw [show op f = f.op from rfl]
190-
rw [spine_map_vertex, spine_spineToSimplex, spine_vertex]
189+
rw [spine_map_vertex, spine_spineToSimplex_apply, spine_vertex]
191190
let α : strArrowMk₂ f hi ⟶ strArrowMk₂ (⦋0⦌.const ⦋n⦌ (f.toOrderHom k)) :=
192191
StructuredArrow.homMk ((⦋0⦌.const _ (by exact k)).op) (by simp; rfl)
193192
exact congr_fun (s.w α).symm x
@@ -198,9 +197,9 @@ noncomputable def isPointwiseRightKanExtensionAt (n : ℕ) :
198197
exact (isPointwiseRightKanExtensionAt.fac_aux₃ _ _ _ _).trans (congr_fun (s.w α).symm x)
199198
uniq s m hm := by
200199
ext x
201-
apply StrictSegal.spineInjective (X := X)
200+
apply sx.spineInjective (X := X)
202201
dsimp [spineEquiv]
203-
rw [StrictSegal.spine_spineToSimplex]
202+
rw [sx.spine_spineToSimplex_apply]
204203
ext i
205204
· exact congr_fun (hm (StructuredArrow.mk (Y := op ⦋0⦌₂) (⦋0⦌.const ⦋n⦌ i).op)) x
206205
· exact congr_fun (hm (.mk (Y := op ⦋1⦌₂) (.op (mkOfLe _ _ (Fin.castSucc_le_succ i))))) x
@@ -209,16 +208,21 @@ noncomputable def isPointwiseRightKanExtensionAt (n : ℕ) :
209208
cones are limit cones, `rightExtensionInclusion X 2` is a pointwise right Kan extension. -/
210209
noncomputable def isPointwiseRightKanExtension :
211210
(rightExtensionInclusion X 2).IsPointwiseRightKanExtension :=
212-
fun Δ => isPointwiseRightKanExtensionAt X Δ.unop.len
211+
fun Δ => sx.isPointwiseRightKanExtensionAt Δ.unop.len
213212

214-
theorem isRightKanExtension :
213+
theorem isRightKanExtension (sx : StrictSegal X) :
215214
X.IsRightKanExtension (𝟙 ((inclusion 2).op ⋙ X)) :=
216215
RightExtension.IsPointwiseRightKanExtension.isRightKanExtension
217-
(isPointwiseRightKanExtension X)
216+
sx.isPointwiseRightKanExtension
218217

219218
/-- When `X` is `StrictSegal`, `X` is 2-coskeletal. -/
220-
instance isCoskeletal : SimplicialObject.IsCoskeletal X 2 where
221-
isRightKanExtension := isRightKanExtension X
219+
theorem isCoskeletal (sx : StrictSegal X) :
220+
SimplicialObject.IsCoskeletal X 2 where
221+
isRightKanExtension := sx.isRightKanExtension
222+
223+
/-- When `X` satisfies `IsStrictSegal`, `X` is 2-coskeletal. -/
224+
instance isCoskeletal' [IsStrictSegal X] : SimplicialObject.IsCoskeletal X 2 :=
225+
isCoskeletal <| ofIsStrictSegal X
222226

223227
end StrictSegal
224228

@@ -232,8 +236,8 @@ namespace Nerve
232236

233237
open SSet
234238

235-
example (C : Type u) [Category.{v} C] :
236-
SimplicialObject.IsCoskeletal (nerve C) 2 := by infer_instance
239+
instance (C : Type u) [Category.{v} C] :
240+
SimplicialObject.IsCoskeletal (nerve C) 2 := inferInstance
237241

238242
/-- The essential data of the nerve functor is contained in the 2-truncation, which is
239243
recorded by the composite functor `nerveFunctor₂`. -/

0 commit comments

Comments
 (0)