Theorem: CategoryTheory.isVanKampenColimit_of_isEmpty
File: Mathlib/CategoryTheory/Limits/VanKampen.lean

tactic: have : IsInitial c.pt := by
  have := (IsColimit.precomposeInvEquiv (Functor.uniqueFromEmpty _) _).symm
    (hc.whiskerEquivalence (equivalenceOfIsEmpty (Discrete PEmpty.{1}) J))
  exact IsColimit.ofIsoColimit this (Cocones.ext (Iso.refl c.pt) (fun {X} ↦ isEmptyElim X))
state_before: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
⊢ IsVanKampenColimit c
state_after: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
this : IsInitial c.pt
⊢ IsVanKampenColimit c

tactic: replace this := IsInitial.isVanKampenColimit this
state_before: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
this : IsInitial c.pt
⊢ IsVanKampenColimit c
state_after: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
this : IsVanKampenColimit (asEmptyCocone c.pt)
⊢ IsVanKampenColimit c

tactic: apply (IsVanKampenColimit.whiskerEquivalence_iff
  (equivalenceOfIsEmpty (Discrete PEmpty.{1}) J)).mp
state_before: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
this : IsVanKampenColimit (asEmptyCocone c.pt)
⊢ IsVanKampenColimit c
state_after: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
this : IsVanKampenColimit (asEmptyCocone c.pt)
⊢ IsVanKampenColimit (Cocone.whisker (equivalenceOfIsEmpty (Discrete PEmpty.{1}) J).functor c)

tactic: exact (this.precompose_isIso (Functor.uniqueFromEmpty
  ((equivalenceOfIsEmpty (Discrete PEmpty.{1}) J).functor ⋙ F)).hom).of_iso
  (Cocones.ext (Iso.refl _) (by simp))
state_before: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
this : IsVanKampenColimit (asEmptyCocone c.pt)
⊢ IsVanKampenColimit (Cocone.whisker (equivalenceOfIsEmpty (Discrete PEmpty.{1}) J).functor c)
state_after: no goals

tactic: have := (IsColimit.precomposeInvEquiv (Functor.uniqueFromEmpty _) _).symm
  (hc.whiskerEquivalence (equivalenceOfIsEmpty (Discrete PEmpty.{1}) J))
state_before: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
⊢ IsInitial c.pt
state_after: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
this :
  IsColimit
    ((Cocones.precompose ((equivalenceOfIsEmpty (Discrete PEmpty.{1}) J).functor ⋙ F).uniqueFromEmpty.inv).obj
      (Cocone.whisker (equivalenceOfIsEmpty (Discrete PEmpty.{1}) J).functor c))
⊢ IsInitial c.pt

tactic: exact IsColimit.ofIsoColimit this (Cocones.ext (Iso.refl c.pt) (fun {X} ↦ isEmptyElim X))
state_before: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
this :
  IsColimit
    ((Cocones.precompose ((equivalenceOfIsEmpty (Discrete PEmpty.{1}) J).functor ⋙ F).uniqueFromEmpty.inv).obj
      (Cocone.whisker (equivalenceOfIsEmpty (Discrete PEmpty.{1}) J).functor c))
⊢ IsInitial c.pt
state_after: no goals

tactic: simp
state_before: J : Type v'
inst✝⁵ : Category.{u', v'} J
C : Type u
inst✝⁴ : Category.{v, u} C
K : Type u_1
inst✝³ : Category.{?u.260076, u_1} K
D : Type u_2
inst✝² : Category.{?u.260083, u_2} D
inst✝¹ : HasStrictInitialObjects C
inst✝ : IsEmpty J
F : J ⥤ C
c : Cocone F
hc : IsColimit c
this : IsVanKampenColimit (asEmptyCocone c.pt)
⊢ ∀ (j : Discrete PEmpty.{1}),
    ((Cocones.precompose ((equivalenceOfIsEmpty (Discrete PEmpty.{1}) J).functor ⋙ F).uniqueFromEmpty.hom).obj
                (asEmptyCocone c.pt)).ι.app
          j ≫
        (Iso.refl
            ((Cocones.precompose ((equivalenceOfIsEmpty (Discrete PEmpty.{1}) J).functor ⋙ F).uniqueFromEmpty.hom).obj
                (asEmptyCocone c.pt)).pt).hom =
      (Cocone.whisker (equivalenceOfIsEmpty (Discrete PEmpty.{1}) J).functor c).ι.app j
state_after: no goals