Theorem: CategoryTheory.IsVanKampenColimit.of_map
File: Mathlib/CategoryTheory/Extensive.lean

tactic: intro F' c' α f h hα
state_before: J : Type v'
inst✝⁷ : Category J
C : Type u
inst✝⁶ : Category C
X Y : C
D✝ : Type u''
inst✝⁵ : Category D✝
D : Type u_1
inst✝⁴ : Category D
G : C ⥤ D
F : J ⥤ C
c : Cocone F
inst✝³ : PreservesLimitsOfShape WalkingCospan G
inst✝² : ReflectsLimitsOfShape WalkingCospan G
inst✝¹ : PreservesColimitsOfShape J G
inst✝ : ReflectsColimitsOfShape J G
H : IsVanKampenColimit (G.mapCocone c)
⊢ IsVanKampenColimit c

tactic: refine' (Iff.trans _ (H (G.mapCocone c') (whiskerRight α G) (G.map f)
    (by ext j; simpa using G.congr_map (NatTrans.congr_app h j))
    (hα.whiskerRight G))).trans (forall_congr' fun j => _)
state_before: J : Type v'
inst✝⁷ : Category J
C : Type u
inst✝⁶ : Category C
X Y : C
D✝ : Type u''
inst✝⁵ : Category D✝
D : Type u_1
inst✝⁴ : Category D
G : C ⥤ D
F : J ⥤ C
c : Cocone F
inst✝³ : PreservesLimitsOfShape WalkingCospan G
inst✝² : ReflectsLimitsOfShape WalkingCospan G
inst✝¹ : PreservesColimitsOfShape J G
inst✝ : ReflectsColimitsOfShape J G
H : IsVanKampenColimit (G.mapCocone c)
F' : J ⥤ C
c' : Cocone F'
α : F' ⟶ F
f : c'.pt ⟶ c.pt
h : α ≫ c.ι = c'.ι ≫ (Functor.const J).map f
hα : NatTrans.Equifibered α
⊢ Nonempty (IsColimit c') ↔ ∀ (j : J), IsPullback (c'.ι.app j) (α.app j) f (c.ι.app j)

tactic: ext j
state_before: J : Type v'
inst✝⁷ : Category J
C : Type u
inst✝⁶ : Category C
X Y : C
D✝ : Type u''
inst✝⁵ : Category D✝
D : Type u_1
inst✝⁴ : Category D
G : C ⥤ D
F : J ⥤ C
c : Cocone F
inst✝³ : PreservesLimitsOfShape WalkingCospan G
inst✝² : ReflectsLimitsOfShape WalkingCospan G
inst✝¹ : PreservesColimitsOfShape J G
inst✝ : ReflectsColimitsOfShape J G
H : IsVanKampenColimit (G.mapCocone c)
F' : J ⥤ C
c' : Cocone F'
α : F' ⟶ F
f : c'.pt ⟶ c.pt
h : α ≫ c.ι = c'.ι ≫ (Functor.const J).map f
hα : NatTrans.Equifibered α
⊢ whiskerRight α G ≫ (G.mapCocone c).ι = (G.mapCocone c').ι ≫ (Functor.const J).map (G.map f)

tactic: simpa using G.congr_map (NatTrans.congr_app h j)
state_before: case w.h
J : Type v'
inst✝⁷ : Category J
C : Type u
inst✝⁶ : Category C
X Y : C
D✝ : Type u''
inst✝⁵ : Category D✝
D : Type u_1
inst✝⁴ : Category D
G : C ⥤ D
F : J ⥤ C
c : Cocone F
inst✝³ : PreservesLimitsOfShape WalkingCospan G
inst✝² : ReflectsLimitsOfShape WalkingCospan G
inst✝¹ : PreservesColimitsOfShape J G
inst✝ : ReflectsColimitsOfShape J G
H : IsVanKampenColimit (G.mapCocone c)
F' : J ⥤ C
c' : Cocone F'
α : F' ⟶ F
f : c'.pt ⟶ c.pt
h : α ≫ c.ι = c'.ι ≫ (Functor.const J).map f
hα : NatTrans.Equifibered α
j : J
⊢ (whiskerRight α G ≫ (G.mapCocone c).ι).app j = ((G.mapCocone c').ι ≫ (Functor.const J).map (G.map f)).app j

tactic: exact ⟨fun h => ⟨isColimitOfPreserves G h.some⟩, fun h => ⟨isColimitOfReflects G h.some⟩⟩
state_before: case refine'_1
J : Type v'
inst✝⁷ : Category J
C : Type u
inst✝⁶ : Category C
X Y : C
D✝ : Type u''
inst✝⁵ : Category D✝
D : Type u_1
inst✝⁴ : Category D
G : C ⥤ D
F : J ⥤ C
c : Cocone F
inst✝³ : PreservesLimitsOfShape WalkingCospan G
inst✝² : ReflectsLimitsOfShape WalkingCospan G
inst✝¹ : PreservesColimitsOfShape J G
inst✝ : ReflectsColimitsOfShape J G
H : IsVanKampenColimit (G.mapCocone c)
F' : J ⥤ C
c' : Cocone F'
α : F' ⟶ F
f : c'.pt ⟶ c.pt
h : α ≫ c.ι = c'.ι ≫ (Functor.const J).map f
hα : NatTrans.Equifibered α
⊢ Nonempty (IsColimit c') ↔ Nonempty (IsColimit (G.mapCocone c'))

tactic: exact IsPullback.map_iff G (NatTrans.congr_app h.symm j)
state_before: case refine'_2
J : Type v'
inst✝⁷ : Category J
C : Type u
inst✝⁶ : Category C
X Y : C
D✝ : Type u''
inst✝⁵ : Category D✝
D : Type u_1
inst✝⁴ : Category D
G : C ⥤ D
F : J ⥤ C
c : Cocone F
inst✝³ : PreservesLimitsOfShape WalkingCospan G
inst✝² : ReflectsLimitsOfShape WalkingCospan G
inst✝¹ : PreservesColimitsOfShape J G
inst✝ : ReflectsColimitsOfShape J G
H : IsVanKampenColimit (G.mapCocone c)
F' : J ⥤ C
c' : Cocone F'
α : F' ⟶ F
f : c'.pt ⟶ c.pt
h : α ≫ c.ι = c'.ι ≫ (Functor.const J).map f
hα : NatTrans.Equifibered α
j : J
⊢ IsPullback ((G.mapCocone c').ι.app j) ((whiskerRight α G).app j) (G.map f) ((G.mapCocone c).ι.app j) ↔
    IsPullback (c'.ι.app j) (α.app j) f (c.ι.app j)