Theorem: CategoryTheory.Limits.desc_op_comp_opCoproductIsoProduct_hom
File: Mathlib/CategoryTheory/Limits/Opposites.lean

tactic: ext
state_before: case h.e'_2.h.h.e'_6.h.h.e'_5.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : Type u₂
inst✝¹ : Category.{v₂, u₂} J
X✝ : Type v₂
α : Type u_1
Z : α → C
inst✝ : HasCoproduct Z
X : C
π : (a : α) → Z a ⟶ X
e_1✝ :
  ({ unop := X } ⟶ ∏ᶜ fun x => { unop := Z x }) =
    ({ unop := (Cofan.mk X π).pt } ⟶ (Fan.mk (∏ᶜ fun x => { unop := Z x }) (Pi.π fun x => { unop := Z x })).pt)
e_3✝¹ : { unop := X } = { unop := (Cofan.mk X π).pt }
e_4✝¹ : { unop := ∐ Z } = { unop := (Cofan.mk (∐ Z) (Sigma.ι Z)).pt }
e_3✝ : ∐ Z = (Cofan.mk (∐ Z) (Sigma.ι Z)).pt
e_4✝ : X = (Cofan.mk X π).pt
⊢ Sigma.desc π = (coproductIsCoproduct Z).desc (Cofan.mk X π)
state_after: case h.e'_2.h.h.e'_6.h.h.e'_5.h.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : Type u₂
inst✝¹ : Category.{v₂, u₂} J
X✝ : Type v₂
α : Type u_1
Z : α → C
inst✝ : HasCoproduct Z
X : C
π : (a : α) → Z a ⟶ X
e_1✝ :
  ({ unop := X } ⟶ ∏ᶜ fun x => { unop := Z x }) =
    ({ unop := (Cofan.mk X π).pt } ⟶ (Fan.mk (∏ᶜ fun x => { unop := Z x }) (Pi.π fun x => { unop := Z x })).pt)
e_3✝¹ : { unop := X } = { unop := (Cofan.mk X π).pt }
e_4✝¹ : { unop := ∐ Z } = { unop := (Cofan.mk (∐ Z) (Sigma.ι Z)).pt }
e_3✝ : ∐ Z = (Cofan.mk (∐ Z) (Sigma.ι Z)).pt
e_4✝ : X = (Cofan.mk X π).pt
b✝ : α
⊢ Sigma.ι Z b✝ ≫ Sigma.desc π = Sigma.ι Z b✝ ≫ (coproductIsCoproduct Z).desc (Cofan.mk X π)

tactic: simp [Sigma.desc, coproductIsCoproduct]
state_before: case h.e'_2.h.h.e'_6.h.h.e'_5.h.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : Type u₂
inst✝¹ : Category.{v₂, u₂} J
X✝ : Type v₂
α : Type u_1
Z : α → C
inst✝ : HasCoproduct Z
X : C
π : (a : α) → Z a ⟶ X
e_1✝ :
  ({ unop := X } ⟶ ∏ᶜ fun x => { unop := Z x }) =
    ({ unop := (Cofan.mk X π).pt } ⟶ (Fan.mk (∏ᶜ fun x => { unop := Z x }) (Pi.π fun x => { unop := Z x })).pt)
e_3✝¹ : { unop := X } = { unop := (Cofan.mk X π).pt }
e_4✝¹ : { unop := ∐ Z } = { unop := (Cofan.mk (∐ Z) (Sigma.ι Z)).pt }
e_3✝ : ∐ Z = (Cofan.mk (∐ Z) (Sigma.ι Z)).pt
e_4✝ : X = (Cofan.mk X π).pt
b✝ : α
⊢ Sigma.ι Z b✝ ≫ Sigma.desc π = Sigma.ι Z b✝ ≫ (coproductIsCoproduct Z).desc (Cofan.mk X π)
state_after: no goals

tactic: ext
state_before: case h.e'_3.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : Type u₂
inst✝¹ : Category.{v₂, u₂} J
X✝ : Type v₂
α : Type u_1
Z : α → C
inst✝ : HasCoproduct Z
X : C
π : (a : α) → Z a ⟶ X
e_1✝ :
  ({ unop := X } ⟶ ∏ᶜ fun x => { unop := Z x }) =
    ({ unop := (Cofan.mk X π).pt } ⟶ (Fan.mk (∏ᶜ fun x => { unop := Z x }) (Pi.π fun x => { unop := Z x })).pt)
⊢ (Pi.lift fun a => (π a).op) = (productIsProduct fun x => { unop := Z x }).lift (Cofan.mk X π).op
state_after: case h.e'_3.h.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : Type u₂
inst✝¹ : Category.{v₂, u₂} J
X✝ : Type v₂
α : Type u_1
Z : α → C
inst✝ : HasCoproduct Z
X : C
π : (a : α) → Z a ⟶ X
e_1✝ :
  ({ unop := X } ⟶ ∏ᶜ fun x => { unop := Z x }) =
    ({ unop := (Cofan.mk X π).pt } ⟶ (Fan.mk (∏ᶜ fun x => { unop := Z x }) (Pi.π fun x => { unop := Z x })).pt)
b✝ : α
⊢ (Pi.lift fun a => (π a).op) ≫ Pi.π (fun a => { unop := Z a }) b✝ =
    (productIsProduct fun x => { unop := Z x }).lift (Cofan.mk X π).op ≫ Pi.π (fun a => { unop := Z a }) b✝

tactic: simp [Pi.lift, productIsProduct]
state_before: case h.e'_3.h.h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : Type u₂
inst✝¹ : Category.{v₂, u₂} J
X✝ : Type v₂
α : Type u_1
Z : α → C
inst✝ : HasCoproduct Z
X : C
π : (a : α) → Z a ⟶ X
e_1✝ :
  ({ unop := X } ⟶ ∏ᶜ fun x => { unop := Z x }) =
    ({ unop := (Cofan.mk X π).pt } ⟶ (Fan.mk (∏ᶜ fun x => { unop := Z x }) (Pi.π fun x => { unop := Z x })).pt)
b✝ : α
⊢ (Pi.lift fun a => (π a).op) ≫ Pi.π (fun a => { unop := Z a }) b✝ =
    (productIsProduct fun x => { unop := Z x }).lift (Cofan.mk X π).op ≫ Pi.π (fun a => { unop := Z a }) b✝
state_after: no goals