Theorem: CategoryTheory.Limits.IsLimit.OfNatIso.coneOfHom_homOfCone
File: Mathlib/CategoryTheory/Limits/IsLimit.lean

tactic: dsimp [coneOfHom, homOfCone]
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
F : J ⥤ C
t : Cone F
X : C
h : yoneda.obj X ⋙ uliftFunctor.{u₁, v₃} ≅ F.cones
s : Cone F
⊢ coneOfHom h (homOfCone h s) = s
state_after: J : Type u₁
inst✝² : Category.{v₁, u₁} J
K : Type u₂
inst✝¹ : Category.{v₂, u₂} K
C : Type u₃
inst✝ : Category.{v₃, u₃} C
F : J ⥤ C
t : Cone F
X : C
h : yoneda.obj X ⋙ uliftFunctor.{u₁, v₃} ≅ F.cones
s : Cone F
⊢ { pt := s.pt, π := h.hom.app { unop := s.pt } { down := (h.inv.app { unop := s.pt } s.π).down } } = s

tactic: match s with
| .mk s_pt s_π =>
  congr; dsimp
  convert congrFun (congrFun (congrArg NatTrans.app h.inv_hom_id) (op s_pt)) s_π using 1
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
F : J ⥤ C
t : Cone F
X : C
h : yoneda.obj X ⋙ uliftFunctor.{u₁, v₃} ≅ F.cones
s : Cone F
⊢ { pt := s.pt, π := h.hom.app { unop := s.pt } { down := (h.inv.app { unop := s.pt } s.π).down } } = s
state_after: no goals

tactic: congr
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
F : J ⥤ C
t : Cone F
X : C
h : yoneda.obj X ⋙ uliftFunctor.{u₁, v₃} ≅ F.cones
s : Cone F
s_pt : C
s_π : (const J).obj s_pt ⟶ F
⊢ { pt := { pt := s_pt, π := s_π }.pt,
      π :=
        h.hom.app { unop := { pt := s_pt, π := s_π }.pt }
          { down := (h.inv.app { unop := { pt := s_pt, π := s_π }.pt } { pt := s_pt, π := s_π }.π).down } } =
    { pt := s_pt, π := s_π }
state_after: case e_π
J : Type u₁
inst✝² : Category.{v₁, u₁} J
K : Type u₂
inst✝¹ : Category.{v₂, u₂} K
C : Type u₃
inst✝ : Category.{v₃, u₃} C
F : J ⥤ C
t : Cone F
X : C
h : yoneda.obj X ⋙ uliftFunctor.{u₁, v₃} ≅ F.cones
s : Cone F
s_pt : C
s_π : (const J).obj s_pt ⟶ F
⊢ h.hom.app { unop := { pt := s_pt, π := s_π }.pt }
      { down := (h.inv.app { unop := { pt := s_pt, π := s_π }.pt } { pt := s_pt, π := s_π }.π).down } =
    s_π

tactic: dsimp
state_before: case e_π
J : Type u₁
inst✝² : Category.{v₁, u₁} J
K : Type u₂
inst✝¹ : Category.{v₂, u₂} K
C : Type u₃
inst✝ : Category.{v₃, u₃} C
F : J ⥤ C
t : Cone F
X : C
h : yoneda.obj X ⋙ uliftFunctor.{u₁, v₃} ≅ F.cones
s : Cone F
s_pt : C
s_π : (const J).obj s_pt ⟶ F
⊢ h.hom.app { unop := { pt := s_pt, π := s_π }.pt }
      { down := (h.inv.app { unop := { pt := s_pt, π := s_π }.pt } { pt := s_pt, π := s_π }.π).down } =
    s_π
state_after: case e_π
J : Type u₁
inst✝² : Category.{v₁, u₁} J
K : Type u₂
inst✝¹ : Category.{v₂, u₂} K
C : Type u₃
inst✝ : Category.{v₃, u₃} C
F : J ⥤ C
t : Cone F
X : C
h : yoneda.obj X ⋙ uliftFunctor.{u₁, v₃} ≅ F.cones
s : Cone F
s_pt : C
s_π : (const J).obj s_pt ⟶ F
⊢ h.hom.app { unop := s_pt } { down := (h.inv.app { unop := s_pt } s_π).down } = s_π

tactic: convert congrFun (congrFun (congrArg NatTrans.app h.inv_hom_id) (op s_pt)) s_π using 1
state_before: case e_π
J : Type u₁
inst✝² : Category.{v₁, u₁} J
K : Type u₂
inst✝¹ : Category.{v₂, u₂} K
C : Type u₃
inst✝ : Category.{v₃, u₃} C
F : J ⥤ C
t : Cone F
X : C
h : yoneda.obj X ⋙ uliftFunctor.{u₁, v₃} ≅ F.cones
s : Cone F
s_pt : C
s_π : (const J).obj s_pt ⟶ F
⊢ h.hom.app { unop := s_pt } { down := (h.inv.app { unop := s_pt } s_π).down } = s_π
state_after: no goals