File: Mathlib/CategoryTheory/Monoidal/Subcategory.lean

full_name: CategoryTheory.MonoidalCategory.MonoidalPredicate.prop_tensor
code: /-- A property `C → Prop` is a monoidal predicate if it is closed under `𝟙_` and `⊗`.
-/
class MonoidalPredicate : Prop where
  prop_id : P (𝟙_ C) := by aesop_cat
  prop_tensor : ∀ {X Y}, P X → P Y → P (X ⊗ Y) := by aesop_cat
goal: P X → P Y → P (CategoryTheory.MonoidalCategory.tensorObj X Y)

full_name: CategoryTheory.MonoidalCategory.MonoidalPredicate
code: /-- A property `C → Prop` is a monoidal predicate if it is closed under `𝟙_` and `⊗`.
-/
class MonoidalPredicate : Prop where
  prop_id : P (𝟙_ C) := by aesop_cat
  prop_tensor : ∀ {X Y}, P X → P Y → P (X ⊗ Y) := by aesop_cat
goal: Prop

full_name: CategoryTheory.MonoidalCategory.MonoidalPredicate.prop_id
code: /-- A property `C → Prop` is a monoidal predicate if it is closed under `𝟙_` and `⊗`.
-/
class MonoidalPredicate : Prop where
  prop_id : P (𝟙_ C) := by aesop_cat
  prop_tensor : ∀ {X Y}, P X → P Y → P (X ⊗ Y) := by aesop_cat
goal: P (𝟙_ C)

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_rightUnitor_inv
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: (CategoryTheory.MonoidalCategory.rightUnitor X).inv = (CategoryTheory.MonoidalCategory.rightUnitor X.obj).inv

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_associator_inv
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: (CategoryTheory.MonoidalCategory.associator X Y Z).inv =
  (CategoryTheory.MonoidalCategory.associator X.obj Y.obj Z.obj).inv

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_tensorHom
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: ∀ {X₁ Y₁ X₂ Y₂ : CategoryTheory.FullSubcategory P} (f : X₁ ⟶ Y₁) (g : X₂ ⟶ Y₂),
  CategoryTheory.MonoidalCategory.tensorHom f g = CategoryTheory.MonoidalCategory.tensorHom f g

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_whiskerRight
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: CategoryTheory.MonoidalCategory.whiskerRight f Y = CategoryTheory.MonoidalCategory.whiskerRight f Y.obj

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: CategoryTheory.MonoidalCategoryStruct (CategoryTheory.FullSubcategory P)

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_rightUnitor_hom
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: (CategoryTheory.MonoidalCategory.rightUnitor X).hom = (CategoryTheory.MonoidalCategory.rightUnitor X.obj).hom

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_associator_hom
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: (CategoryTheory.MonoidalCategory.associator X Y Z).hom =
  (CategoryTheory.MonoidalCategory.associator X.obj Y.obj Z.obj).hom

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_whiskerLeft
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: ∀ (x x_1 : CategoryTheory.FullSubcategory P) (f : x ⟶ x_1),
  CategoryTheory.MonoidalCategory.whiskerLeft X f = CategoryTheory.MonoidalCategory.whiskerLeft X.obj f

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_tensorObj_obj
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: (CategoryTheory.MonoidalCategory.tensorObj X Y).obj = CategoryTheory.MonoidalCategory.tensorObj X.obj Y.obj

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_tensorUnit_obj
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: (𝟙_ (CategoryTheory.FullSubcategory P)).obj = 𝟙_ C

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_leftUnitor_hom
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: (CategoryTheory.MonoidalCategory.leftUnitor X).hom = (CategoryTheory.MonoidalCategory.leftUnitor X.obj).hom

full_name: CategoryTheory.MonoidalCategory.instMonoidalCategoryStructFullSubcategory_leftUnitor_inv
code: @[simps]
instance : MonoidalCategoryStruct (FullSubcategory P) 
goal: (CategoryTheory.MonoidalCategory.leftUnitor X).inv = (CategoryTheory.MonoidalCategory.leftUnitor X.obj).inv

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategory
code: /--
When `P` is a monoidal predicate, the full subcategory for `P` inherits the monoidal structure of
  `C`.
