Theorem: CategoryTheory.monoidalPreadditive_of_faithful
File: Mathlib/CategoryTheory/Monoidal/Preadditive.lean

Proof steps:
state_before: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
⊢ ∀ {X Y Z : D}, X ◁ 0 = 0
state_after: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
⊢ X✝ ◁ 0 = 0
tactic: intros
state_before: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
⊢ X✝ ◁ 0 = 0
state_after: case a
C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
⊢ F.map (X✝ ◁ 0) = F.map 0
tactic: apply F.toFunctor.map_injective
state_before: case a
C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
⊢ F.map (X✝ ◁ 0) = F.map 0
state_after: no goals
tactic: simp [F.map_whiskerLeft]
state_before: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
⊢ ∀ {X Y Z : D}, 0 ▷ X = 0
state_after: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
⊢ 0 ▷ X✝ = 0
tactic: intros
state_before: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
⊢ 0 ▷ X✝ = 0
state_after: case a
C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
⊢ F.map (0 ▷ X✝) = F.map 0
tactic: apply F.toFunctor.map_injective
state_before: case a
C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
⊢ F.map (0 ▷ X✝) = F.map 0
state_after: no goals
tactic: simp [F.map_whiskerRight]
state_before: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
⊢ ∀ {X Y Z : D} (f g : Y ⟶ Z), X ◁ (f + g) = X ◁ f + X ◁ g
state_after: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
f✝ g✝ : Y✝ ⟶ Z✝
⊢ X✝ ◁ (f✝ + g✝) = X✝ ◁ f✝ + X✝ ◁ g✝
tactic: intros
state_before: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
f✝ g✝ : Y✝ ⟶ Z✝
⊢ X✝ ◁ (f✝ + g✝) = X✝ ◁ f✝ + X✝ ◁ g✝
state_after: case a
C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
f✝ g✝ : Y✝ ⟶ Z✝
⊢ F.map (X✝ ◁ (f✝ + g✝)) = F.map (X✝ ◁ f✝ + X✝ ◁ g✝)
tactic: apply F.toFunctor.map_injective
state_before: case a
C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
f✝ g✝ : Y✝ ⟶ Z✝
⊢ F.map (X✝ ◁ (f✝ + g✝)) = F.map (X✝ ◁ f✝ + X✝ ◁ g✝)
state_after: no goals
tactic: simp only [F.map_whiskerLeft, Functor.map_add, Preadditive.comp_add, Preadditive.add_comp,
        MonoidalPreadditive.whiskerLeft_add]
state_before: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
⊢ ∀ {X Y Z : D} (f g : Y ⟶ Z), (f + g) ▷ X = f ▷ X + g ▷ X
state_after: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
f✝ g✝ : Y✝ ⟶ Z✝
⊢ (f✝ + g✝) ▷ X✝ = f✝ ▷ X✝ + g✝ ▷ X✝
tactic: intros
state_before: C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
f✝ g✝ : Y✝ ⟶ Z✝
⊢ (f✝ + g✝) ▷ X✝ = f✝ ▷ X✝ + g✝ ▷ X✝
state_after: case a
C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
f✝ g✝ : Y✝ ⟶ Z✝
⊢ F.map ((f✝ + g✝) ▷ X✝) = F.map (f✝ ▷ X✝ + g✝ ▷ X✝)
tactic: apply F.toFunctor.map_injective
state_before: case a
C : Type u_1
inst✝⁸ : Category.{u_4, u_1} C
inst✝⁷ : Preadditive C
inst✝⁶ : MonoidalCategory C
inst✝⁵ : MonoidalPreadditive C
D : Type u_2
inst✝⁴ : Category.{u_3, u_2} D
inst✝³ : Preadditive D
inst✝² : MonoidalCategory D
F : MonoidalFunctor D C
inst✝¹ : F.Faithful
inst✝ : F.Additive
X✝ Y✝ Z✝ : D
f✝ g✝ : Y✝ ⟶ Z✝
⊢ F.map ((f✝ + g✝) ▷ X✝) = F.map (f✝ ▷ X✝ + g✝ ▷ X✝)
state_after: no goals
tactic: simp only [F.map_whiskerRight, Functor.map_add, Preadditive.comp_add, Preadditive.add_comp,
        MonoidalPreadditive.add_whiskerRight]