Subobjects in the category of structured arrows #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
We compute the subobjects of an object A
in the category structured_arrow S T
for T : C ⥤ D
and S : D
as a subtype of the subobjects of A.right
. We deduce that structured_arrow S T
is
well-powered if C
is.
Main declarations #
structured_arrow.equiv_subtype
: the order-equivalence betweensubobject A
and a subtype ofsubobject A.right
.
Implementation notes #
Our computation requires that C
has all limits and T
preserves all limits. Furthermore, we
require that the morphisms of C
and D
are in the same universe. It is possible that both of
these requirements can be relaxed by refining the results about limits in comma categories.
We also provide the dual results. As usual, we use subobject (op A)
for the quotient objects of
A
.
Every subobject of a structured arrow can be projected to a subobject of the underlying object.
Equations
- category_theory.structured_arrow.project_subobject = category_theory.subobject.lift (λ (P : category_theory.structured_arrow S T) (f : P ⟶ A) (hf : category_theory.mono f), category_theory.subobject.mk f.right) category_theory.structured_arrow.project_subobject._proof_2
A subobject of the underlying object of a structured arrow can be lifted to a subobject of the structured arrow, provided that there is a morphism making the subobject into a structured arrow.
Projecting and then lifting a subobject recovers the original subobject, because there is at most one morphism making the projected subobject into a structured arrow.
If A : S → T.obj B
is a structured arrow for S : D
and T : C ⥤ D
, then we can explicitly
describe the subobjects of A
as the subobjects P
of B
in C
for which A.hom
factors
through the image of P
under T
.
Equations
- A.subobject_equiv = {to_equiv := {to_fun := λ (P : category_theory.subobject A), ⟨category_theory.structured_arrow.project_subobject P, _⟩, inv_fun := λ (P : {P // ∃ (q : (category_theory.functor.from_punit S).obj A.left ⟶ T.obj ↑P), q ≫ T.map P.arrow = A.hom}), category_theory.structured_arrow.lift_subobject P.val _, left_inv := _, right_inv := _}, map_rel_iff' := _}
If C
is well-powered and complete and T
preserves limits, then structured_arrow S T
is
well-powered.
Every quotient of a costructured arrow can be projected to a quotient of the underlying object.
Equations
- category_theory.costructured_arrow.project_quotient = category_theory.subobject.lift (λ (P : (category_theory.costructured_arrow S T)ᵒᵖ) (f : P ⟶ opposite.op A) (hf : category_theory.mono f), category_theory.subobject.mk f.unop.left.op) category_theory.costructured_arrow.project_quotient._proof_2
A quotient of the underlying object of a costructured arrow can be lifted to a quotient of the costructured arrow, provided that there is a morphism making the quotient into a costructured arrow.
Technical lemma for lift_project_quotient
.
Projecting and then lifting a quotient recovers the original quotient, because there is at most one morphism making the projected quotient into a costructured arrow.
Technical lemma for quotient_equiv
.
If A : S.obj B ⟶ T
is a costructured arrow for S : C ⥤ D
and T : D
, then we can
explicitly describe the quotients of A
as the quotients P
of B
in C
for which A.hom
factors through the image of P
under S
.
Equations
- A.quotient_equiv = {to_equiv := {to_fun := λ (P : category_theory.subobject (opposite.op A)), ⟨category_theory.costructured_arrow.project_quotient P, _⟩, inv_fun := λ (P : {P // ∃ (q : S.obj (opposite.unop ↑P) ⟶ (category_theory.functor.from_punit T).obj A.right), S.map P.arrow.unop ≫ q = A.hom}), category_theory.costructured_arrow.lift_quotient P.val _, left_inv := _, right_inv := _}, map_rel_iff' := _}
If C
is well-copowered and cocomplete and S
preserves colimits, then
costructured_arrow S T
is well-copowered.