-/
instance fullMonoidalSubcategory : MonoidalCategory (FullSubcategory P) 
goal: CategoryTheory.MonoidalCategory (CategoryTheory.FullSubcategory P)

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion_toLaxMonoidalFunctor_μ
code: /-- The forgetful monoidal functor from a full monoidal subcategory into the original category
("forgetting" the condition).
-/
@[simps]
def fullMonoidalSubcategoryInclusion : MonoidalFunctor (FullSubcategory P) C 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion P).μ X Y =
  CategoryTheory.CategoryStruct.id
    (CategoryTheory.MonoidalCategory.tensorObj ((CategoryTheory.fullSubcategoryInclusion P).obj X)
      ((CategoryTheory.fullSubcategoryInclusion P).obj Y))

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion_toLaxMonoidalFunctor_toFunctor
code: /-- The forgetful monoidal functor from a full monoidal subcategory into the original category
("forgetting" the condition).
-/
@[simps]
def fullMonoidalSubcategoryInclusion : MonoidalFunctor (FullSubcategory P) C 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion P).toFunctor =
  CategoryTheory.fullSubcategoryInclusion P

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion
code: /-- The forgetful monoidal functor from a full monoidal subcategory into the original category
("forgetting" the condition).
-/
@[simps]
def fullMonoidalSubcategoryInclusion : MonoidalFunctor (FullSubcategory P) C 
goal: CategoryTheory.MonoidalFunctor (CategoryTheory.FullSubcategory P) C

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion_toLaxMonoidalFunctor_ε
code: /-- The forgetful monoidal functor from a full monoidal subcategory into the original category
("forgetting" the condition).
-/
@[simps]
def fullMonoidalSubcategoryInclusion : MonoidalFunctor (FullSubcategory P) C 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion P).ε = CategoryTheory.CategoryStruct.id (𝟙_ C)

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.full
code: instance fullMonoidalSubcategory.full : (fullMonoidalSubcategoryInclusion P).Full 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion P).Full

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.faithful
code: instance fullMonoidalSubcategory.faithful :
    (fullMonoidalSubcategoryInclusion P).Faithful 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion P).Faithful

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion_additive
code: instance fullMonoidalSubcategoryInclusion_additive :
    (fullMonoidalSubcategoryInclusion P).toFunctor.Additive 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion P).Additive

full_name: CategoryTheory.MonoidalCategory.instMonoidalPreadditiveFullSubcategory
code: instance [MonoidalPreadditive C] : MonoidalPreadditive (FullSubcategory P) 
goal: CategoryTheory.MonoidalPreadditive (CategoryTheory.FullSubcategory P)

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion_linear
code: instance fullMonoidalSubcategoryInclusion_linear :
    (fullMonoidalSubcategoryInclusion P).toFunctor.Linear R 
goal: CategoryTheory.Functor.Linear R (CategoryTheory.MonoidalCategory.fullMonoidalSubcategoryInclusion P).toFunctor

