File: Mathlib/CategoryTheory/MorphismProperty/Composition.lean

full_name: CategoryTheory.MorphismProperty.ContainsIdentities
code: /-- Typeclass expressing that a morphism property contain identities. -/
class ContainsIdentities (W : MorphismProperty C) : Prop :=
  /-- for all `X : C`, the identity of `X` satisfies the morphism property -/
  id_mem : ∀ (X : C), W (𝟙 X)
goal: Prop

full_name: CategoryTheory.MorphismProperty.ContainsIdentities.id_mem
code: /-- Typeclass expressing that a morphism property contain identities. -/
class ContainsIdentities (W : MorphismProperty C) : Prop :=
  /-- for all `X : C`, the identity of `X` satisfies the morphism property -/
  id_mem : ∀ (X : C), W (𝟙 X)
goal: W (CategoryTheory.CategoryStruct.id X)

full_name: CategoryTheory.MorphismProperty.id_mem
code: lemma id_mem (W : MorphismProperty C) [W.ContainsIdentities] (X : C) :
    W (𝟙 X) 
goal: W (CategoryTheory.CategoryStruct.id X)

full_name: CategoryTheory.MorphismProperty.ContainsIdentities.op
code: instance op (W : MorphismProperty C) [W.ContainsIdentities] :
    W.op.ContainsIdentities 
goal: W.op.ContainsIdentities

full_name: CategoryTheory.MorphismProperty.ContainsIdentities.unop
code: instance unop (W : MorphismProperty Cᵒᵖ) [W.ContainsIdentities] :
    W.unop.ContainsIdentities 
goal: W.unop.ContainsIdentities

full_name: CategoryTheory.MorphismProperty.ContainsIdentities.of_op
code: lemma of_op (W : MorphismProperty C) [W.op.ContainsIdentities] :
    W.ContainsIdentities 
goal: W.ContainsIdentities

full_name: CategoryTheory.MorphismProperty.ContainsIdentities.of_unop
code: lemma of_unop (W : MorphismProperty Cᵒᵖ) [W.unop.ContainsIdentities] :
    W.ContainsIdentities 
goal: W.ContainsIdentities

full_name: CategoryTheory.MorphismProperty.ContainsIdentities.inverseImage
code: instance inverseImage {P : MorphismProperty D} [P.ContainsIdentities] (F : C ⥤ D) :
    (P.inverseImage F).ContainsIdentities 
goal: (P.inverseImage F).ContainsIdentities

full_name: CategoryTheory.MorphismProperty.Prod.containsIdentities
code: instance Prod.containsIdentities {C₁ C₂ : Type*} [Category C₁] [Category C₂]
    (W₁ : MorphismProperty C₁) (W₂ : MorphismProperty C₂)
    [W₁.ContainsIdentities] [W₂.ContainsIdentities] : (prod W₁ W₂).ContainsIdentities 
goal: (W₁.prod W₂).ContainsIdentities

full_name: CategoryTheory.MorphismProperty.Pi.containsIdentities
code: instance Pi.containsIdentities {J : Type w} {C : J → Type u}
  [∀ j, Category.{v} (C j)] (W : ∀ j, MorphismProperty (C j)) [∀ j, (W j).ContainsIdentities] :
    (pi W).ContainsIdentities 
goal: (CategoryTheory.MorphismProperty.pi W).ContainsIdentities

full_name: CategoryTheory.MorphismProperty.IsStableUnderComposition
code: /-- A morphism property satisfies `IsStableUnderComposition` if the composition of
two such morphisms still falls in the class. -/
class IsStableUnderComposition (P : MorphismProperty C) : Prop :=
  comp_mem {X Y Z} (f : X ⟶ Y) (g : Y ⟶ Z) : P f → P g → P (f ≫ g)
goal: Prop

full_name: CategoryTheory.MorphismProperty.IsStableUnderComposition.comp_mem
code: /-- A morphism property satisfies `IsStableUnderComposition` if the composition of
two such morphisms still falls in the class. -/
class IsStableUnderComposition (P : MorphismProperty C) : Prop :=
  comp_mem {X Y Z} (f : X ⟶ Y) (g : Y ⟶ Z) : P f → P g → P (f ≫ g)
goal: P f → P g → P (CategoryTheory.CategoryStruct.comp f g)

