Theorem: CategoryTheory.Limits.Types.surjective_π_app_zero_of_surjective_map
File: Mathlib/CategoryTheory/Limits/Types.lean

Proof steps:
state_before: J : Type v
inst✝¹ : Category.{w, v} J
F✝ : J ⥤ Type u
inst✝ : HasColimit F✝
α β : Type u
f : α ⟶ β
F : ℕᵒᵖ ⥤ Type u
c : Cone F
hc✝ : IsLimit c
hF✝ : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
hc : IsLimit c
hF : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
⊢ Function.Surjective (c.π.app (Opposite.op 0))
state_after: J : Type v
inst✝¹ : Category.{w, v} J
F✝ : J ⥤ Type u
inst✝ : HasColimit F✝
α β : Type u
f : α ⟶ β
F : ℕᵒᵖ ⥤ Type u
c : Cone F
hc✝ : IsLimit c
hF✝ : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
hc : IsLimit c
hF : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
i : c.pt ≅ (limitCone F).pt := hc.conePointUniqueUpToIso (limitConeIsLimit F)
⊢ Function.Surjective (c.π.app (Opposite.op 0))
tactic: let i := hc.conePointUniqueUpToIso (limitConeIsLimit F)
state_before: J : Type v
inst✝¹ : Category.{w, v} J
F✝ : J ⥤ Type u
inst✝ : HasColimit F✝
α β : Type u
f : α ⟶ β
F : ℕᵒᵖ ⥤ Type u
c : Cone F
hc✝ : IsLimit c
hF✝ : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
hc : IsLimit c
hF : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
i : c.pt ≅ (limitCone F).pt := hc.conePointUniqueUpToIso (limitConeIsLimit F)
⊢ Function.Surjective (c.π.app (Opposite.op 0))
state_after: J : Type v
inst✝¹ : Category.{w, v} J
F✝ : J ⥤ Type u
inst✝ : HasColimit F✝
α β : Type u
f : α ⟶ β
F : ℕᵒᵖ ⥤ Type u
c : Cone F
hc✝ : IsLimit c
hF✝ : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
hc : IsLimit c
hF : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
i : c.pt ≅ (limitCone F).pt := hc.conePointUniqueUpToIso (limitConeIsLimit F)
this : c.π.app (Opposite.op 0) = i.hom ≫ (limitCone F).π.app (Opposite.op 0)
⊢ Function.Surjective (c.π.app (Opposite.op 0))
tactic: have : c.π.app ⟨0⟩ = i.hom ≫ (limitCone F).π.app ⟨0⟩ := by simp [i]
state_before: J : Type v
inst✝¹ : Category.{w, v} J
F✝ : J ⥤ Type u
inst✝ : HasColimit F✝
α β : Type u
f : α ⟶ β
F : ℕᵒᵖ ⥤ Type u
c : Cone F
hc✝ : IsLimit c
hF✝ : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
hc : IsLimit c
hF : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
i : c.pt ≅ (limitCone F).pt := hc.conePointUniqueUpToIso (limitConeIsLimit F)
this : c.π.app (Opposite.op 0) = i.hom ≫ (limitCone F).π.app (Opposite.op 0)
⊢ Function.Surjective (c.π.app (Opposite.op 0))
state_after: J : Type v
inst✝¹ : Category.{w, v} J
F✝ : J ⥤ Type u
inst✝ : HasColimit F✝
α β : Type u
f : α ⟶ β
F : ℕᵒᵖ ⥤ Type u
c : Cone F
hc✝ : IsLimit c
hF✝ : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
hc : IsLimit c
hF : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
i : c.pt ≅ (limitCone F).pt := hc.conePointUniqueUpToIso (limitConeIsLimit F)
this : c.π.app (Opposite.op 0) = i.hom ≫ (limitCone F).π.app (Opposite.op 0)
⊢ Function.Surjective (i.hom ≫ (limitCone F).π.app (Opposite.op 0))
tactic: rw [this]
state_before: J : Type v
inst✝¹ : Category.{w, v} J
F✝ : J ⥤ Type u
inst✝ : HasColimit F✝
α β : Type u
f : α ⟶ β
F : ℕᵒᵖ ⥤ Type u
c : Cone F
hc✝ : IsLimit c
hF✝ : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
hc : IsLimit c
hF : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
i : c.pt ≅ (limitCone F).pt := hc.conePointUniqueUpToIso (limitConeIsLimit F)
this : c.π.app (Opposite.op 0) = i.hom ≫ (limitCone F).π.app (Opposite.op 0)
⊢ Function.Surjective (i.hom ≫ (limitCone F).π.app (Opposite.op 0))
state_after: case hg
J : Type v
inst✝¹ : Category.{w, v} J
F✝ : J ⥤ Type u
inst✝ : HasColimit F✝
α β : Type u
f : α ⟶ β
F : ℕᵒᵖ ⥤ Type u
c : Cone F
hc✝ : IsLimit c
hF✝ : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
hc : IsLimit c
hF : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
i : c.pt ≅ (limitCone F).pt := hc.conePointUniqueUpToIso (limitConeIsLimit F)
this : c.π.app (Opposite.op 0) = i.hom ≫ (limitCone F).π.app (Opposite.op 0)
⊢ Function.Surjective ((limitCone F).π.app (Opposite.op 0))

case hf
J : Type v
inst✝¹ : Category.{w, v} J
F✝ : J ⥤ Type u
inst✝ : HasColimit F✝
α β : Type u
f : α ⟶ β
F : ℕᵒᵖ ⥤ Type u
c : Cone F
hc✝ : IsLimit c
hF✝ : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
hc : IsLimit c
hF : ∀ (n : ℕ), Function.Surjective (F.map (homOfLE ⋯).op)
i : c.pt ≅ (limitCone F).pt := hc.conePointUniqueUpToIso (limitConeIsLimit F)
this : c.π.app (Opposite.op 0) = i.hom ≫ (limitCone F).π.app (Opposite.op 0)
⊢ Function.Surjective i.hom
tactic: apply Function.Surjective.comp