Theorem: CategoryTheory.symmetricOfHasFiniteProducts_braiding
File: Mathlib/CategoryTheory/Monoidal/OfHasFiniteProducts.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
X✝¹ Y : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X✝ Y✝ : C
f : X✝ ⟶ Y✝
X : C
⊢ f ▷ X ≫ ((fun X Y => prod.braiding X Y) Y✝ X).hom = ((fun X Y => prod.braiding X Y) X✝ X).hom ≫ X ◁ f
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
X✝ Y : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X x✝¹ x✝ : C
f : x✝¹ ⟶ x✝
⊢ X ◁ f ≫ ((fun X Y => prod.braiding X Y) X x✝).hom = ((fun X Y => prod.braiding X Y) X x✝¹).hom ≫ f ▷ X
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X Y Z : C
⊢ (α_ X Y Z).hom ≫ ((fun X Y => prod.braiding X Y) X (Y ⊗ Z)).hom ≫ (α_ Y Z X).hom =
    ((fun X Y => prod.braiding X Y) X Y).hom ▷ Z ≫ (α_ Y X Z).hom ≫ Y ◁ ((fun X Y => prod.braiding X Y) X Z).hom
state_after: C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X Y Z : C
⊢ prod.lift (prod.fst ≫ prod.fst) (prod.lift (prod.fst ≫ prod.snd) prod.snd) ≫
      prod.lift prod.snd prod.fst ≫ prod.lift (prod.fst ≫ prod.fst) (prod.lift (prod.fst ≫ prod.snd) prod.snd) =
    prod.map (prod.lift prod.snd prod.fst) (𝟙 Z) ≫
      prod.lift (prod.fst ≫ prod.fst) (prod.lift (prod.fst ≫ prod.snd) prod.snd) ≫
        prod.map (𝟙 Y) (prod.lift prod.snd prod.fst)
tactic: dsimp [monoidalOfHasFiniteProducts.associator_hom]
state_before: C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X Y Z : C
⊢ prod.lift (prod.fst ≫ prod.fst) (prod.lift (prod.fst ≫ prod.snd) prod.snd) ≫
      prod.lift prod.snd prod.fst ≫ prod.lift (prod.fst ≫ prod.fst) (prod.lift (prod.fst ≫ prod.snd) prod.snd) =
    prod.map (prod.lift prod.snd prod.fst) (𝟙 Z) ≫
      prod.lift (prod.fst ≫ prod.fst) (prod.lift (prod.fst ≫ prod.snd) prod.snd) ≫
        prod.map (𝟙 Y) (prod.lift prod.snd prod.fst)
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X Y Z : C
⊢ (α_ X Y Z).inv ≫ ((fun X Y => prod.braiding X Y) (X ⊗ Y) Z).hom ≫ (α_ Z X Y).inv =
    X ◁ ((fun X Y => prod.braiding X Y) Y Z).hom ≫ (α_ X Z Y).inv ≫ ((fun X Y => prod.braiding X Y) X Z).hom ▷ Y
state_after: C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X Y Z : C
⊢ prod.lift (prod.lift prod.fst (prod.snd ≫ prod.fst)) (prod.snd ≫ prod.snd) ≫
      prod.lift prod.snd prod.fst ≫ prod.lift (prod.lift prod.fst (prod.snd ≫ prod.fst)) (prod.snd ≫ prod.snd) =
    prod.map (𝟙 X) (prod.lift prod.snd prod.fst) ≫
      prod.lift (prod.lift prod.fst (prod.snd ≫ prod.fst)) (prod.snd ≫ prod.snd) ≫
        prod.map (prod.lift prod.snd prod.fst) (𝟙 Y)
tactic: dsimp [monoidalOfHasFiniteProducts.associator_inv]
state_before: C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X Y Z : C
⊢ prod.lift (prod.lift prod.fst (prod.snd ≫ prod.fst)) (prod.snd ≫ prod.snd) ≫
      prod.lift prod.snd prod.fst ≫ prod.lift (prod.lift prod.fst (prod.snd ≫ prod.fst)) (prod.snd ≫ prod.snd) =
    prod.map (𝟙 X) (prod.lift prod.snd prod.fst) ≫
      prod.lift (prod.lift prod.fst (prod.snd ≫ prod.fst)) (prod.snd ≫ prod.snd) ≫
        prod.map (prod.lift prod.snd prod.fst) (𝟙 Y)
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X Y : C
⊢ (β_ X Y).hom ≫ (β_ Y X).hom = 𝟙 (X ⊗ Y)
state_after: C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X Y : C
⊢ prod.lift prod.snd prod.fst ≫ prod.lift prod.snd prod.fst = 𝟙 (X ⨯ Y)
tactic: dsimp
state_before: C : Type u
inst✝² : Category.{v, u} C
X✝ Y✝ : C
inst✝¹ : HasTerminal C
inst✝ : HasBinaryProducts C
X Y : C
⊢ prod.lift prod.snd prod.fst ≫ prod.lift prod.snd prod.fst = 𝟙 (X ⨯ Y)
state_after: no goals
tactic: simp