Theorem: CategoryTheory.Limits.Cone.equiv_inv_π
File: Mathlib/CategoryTheory/Limits/Cones.lean

Proof steps:
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F✝ F : J ⥤ C
⊢ ((fun c => ⟨op c.pt, c.π⟩) ≫ fun c => { pt := unop c.fst, π := c.snd }) = 𝟙 (Cone F)
state_after: case h
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F✝ F : J ⥤ C
X : Cone F
⊢ ((fun c => ⟨op c.pt, c.π⟩) ≫ fun c => { pt := unop c.fst, π := c.snd }) X = 𝟙 (Cone F) X
tactic: funext X
state_before: case h
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F✝ F : J ⥤ C
X : Cone F
⊢ ((fun c => ⟨op c.pt, c.π⟩) ≫ fun c => { pt := unop c.fst, π := c.snd }) X = 𝟙 (Cone F) X
state_after: case h.mk
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F✝ F : J ⥤ C
pt✝ : C
π✝ : (const J).obj pt✝ ⟶ F
⊢ ((fun c => ⟨op c.pt, c.π⟩) ≫ fun c => { pt := unop c.fst, π := c.snd }) { pt := pt✝, π := π✝ } =
    𝟙 (Cone F) { pt := pt✝, π := π✝ }
tactic: cases X
state_before: case h.mk
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F✝ F : J ⥤ C
pt✝ : C
π✝ : (const J).obj pt✝ ⟶ F
⊢ ((fun c => ⟨op c.pt, c.π⟩) ≫ fun c => { pt := unop c.fst, π := c.snd }) { pt := pt✝, π := π✝ } =
    𝟙 (Cone F) { pt := pt✝, π := π✝ }
state_after: no goals
tactic: rfl
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F✝ F : J ⥤ C
⊢ ((fun c => { pt := unop c.fst, π := c.snd }) ≫ fun c => ⟨op c.pt, c.π⟩) = 𝟙 ((X : Cᵒᵖ) × F.cones.obj X)
state_after: case h
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F✝ F : J ⥤ C
X : (X : Cᵒᵖ) × F.cones.obj X
⊢ ((fun c => { pt := unop c.fst, π := c.snd }) ≫ fun c => ⟨op c.pt, c.π⟩) X = 𝟙 ((X : Cᵒᵖ) × F.cones.obj X) X
tactic: funext X
state_before: case h
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F✝ F : J ⥤ C
X : (X : Cᵒᵖ) × F.cones.obj X
⊢ ((fun c => { pt := unop c.fst, π := c.snd }) ≫ fun c => ⟨op c.pt, c.π⟩) X = 𝟙 ((X : Cᵒᵖ) × F.cones.obj X) X
state_after: case h.mk
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F✝ F : J ⥤ C
fst✝ : Cᵒᵖ
snd✝ : F.cones.obj fst✝
⊢ ((fun c => { pt := unop c.fst, π := c.snd }) ≫ fun c => ⟨op c.pt, c.π⟩) ⟨fst✝, snd✝⟩ =
    𝟙 ((X : Cᵒᵖ) × F.cones.obj X) ⟨fst✝, snd✝⟩
tactic: cases X
state_before: case h.mk
J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F✝ F : J ⥤ C
fst✝ : Cᵒᵖ
snd✝ : F.cones.obj fst✝
⊢ ((fun c => { pt := unop c.fst, π := c.snd }) ≫ fun c => ⟨op c.pt, c.π⟩) ⟨fst✝, snd✝⟩ =
    𝟙 ((X : Cᵒᵖ) × F.cones.obj X) ⟨fst✝, snd✝⟩
state_after: no goals
tactic: rfl