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

tactic: ext
state_before: case h.e'_2.h.h.e'_7.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✝ : HasProduct Z
X : C
π : (a : α) → X ⟶ Z a
e_1✝ :
  ((∐ fun x => { unop := Z x }) ⟶ { unop := X }) =
    ((Cofan.mk (∐ fun x => { unop := Z x }) (Sigma.ι fun x => { unop := Z x })).pt ⟶ { unop := (Fan.mk X π).pt })
e_4✝¹ : { unop := ∏ᶜ Z } = { unop := (Fan.mk (∏ᶜ Z) (Pi.π Z)).pt }
e_5✝ : { unop := X } = { unop := (Fan.mk X π).pt }
e_3✝ : X = (Fan.mk X π).pt
e_4✝ : ∏ᶜ Z = (Fan.mk (∏ᶜ Z) (Pi.π Z)).pt
⊢ Pi.lift π = (productIsProduct Z).lift (Fan.mk X π)
state_after: case h.e'_2.h.h.e'_7.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✝ : HasProduct Z
X : C
π : (a : α) → X ⟶ Z a
e_1✝ :
  ((∐ fun x => { unop := Z x }) ⟶ { unop := X }) =
    ((Cofan.mk (∐ fun x => { unop := Z x }) (Sigma.ι fun x => { unop := Z x })).pt ⟶ { unop := (Fan.mk X π).pt })
e_4✝¹ : { unop := ∏ᶜ Z } = { unop := (Fan.mk (∏ᶜ Z) (Pi.π Z)).pt }
e_5✝ : { unop := X } = { unop := (Fan.mk X π).pt }
e_3✝ : X = (Fan.mk X π).pt
e_4✝ : ∏ᶜ Z = (Fan.mk (∏ᶜ Z) (Pi.π Z)).pt
b✝ : α
⊢ Pi.lift π ≫ Pi.π Z b✝ = (productIsProduct Z).lift (Fan.mk X π) ≫ Pi.π Z b✝

tactic: simp [Pi.lift, productIsProduct]
state_before: case h.e'_2.h.h.e'_7.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✝ : HasProduct Z
X : C
π : (a : α) → X ⟶ Z a
e_1✝ :
  ((∐ fun x => { unop := Z x }) ⟶ { unop := X }) =
    ((Cofan.mk (∐ fun x => { unop := Z x }) (Sigma.ι fun x => { unop := Z x })).pt ⟶ { unop := (Fan.mk X π).pt })
e_4✝¹ : { unop := ∏ᶜ Z } = { unop := (Fan.mk (∏ᶜ Z) (Pi.π Z)).pt }
e_5✝ : { unop := X } = { unop := (Fan.mk X π).pt }
e_3✝ : X = (Fan.mk X π).pt
e_4✝ : ∏ᶜ Z = (Fan.mk (∏ᶜ Z) (Pi.π Z)).pt
b✝ : α
⊢ Pi.lift π ≫ Pi.π Z b✝ = (productIsProduct Z).lift (Fan.mk X π) ≫ Pi.π Z b✝
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✝ : HasProduct Z
X : C
π : (a : α) → X ⟶ Z a
e_1✝ :
  ((∐ fun x => { unop := Z x }) ⟶ { unop := X }) =
    ((Cofan.mk (∐ fun x => { unop := Z x }) (Sigma.ι fun x => { unop := Z x })).pt ⟶ { unop := (Fan.mk X π).pt })
⊢ (Sigma.desc fun a => (π a).op) = (coproductIsCoproduct fun x => { unop := Z x }).desc (Fan.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✝ : HasProduct Z
X : C
π : (a : α) → X ⟶ Z a
e_1✝ :
  ((∐ fun x => { unop := Z x }) ⟶ { unop := X }) =
    ((Cofan.mk (∐ fun x => { unop := Z x }) (Sigma.ι fun x => { unop := Z x })).pt ⟶ { unop := (Fan.mk X π).pt })
b✝ : α
⊢ (Sigma.ι (fun a => { unop := Z a }) b✝ ≫ Sigma.desc fun a => (π a).op) =
    Sigma.ι (fun a => { unop := Z a }) b✝ ≫ (coproductIsCoproduct fun x => { unop := Z x }).desc (Fan.mk X π).op

tactic: simp [Sigma.desc, coproductIsCoproduct]
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✝ : HasProduct Z
X : C
π : (a : α) → X ⟶ Z a
e_1✝ :
  ((∐ fun x => { unop := Z x }) ⟶ { unop := X }) =
    ((Cofan.mk (∐ fun x => { unop := Z x }) (Sigma.ι fun x => { unop := Z x })).pt ⟶ { unop := (Fan.mk X π).pt })
b✝ : α
⊢ (Sigma.ι (fun a => { unop := Z a }) b✝ ≫ Sigma.desc fun a => (π a).op) =
    Sigma.ι (fun a => { unop := Z a }) b✝ ≫ (coproductIsCoproduct fun x => { unop := Z x }).desc (Fan.mk X π).op
state_after: no goals