Theorem: CategoryTheory.GradedObject.Monoidal.tensor_comp
File: Mathlib/CategoryTheory/GradedObject/Monoidal.lean

Proof steps:
state_before: I : Type u
inst✝⁵ : AddMonoid I
C : Type u_1
inst✝⁴ : Category.{u_2, u_1} C
inst✝³ : MonoidalCategory C
X₁ X₂ X₃ Y₁ Y₂ Y₃ : GradedObject I C
f₁ : X₁ ⟶ X₂
f₂ : X₂ ⟶ X₃
g₁ : Y₁ ⟶ Y₂
g₂ : Y₂ ⟶ Y₃
inst✝² : X₁.HasTensor Y₁
inst✝¹ : X₂.HasTensor Y₂
inst✝ : X₃.HasTensor Y₃
⊢ tensorHom (f₁ ≫ f₂) (g₁ ≫ g₂) = tensorHom f₁ g₁ ≫ tensorHom f₂ g₂
state_after: I : Type u
inst✝⁵ : AddMonoid I
C : Type u_1
inst✝⁴ : Category.{u_2, u_1} C
inst✝³ : MonoidalCategory C
X₁ X₂ X₃ Y₁ Y₂ Y₃ : GradedObject I C
f₁ : X₁ ⟶ X₂
f₂ : X₂ ⟶ X₃
g₁ : Y₁ ⟶ Y₂
g₂ : Y₂ ⟶ Y₃
inst✝² : X₁.HasTensor Y₁
inst✝¹ : X₂.HasTensor Y₂
inst✝ : X₃.HasTensor Y₃
⊢ (mapMap
      (((mapBifunctor (curriedTensor C) I I).map (f₁ ≫ f₂)).app Y₁ ≫
        ((mapBifunctor (curriedTensor C) I I).obj X₃).map (g₁ ≫ g₂))
      fun x => x.1 + x.2) =
    (mapMap
        (((mapBifunctor (curriedTensor C) I I).map f₁).app Y₁ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₂).map g₁)
        fun x => x.1 + x.2) ≫
      mapMap
        (((mapBifunctor (curriedTensor C) I I).map f₂).app Y₂ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₃).map g₂)
        fun x => x.1 + x.2
tactic: dsimp only [tensorHom, mapBifunctorMapMap]
state_before: I : Type u
inst✝⁵ : AddMonoid I
C : Type u_1
inst✝⁴ : Category.{u_2, u_1} C
inst✝³ : MonoidalCategory C
X₁ X₂ X₃ Y₁ Y₂ Y₃ : GradedObject I C
f₁ : X₁ ⟶ X₂
f₂ : X₂ ⟶ X₃
g₁ : Y₁ ⟶ Y₂
g₂ : Y₂ ⟶ Y₃
inst✝² : X₁.HasTensor Y₁
inst✝¹ : X₂.HasTensor Y₂
inst✝ : X₃.HasTensor Y₃
⊢ (mapMap
      (((mapBifunctor (curriedTensor C) I I).map (f₁ ≫ f₂)).app Y₁ ≫
        ((mapBifunctor (curriedTensor C) I I).obj X₃).map (g₁ ≫ g₂))
      fun x => x.1 + x.2) =
    (mapMap
        (((mapBifunctor (curriedTensor C) I I).map f₁).app Y₁ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₂).map g₁)
        fun x => x.1 + x.2) ≫
      mapMap
        (((mapBifunctor (curriedTensor C) I I).map f₂).app Y₂ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₃).map g₂)
        fun x => x.1 + x.2
state_after: I : Type u
inst✝⁵ : AddMonoid I
C : Type u_1
inst✝⁴ : Category.{u_2, u_1} C
inst✝³ : MonoidalCategory C
X₁ X₂ X₃ Y₁ Y₂ Y₃ : GradedObject I C
f₁ : X₁ ⟶ X₂
f₂ : X₂ ⟶ X₃
g₁ : Y₁ ⟶ Y₂
g₂ : Y₂ ⟶ Y₃
inst✝² : X₁.HasTensor Y₁
inst✝¹ : X₂.HasTensor Y₂
inst✝ : X₃.HasTensor Y₃
⊢ (mapMap
      (((mapBifunctor (curriedTensor C) I I).map (f₁ ≫ f₂)).app Y₁ ≫
        ((mapBifunctor (curriedTensor C) I I).obj X₃).map (g₁ ≫ g₂))
      fun x => x.1 + x.2) =
    mapMap
      ((((mapBifunctor (curriedTensor C) I I).map f₁).app Y₁ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₂).map g₁) ≫
        ((mapBifunctor (curriedTensor C) I I).map f₂).app Y₂ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₃).map g₂)
      fun x => x.1 + x.2
