Theorem: CategoryTheory.MonoidalOfChosenFiniteProducts.braiding_naturality
File: Mathlib/CategoryTheory/Monoidal/OfChosenFiniteProducts/Symmetric.lean

tactic: dsimp [tensorHom, Limits.BinaryFan.braiding]
state_before: C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X X' Y Y' : C
f : X ⟶ Y
g : X' ⟶ Y'
⊢ tensorHom ℬ f g ≫ (BinaryFan.braiding (ℬ Y Y').isLimit (ℬ Y' Y).isLimit).hom =
    (BinaryFan.braiding (ℬ X X').isLimit (ℬ X' X).isLimit).hom ≫ tensorHom ℬ g f
state_after: C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X X' Y Y' : C
f : X ⟶ Y
g : X' ⟶ Y'
⊢ (ℬ Y Y').isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X X').cone ≫ f) (BinaryFan.snd (ℬ X X').cone ≫ g)) ≫
      ((ℬ Y Y').isLimit.conePointUniqueUpToIso (ℬ Y' Y).isLimit.swapBinaryFan).hom =
    ((ℬ X X').isLimit.conePointUniqueUpToIso (ℬ X' X).isLimit.swapBinaryFan).hom ≫
      (ℬ Y' Y).isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X' X).cone ≫ g) (BinaryFan.snd (ℬ X' X).cone ≫ f))

tactic: apply (ℬ _ _).isLimit.hom_ext
state_before: C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X X' Y Y' : C
f : X ⟶ Y
g : X' ⟶ Y'
⊢ (ℬ Y Y').isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X X').cone ≫ f) (BinaryFan.snd (ℬ X X').cone ≫ g)) ≫
      ((ℬ Y Y').isLimit.conePointUniqueUpToIso (ℬ Y' Y).isLimit.swapBinaryFan).hom =
    ((ℬ X X').isLimit.conePointUniqueUpToIso (ℬ X' X).isLimit.swapBinaryFan).hom ≫
      (ℬ Y' Y).isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X' X).cone ≫ g) (BinaryFan.snd (ℬ X' X).cone ≫ f))
state_after: C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X X' Y Y' : C
f : X ⟶ Y
g : X' ⟶ Y'
⊢ ∀ (j : Discrete WalkingPair),
    ((ℬ Y Y').isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X X').cone ≫ f) (BinaryFan.snd (ℬ X X').cone ≫ g)) ≫
          ((ℬ Y Y').isLimit.conePointUniqueUpToIso (ℬ Y' Y).isLimit.swapBinaryFan).hom) ≫
        (ℬ Y' Y).cone.π.app j =
      (((ℬ X X').isLimit.conePointUniqueUpToIso (ℬ X' X).isLimit.swapBinaryFan).hom ≫
          (ℬ Y' Y).isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X' X).cone ≫ g) (BinaryFan.snd (ℬ X' X).cone ≫ f))) ≫
        (ℬ Y' Y).cone.π.app j

tactic: dsimp [Limits.IsLimit.conePointUniqueUpToIso]
state_before: case mk.right
C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X X' Y Y' : C
f : X ⟶ Y
g : X' ⟶ Y'
⊢ ((ℬ Y Y').isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X X').cone ≫ f) (BinaryFan.snd (ℬ X X').cone ≫ g)) ≫
        ((ℬ Y Y').isLimit.conePointUniqueUpToIso (ℬ Y' Y).isLimit.swapBinaryFan).hom) ≫
      (ℬ Y' Y).cone.π.app { as := WalkingPair.right } =
    (((ℬ X X').isLimit.conePointUniqueUpToIso (ℬ X' X).isLimit.swapBinaryFan).hom ≫
        (ℬ Y' Y).isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X' X).cone ≫ g) (BinaryFan.snd (ℬ X' X).cone ≫ f))) ≫
      (ℬ Y' Y).cone.π.app { as := WalkingPair.right }
state_after: case mk.right
C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X X' Y Y' : C
f : X ⟶ Y
g : X' ⟶ Y'
⊢ ((ℬ Y Y').isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X X').cone ≫ f) (BinaryFan.snd (ℬ X X').cone ≫ g)) ≫
        (ℬ Y' Y).isLimit.lift (BinaryFan.swap (ℬ Y Y').cone)) ≫
      BinaryFan.snd (ℬ Y' Y).cone =
    ((ℬ X' X).isLimit.lift (BinaryFan.swap (ℬ X X').cone) ≫
        (ℬ Y' Y).isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X' X).cone ≫ g) (BinaryFan.snd (ℬ X' X).cone ≫ f))) ≫
      BinaryFan.snd (ℬ Y' Y).cone

tactic: simp
state_before: case mk.right
C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X X' Y Y' : C
f : X ⟶ Y
g : X' ⟶ Y'
⊢ ((ℬ Y Y').isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X X').cone ≫ f) (BinaryFan.snd (ℬ X X').cone ≫ g)) ≫
        (ℬ Y' Y).isLimit.lift (BinaryFan.swap (ℬ Y Y').cone)) ≫
      BinaryFan.snd (ℬ Y' Y).cone =
    ((ℬ X' X).isLimit.lift (BinaryFan.swap (ℬ X X').cone) ≫
        (ℬ Y' Y).isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X' X).cone ≫ g) (BinaryFan.snd (ℬ X' X).cone ≫ f))) ≫
      BinaryFan.snd (ℬ Y' Y).cone
state_after: no goals