Theorem: TopCat.nonempty_limitCone_of_compact_t2_cofiltered_system
File: Mathlib/Topology/Category/TopCat/Limits/Konig.lean

tactic: classical
  obtain ⟨u : (j : J) → (F.obj j).α, hu⟩ :=
    IsCompact.nonempty_iInter_of_directed_nonempty_compact_closed
      (fun (G : FiniteDiagram J) => partialSections F G.2)
      (partialSections.directed F) (fun G => partialSections.nonempty F G.2)
      (fun G => IsClosed.isCompact (partialSections.closed F G.2))
      (fun G => partialSections.closed F G.2)
  use u
  intro X Y f
  let G : FiniteDiagram J :=
    ⟨{X, Y},
      {⟨X, Y, by simp only [true_or_iff, eq_self_iff_true, Finset.mem_insert], by
          simp only [eq_self_iff_true, or_true_iff, Finset.mem_insert, Finset.mem_singleton], f⟩}⟩
  exact hu _ ⟨G, rfl⟩ (Finset.mem_singleton_self _)
state_before: J✝ : Type v
inst✝⁵ : SmallCategory J✝
J : Type u
inst✝⁴ : SmallCategory J
F : J ⥤ TopCat
inst✝³ : IsCofilteredOrEmpty J
inst✝² : ∀ (j : J), Nonempty ↑(F.obj j)
inst✝¹ : ∀ (j : J), CompactSpace ↑(F.obj j)
inst✝ : ∀ (j : J), T2Space ↑(F.obj j)
⊢ Nonempty ↑(limitCone F).pt

tactic: obtain ⟨u : (j : J) → (F.obj j).α, hu⟩ :=
  IsCompact.nonempty_iInter_of_directed_nonempty_compact_closed
    (fun (G : FiniteDiagram J) => partialSections F G.2)
    (partialSections.directed F) (fun G => partialSections.nonempty F G.2)
    (fun G => IsClosed.isCompact (partialSections.closed F G.2))
    (fun G => partialSections.closed F G.2)
state_before: J✝ : Type v
inst✝⁵ : SmallCategory J✝
J : Type u
inst✝⁴ : SmallCategory J
F : J ⥤ TopCat
inst✝³ : IsCofilteredOrEmpty J
inst✝² : ∀ (j : J), Nonempty ↑(F.obj j)
inst✝¹ : ∀ (j : J), CompactSpace ↑(F.obj j)
inst✝ : ∀ (j : J), T2Space ↑(F.obj j)
⊢ Nonempty ↑(limitCone F).pt

tactic: use u
state_before: case intro
J✝ : Type v
inst✝⁵ : SmallCategory J✝
J : Type u
inst✝⁴ : SmallCategory J
F : J ⥤ TopCat
inst✝³ : IsCofilteredOrEmpty J
inst✝² : ∀ (j : J), Nonempty ↑(F.obj j)
inst✝¹ : ∀ (j : J), CompactSpace ↑(F.obj j)
inst✝ : ∀ (j : J), T2Space ↑(F.obj j)
u : (j : J) → ↑(F.obj j)
hu : u ∈ ⋂ (i : TopCat.FiniteDiagram J), partialSections F i.snd
⊢ Nonempty ↑(limitCone F).pt

tactic: intro X Y f
state_before: case intro
J✝ : Type v
inst✝⁵ : SmallCategory J✝
J : Type u
inst✝⁴ : SmallCategory J
F : J ⥤ TopCat
inst✝³ : IsCofilteredOrEmpty J
inst✝² : ∀ (j : J), Nonempty ↑(F.obj j)
inst✝¹ : ∀ (j : J), CompactSpace ↑(F.obj j)
inst✝ : ∀ (j : J), T2Space ↑(F.obj j)
u : (j : J) → ↑(F.obj j)
hu : u ∈ ⋂ (i : TopCat.FiniteDiagram J), partialSections F i.snd
⊢ u ∈ {u | ∀ {i j : J} (f : i ⟶ j), (forget TopCat).map (F.map f) (u i) = u j}

