Module docstring
{"# The full subcategory associated to a property of objects
Given a category C and P : ObjectProperty C, we define
a category structure on the type P.FullSubcategory
of objects in C satisfying P.
"}
{"# The full subcategory associated to a property of objects
Given a category C and P : ObjectProperty C, we define
a category structure on the type P.FullSubcategory
of objects in C satisfying P.
"}
CategoryTheory.ObjectProperty.FullSubcategory
structure
/--
A subtype-like structure for full subcategories. Morphisms just ignore the property. We don't use
actual subtypes since the simp-normal form `↑X` of `X.val` does not work well for full
subcategories. -/
@[ext, stacks 001D "We do not define 'strictly full' subcategories."]
structure FullSubcategory where
/-- The category of which this is a full subcategory -/
obj : C
/-- The predicate satisfied by all objects in this subcategory -/
property : P obj
CategoryTheory.ObjectProperty.FullSubcategory.category
instance
: Category.{v} P.FullSubcategory
instance FullSubcategory.category : Category.{v} P.FullSubcategory :=
InducedCategory.category FullSubcategory.obj
CategoryTheory.ObjectProperty.FullSubcategory.id_def
theorem
(X : P.FullSubcategory) : 𝟙 X = 𝟙 X.obj
lemma FullSubcategory.id_def (X : P.FullSubcategory) : 𝟙 X = 𝟙 X.obj := rfl
CategoryTheory.ObjectProperty.FullSubcategory.comp_def
theorem
{X Y Z : P.FullSubcategory} (f : X ⟶ Y) (g : Y ⟶ Z) : f ≫ g = (f ≫ g : X.obj ⟶ Z.obj)
lemma FullSubcategory.comp_def {X Y Z : P.FullSubcategory} (f : X ⟶ Y) (g : Y ⟶ Z) :
f ≫ g = (f ≫ g : X.obj ⟶ Z.obj) := rfl
CategoryTheory.ObjectProperty.ι
definition
: P.FullSubcategory ⥤ C
/-- The forgetful functor from a full subcategory into the original category
("forgetting" the condition).
-/
def ι : P.FullSubcategory ⥤ C :=
inducedFunctor FullSubcategory.obj
CategoryTheory.ObjectProperty.ι_obj
theorem
{X} : P.ι.obj X = X.obj
CategoryTheory.ObjectProperty.ι_map
theorem
{X Y} {f : X ⟶ Y} : P.ι.map f = f
CategoryTheory.ObjectProperty.fullyFaithfulι
abbrev
: P.ι.FullyFaithful
/-- The inclusion of a full subcategory is fully faithful. -/
abbrev fullyFaithfulι :
P.ι.FullyFaithful :=
fullyFaithfulInducedFunctor _
CategoryTheory.ObjectProperty.full_ι
instance
: P.ι.Full
instance full_ι : P.ι.Full := P.fullyFaithfulι.full
CategoryTheory.ObjectProperty.faithful_ι
instance
: P.ι.Faithful
instance faithful_ι : P.ι.Faithful := P.fullyFaithfulι.faithful
CategoryTheory.ObjectProperty.isoMk
definition
{X Y : P.FullSubcategory} (e : P.ι.obj X ≅ P.ι.obj Y) : X ≅ Y
/-- Constructor for isomorphisms in `P.FullSubcategory` when
`P : ObjectProperty C`. -/
@[simps]
def isoMk {X Y : P.FullSubcategory} (e : P.ι.obj X ≅ P.ι.obj Y) : X ≅ Y where
hom := e.hom
inv := e.inv
hom_inv_id := e.hom_inv_id
inv_hom_id := e.inv_hom_id
CategoryTheory.ObjectProperty.ιOfLE
definition
(h : P ≤ P') : P.FullSubcategory ⥤ P'.FullSubcategory
/-- If `P` and `P'` are properties of objects such that `P ≤ P'`, there is
an induced functor `P.FullSubcategory ⥤ P'.FullSubcategory`. -/
@[simps]
def ιOfLE (h : P ≤ P') : P.FullSubcategory ⥤ P'.FullSubcategory where
obj X := ⟨X.1, h _ X.2⟩
map f := f
CategoryTheory.ObjectProperty.fullyFaithfulιOfLE
definition
(h : P ≤ P') : (ιOfLE h).FullyFaithful
/-- If `h : P ≤ P'`, then `ιOfLE h` is fully faithful. -/
def fullyFaithfulιOfLE (h : P ≤ P') :
(ιOfLE h).FullyFaithful where
preimage f := f
CategoryTheory.ObjectProperty.full_ιOfLE
instance
(h : P ≤ P') : (ιOfLE h).Full
instance full_ιOfLE (h : P ≤ P') : (ιOfLE h).Full := (fullyFaithfulιOfLE h).full
CategoryTheory.ObjectProperty.faithful_ιOfLE
instance
(h : P ≤ P') : (ιOfLE h).Faithful
instance faithful_ιOfLE (h : P ≤ P') : (ιOfLE h).Faithful := (fullyFaithfulιOfLE h).faithful
CategoryTheory.ObjectProperty.FullSubcategory.map_inclusion
theorem
(h : P ≤ P') : ιOfLE h ⋙ P'.ι = P.ι
@[deprecated "use ιOfLECompιIso" (since := "2025-03-04")]
theorem FullSubcategory.map_inclusion (h : P ≤ P') :
ιOfLEιOfLE h ⋙ P'.ι = P.ι := rfl
CategoryTheory.ObjectProperty.ιOfLECompιIso
definition
(h : P ≤ P') : ιOfLE h ⋙ P'.ι ≅ P.ι
/-- If `h : P ≤ P'` is an inequality of properties of objects,
this is the obvious isomorphism `ιOfLE h ⋙ P'.ι ≅ P.ι`. -/
def ιOfLECompιIso (h : P ≤ P') : ιOfLEιOfLE h ⋙ P'.ιιOfLE h ⋙ P'.ι ≅ P.ι := Iso.refl _
CategoryTheory.ObjectProperty.lift
definition
: C ⥤ FullSubcategory P
/-- A functor which maps objects to objects satisfying a certain property induces a lift through
the full subcategory of objects satisfying that property. -/
@[simps]
def lift : C ⥤ FullSubcategory P where
obj X := ⟨F.obj X, hF X⟩
map f := F.map f
CategoryTheory.ObjectProperty.FullSubcategory.lift_comp_inclusion_eq
theorem
: P.lift F hF ⋙ P.ι = F
@[deprecated "use liftCompιIso" (since := "2025-03-04")]
theorem FullSubcategory.lift_comp_inclusion_eq :
P.lift F hF ⋙ P.ι = F :=
rfl
CategoryTheory.ObjectProperty.liftCompιIso
definition
: P.lift F hF ⋙ P.ι ≅ F
/-- Composing the lift of a functor through a full subcategory with the inclusion yields the
original functor. This is actually true definitionally. -/
def liftCompιIso : P.lift F hF ⋙ P.ιP.lift F hF ⋙ P.ι ≅ F := Iso.refl _
CategoryTheory.ObjectProperty.ι_obj_lift_obj
theorem
(X : C) : P.ι.obj ((P.lift F hF).obj X) = F.obj X
CategoryTheory.ObjectProperty.ι_obj_lift_map
theorem
{X Y : C} (f : X ⟶ Y) : P.ι.map ((P.lift F hF).map f) = F.map f
CategoryTheory.ObjectProperty.instFaithfulFullSubcategoryLift
instance
[F.Faithful] : (P.lift F hF).Faithful
instance [F.Faithful] : (P.lift F hF).Faithful :=
Functor.Faithful.of_comp_iso (P.liftCompιIso F hF)
CategoryTheory.ObjectProperty.instFullFullSubcategoryLift
instance
[F.Full] : (P.lift F hF).Full
instance [F.Full] : (P.lift F hF).Full :=
Functor.Full.of_comp_faithful_iso (P.liftCompιIso F hF)
CategoryTheory.ObjectProperty.instFaithfulFullSubcategoryLift_1
instance
[F.Faithful] : (P.lift F hF).Faithful
instance [F.Faithful] : (P.lift F hF).Faithful :=
Functor.Faithful.of_comp_iso (P.liftCompιIso F hF)
CategoryTheory.ObjectProperty.instFullFullSubcategoryLift_1
instance
[F.Full] : (P.lift F hF).Full
instance [F.Full] : (P.lift F hF).Full :=
Functor.Full.of_comp_faithful_iso (P.liftCompιIso F hF)
CategoryTheory.ObjectProperty.liftCompιOfLEIso
definition
(h : P ≤ Q) : P.lift F hF ⋙ ιOfLE h ≅ Q.lift F (fun X ↦ h _ (hF X))
/-- When `h : P ≤ Q`, this is the canonical isomorphism
`P.lift F hF ⋙ ιOfLE h ≅ Q.lift F _`. -/
def liftCompιOfLEIso (h : P ≤ Q) :
P.lift F hF ⋙ ιOfLE hP.lift F hF ⋙ ιOfLE h ≅ Q.lift F (fun X ↦ h _ (hF X)) := Iso.refl _
CategoryTheory.ObjectProperty.FullSubcategory.lift_comp_map
theorem
(h : P ≤ Q) : P.lift F hF ⋙ ιOfLE h = Q.lift F (fun X ↦ h _ (hF X))
@[deprecated "Use liftCompιOfLEIso" (since := "2025-03-04")]
theorem FullSubcategory.lift_comp_map (h : P ≤ Q) :
P.lift F hF ⋙ ιOfLE h =
Q.lift F (fun X ↦ h _ (hF X)) :=
rfl