Theorem: CategoryTheory.GradedObject.Monoidal.tensorObj_ext
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₂ : GradedObject I C
inst✝ : X₁.HasTensor X₂
A : C
j : I
f g : tensorObj X₁ X₂ j ⟶ A
h : ∀ (i₁ i₂ : I) (hi : i₁ + i₂ = j), ιTensorObj X₁ X₂ i₁ i₂ j hi ≫ f = ιTensorObj X₁ X₂ i₁ i₂ j hi ≫ g
⊢ f = g
state_after: case hfg
I : Type u
inst✝³ : AddMonoid I
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : MonoidalCategory C
X₁ X₂ : GradedObject I C
inst✝ : X₁.HasTensor X₂
A : C
j : I
f g : tensorObj X₁ X₂ j ⟶ A
h : ∀ (i₁ i₂ : I) (hi : i₁ + i₂ = j), ιTensorObj X₁ X₂ i₁ i₂ j hi ≫ f = ιTensorObj X₁ X₂ i₁ i₂ j hi ≫ g
⊢ ∀ (i : I × I)
    (hij :
      (match i with
        | (i, j) => i + j) =
        j),
    (((mapBifunctor (curriedTensor C) I I).obj X₁).obj X₂).ιMapObj
          (fun x =>
            match x with
            | (i, j) => i + j)
          i j hij ≫
        f =
      (((mapBifunctor (curriedTensor C) I I).obj X₁).obj X₂).ιMapObj
          (fun x =>
            match x with
            | (i, j) => i + j)
          i j hij ≫
        g
tactic: apply mapObj_ext
state_before: case hfg
I : Type u
inst✝³ : AddMonoid I
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : MonoidalCategory C
X₁ X₂ : GradedObject I C
inst✝ : X₁.HasTensor X₂
A : C
j : I
f g : tensorObj X₁ X₂ j ⟶ A
h : ∀ (i₁ i₂ : I) (hi : i₁ + i₂ = j), ιTensorObj X₁ X₂ i₁ i₂ j hi ≫ f = ιTensorObj X₁ X₂ i₁ i₂ j hi ≫ g
⊢ ∀ (i : I × I)
    (hij :
      (match i with
        | (i, j) => i + j) =
        j),
    (((mapBifunctor (curriedTensor C) I I).obj X₁).obj X₂).ιMapObj
          (fun x =>
            match x with
            | (i, j) => i + j)
          i j hij ≫
        f =
      (((mapBifunctor (curriedTensor C) I I).obj X₁).obj X₂).ιMapObj
          (fun x =>
            match x with
            | (i, j) => i + j)
          i j hij ≫
        g
state_after: case hfg.mk
I : Type u
inst✝³ : AddMonoid I
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : MonoidalCategory C
X₁ X₂ : GradedObject I C
inst✝ : X₁.HasTensor X₂
A : C
j : I
f g : tensorObj X₁ X₂ j ⟶ A
h : ∀ (i₁ i₂ : I) (hi : i₁ + i₂ = j), ιTensorObj X₁ X₂ i₁ i₂ j hi ≫ f = ιTensorObj X₁ X₂ i₁ i₂ j hi ≫ g
i₁ i₂ : I
hi :
  (match (i₁, i₂) with
    | (i, j) => i + j) =
    j
⊢ (((mapBifunctor (curriedTensor C) I I).obj X₁).obj X₂).ιMapObj
        (fun x =>
          match x with
          | (i, j) => i + j)
        (i₁, i₂) j hi ≫
      f =
    (((mapBifunctor (curriedTensor C) I I).obj X₁).obj X₂).ιMapObj
        (fun x =>
          match x with
          | (i, j) => i + j)
        (i₁, i₂) j hi ≫
      g
tactic: rintro ⟨i₁, i₂⟩ hi
state_before: case hfg.mk
I : Type u
inst✝³ : AddMonoid I
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : MonoidalCategory C
X₁ X₂ : GradedObject I C
inst✝ : X₁.HasTensor X₂
A : C
j : I
f g : tensorObj X₁ X₂ j ⟶ A
h : ∀ (i₁ i₂ : I) (hi : i₁ + i₂ = j), ιTensorObj X₁ X₂ i₁ i₂ j hi ≫ f = ιTensorObj X₁ X₂ i₁ i₂ j hi ≫ g
i₁ i₂ : I
hi :
  (match (i₁, i₂) with
    | (i, j) => i + j) =
    j
⊢ (((mapBifunctor (curriedTensor C) I I).obj X₁).obj X₂).ιMapObj
        (fun x =>
          match x with
          | (i, j) => i + j)
        (i₁, i₂) j hi ≫
      f =
    (((mapBifunctor (curriedTensor C) I I).obj X₁).obj X₂).ιMapObj
        (fun x =>
          match x with
          | (i, j) => i + j)
        (i₁, i₂) j hi ≫
      g
state_after: no goals
tactic: exact h i₁ i₂ hi