Theorem: Bimod.isoOfIso_inv_hom
File: Mathlib/CategoryTheory/Monoidal/Bimod.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ Q.actLeft ≫ f.inv = X.X ◁ f.inv ≫ P.actLeft
state_after: no goals
tactic: rw [← cancel_mono f.hom, Category.assoc, Category.assoc, Iso.inv_hom_id, Category.comp_id,
          f_left_act_hom, ← Category.assoc, ← MonoidalCategory.whiskerLeft_comp, Iso.inv_hom_id,
          MonoidalCategory.whiskerLeft_id, Category.id_comp]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ Q.actRight ≫ f.inv = f.inv ▷ Y.X ≫ P.actRight
state_after: no goals
tactic: rw [← cancel_mono f.hom, Category.assoc, Category.assoc, Iso.inv_hom_id, Category.comp_id,
          f_right_act_hom, ← Category.assoc, ← comp_whiskerRight, Iso.inv_hom_id,
          MonoidalCategory.id_whiskerRight, Category.id_comp]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ { hom := f.hom, left_act_hom := ⋯, right_act_hom := ⋯ } ≫ { hom := f.inv, left_act_hom := ⋯, right_act_hom := ⋯ } =
    𝟙 P
state_after: case h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ ({ hom := f.hom, left_act_hom := ⋯, right_act_hom := ⋯ } ≫
        { hom := f.inv, left_act_hom := ⋯, right_act_hom := ⋯ }).hom =
    (𝟙 P).hom
tactic: ext
state_before: case h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ ({ hom := f.hom, left_act_hom := ⋯, right_act_hom := ⋯ } ≫
        { hom := f.inv, left_act_hom := ⋯, right_act_hom := ⋯ }).hom =
    (𝟙 P).hom
state_after: case h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ f.hom ≫ f.inv = 𝟙 P.X
tactic: dsimp
state_before: case h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ f.hom ≫ f.inv = 𝟙 P.X
state_after: no goals
tactic: rw [Iso.hom_inv_id]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ { hom := f.inv, left_act_hom := ⋯, right_act_hom := ⋯ } ≫ { hom := f.hom, left_act_hom := ⋯, right_act_hom := ⋯ } =
    𝟙 Q
state_after: case h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ ({ hom := f.inv, left_act_hom := ⋯, right_act_hom := ⋯ } ≫
        { hom := f.hom, left_act_hom := ⋯, right_act_hom := ⋯ }).hom =
    (𝟙 Q).hom
tactic: ext
state_before: case h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ ({ hom := f.inv, left_act_hom := ⋯, right_act_hom := ⋯ } ≫
        { hom := f.hom, left_act_hom := ⋯, right_act_hom := ⋯ }).hom =
    (𝟙 Q).hom
state_after: case h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ f.inv ≫ f.hom = 𝟙 Q.X
tactic: dsimp
state_before: case h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A B : Mon_ C
M : Bimod A B
X Y : Mon_ C
P Q : Bimod X Y
f : P.X ≅ Q.X
f_left_act_hom : P.actLeft ≫ f.hom = X.X ◁ f.hom ≫ Q.actLeft
f_right_act_hom : P.actRight ≫ f.hom = f.hom ▷ Y.X ≫ Q.actRight
⊢ f.inv ≫ f.hom = 𝟙 Q.X
state_after: no goals
tactic: rw [Iso.inv_hom_id]