Wide pullbacks #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
We define the category wide_pullback_shape
, (resp. wide_pushout_shape
) which is the category
obtained from a discrete category of type J
by adjoining a terminal (resp. initial) element.
Limits of this shape are wide pullbacks (pushouts).
The convenience method wide_cospan
(wide_span
) constructs a functor from this category, hitting
the given morphisms.
We use wide_pullback_shape
to define ordinary pullbacks (pushouts) by using J := walking_pair
,
which allows easy proofs of some related lemmas.
Furthermore, wide pullbacks are used to show the existence of limits in the slice category.
Namely, if C
has wide pullbacks then C/B
has limits for any object B
in C
.
Typeclasses has_wide_pullbacks
and has_finite_wide_pullbacks
assert the existence of wide
pullbacks and finite wide pullbacks.
A wide pullback shape for any type J
can be written simply as option J
.
Equations
Instances for category_theory.limits.wide_pullback_shape
- category_theory.limits.has_pullbacks_of_has_wide_pullbacks
- category_theory.abelian.has_pullbacks
- category_theory.limits.wide_pullback_shape.inhabited
- category_theory.limits.wide_pullback_shape.struct
- category_theory.limits.wide_pullback_shape.category
- category_theory.limits.wide_pullback_shape.fintype_obj
- category_theory.limits.fin_category_wide_pullback
- category_theory.limits.has_limits_of_shape_wide_pullback_shape
- category_theory.limits.has_pullbacks_opposite
- category_theory.wide_pullback_shape_connected
- category_theory.over.category_theory.limits.has_pullbacks
- algebraic_geometry.Scheme.pullback.algebraic_geometry.Scheme.category_theory.limits.has_pullbacks
A wide pushout shape for any type J
can be written simply as option J
.
Equations
Instances for category_theory.limits.wide_pushout_shape
- category_theory.abelian.has_pushouts
- category_theory.limits.wide_pushout_shape.inhabited
- category_theory.limits.wide_pushout_shape.struct
- category_theory.limits.wide_pushout_shape.category
- category_theory.limits.wide_pushout_shape.fintype_obj
- category_theory.limits.fin_category_wide_pushout
- category_theory.limits.has_colimits_of_shape_wide_pushout_shape
- category_theory.limits.has_pushouts_opposite
- category_theory.wide_pushout_shape_connected
- id : Π {J : Type w} (X : category_theory.limits.wide_pullback_shape J), X.hom X
- term : Π {J : Type w} (j : J), category_theory.limits.wide_pullback_shape.hom (option.some j) option.none
The type of arrows for the shape indexing a wide pullback.
Instances for category_theory.limits.wide_pullback_shape.hom
- category_theory.limits.wide_pullback_shape.hom.has_sizeof_inst
- category_theory.limits.wide_pullback_shape.hom.inhabited
Equations
- category_theory.limits.wide_pullback_shape.struct = {to_quiver := {hom := category_theory.limits.wide_pullback_shape.hom J}, id := λ (j : category_theory.limits.wide_pullback_shape J), category_theory.limits.wide_pullback_shape.hom.id j, comp := λ (j₁ j₂ j₃ : category_theory.limits.wide_pullback_shape J) (f : j₁ ⟶ j₂) (g : j₂ ⟶ j₃), category_theory.limits.wide_pullback_shape.hom.cases_on f (λ (f_1 : category_theory.limits.wide_pullback_shape J) (H_1 : j₁ = f_1), eq.rec (λ (H_2 : j₂ = j₁), eq.rec (λ (f : j₁ ⟶ j₁) (g : j₁ ⟶ j₃) (H_3 : f == category_theory.limits.wide_pullback_shape.hom.id j₁), eq.rec g _) _ f g) H_1) (λ (f_1 : J) (H_1 : j₁ = option.some f_1), eq.rec (λ (f : option.some f_1 ⟶ j₂) (H_2 : j₂ = option.none), eq.rec (λ (g : option.none ⟶ j₃) (f : option.some f_1 ⟶ option.none) (H_3 : f == category_theory.limits.wide_pullback_shape.hom.term f_1), eq.rec (category_theory.limits.wide_pullback_shape.hom.cases_on g (λ (g_1 : category_theory.limits.wide_pullback_shape J) (H_1 : option.none = g_1), eq.rec (λ (H_2 : j₃ = option.none), eq.rec (λ (g : option.none ⟶ option.none) (H_3 : g == category_theory.limits.wide_pullback_shape.hom.id option.none), eq.rec (category_theory.limits.wide_pullback_shape.hom.term f_1) _) _ g) H_1) (λ (g_1 : J) (H_1 : option.none = option.some g_1), option.no_confusion H_1) category_theory.limits.wide_pullback_shape.struct._proof_5 _ _) _) _ g f) _ f) _ _ _}
Construct a functor out of the wide pullback shape given a J-indexed collection of arrows to a fixed object.
Equations
- category_theory.limits.wide_pullback_shape.wide_cospan B objs arrows = {obj := λ (j : category_theory.limits.wide_pullback_shape J), option.cases_on j B objs, map := λ (X Y : category_theory.limits.wide_pullback_shape J) (f : X ⟶ Y), category_theory.limits.wide_pullback_shape.hom.cases_on f (λ (f_1 : category_theory.limits.wide_pullback_shape J) (H_1 : X = f_1), eq.rec (λ (H_2 : Y = X), eq.rec (λ (f : X ⟶ X) (H_3 : f == category_theory.limits.wide_pullback_shape.hom.id X), eq.rec (𝟙 (option.cases_on X B objs)) _) _ f) H_1) (λ (j : J) (H_1 : X = option.some j), eq.rec (λ (f : option.some j ⟶ Y) (H_2 : Y = option.none), eq.rec (λ (f : option.some j ⟶ option.none) (H_3 : f == category_theory.limits.wide_pullback_shape.hom.term j), eq.rec (arrows j) _) _ f) _ f) _ _ _, map_id' := _, map_comp' := _}
Instances for category_theory.limits.wide_pullback_shape.wide_cospan
Every diagram is naturally isomorphic (actually, equal) to a wide_cospan
Construct a cone over a wide cospan.
Equations
- category_theory.limits.wide_pullback_shape.mk_cone f π w = {X := X, π := {app := λ (j : category_theory.limits.wide_pullback_shape J), category_theory.limits.wide_pullback_shape.mk_cone._match_1 f π j, naturality' := _}}
- category_theory.limits.wide_pullback_shape.mk_cone._match_1 f π (option.some j) = π j
- category_theory.limits.wide_pullback_shape.mk_cone._match_1 f π option.none = f
Wide pullback diagrams of equivalent index types are equivlent.
Equations
- category_theory.limits.wide_pullback_shape.equivalence_of_equiv J' h = {functor := category_theory.limits.wide_pullback_shape.wide_cospan option.none (λ (j : J), option.some (⇑h j)) (λ (j : J), category_theory.limits.wide_pullback_shape.hom.term (⇑h j)), inverse := category_theory.limits.wide_pullback_shape.wide_cospan option.none (λ (j : J'), option.some (h.inv_fun j)) (λ (j : J'), category_theory.limits.wide_pullback_shape.hom.term (h.inv_fun j)), unit_iso := category_theory.nat_iso.of_components (λ (j : category_theory.limits.wide_pullback_shape J), option.cases_on j (_.mpr (category_theory.iso.refl option.none)) (λ (j : J), _.mpr (category_theory.iso.refl (option.some j)))) _, counit_iso := category_theory.nat_iso.of_components (λ (j : category_theory.limits.wide_pullback_shape J'), option.cases_on j (_.mpr (category_theory.iso.refl option.none)) (λ (j : J'), _.mpr (category_theory.iso.refl (option.some j)))) _, functor_unit_iso_comp' := _}
Lifting universe and morphism levels preserves wide pullback diagrams.
- id : Π {J : Type w} (X : category_theory.limits.wide_pushout_shape J), X.hom X
- init : Π {J : Type w} (j : J), category_theory.limits.wide_pushout_shape.hom option.none (option.some j)
The type of arrows for the shape indexing a wide psuhout.
Instances for category_theory.limits.wide_pushout_shape.hom
- category_theory.limits.wide_pushout_shape.hom.has_sizeof_inst
- category_theory.limits.wide_pushout_shape.hom.inhabited
Equations
- category_theory.limits.wide_pushout_shape.struct = {to_quiver := {hom := category_theory.limits.wide_pushout_shape.hom J}, id := λ (j : category_theory.limits.wide_pushout_shape J), category_theory.limits.wide_pushout_shape.hom.id j, comp := λ (j₁ j₂ j₃ : category_theory.limits.wide_pushout_shape J) (f : j₁ ⟶ j₂) (g : j₂ ⟶ j₃), category_theory.limits.wide_pushout_shape.hom.cases_on f (λ (f_1 : category_theory.limits.wide_pushout_shape J) (H_1 : j₁ = f_1), eq.rec (λ (H_2 : j₂ = j₁), eq.rec (λ (f : j₁ ⟶ j₁) (g : j₁ ⟶ j₃) (H_3 : f == category_theory.limits.wide_pushout_shape.hom.id j₁), eq.rec g _) _ f g) H_1) (λ (f_1 : J) (H_1 : j₁ = option.none), eq.rec (λ (f : option.none ⟶ j₂) (H_2 : j₂ = option.some f_1), eq.rec (λ (g : option.some f_1 ⟶ j₃) (f : option.none ⟶ option.some f_1) (H_3 : f == category_theory.limits.wide_pushout_shape.hom.init f_1), eq.rec (category_theory.limits.wide_pushout_shape.hom.cases_on g (λ (g_1 : category_theory.limits.wide_pushout_shape J) (H_1 : option.some f_1 = g_1), eq.rec (λ (H_2 : j₃ = option.some f_1), eq.rec (λ (g : option.some f_1 ⟶ option.some f_1) (H_3 : g == category_theory.limits.wide_pushout_shape.hom.id (option.some f_1)), eq.rec (category_theory.limits.wide_pushout_shape.hom.init f_1) _) _ g) H_1) (λ (g_1 : J) (H_1 : option.some f_1 = option.none), option.no_confusion H_1) _ _ _) _) _ g f) _ f) _ _ _}
Construct a functor out of the wide pushout shape given a J-indexed collection of arrows from a fixed object.
Equations
- category_theory.limits.wide_pushout_shape.wide_span B objs arrows = {obj := λ (j : category_theory.limits.wide_pushout_shape J), option.cases_on j B objs, map := λ (X Y : category_theory.limits.wide_pushout_shape J) (f : X ⟶ Y), category_theory.limits.wide_pushout_shape.hom.cases_on f (λ (f_1 : category_theory.limits.wide_pushout_shape J) (H_1 : X = f_1), eq.rec (λ (H_2 : Y = X), eq.rec (λ (f : X ⟶ X) (H_3 : f == category_theory.limits.wide_pushout_shape.hom.id X), eq.rec (𝟙 (option.cases_on X B objs)) _) _ f) H_1) (λ (j : J) (H_1 : X = option.none), eq.rec (λ (f : option.none ⟶ Y) (H_2 : Y = option.some j), eq.rec (λ (f : option.none ⟶ option.some j) (H_3 : f == category_theory.limits.wide_pushout_shape.hom.init j), eq.rec (arrows j) _) _ f) _ f) _ _ _, map_id' := _, map_comp' := _}
Every diagram is naturally isomorphic (actually, equal) to a wide_span
Construct a cocone over a wide span.
Equations
- category_theory.limits.wide_pushout_shape.mk_cocone f ι w = {X := X, ι := {app := λ (j : category_theory.limits.wide_pushout_shape J), category_theory.limits.wide_pushout_shape.mk_cocone._match_1 f ι j, naturality' := _}}
- category_theory.limits.wide_pushout_shape.mk_cocone._match_1 f ι (option.some j) = ι j
- category_theory.limits.wide_pushout_shape.mk_cocone._match_1 f ι option.none = f
has_wide_pullbacks
represents a choice of wide pullback for every collection of morphisms
has_wide_pushouts
represents a choice of wide pushout for every collection of morphisms
has_wide_pullback B objs arrows
means that wide_cospan B objs arrows
has a limit.
has_wide_pushout B objs arrows
means that wide_span B objs arrows
has a colimit.
A choice of wide pullback.
A choice of wide pushout.
The j
-th projection from the pullback.
The unique map to the base from the pullback.
Lift a collection of morphisms to a morphism to the pullback.
The j
-th inclusion to the pushout.
The unique map from the head to the pushout.
Descend a collection of morphisms to a morphism from the pushout.
The action on morphisms of the obvious functor
wide_pullback_shape_op : wide_pullback_shape J ⥤ (wide_pushout_shape J)ᵒᵖ
Equations
- category_theory.limits.wide_pullback_shape_op_map J (option.some j) option.none (category_theory.limits.wide_pullback_shape.hom.term j) = quiver.hom.op (category_theory.limits.wide_pushout_shape.hom.init j)
- category_theory.limits.wide_pullback_shape_op_map J X X (category_theory.limits.wide_pullback_shape.hom.id X) = quiver.hom.op (category_theory.limits.wide_pushout_shape.hom.id X)
The obvious functor wide_pullback_shape J ⥤ (wide_pushout_shape J)ᵒᵖ
Equations
- category_theory.limits.wide_pullback_shape_op J = {obj := λ (X : category_theory.limits.wide_pullback_shape J), opposite.op X, map := category_theory.limits.wide_pullback_shape_op_map J, map_id' := _, map_comp' := _}
The action on morphisms of the obvious functor
wide_pushout_shape_op :
wide_pushout_shape J ⥤ (wide_pullback_shape J)ᵒᵖ`
Equations
- category_theory.limits.wide_pushout_shape_op_map J option.none (option.some j) (category_theory.limits.wide_pushout_shape.hom.init j) = quiver.hom.op (category_theory.limits.wide_pullback_shape.hom.term j)
- category_theory.limits.wide_pushout_shape_op_map J X X (category_theory.limits.wide_pushout_shape.hom.id X) = quiver.hom.op (category_theory.limits.wide_pullback_shape.hom.id X)
The obvious functor wide_pushout_shape J ⥤ (wide_pullback_shape J)ᵒᵖ
Equations
- category_theory.limits.wide_pushout_shape_op J = {obj := λ (X : category_theory.limits.wide_pushout_shape J), opposite.op X, map := category_theory.limits.wide_pushout_shape_op_map J, map_id' := _, map_comp' := _}
The obvious functor (wide_pullback_shape J)ᵒᵖ ⥤ wide_pushout_shape J
The obvious functor (wide_pushout_shape J)ᵒᵖ ⥤ wide_pullback_shape J
The inverse of the unit isomorphism of the equivalence
wide_pushout_shape_op_equiv : (wide_pushout_shape J)ᵒᵖ ≌ wide_pullback_shape J
The counit isomorphism of the equivalence
wide_pullback_shape_op_equiv : (wide_pullback_shape J)ᵒᵖ ≌ wide_pushout_shape J
The inverse of the unit isomorphism of the equivalence
wide_pullback_shape_op_equiv : (wide_pullback_shape J)ᵒᵖ ≌ wide_pushout_shape J
The counit isomorphism of the equivalence
wide_pushout_shape_op_equiv : (wide_pushout_shape J)ᵒᵖ ≌ wide_pullback_shape J
The duality equivalence (wide_pushout_shape J)ᵒᵖ ≌ wide_pullback_shape J
Equations
- category_theory.limits.wide_pushout_shape_op_equiv J = {functor := category_theory.limits.wide_pushout_shape_unop J, inverse := category_theory.limits.wide_pullback_shape_op J, unit_iso := (category_theory.limits.wide_pushout_shape_op_unop J).symm, counit_iso := category_theory.limits.wide_pullback_shape_unop_op J, functor_unit_iso_comp' := _}
The duality equivalence (wide_pullback_shape J)ᵒᵖ ≌ wide_pushout_shape J
Equations
- category_theory.limits.wide_pullback_shape_op_equiv J = {functor := category_theory.limits.wide_pullback_shape_unop J, inverse := category_theory.limits.wide_pushout_shape_op J, unit_iso := (category_theory.limits.wide_pullback_shape_op_unop J).symm, counit_iso := category_theory.limits.wide_pushout_shape_unop_op J, functor_unit_iso_comp' := _}
If a category has wide pullbacks on a higher universe level it also has wide pullbacks on a lower universe level.