Theorem: Mod_.comap_map_hom
File: Mathlib/CategoryTheory/Monoidal/Mod_.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.one ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = (λ_ M.X).hom
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ (A.one ≫ f.hom) ▷ M.X ≫ M.act = (λ_ M.X).hom
tactic: slice_lhs 1 2 => rw [← comp_whiskerRight]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ (A.one ≫ f.hom) ▷ M.X ≫ M.act = (λ_ M.X).hom
state_after: no goals
tactic: rw [f.one_hom, one_act]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = (α_ A.X A.X M.X).hom ≫ A.X ◁ (f.hom ▷ M.X ≫ M.act) ≫ f.hom ▷ M.X ≫ M.act
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = (α_ A.X A.X M.X).hom ≫ (f.hom ▷ (A.X ⊗ M.X) ≫ B.X ◁ (f.hom ▷ M.X ≫ M.act)) ≫ M.act
tactic: slice_rhs 2 3 => rw [whisker_exchange]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = (α_ A.X A.X M.X).hom ≫ (f.hom ▷ (A.X ⊗ M.X) ≫ B.X ◁ (f.hom ▷ M.X ≫ M.act)) ≫ M.act
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = f.hom ▷ A.X ▷ M.X ≫ (α_ B.X A.X M.X).hom ≫ B.X ◁ f.hom ▷ M.X ≫ B.X ◁ M.act ≫ M.act
tactic: simp only [whiskerRight_tensor, MonoidalCategory.whiskerLeft_comp, Category.assoc,
          Iso.hom_inv_id_assoc]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = f.hom ▷ A.X ▷ M.X ≫ (α_ B.X A.X M.X).hom ≫ B.X ◁ f.hom ▷ M.X ≫ B.X ◁ M.act ≫ M.act
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act =
    f.hom ▷ A.X ▷ M.X ≫ (α_ B.X A.X M.X).hom ≫ B.X ◁ f.hom ▷ M.X ≫ (α_ B.X B.X M.X).inv ≫ B.mul ▷ M.X ≫ M.act
tactic: slice_rhs 4 5 => rw [Mod_.assoc_flip]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act =
    f.hom ▷ A.X ▷ M.X ≫ (α_ B.X A.X M.X).hom ≫ B.X ◁ f.hom ▷ M.X ≫ (α_ B.X B.X M.X).inv ≫ B.mul ▷ M.X ≫ M.act
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act =
    f.hom ▷ A.X ▷ M.X ≫ (α_ B.X A.X M.X).hom ≫ (((α_ B.X A.X M.X).inv ≫ (B.X ◁ f.hom) ▷ M.X) ≫ B.mul ▷ M.X) ≫ M.act
tactic: slice_rhs 3 4 => rw [associator_inv_naturality_middle]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act =
    f.hom ▷ A.X ▷ M.X ≫ (α_ B.X A.X M.X).hom ≫ (((α_ B.X A.X M.X).inv ≫ (B.X ◁ f.hom) ▷ M.X) ≫ B.mul ▷ M.X) ≫ M.act
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = f.hom ▷ A.X ▷ M.X ≫ ((B.X ◁ f.hom) ▷ M.X ≫ B.mul ▷ M.X) ≫ M.act
tactic: slice_rhs 2 4 => rw [Iso.hom_inv_id_assoc]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = f.hom ▷ A.X ▷ M.X ≫ ((B.X ◁ f.hom) ▷ M.X ≫ B.mul ▷ M.X) ≫ M.act
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = ((A.X ◁ f.hom ≫ f.hom ▷ B.X) ▷ M.X ≫ B.mul ▷ M.X) ≫ M.act
tactic: slice_rhs 1 2 => rw [← MonoidalCategory.comp_whiskerRight, ← whisker_exchange]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = ((A.X ◁ f.hom ≫ f.hom ▷ B.X) ▷ M.X ≫ B.mul ▷ M.X) ≫ M.act
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = (A.mul ≫ f.hom) ▷ M.X ≫ M.act
tactic: slice_rhs 1 2 => rw [← MonoidalCategory.comp_whiskerRight, ← tensorHom_def', ← f.mul_hom]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M✝ : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
M : Mod_ B
⊢ A.mul ▷ M.X ≫ f.hom ▷ M.X ≫ M.act = (A.mul ≫ f.hom) ▷ M.X ≫ M.act
state_after: no goals
tactic: rw [comp_whiskerRight, Category.assoc]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
X✝ Y✝ : Mod_ B
g : X✝ ⟶ Y✝
⊢ ((fun M => { X := M.X, act := f.hom ▷ M.X ≫ M.act, one_act := ⋯, assoc := ⋯ }) X✝).act ≫ g.hom =
    A.X ◁ g.hom ≫ ((fun M => { X := M.X, act := f.hom ▷ M.X ≫ M.act, one_act := ⋯, assoc := ⋯ }) Y✝).act
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
X✝ Y✝ : Mod_ B
g : X✝ ⟶ Y✝
⊢ (f.hom ▷ X✝.X ≫ X✝.act) ≫ g.hom = A.X ◁ g.hom ≫ f.hom ▷ Y✝.X ≫ Y✝.act
tactic: dsimp
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
X✝ Y✝ : Mod_ B
g : X✝ ⟶ Y✝
⊢ (f.hom ▷ X✝.X ≫ X✝.act) ≫ g.hom = A.X ◁ g.hom ≫ f.hom ▷ Y✝.X ≫ Y✝.act
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
X✝ Y✝ : Mod_ B
g : X✝ ⟶ Y✝
⊢ (f.hom ▷ X✝.X ≫ X✝.act) ≫ g.hom = (f.hom ▷ X✝.X ≫ B.X ◁ g.hom) ≫ Y✝.act
tactic: slice_rhs 1 2 => rw [whisker_exchange]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
X✝ Y✝ : Mod_ B
g : X✝ ⟶ Y✝
⊢ (f.hom ▷ X✝.X ≫ X✝.act) ≫ g.hom = (f.hom ▷ X✝.X ≫ B.X ◁ g.hom) ≫ Y✝.act
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
X✝ Y✝ : Mod_ B
g : X✝ ⟶ Y✝
⊢ (f.hom ▷ X✝.X ≫ X✝.act) ≫ g.hom = f.hom ▷ X✝.X ≫ X✝.act ≫ g.hom
tactic: slice_rhs 2 3 => rw [← g.act_hom]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
A✝ : Mon_ C
M : Mod_ A✝
A B : Mon_ C
f : A ⟶ B
X✝ Y✝ : Mod_ B
g : X✝ ⟶ Y✝
⊢ (f.hom ▷ X✝.X ≫ X✝.act) ≫ g.hom = f.hom ▷ X✝.X ≫ X✝.act ≫ g.hom
state_after: no goals
tactic: rw [Category.assoc]