full_name: CategoryTheory.MonoidalCategory.instMonoidalLinearFullSubcategory
code: instance [MonoidalPreadditive C] [MonoidalLinear R C] : MonoidalLinear R (FullSubcategory P) 
goal: CategoryTheory.MonoidalLinear R (CategoryTheory.FullSubcategory P)

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map
code: /-- An implication of predicates `P → P'` induces a monoidal functor between full monoidal
subcategories. -/
@[simps]
def fullMonoidalSubcategory.map (h : ∀ ⦃X⦄, P X → P' X) :
    MonoidalFunctor (FullSubcategory P) (FullSubcategory P') 
goal: CategoryTheory.MonoidalFunctor (CategoryTheory.FullSubcategory P) (CategoryTheory.FullSubcategory P')

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map_toLaxMonoidalFunctor_ε
code: /-- An implication of predicates `P → P'` induces a monoidal functor between full monoidal
subcategories. -/
@[simps]
def fullMonoidalSubcategory.map (h : ∀ ⦃X⦄, P X → P' X) :
    MonoidalFunctor (FullSubcategory P) (FullSubcategory P') 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map h).ε =
  CategoryTheory.CategoryStruct.id (𝟙_ (CategoryTheory.FullSubcategory P'))

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map_toLaxMonoidalFunctor_μ
code: /-- An implication of predicates `P → P'` induces a monoidal functor between full monoidal
subcategories. -/
@[simps]
def fullMonoidalSubcategory.map (h : ∀ ⦃X⦄, P X → P' X) :
    MonoidalFunctor (FullSubcategory P) (FullSubcategory P') 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map h).μ X Y =
  CategoryTheory.CategoryStruct.id
    (CategoryTheory.MonoidalCategory.tensorObj ((CategoryTheory.FullSubcategory.map h).obj X)
      ((CategoryTheory.FullSubcategory.map h).obj Y))

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map_toLaxMonoidalFunctor_toFunctor
code: /-- An implication of predicates `P → P'` induces a monoidal functor between full monoidal
subcategories. -/
@[simps]
def fullMonoidalSubcategory.map (h : ∀ ⦃X⦄, P X → P' X) :
    MonoidalFunctor (FullSubcategory P) (FullSubcategory P') 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map h).toFunctor = CategoryTheory.FullSubcategory.map h

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map_full
code: instance fullMonoidalSubcategory.map_full (h : ∀ ⦃X⦄, P X → P' X) :
    (fullMonoidalSubcategory.map h).Full 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map h).Full

full_name: CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map_faithful
code: instance fullMonoidalSubcategory.map_faithful (h : ∀ ⦃X⦄, P X → P' X) :
    (fullMonoidalSubcategory.map h).Faithful 
goal: (CategoryTheory.MonoidalCategory.fullMonoidalSubcategory.map h).Faithful

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategory
code: /-- The braided structure on a full subcategory inherited by the braided structure on `C`.
-/
instance fullBraidedSubcategory : BraidedCategory (FullSubcategory P) 
goal: CategoryTheory.BraidedCategory (CategoryTheory.FullSubcategory P)

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion_μ
code: /-- The forgetful braided functor from a full braided subcategory into the original category
("forgetting" the condition).
-/
@[simps!]
def fullBraidedSubcategoryInclusion : BraidedFunctor (FullSubcategory P) C 
goal: (CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion P).μ X Y =
  CategoryTheory.CategoryStruct.id (CategoryTheory.MonoidalCategory.tensorObj X.obj Y.obj)

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion
code: /-- The forgetful braided functor from a full braided subcategory into the original category
("forgetting" the condition).
-/
@[simps!]
def fullBraidedSubcategoryInclusion : BraidedFunctor (FullSubcategory P) C 
goal: CategoryTheory.BraidedFunctor (CategoryTheory.FullSubcategory P) C

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion_map
code: /-- The forgetful braided functor from a full braided subcategory into the original category
("forgetting" the condition).
-/
@[simps!]
def fullBraidedSubcategoryInclusion : BraidedFunctor (FullSubcategory P) C 
goal: ∀ {X Y : CategoryTheory.InducedCategory C CategoryTheory.FullSubcategory.obj} (f : X ⟶ Y),
  (CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion P).map f = f

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion_ε
code: /-- The forgetful braided functor from a full braided subcategory into the original category
("forgetting" the condition).
-/
@[simps!]
def fullBraidedSubcategoryInclusion : BraidedFunctor (FullSubcategory P) C 
goal: (CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion P).ε = CategoryTheory.CategoryStruct.id (𝟙_ C)

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion_obj
code: /-- The forgetful braided functor from a full braided subcategory into the original category
("forgetting" the condition).
-/
@[simps!]
def fullBraidedSubcategoryInclusion : BraidedFunctor (FullSubcategory P) C 
goal: (CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion P).obj self = self.obj

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategory.full
code: instance fullBraidedSubcategory.full : (fullBraidedSubcategoryInclusion P).Full 
goal: (CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion P).Full

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategory.faithful
code: instance fullBraidedSubcategory.faithful : (fullBraidedSubcategoryInclusion P).Faithful 
goal: (CategoryTheory.MonoidalCategory.fullBraidedSubcategoryInclusion P).Faithful

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map_map
code: /-- An implication of predicates `P → P'` induces a braided functor between full braided
subcategories. -/
@[simps!]
def fullBraidedSubcategory.map (h : ∀ ⦃X⦄, P X → P' X) :
    BraidedFunctor (FullSubcategory P) (FullSubcategory P') 
goal: ∀ {X Y : CategoryTheory.FullSubcategory P} (f : X ⟶ Y),
  (CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map h).map f = f

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map_obj_obj
code: /-- An implication of predicates `P → P'` induces a braided functor between full braided
subcategories. -/
@[simps!]
def fullBraidedSubcategory.map (h : ∀ ⦃X⦄, P X → P' X) :
    BraidedFunctor (FullSubcategory P) (FullSubcategory P') 
goal: ((CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map h).obj X).obj = X.obj

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map_μ
code: /-- An implication of predicates `P → P'` induces a braided functor between full braided
subcategories. -/
@[simps!]
def fullBraidedSubcategory.map (h : ∀ ⦃X⦄, P X → P' X) :
    BraidedFunctor (FullSubcategory P) (FullSubcategory P') 
goal: (CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map h).μ X Y =
  CategoryTheory.CategoryStruct.id
    (CategoryTheory.MonoidalCategory.tensorObj ((CategoryTheory.FullSubcategory.map h).obj X)
      ((CategoryTheory.FullSubcategory.map h).obj Y))

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map
code: /-- An implication of predicates `P → P'` induces a braided functor between full braided
subcategories. -/
@[simps!]
def fullBraidedSubcategory.map (h : ∀ ⦃X⦄, P X → P' X) :
    BraidedFunctor (FullSubcategory P) (FullSubcategory P') 
goal: CategoryTheory.BraidedFunctor (CategoryTheory.FullSubcategory P) (CategoryTheory.FullSubcategory P')

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map_ε
code: /-- An implication of predicates `P → P'` induces a braided functor between full braided
subcategories. -/
@[simps!]
def fullBraidedSubcategory.map (h : ∀ ⦃X⦄, P X → P' X) :
    BraidedFunctor (FullSubcategory P) (FullSubcategory P') 
goal: (CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map h).ε =
  CategoryTheory.CategoryStruct.id (𝟙_ (CategoryTheory.FullSubcategory P'))

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategory.mapFull
code: instance fullBraidedSubcategory.mapFull (h : ∀ ⦃X⦄, P X → P' X) :
    (fullBraidedSubcategory.map h).Full 
goal: (CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map h).Full

full_name: CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map_faithful
code: instance fullBraidedSubcategory.map_faithful (h : ∀ ⦃X⦄, P X → P' X) :
    (fullBraidedSubcategory.map h).Faithful 
goal: (CategoryTheory.MonoidalCategory.fullBraidedSubcategory.map h).Faithful

full_name: CategoryTheory.MonoidalCategory.fullSymmetricSubcategory
code: instance fullSymmetricSubcategory : SymmetricCategory (FullSubcategory P) 
goal: CategoryTheory.SymmetricCategory (CategoryTheory.FullSubcategory P)

full_name: CategoryTheory.MonoidalCategory.ClosedPredicate.prop_ihom
code: /-- A property `C → Prop` is a closed predicate if it is closed under taking internal homs
-/
class ClosedPredicate : Prop where
  prop_ihom : ∀ {X Y}, P X → P Y → P ((ihom X).obj Y) := by aesop_cat
goal: P X → P Y → P ((CategoryTheory.ihom X).obj Y)

full_name: CategoryTheory.MonoidalCategory.ClosedPredicate
code: /-- A property `C → Prop` is a closed predicate if it is closed under taking internal homs
-/
class ClosedPredicate : Prop where
  prop_ihom : ∀ {X Y}, P X → P Y → P ((ihom X).obj Y) := by aesop_cat
goal: Prop

full_name: CategoryTheory.MonoidalCategory.fullMonoidalClosedSubcategory
code: instance fullMonoidalClosedSubcategory : MonoidalClosed (FullSubcategory P) 
goal: CategoryTheory.MonoidalClosed (CategoryTheory.FullSubcategory P)

full_name: CategoryTheory.MonoidalCategory.fullMonoidalClosedSubcategory_ihom_obj
code: @[simp]
theorem fullMonoidalClosedSubcategory_ihom_obj (X Y : FullSubcategory P) :
    ((ihom X).obj Y).obj = (ihom X.obj).obj Y.obj 
goal: ((CategoryTheory.ihom X).obj Y).obj = (CategoryTheory.ihom X.obj).obj Y.obj

full_name: CategoryTheory.MonoidalCategory.fullMonoidalClosedSubcategory_ihom_map
code: @[simp]
theorem fullMonoidalClosedSubcategory_ihom_map (X : FullSubcategory P) {Y Z : FullSubcategory P}
    (f : Y ⟶ Z) : (ihom X).map f = (ihom X.obj).map f 
goal: (CategoryTheory.ihom X).map f = (CategoryTheory.ihom X.obj).map f