full_name: CategoryTheory.MorphismProperty.comp_mem
code: lemma comp_mem (W : MorphismProperty C) [W.IsStableUnderComposition]
    {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (hf : W f) (hg : W g) : W (f ≫ g) 
goal: W (CategoryTheory.CategoryStruct.comp f g)

full_name: CategoryTheory.MorphismProperty.IsStableUnderComposition.op
code: instance IsStableUnderComposition.op {P : MorphismProperty C} [P.IsStableUnderComposition] :
    P.op.IsStableUnderComposition 
goal: P.op.IsStableUnderComposition

full_name: CategoryTheory.MorphismProperty.IsStableUnderComposition.unop
code: instance IsStableUnderComposition.unop {P : MorphismProperty Cᵒᵖ} [P.IsStableUnderComposition] :
    P.unop.IsStableUnderComposition 
goal: P.unop.IsStableUnderComposition

full_name: CategoryTheory.MorphismProperty.StableUnderInverse
code: /-- A morphism property is `StableUnderInverse` if the inverse of a morphism satisfying
the property still falls in the class. -/
def StableUnderInverse (P : MorphismProperty C) : Prop 
goal: Prop

full_name: CategoryTheory.MorphismProperty.StableUnderInverse.op
code: theorem StableUnderInverse.op {P : MorphismProperty C} (h : StableUnderInverse P) :
    StableUnderInverse P.op 
goal: P.op.StableUnderInverse

full_name: CategoryTheory.MorphismProperty.StableUnderInverse.unop
code: theorem StableUnderInverse.unop {P : MorphismProperty Cᵒᵖ} (h : StableUnderInverse P) :
    StableUnderInverse P.unop 
goal: P.unop.StableUnderInverse

full_name: CategoryTheory.MorphismProperty.respectsIso_of_isStableUnderComposition
code: theorem respectsIso_of_isStableUnderComposition {P : MorphismProperty C}
    [P.IsStableUnderComposition] (hP : isomorphisms C ≤ P) :
    RespectsIso P 
goal: P.RespectsIso

full_name: CategoryTheory.MorphismProperty.IsStableUnderComposition.inverseImage
code: instance IsStableUnderComposition.inverseImage {P : MorphismProperty D} [P.IsStableUnderComposition]
    (F : C ⥤ D) : (P.inverseImage F).IsStableUnderComposition 
goal: (P.inverseImage F).IsStableUnderComposition

full_name: CategoryTheory.MorphismProperty.naturalityProperty
code: /-- Given `app : Π X, F₁.obj X ⟶ F₂.obj X` where `F₁` and `F₂` are two functors,
this is the `morphism_property C` satisfied by the morphisms in `C` with respect
to whom `app` is natural. -/
@[simp]
def naturalityProperty {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) : MorphismProperty C 
goal: CategoryTheory.MorphismProperty C

full_name: CategoryTheory.MorphismProperty.naturalityProperty.isStableUnderComposition
code: instance isStableUnderComposition {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
    (naturalityProperty app).IsStableUnderComposition 
goal: (CategoryTheory.MorphismProperty.naturalityProperty app).IsStableUnderComposition

full_name: CategoryTheory.MorphismProperty.naturalityProperty.stableUnderInverse
code: theorem stableUnderInverse {F₁ F₂ : C ⥤ D} (app : ∀ X, F₁.obj X ⟶ F₂.obj X) :
    (naturalityProperty app).StableUnderInverse 
goal: (CategoryTheory.MorphismProperty.naturalityProperty app).StableUnderInverse

full_name: CategoryTheory.MorphismProperty.IsMultiplicative
code: /-- A morphism property is multiplicative if it contains identities and is stable by
composition. -/
class IsMultiplicative (W : MorphismProperty C)
    extends W.ContainsIdentities, W.IsStableUnderComposition : Prop :=
goal: Prop

full_name: CategoryTheory.MorphismProperty.IsMultiplicative.op
code: instance op (W : MorphismProperty C) [IsMultiplicative W] : IsMultiplicative W.op 
goal: W.op.IsMultiplicative

full_name: CategoryTheory.MorphismProperty.IsMultiplicative.unop
code: instance unop (W : MorphismProperty Cᵒᵖ) [IsMultiplicative W] : IsMultiplicative W.unop 
goal: W.unop.IsMultiplicative

full_name: CategoryTheory.MorphismProperty.IsMultiplicative.of_op
code: lemma of_op (W : MorphismProperty C) [IsMultiplicative W.op] : IsMultiplicative W 
goal: W.IsMultiplicative

full_name: CategoryTheory.MorphismProperty.IsMultiplicative.of_unop
code: lemma of_unop (W : MorphismProperty Cᵒᵖ) [IsMultiplicative W.unop] : IsMultiplicative W 
goal: W.IsMultiplicative

full_name: CategoryTheory.MorphismProperty.IsMultiplicative.instIsomorphisms
code: instance : (isomorphisms C).IsMultiplicative 
goal: (CategoryTheory.MorphismProperty.isomorphisms C).IsMultiplicative

full_name: CategoryTheory.MorphismProperty.IsMultiplicative.instMonomorphisms
code: instance : (monomorphisms C).IsMultiplicative 
goal: (CategoryTheory.MorphismProperty.monomorphisms C).IsMultiplicative

full_name: CategoryTheory.MorphismProperty.IsMultiplicative.instEpimorphisms
code: instance : (epimorphisms C).IsMultiplicative 
goal: (CategoryTheory.MorphismProperty.epimorphisms C).IsMultiplicative

full_name: CategoryTheory.MorphismProperty.IsMultiplicative.instInverseImage
code: instance {P : MorphismProperty D} [P.IsMultiplicative] (F : C ⥤ D) :
    (P.inverseImage F).IsMultiplicative 
goal: (P.inverseImage F).IsMultiplicative

full_name: CategoryTheory.MorphismProperty.HasTwoOutOfThreeProperty.of_precomp
code: /-- A class of morphisms `W` has the two-out-of-three property if whenever two out
of three maps in `f`, `g`, `f ≫ g` are in `W`, then the third map is also in `W`. -/
class HasTwoOutOfThreeProperty (W : MorphismProperty C)
    extends W.IsStableUnderComposition : Prop where
  of_postcomp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : W g → W (f ≫ g) → W f
  of_precomp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : W f → W (f ≫ g) → W g
goal: W f → W (CategoryTheory.CategoryStruct.comp f g) → W g

full_name: CategoryTheory.MorphismProperty.HasTwoOutOfThreeProperty
code: /-- A class of morphisms `W` has the two-out-of-three property if whenever two out
of three maps in `f`, `g`, `f ≫ g` are in `W`, then the third map is also in `W`. -/
class HasTwoOutOfThreeProperty (W : MorphismProperty C)
    extends W.IsStableUnderComposition : Prop where
  of_postcomp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : W g → W (f ≫ g) → W f
  of_precomp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : W f → W (f ≫ g) → W g
goal: Prop

full_name: CategoryTheory.MorphismProperty.HasTwoOutOfThreeProperty.of_postcomp
code: /-- A class of morphisms `W` has the two-out-of-three property if whenever two out
of three maps in `f`, `g`, `f ≫ g` are in `W`, then the third map is also in `W`. -/
class HasTwoOutOfThreeProperty (W : MorphismProperty C)
    extends W.IsStableUnderComposition : Prop where
  of_postcomp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : W g → W (f ≫ g) → W f
  of_precomp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : W f → W (f ≫ g) → W g
goal: W g → W (CategoryTheory.CategoryStruct.comp f g) → W f

full_name: CategoryTheory.MorphismProperty.of_postcomp
code: lemma of_postcomp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (hg : W g) (hfg : W (f ≫ g)) :
    W f 
goal: W f

full_name: CategoryTheory.MorphismProperty.of_precomp
code: lemma of_precomp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (hf : W f) (hfg : W (f ≫ g)) :
    W g 
goal: W g

full_name: CategoryTheory.MorphismProperty.postcomp_iff
code: lemma postcomp_iff {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (hg : W g) :
    W (f ≫ g) ↔ W f 
goal: W (CategoryTheory.CategoryStruct.comp f g) ↔ W f

full_name: CategoryTheory.MorphismProperty.precomp_iff
code: lemma precomp_iff {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) (hf : W f) :
    W (f ≫ g) ↔ W g 
goal: W (CategoryTheory.CategoryStruct.comp f g) ↔ W g

full_name: CategoryTheory.MorphismProperty.instHasTwoOutOfThreePropertyIsomorphisms
code: instance : (isomorphisms C).HasTwoOutOfThreeProperty 
goal: (CategoryTheory.MorphismProperty.isomorphisms C).HasTwoOutOfThreeProperty

full_name: CategoryTheory.MorphismProperty.instHasTwoOutOfThreePropertyInverseImage
code: instance (F : C ⥤ D) (W : MorphismProperty D) [W.HasTwoOutOfThreeProperty] :
    (W.inverseImage F).HasTwoOutOfThreeProperty 
goal: (W.inverseImage F).HasTwoOutOfThreeProperty