tactic: let G : FiniteDiagram J :=
  ⟨{X, Y},
    {⟨X, Y, by simp only [true_or_iff, eq_self_iff_true, Finset.mem_insert], by
        simp only [eq_self_iff_true, or_true_iff, Finset.mem_insert, Finset.mem_singleton], f⟩}⟩
state_before: case intro
J✝ : Type v
inst✝⁵ : SmallCategory J✝
J : Type u
inst✝⁴ : SmallCategory J
F : J ⥤ TopCat
inst✝³ : IsCofilteredOrEmpty J
inst✝² : ∀ (j : J), Nonempty ↑(F.obj j)
inst✝¹ : ∀ (j : J), CompactSpace ↑(F.obj j)
inst✝ : ∀ (j : J), T2Space ↑(F.obj j)
u : (j : J) → ↑(F.obj j)
hu : u ∈ ⋂ (i : TopCat.FiniteDiagram J), partialSections F i.snd
X Y : J
f : X ⟶ Y
⊢ (forget TopCat).map (F.map f) (u X) = u Y

tactic: exact hu _ ⟨G, rfl⟩ (Finset.mem_singleton_self _)
state_before: case intro
J✝ : Type v
inst✝⁵ : SmallCategory J✝
J : Type u
inst✝⁴ : SmallCategory J
F : J ⥤ TopCat
inst✝³ : IsCofilteredOrEmpty J
inst✝² : ∀ (j : J), Nonempty ↑(F.obj j)
inst✝¹ : ∀ (j : J), CompactSpace ↑(F.obj j)
inst✝ : ∀ (j : J), T2Space ↑(F.obj j)
u : (j : J) → ↑(F.obj j)
hu : u ∈ ⋂ (i : TopCat.FiniteDiagram J), partialSections F i.snd
X Y : J
f : X ⟶ Y
G : TopCat.FiniteDiagram J :=
  { fst := {X, Y},
    snd :=
      {{ fst := X,
          snd := { fst := Y, snd := { fst := (_ : X ∈ {X, Y}), snd := { fst := (_ : Y ∈ {X, Y}), snd := f } } } }} }
⊢ (forget TopCat).map (F.map f) (u X) = u Y

tactic: simp only [true_or_iff, eq_self_iff_true, Finset.mem_insert]
state_before: J✝ : Type v
inst✝⁵ : SmallCategory J✝
J : Type u
inst✝⁴ : SmallCategory J
F : J ⥤ TopCat
inst✝³ : IsCofilteredOrEmpty J
inst✝² : ∀ (j : J), Nonempty ↑(F.obj j)
inst✝¹ : ∀ (j : J), CompactSpace ↑(F.obj j)
inst✝ : ∀ (j : J), T2Space ↑(F.obj j)
u : (j : J) → ↑(F.obj j)
hu : u ∈ ⋂ (i : TopCat.FiniteDiagram J), partialSections F i.snd
X Y : J
f : X ⟶ Y
⊢ X ∈ {X, Y}

tactic: simp only [eq_self_iff_true, or_true_iff, Finset.mem_insert, Finset.mem_singleton]
state_before: J✝ : Type v
inst✝⁵ : SmallCategory J✝
J : Type u
inst✝⁴ : SmallCategory J
F : J ⥤ TopCat
inst✝³ : IsCofilteredOrEmpty J
inst✝² : ∀ (j : J), Nonempty ↑(F.obj j)
inst✝¹ : ∀ (j : J), CompactSpace ↑(F.obj j)
inst✝ : ∀ (j : J), T2Space ↑(F.obj j)
u : (j : J) → ↑(F.obj j)
hu : u ∈ ⋂ (i : TopCat.FiniteDiagram J), partialSections F i.snd
X Y : J
f : X ⟶ Y
⊢ Y ∈ {X, Y}