tactic: rw [← mapMap_comp]
state_before: I : Type u
inst✝⁵ : AddMonoid I
C : Type u_1
inst✝⁴ : Category.{u_2, u_1} C
inst✝³ : MonoidalCategory C
X₁ X₂ X₃ Y₁ Y₂ Y₃ : GradedObject I C
f₁ : X₁ ⟶ X₂
f₂ : X₂ ⟶ X₃
g₁ : Y₁ ⟶ Y₂
g₂ : Y₂ ⟶ Y₃
inst✝² : X₁.HasTensor Y₁
inst✝¹ : X₂.HasTensor Y₂
inst✝ : X₃.HasTensor Y₃
⊢ (mapMap
      (((mapBifunctor (curriedTensor C) I I).map (f₁ ≫ f₂)).app Y₁ ≫
        ((mapBifunctor (curriedTensor C) I I).obj X₃).map (g₁ ≫ g₂))
      fun x => x.1 + x.2) =
    mapMap
      ((((mapBifunctor (curriedTensor C) I I).map f₁).app Y₁ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₂).map g₁) ≫
        ((mapBifunctor (curriedTensor C) I I).map f₂).app Y₂ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₃).map g₂)
      fun x => x.1 + x.2
state_after: case h
I : Type u
inst✝⁵ : AddMonoid I
C : Type u_1
inst✝⁴ : Category.{u_2, u_1} C
inst✝³ : MonoidalCategory C
X₁ X₂ X₃ Y₁ Y₂ Y₃ : GradedObject I C
f₁ : X₁ ⟶ X₂
f₂ : X₂ ⟶ X₃
g₁ : Y₁ ⟶ Y₂
g₂ : Y₂ ⟶ Y₃
inst✝² : X₁.HasTensor Y₁
inst✝¹ : X₂.HasTensor Y₂
inst✝ : X₃.HasTensor Y₃
⊢ ((mapBifunctor (curriedTensor C) I I).map (f₁ ≫ f₂)).app Y₁ ≫
      ((mapBifunctor (curriedTensor C) I I).obj X₃).map (g₁ ≫ g₂) =
    (((mapBifunctor (curriedTensor C) I I).map f₁).app Y₁ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₂).map g₁) ≫
      ((mapBifunctor (curriedTensor C) I I).map f₂).app Y₂ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₃).map g₂
tactic: apply congr_mapMap
state_before: case h
I : Type u
inst✝⁵ : AddMonoid I
C : Type u_1
inst✝⁴ : Category.{u_2, u_1} C
inst✝³ : MonoidalCategory C
X₁ X₂ X₃ Y₁ Y₂ Y₃ : GradedObject I C
f₁ : X₁ ⟶ X₂
f₂ : X₂ ⟶ X₃
g₁ : Y₁ ⟶ Y₂
g₂ : Y₂ ⟶ Y₃
inst✝² : X₁.HasTensor Y₁
inst✝¹ : X₂.HasTensor Y₂
inst✝ : X₃.HasTensor Y₃
⊢ ((mapBifunctor (curriedTensor C) I I).map (f₁ ≫ f₂)).app Y₁ ≫
      ((mapBifunctor (curriedTensor C) I I).obj X₃).map (g₁ ≫ g₂) =
    (((mapBifunctor (curriedTensor C) I I).map f₁).app Y₁ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₂).map g₁) ≫
      ((mapBifunctor (curriedTensor C) I I).map f₂).app Y₂ ≫ ((mapBifunctor (curriedTensor C) I I).obj X₃).map g₂
state_after: no goals
tactic: simp