Module docstring
{"# Properties of objects which are closed under isomorphisms
Given a category C and P : ObjectProperty C (i.e. P : C → Prop),
this file introduces the type class P.IsClosedUnderIsomorphisms.
"}
{"# Properties of objects which are closed under isomorphisms
Given a category C and P : ObjectProperty C (i.e. P : C → Prop),
this file introduces the type class P.IsClosedUnderIsomorphisms.
"}
CategoryTheory.ObjectProperty.IsClosedUnderIsomorphisms
structure
/-- A predicate `C → Prop` on the objects of a category is closed under isomorphisms
if whenever `P X`, then all the objects `Y` that are isomorphic to `X` also satisfy `P Y`. -/
class IsClosedUnderIsomorphisms : Prop where
of_iso {X Y : C} (_ : X ≅ Y) (_ : P X) : P Y
CategoryTheory.ObjectProperty.prop_of_iso
theorem
[IsClosedUnderIsomorphisms P] {X Y : C} (e : X ≅ Y) (hX : P X) : P Y
lemma prop_of_iso [IsClosedUnderIsomorphisms P] {X Y : C} (e : X ≅ Y) (hX : P X) : P Y :=
IsClosedUnderIsomorphisms.of_iso e hX
CategoryTheory.ObjectProperty.prop_iff_of_iso
theorem
[IsClosedUnderIsomorphisms P] {X Y : C} (e : X ≅ Y) : P X ↔ P Y
lemma prop_iff_of_iso [IsClosedUnderIsomorphisms P] {X Y : C} (e : X ≅ Y) : P X ↔ P Y :=
⟨prop_of_iso P e, prop_of_iso P e.symm⟩
CategoryTheory.ObjectProperty.prop_of_isIso
theorem
[IsClosedUnderIsomorphisms P] {X Y : C} (f : X ⟶ Y) [IsIso f] (hX : P X) : P Y
lemma prop_of_isIso [IsClosedUnderIsomorphisms P] {X Y : C} (f : X ⟶ Y) [IsIso f] (hX : P X) :
P Y :=
prop_of_iso P (asIso f) hX
CategoryTheory.ObjectProperty.prop_iff_of_isIso
theorem
[IsClosedUnderIsomorphisms P] {X Y : C} (f : X ⟶ Y) [IsIso f] : P X ↔ P Y
lemma prop_iff_of_isIso [IsClosedUnderIsomorphisms P] {X Y : C} (f : X ⟶ Y) [IsIso f] : P X ↔ P Y :=
prop_iff_of_iso P (asIso f)
CategoryTheory.ObjectProperty.isoClosure
definition
: ObjectProperty C
/-- The closure by isomorphisms of a predicate on objects in a category. -/
def isoClosure : ObjectProperty C := fun X => ∃ (Y : C) (_ : P Y), Nonempty (X ≅ Y)
CategoryTheory.ObjectProperty.prop_isoClosure_iff
theorem
(X : C) : isoClosure P X ↔ ∃ (Y : C) (_ : P Y), Nonempty (X ≅ Y)
lemma prop_isoClosure_iff (X : C) :
isoClosureisoClosure P X ↔ ∃ (Y : C) (_ : P Y), Nonempty (X ≅ Y) := by rfl
CategoryTheory.ObjectProperty.prop_isoClosure
theorem
{X Y : C} (h : P X) (e : X ⟶ Y) [IsIso e] : isoClosure P Y
lemma prop_isoClosure {X Y : C} (h : P X) (e : X ⟶ Y) [IsIso e] : isoClosure P Y :=
⟨X, h, ⟨(asIso e).symm⟩⟩
CategoryTheory.ObjectProperty.le_isoClosure
theorem
: P ≤ isoClosure P
lemma le_isoClosure : P ≤ isoClosure P :=
fun X hX => ⟨X, hX, ⟨Iso.refl X⟩⟩
CategoryTheory.ObjectProperty.monotone_isoClosure
theorem
(h : P ≤ Q) : isoClosure P ≤ isoClosure Q
lemma monotone_isoClosure (h : P ≤ Q) : isoClosure P ≤ isoClosure Q := by
rintro X ⟨X', hX', ⟨e⟩⟩
exact ⟨X', h _ hX', ⟨e⟩⟩
CategoryTheory.ObjectProperty.isoClosure_eq_self
theorem
[IsClosedUnderIsomorphisms P] : isoClosure P = P
lemma isoClosure_eq_self [IsClosedUnderIsomorphisms P] : isoClosure P = P := by
apply le_antisymm
· intro X ⟨Y, hY, ⟨e⟩⟩
exact prop_of_iso P e.symm hY
· exact le_isoClosure P
CategoryTheory.ObjectProperty.isoClosure_le_iff
theorem
[IsClosedUnderIsomorphisms Q] : isoClosure P ≤ Q ↔ P ≤ Q
CategoryTheory.ObjectProperty.instIsClosedUnderIsomorphismsIsoClosure
instance
: IsClosedUnderIsomorphisms (isoClosure P)
instance : IsClosedUnderIsomorphisms (isoClosure P) where
of_iso := by
rintro X Y e ⟨Z, hZ, ⟨f⟩⟩
exact ⟨Z, hZ, ⟨e.symm.trans f⟩⟩
CategoryTheory.ObjectProperty.instIsClosedUnderIsomorphismsMap
instance
(F : C ⥤ D) : IsClosedUnderIsomorphisms (P.map F)
instance (F : C ⥤ D) : IsClosedUnderIsomorphisms (P.map F) where
of_iso := by
rintro _ _ e ⟨X, hX, ⟨e'⟩⟩
exact ⟨X, hX, ⟨e' ≪≫ e⟩⟩
CategoryTheory.ObjectProperty.instIsClosedUnderIsomorphismsInverseImage
instance
(F : D ⥤ C) [P.IsClosedUnderIsomorphisms] : IsClosedUnderIsomorphisms (P.inverseImage F)
instance (F : D ⥤ C) [P.IsClosedUnderIsomorphisms] :
IsClosedUnderIsomorphisms (P.inverseImage F) where
of_iso e hX := P.prop_of_iso (F.mapIso e) hX