Extensive categories #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Main definitions #
category_theory.is_van_kampen_colimit
: A (colimit) cocone over a diagramF : J ⥤ C
is van Kampen if for every coconec'
over the pullback of the diagramF' : J ⥤ C'
,c'
is colimiting iffc'
is the pullback ofc
.category_theory.finitary_extensive
: A category is (finitary) extensive if it has finite coproducts, and binary coproducts are van Kampen.
Main Results #
category_theory.has_strict_initial_objects_of_finitary_extensive
: The initial object in extensive categories is strict.category_theory.finitary_extensive.mono_inr_of_is_colimit
: Coproduct injections are monic in extensive categories.category_theory.binary_cofan.is_pullback_initial_to_of_is_van_kampen
: In extensive categories, sums are disjoint, i.e. the pullback ofX ⟶ X ⨿ Y
andY ⟶ X ⨿ Y
is the initial object.category_theory.types.finitary_extensive
: The category of types is extensive.
TODO #
Show that the following are finitary extensive:
- the categories of sheaves over a site
Scheme
AffineScheme
(CommRingᵒᵖ
)
References #
A natural transformation is equifibered if every commutative square of the following form is a pullback.
F(X) → F(Y)
↓ ↓
G(X) → G(Y)
Equations
- category_theory.nat_trans.equifibered α = ∀ ⦃i j : J⦄ (f : i ⟶ j), category_theory.is_pullback (F.map f) (α.app i) (α.app j) (G.map f)
A (colimit) cocone over a diagram F : J ⥤ C
is universal if it is stable under pullbacks.
Equations
- category_theory.is_universal_colimit c = ∀ ⦃F' : J ⥤ C⦄ (c' : category_theory.limits.cocone F') (α : F' ⟶ F) (f : c'.X ⟶ c.X), α ≫ c.ι = c'.ι ≫ (category_theory.functor.const J).map f → category_theory.nat_trans.equifibered α → (∀ (j : J), category_theory.is_pullback (c'.ι.app j) (α.app j) f (c.ι.app j)) → nonempty (category_theory.limits.is_colimit c')
A (colimit) cocone over a diagram F : J ⥤ C
is van Kampen if for every cocone c'
over the
pullback of the diagram F' : J ⥤ C'
, c'
is colimiting iff c'
is the pullback of c
.
TODO: Show that this is iff the functor C ⥤ Catᵒᵖ
sending x
to C/x
preserves it.
TODO: Show that this is iff the inclusion functor C ⥤ Span(C)
preserves it.
Equations
- category_theory.is_van_kampen_colimit c = ∀ ⦃F' : J ⥤ C⦄ (c' : category_theory.limits.cocone F') (α : F' ⟶ F) (f : c'.X ⟶ c.X), α ≫ c.ι = c'.ι ≫ (category_theory.functor.const J).map f → category_theory.nat_trans.equifibered α → (nonempty (category_theory.limits.is_colimit c') ↔ ∀ (j : J), category_theory.is_pullback (c'.ι.app j) (α.app j) f (c.ι.app j))
A van Kampen colimit is a colimit.
Equations
- h.is_colimit = _.some
- has_finite_coproducts : category_theory.limits.has_finite_coproducts C
- van_kampen' : ∀ {X Y : C} (c : category_theory.limits.binary_cofan X Y), category_theory.limits.is_colimit c → category_theory.is_van_kampen_colimit c
A category is (finitary) extensive if it has finite coproducts, and binary coproducts are van Kampen.
TODO: Show that this is iff all finite coproducts are van Kampen.
Instances of this typeclass
(Implementation) An auxiliary lemma for the proof that Top
is finitary extensive.
Equations
- category_theory.finitary_extensive_Top_aux Z f = let eX : {p // ⇑f p.fst = sum.inl p.snd} ≃ {x // ⇑f x = sum.inl punit.star} := {to_fun := λ (p : {p // ⇑f p.fst = sum.inl p.snd}), ⟨p.val.fst, _⟩, inv_fun := λ (x : {x // ⇑f x = sum.inl punit.star}), ⟨(x.val, punit.star), _⟩, left_inv := _, right_inv := _}, eY : {p // ⇑f p.fst = sum.inr p.snd} ≃ {x // ⇑f x = sum.inr punit.star} := {to_fun := λ (p : {p // ⇑f p.fst = sum.inr p.snd}), ⟨p.val.fst, _⟩, inv_fun := λ (x : {x // ⇑f x = sum.inr punit.star}), ⟨(x.val, punit.star), _⟩, left_inv := _, right_inv := _} in category_theory.limits.binary_cofan.is_colimit_mk (λ (s : category_theory.limits.binary_cofan (Top.of {p // ⇑f p.fst = ⇑(((Top.of punit).binary_cofan (Top.of punit)).inl) p.snd}) (Top.of {p // ⇑f p.fst = ⇑(((Top.of punit).binary_cofan (Top.of punit)).inr) p.snd})), {to_fun := λ (x : ↥Z), dite (⇑f x = sum.inl punit.star) (λ (h : ⇑f x = sum.inl punit.star), ⇑(s.inl) (⇑(eX.symm) ⟨x, h⟩)) (λ (h : ¬⇑f x = sum.inl punit.star), ⇑(s.inr) (⇑(eY.symm) ⟨x, _⟩)), continuous_to_fun := _}) _ _ _