# Subobjects in the category of structured arrows #

We compute the subobjects of an object A in the category StructuredArrow S T for T : C ⥤ D and S : D as a subtype of the subobjects of A.right. We deduce that StructuredArrow S T is well-powered if C is.

## 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.

def CategoryTheory.StructuredArrow.projectSubobject {C : Type u₁} [] {D : Type u₂} [] {S : D} {T : } {A : } :

Every subobject of a structured arrow can be projected to a subobject of the underlying object.

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem CategoryTheory.StructuredArrow.projectSubobject_mk {C : Type u₁} [] {D : Type u₂} [] {S : D} {T : } {A : } {P : } (f : P A) :
theorem CategoryTheory.StructuredArrow.projectSubobject_factors {C : Type u₁} [] {D : Type u₂} [] {S : D} {T : } {A : } (P : ) :
∃ (q : .obj A.left T.obj (CategoryTheory.Subobject.underlying.obj )), = A.hom
def CategoryTheory.StructuredArrow.liftSubobject {C : Type u₁} [] {D : Type u₂} [] {S : D} {T : } {A : } (P : CategoryTheory.Subobject A.right) {q : .obj A.left T.obj (CategoryTheory.Subobject.underlying.obj P)} (hq : CategoryTheory.CategoryStruct.comp q (T.map P.arrow) = A.hom) :

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.

Equations
Instances For
theorem CategoryTheory.StructuredArrow.lift_projectSubobject {C : Type u₁} [] {D : Type u₂} [] {S : D} {T : } {A : } (P : ) {q : .obj A.left T.obj (CategoryTheory.Subobject.underlying.obj )} (hq : = A.hom) :

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.

@[simp]
theorem CategoryTheory.StructuredArrow.subobjectEquiv_apply_coe {C : Type u₁} [] {D : Type u₂} [] {S : D} {T : } (A : ) (P : ) :
(A.subobjectEquiv P) =
@[simp]
theorem CategoryTheory.StructuredArrow.subobjectEquiv_symm_apply {C : Type u₁} [] {D : Type u₂} [] {S : D} {T : } (A : ) (P : { P : CategoryTheory.Subobject A.right // ∃ (q : .obj A.left T.obj (CategoryTheory.Subobject.underlying.obj P)), CategoryTheory.CategoryStruct.comp q (T.map P.arrow) = A.hom }) :
(RelIso.symm A.subobjectEquiv) P =
def CategoryTheory.StructuredArrow.subobjectEquiv {C : Type u₁} [] {D : Type u₂} [] {S : D} {T : } (A : ) :
≃o { P : CategoryTheory.Subobject A.right // ∃ (q : .obj A.left T.obj (CategoryTheory.Subobject.underlying.obj P)), CategoryTheory.CategoryStruct.comp q (T.map P.arrow) = A.hom }

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
• One or more equations did not get rendered due to their size.
Instances For
instance CategoryTheory.StructuredArrow.wellPowered_structuredArrow {C : Type u₁} [] {D : Type u₂} [] {S : D} {T : } :

If C is well-powered and complete and T preserves limits, then StructuredArrow S T is well-powered.

Equations
• =
def CategoryTheory.CostructuredArrow.projectQuotient {C : Type u₁} [] {D : Type u₂} [] {S : } {T : D} {A : } :
CategoryTheory.Subobject { unop := A }CategoryTheory.Subobject { unop := A.left }

Every quotient of a costructured arrow can be projected to a quotient of the underlying object.

Equations
• One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem CategoryTheory.CostructuredArrow.projectQuotient_mk {C : Type u₁} [] {D : Type u₂} [] {S : } {T : D} {A : } {P : } (f : P { unop := A }) :
theorem CategoryTheory.CostructuredArrow.projectQuotient_factors {C : Type u₁} [] {D : Type u₂} [] {S : } {T : D} {A : } (P : CategoryTheory.Subobject { unop := A }) :
∃ (q : S.obj (CategoryTheory.Subobject.underlying.obj ).unop .obj A.right), CategoryTheory.CategoryStruct.comp (S.map .unop) q = A.hom
def CategoryTheory.CostructuredArrow.liftQuotient {C : Type u₁} [] {D : Type u₂} [] {S : } {T : D} {A : } (P : CategoryTheory.Subobject { unop := A.left }) {q : S.obj (CategoryTheory.Subobject.underlying.obj P).unop .obj A.right} (hq : CategoryTheory.CategoryStruct.comp (S.map P.arrow.unop) q = A.hom) :

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.

Equations
Instances For
@[simp]
theorem CategoryTheory.CostructuredArrow.unop_left_comp_underlyingIso_hom_unop {C : Type u₁} [] {D : Type u₂} [] {S : } {T : D} {A : } {P : } (f : P { unop := A }) [CategoryTheory.Mono f.unop.left.op] :
CategoryTheory.CategoryStruct.comp f.unop.left (CategoryTheory.Subobject.underlyingIso f.unop.left.op).hom.unop = (CategoryTheory.Subobject.mk f.unop.left.op).arrow.unop

Technical lemma for lift_projectQuotient.

theorem CategoryTheory.CostructuredArrow.lift_projectQuotient {C : Type u₁} [] {D : Type u₂} [] {S : } {T : D} {A : } (P : CategoryTheory.Subobject { unop := A }) {q : S.obj (CategoryTheory.Subobject.underlying.obj ).unop .obj A.right} (hq : CategoryTheory.CategoryStruct.comp (S.map .unop) q = A.hom) :

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.

theorem CategoryTheory.CostructuredArrow.unop_left_comp_ofMkLEMk_unop {C : Type u₁} [] {D : Type u₂} [] {S : } {T : D} {A : } {P : } {Q : } {f : P { unop := A }} {g : Q { unop := A }} [CategoryTheory.Mono f.unop.left.op] [CategoryTheory.Mono g.unop.left.op] (h : CategoryTheory.Subobject.mk f.unop.left.op CategoryTheory.Subobject.mk g.unop.left.op) :
CategoryTheory.CategoryStruct.comp g.unop.left (CategoryTheory.Subobject.ofMkLEMk f.unop.left.op g.unop.left.op h).unop = f.unop.left

Technical lemma for quotientEquiv.

def CategoryTheory.CostructuredArrow.quotientEquiv {C : Type u₁} [] {D : Type u₂} [] {S : } {T : D} (A : ) :
CategoryTheory.Subobject { unop := A } ≃o { P : CategoryTheory.Subobject { unop := A.left } // ∃ (q : S.obj (CategoryTheory.Subobject.underlying.obj P).unop .obj A.right), CategoryTheory.CategoryStruct.comp (S.map P.arrow.unop) q = A.hom }

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
• One or more equations did not get rendered due to their size.
Instances For

If C is well-copowered and cocomplete and S preserves colimits, then CostructuredArrow S T is well-copowered.

Equations
• =