awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Lean 4 proof step from Mathlib.Topology.Category.TopCat.Limits.Cofiltered (goal)
Goal:
J : Type v
inst : Category.{w, v} J
inst_1 : IsCofiltered.{w, v} J
F : J ⥤ TopCat
C : Cone F
hC : IsLimit C
T : (j : J) → Set (Set (↑(F.obj j) : Type (max u v)))
hT : ∀ (j : J), IsTopologicalBasis (T j)
univ : ∀ (i : J), Set.univ ∈ T i
inter : ∀ (i : J) (U1 U2 : Set (↑(F.obj i) : Type (max u v))), U1 ∈ T i → U2 ∈ T i → U1 ∩ U2 ∈ T i
compat :
  ∀ (i j : J) (f : i ⟶ j) (V : Set (↑(F.obj j) : Type (max u v))) (_hV : V ∈ T j),
    (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
              (F.map f)) :
          (a : (↑(F.obj i) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
        V ∈
      T i
U0 : Set (↑C.pt : Type (max u v))
⊢ Membership.mem (γ := Set (Set (↑C.pt : Type (max u v))))
      {U : Set (↑C.pt : Type (max u v)) |
        ∃ (j : J),
          ∃ V ∈ T j,
            U =
              (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v))))
                      (CC := carrier) (C.π.app j)) :
                  (a : (↑(((Functor.const J).obj C.pt).obj j) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
                V}
      U0 ↔
    Membership.mem (γ := Set (Set (↑C.pt : Type (max u v))))
      {S : Set (↑C.pt : Type (max u v)) |
        ∃ (U : (i : J) → Set (↑(F.obj i) : Type (max u v))) (F_1 : Finset J),
          (∀ i ∈ F_1, U i ∈ T i) ∧
            S =
              ⋂ i ∈ F_1,
                (fun (x : (↑C.pt : Type (max u v))) ↦
                    (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v))))
                          (CC := carrier) (C.π.app i) :
                        (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
                      x) ⁻¹'
                  U i}
      U0
have h : Membership.mem (γ := Set (Set (↑C.pt : Type (max u v))))
    {U : Set (↑C.pt : Type (max u v)) |
      ∃ (j : J),
        ∃ V ∈ T j,
          U =
            (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                    carrier) (C.π.app j)) :
                (a : (↑(((Functor.const J).obj C.pt).obj j) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
              V}
    U0 →
  Membership.mem (γ := Set (Set (↑C.pt : Type (max u v))))
    {S : Set (↑C.pt : Type (max u v)) |
      ∃ (U : (i : J) → Set (↑(F.obj i) : Type (max u v))) (F_1 : Finset J),
        (∀ i ∈ F_1, U i ∈ T i) ∧
          S =
            ⋂ i ∈ F_1,
              (fun (x : (↑C.pt : Type (max u v))) ↦
                  (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v))))
                        (CC := carrier) (C.π.app i) :
                      (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
                    x) ⁻¹'
                U i}
    U0
Tactic: constructor
-- Lean 4 proof step from Mathlib.Topology.Category.TopCat.Limits.Cofiltered (goal)
Goal:
J : Type v
inst : Category.{w, v} J
inst_1 : IsCofiltered.{w, v} J
F : J ⥤ TopCat
C : Cone F
hC : IsLimit C
T : (j : J) → Set (Set (↑(F.obj j) : Type (max u v)))
hT : ∀ (j : J), IsTopologicalBasis (T j)
univ : ∀ (i : J), Set.univ ∈ T i
inter : ∀ (i : J) (U1 U2 : Set (↑(F.obj i) : Type (max u v))), U1 ∈ T i → U2 ∈ T i → U1 ∩ U2 ∈ T i
compat :
  ∀ (i j : J) (f : i ⟶ j) (V : Set (↑(F.obj j) : Type (max u v))) (_hV : V ∈ T j),
    (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
              (F.map f)) :
          (a : (↑(F.obj i) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
        V ∈
      T i
j : J
V : Set (↑(F.obj j) : Type (max u v))
hV : V ∈ T j
U : (i : J) → Set (↑(F.obj i) : Type (max u v)) := fun (i : J) ↦ if h : i = j then Eq.mpr ⋯ V else Set.univ
⊢ Membership.mem (γ := Set (Set (↑C.pt : Type (max u v))))
    {S : Set (↑C.pt : Type (max u v)) |
      ∃ (U : (i : J) → Set (↑(F.obj i) : Type (max u v))) (F_1 : Finset J),
        (∀ i ∈ F_1, U i ∈ T i) ∧
          S =
            ⋂ i ∈ F_1,
              (fun (x : (↑C.pt : Type (max u v))) ↦
                  (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v))))
                        (CC := carrier) (C.π.app i) :
                      (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
                    x) ⁻¹'
                U i}
    ((⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
            carrier) (C.π.app j)) :
        (a : (↑(((Functor.const J).obj C.pt).obj j) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
      V)
have h : ∀ (i : J), Membership.mem (γ := Finset J) {j} i → U i ∈ T i
Tactic: refine ⟨U, {j}, ?_, ?_⟩
-- Lean 4 proof step from Mathlib.Topology.Category.TopCat.Limits.Cofiltered (goal)
Goal:
J : Type v
inst : Category.{w, v} J
inst_1 : IsCofiltered.{w, v} J
F : J ⥤ TopCat
C : Cone F
hC : IsLimit C
T : (j : J) → Set (Set (↑(F.obj j) : Type (max u v)))
hT : ∀ (j : J), IsTopologicalBasis (T j)
univ : ∀ (i : J), Set.univ ∈ T i
inter : ∀ (i : J) (U1 U2 : Set (↑(F.obj i) : Type (max u v))), U1 ∈ T i → U2 ∈ T i → U1 ∩ U2 ∈ T i
compat :
  ∀ (i j : J) (f : i ⟶ j) (V : Set (↑(F.obj j) : Type (max u v))) (_hV : V ∈ T j),
    (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
              (F.map f)) :
          (a : (↑(F.obj i) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
        V ∈
      T i
j : J
V : Set (↑(F.obj j) : Type (max u v))
hV : V ∈ T j
U : (i : J) → Set (↑(F.obj i) : Type (max u v)) := fun (i : J) ↦ if h : i = j then Eq.mpr ⋯ V else Set.univ
h : ∀ (i : J), Membership.mem (γ := Finset J) {j} i → U i ∈ T i
⊢ Membership.mem (γ := Set (Set (↑C.pt : Type (max u v))))
    {S : Set (↑C.pt : Type (max u v)) |
      ∃ (U : (i : J) → Set (↑(F.obj i) : Type (max u v))) (F_1 : Finset J),
        (∀ i ∈ F_1, U i ∈ T i) ∧
          S =
            ⋂ i ∈ F_1,
              (fun (x : (↑C.pt : Type (max u v))) ↦
                  (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v))))
                        (CC := carrier) (C.π.app i) :
                      (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
                    x) ⁻¹'
                U i}
    ((⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
            carrier) (C.π.app j)) :
        (a : (↑(((Functor.const J).obj C.pt).obj j) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
      V)
have h₁ : Eq (α := Set (↑C.pt : Type (max u v)))
  ((⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
          (C.π.app j)) :
      (a : (↑(((Functor.const J).obj C.pt).obj j) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
    V)
  (⋂ (i : J),
    ⋂ (_ : Membership.mem (γ := Finset J) {j} i),
      (fun (x : (↑C.pt : Type (max u v))) ↦
          (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                carrier) (C.π.app i) :
              (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
            x) ⁻¹'
        U i)
Tactic: refine ⟨U, {j}, ?_, ?_⟩
-- Lean 4 proof step from Mathlib.Topology.Category.TopCat.Limits.Cofiltered (goal)
Goal:
J : Type v
inst : Category.{w, v} J
inst_1 : IsCofiltered.{w, v} J
F : J ⥤ TopCat
C : Cone F
hC : IsLimit C
T : (j : J) → Set (Set (↑(F.obj j) : Type (max u v)))
hT : ∀ (j : J), IsTopologicalBasis (T j)
univ : ∀ (i : J), Set.univ ∈ T i
inter : ∀ (i : J) (U1 U2 : Set (↑(F.obj i) : Type (max u v))), U1 ∈ T i → U2 ∈ T i → U1 ∩ U2 ∈ T i
compat :
  ∀ (i j : J) (f : i ⟶ j) (V : Set (↑(F.obj j) : Type (max u v))) (_hV : V ∈ T j),
    (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
              (F.map f)) :
          (a : (↑(F.obj i) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
        V ∈
      T i
j : J
V : Set (↑(F.obj j) : Type (max u v))
hV : V ∈ T j
U : (i : J) → Set (↑(F.obj i) : Type (max u v)) := fun (i : J) ↦ if h : i = j then Eq.mpr ⋯ V else Set.univ
⊢ ∀ (i : J), Membership.mem (γ := Finset J) {j} i → U i ∈ T i
have h : ∀ (i : J), i = j → U i ∈ T i
Tactic: simp only [Finset.mem_singleton]
-- Lean 4 proof step from Mathlib.Topology.Category.TopCat.Limits.Cofiltered (goal)
Goal:
J : Type v
inst : Category.{w, v} J
inst_1 : IsCofiltered.{w, v} J
F : J ⥤ TopCat
C : Cone F
hC : IsLimit C
T : (j : J) → Set (Set (↑(F.obj j) : Type (max u v)))
hT : ∀ (j : J), IsTopologicalBasis (T j)
univ : ∀ (i : J), Set.univ ∈ T i
inter : ∀ (i : J) (U1 U2 : Set (↑(F.obj i) : Type (max u v))), U1 ∈ T i → U2 ∈ T i → U1 ∩ U2 ∈ T i
compat :
  ∀ (i j : J) (f : i ⟶ j) (V : Set (↑(F.obj j) : Type (max u v))) (_hV : V ∈ T j),
    (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
              (F.map f)) :
          (a : (↑(F.obj i) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
        V ∈
      T i
U0 : Set (↑C.pt : Type (max u v))
U : (i : J) → Set (↑(F.obj i) : Type (max u v))
G : Finset J
h1 : ∀ i ∈ G, U i ∈ T i
h2 :
  U0 =
    ⋂ i ∈ G,
      (fun (x : (↑C.pt : Type (max u v))) ↦
          (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                carrier) (C.π.app i) :
              (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
            x) ⁻¹'
        U i
⊢ Membership.mem (γ := Set (Set (↑C.pt : Type (max u v))))
    {U : Set (↑C.pt : Type (max u v)) |
      ∃ (j : J),
        ∃ V ∈ T j,
          U =
            (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                    carrier) (C.π.app j)) :
                (a : (↑(((Functor.const J).obj C.pt).obj j) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
              V}
    U0
have h : ∀ (j : J) (hj : ∀ {X : J}, X ∈ G → Nonempty.{w + 1} (j ⟶ X)),
  Membership.mem (γ := Set (Set (↑C.pt : Type (max u v))))
    {U : Set (↑C.pt : Type (max u v)) |
      ∃ (j : J),
        ∃ V ∈ T j,
          U =
            (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                    carrier) (C.π.app j)) :
                (a : (↑(((Functor.const J).obj C.pt).obj j) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
              V}
    U0
Tactic: obtain ⟨j, hj⟩ := IsCofiltered.inf_objs_exists G
-- Lean 4 proof step from Mathlib.Topology.Category.TopCat.Limits.Cofiltered (goal)
Goal:
J : Type v
inst : Category.{w, v} J
inst_1 : IsCofiltered.{w, v} J
F : J ⥤ TopCat
C : Cone F
hC : IsLimit C
T : (j : J) → Set (Set (↑(F.obj j) : Type (max u v)))
hT : ∀ (j : J), IsTopologicalBasis (T j)
univ : ∀ (i : J), Set.univ ∈ T i
inter : ∀ (i : J) (U1 U2 : Set (↑(F.obj i) : Type (max u v))), U1 ∈ T i → U2 ∈ T i → U1 ∩ U2 ∈ T i
compat :
  ∀ (i j : J) (f : i ⟶ j) (V : Set (↑(F.obj j) : Type (max u v))) (_hV : V ∈ T j),
    (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
              (F.map f)) :
          (a : (↑(F.obj i) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
        V ∈
      T i
U0 : Set (↑C.pt : Type (max u v))
U : (i : J) → Set (↑(F.obj i) : Type (max u v))
G : Finset J
h1 : ∀ i ∈ G, U i ∈ T i
h2 :
  U0 =
    ⋂ i ∈ G,
      (fun (x : (↑C.pt : Type (max u v))) ↦
          (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                carrier) (C.π.app i) :
              (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
            x) ⁻¹'
        U i
j : J
hj : ∀ {X : J}, X ∈ G → Nonempty.{w + 1} (j ⟶ X)
g : (e : J) → e ∈ G → (j ⟶ e) := fun (x : J) (he : x ∈ G) ↦ ⋯.some
Vs : J → Set (↑(F.obj j) : Type (max u v)) :=
  fun (e : J) ↦
    if h : e ∈ G then
      (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
              carrier) (F.map (g e h))) :
          (a : (↑(F.obj j) : Type (max u v))) → (↑(F.obj e) : Type (max u v))) ⁻¹'
        U e
    else Set.univ
V : Set (↑(F.obj j) : Type (max u v)) := ⋂ e ∈ G, Vs e
⊢ Membership.mem (γ := Set (Set (↑C.pt : Type (max u v))))
    {U : Set (↑C.pt : Type (max u v)) |
      ∃ (j : J),
        ∃ V ∈ T j,
          U =
            (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                    carrier) (C.π.app j)) :
                (a : (↑(((Functor.const J).obj C.pt).obj j) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
              V}
    U0
have h : V ∈ T j
Tactic: refine ⟨j, V, ?_, ?_⟩
-- Lean 4 proof step from Mathlib.Topology.Category.TopCat.Limits.Cofiltered (goal)
Goal:
J : Type v
inst : Category.{w, v} J
inst_1 : IsCofiltered.{w, v} J
F : J ⥤ TopCat
C : Cone F
hC : IsLimit C
T : (j : J) → Set (Set (↑(F.obj j) : Type (max u v)))
hT : ∀ (j : J), IsTopologicalBasis (T j)
univ : ∀ (i : J), Set.univ ∈ T i
inter : ∀ (i : J) (U1 U2 : Set (↑(F.obj i) : Type (max u v))), U1 ∈ T i → U2 ∈ T i → U1 ∩ U2 ∈ T i
compat :
  ∀ (i j : J) (f : i ⟶ j) (V : Set (↑(F.obj j) : Type (max u v))) (_hV : V ∈ T j),
    (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
              (F.map f)) :
          (a : (↑(F.obj i) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
        V ∈
      T i
U0 : Set (↑C.pt : Type (max u v))
U : (i : J) → Set (↑(F.obj i) : Type (max u v))
G : Finset J
h1 : ∀ i ∈ G, U i ∈ T i
h2 :
  U0 =
    ⋂ i ∈ G,
      (fun (x : (↑C.pt : Type (max u v))) ↦
          (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                carrier) (C.π.app i) :
              (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
            x) ⁻¹'
        U i
j : J
hj : ∀ {X : J}, X ∈ G → Nonempty.{w + 1} (j ⟶ X)
g : (e : J) → e ∈ G → (j ⟶ e) := fun (x : J) (he : x ∈ G) ↦ ⋯.some
Vs : J → Set (↑(F.obj j) : Type (max u v)) :=
  fun (e : J) ↦
    if h : e ∈ G then
      (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
              carrier) (F.map (g e h))) :
          (a : (↑(F.obj j) : Type (max u v))) → (↑(F.obj e) : Type (max u v))) ⁻¹'
        U e
    else Set.univ
V : Set (↑(F.obj j) : Type (max u v)) := ⋂ e ∈ G, Vs e
h : V ∈ T j
⊢ Membership.mem (γ := Set (Set (↑C.pt : Type (max u v))))
    {U : Set (↑C.pt : Type (max u v)) |
      ∃ (j : J),
        ∃ V ∈ T j,
          U =
            (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                    carrier) (C.π.app j)) :
                (a : (↑(((Functor.const J).obj C.pt).obj j) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
              V}
    U0
have h₁ : U0 =
  (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
          (C.π.app j)) :
      (a : (↑(((Functor.const J).obj C.pt).obj j) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
    V
Tactic: refine ⟨j, V, ?_, ?_⟩
-- Lean 4 proof step from Mathlib.Topology.Category.TopCat.Limits.Cofiltered (goal)
Goal:
J : Type v
inst : Category.{w, v} J
inst_1 : IsCofiltered.{w, v} J
F : J ⥤ TopCat
C : Cone F
hC : IsLimit C
T : (j : J) → Set (Set (↑(F.obj j) : Type (max u v)))
hT : ∀ (j : J), IsTopologicalBasis (T j)
univ : ∀ (i : J), Set.univ ∈ T i
inter : ∀ (i : J) (U1 U2 : Set (↑(F.obj i) : Type (max u v))), U1 ∈ T i → U2 ∈ T i → U1 ∩ U2 ∈ T i
compat :
  ∀ (i j : J) (f : i ⟶ j) (V : Set (↑(F.obj j) : Type (max u v))) (_hV : V ∈ T j),
    (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
              (F.map f)) :
          (a : (↑(F.obj i) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
        V ∈
      T i
U0 : Set (↑C.pt : Type (max u v))
U : (i : J) → Set (↑(F.obj i) : Type (max u v))
G : Finset J
h1 : ∀ i ∈ G, U i ∈ T i
h2 :
  U0 =
    ⋂ i ∈ G,
      (fun (x : (↑C.pt : Type (max u v))) ↦
          (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                carrier) (C.π.app i) :
              (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
            x) ⁻¹'
        U i
j : J
hj : ∀ {X : J}, X ∈ G → Nonempty.{w + 1} (j ⟶ X)
g : (e : J) → e ∈ G → (j ⟶ e) := fun (x : J) (he : x ∈ G) ↦ ⋯.some
Vs : J → Set (↑(F.obj j) : Type (max u v)) :=
  fun (e : J) ↦
    if h : e ∈ G then
      (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
              carrier) (F.map (g e h))) :
          (a : (↑(F.obj j) : Type (max u v))) → (↑(F.obj e) : Type (max u v))) ⁻¹'
        U e
    else Set.univ
V : Set (↑(F.obj j) : Type (max u v)) := ⋂ e ∈ G, Vs e
S : Set (Set (↑(F.obj j) : Type (max u v)))
a : J
E : Finset J
_ha : a ∉ E
hh1 :
  ∀ (P : J → Set (↑(F.obj j) : Type (max u v))) (_univ : Set.univ ∈ S)
    (_inter : ∀ (A B : Set (↑(F.obj j) : Type (max u v))), A ∈ S → B ∈ S → A ∩ B ∈ S)
    (_cond : ∀ (e : J) (_he : e ∈ E), P e ∈ S), ⋂ e ∈ E, P e ∈ S
hh2 : J → Set (↑(F.obj j) : Type (max u v))
hh3 : Set.univ ∈ S
hh4 : ∀ (A B : Set (↑(F.obj j) : Type (max u v))), A ∈ S → B ∈ S → A ∩ B ∈ S
hh5 : ∀ (e : J) (_he : e ∈ insert a E), hh2 e ∈ S
⊢ ⋂ e ∈ insert a E, hh2 e ∈ S
have insert : hh2 a ∩ ⋂ x ∈ E, hh2 x ∈ S
Tactic: rw [Finset.set_biInter_insert]
-- Lean 4 proof step from Mathlib.Topology.Category.TopCat.Limits.Cofiltered (goal)
Goal:
J : Type v
inst : Category.{w, v} J
inst_1 : IsCofiltered.{w, v} J
F : J ⥤ TopCat
C : Cone F
hC : IsLimit C
T : (j : J) → Set (Set (↑(F.obj j) : Type (max u v)))
hT : ∀ (j : J), IsTopologicalBasis (T j)
univ : ∀ (i : J), Set.univ ∈ T i
inter : ∀ (i : J) (U1 U2 : Set (↑(F.obj i) : Type (max u v))), U1 ∈ T i → U2 ∈ T i → U1 ∩ U2 ∈ T i
compat :
  ∀ (i j : J) (f : i ⟶ j) (V : Set (↑(F.obj j) : Type (max u v))) (_hV : V ∈ T j),
    (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
              (F.map f)) :
          (a : (↑(F.obj i) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
        V ∈
      T i
U0 : Set (↑C.pt : Type (max u v))
U : (i : J) → Set (↑(F.obj i) : Type (max u v))
G : Finset J
h1 : ∀ i ∈ G, U i ∈ T i
h2 :
  U0 =
    ⋂ i ∈ G,
      (fun (x : (↑C.pt : Type (max u v))) ↦
          (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                carrier) (C.π.app i) :
              (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
            x) ⁻¹'
        U i
j : J
hj : ∀ {X : J}, X ∈ G → Nonempty.{w + 1} (j ⟶ X)
g : (e : J) → e ∈ G → (j ⟶ e) := fun (x : J) (he : x ∈ G) ↦ ⋯.some
Vs : J → Set (↑(F.obj j) : Type (max u v)) :=
  fun (e : J) ↦
    if h : e ∈ G then
      (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
              carrier) (F.map (g e h))) :
          (a : (↑(F.obj j) : Type (max u v))) → (↑(F.obj e) : Type (max u v))) ⁻¹'
        U e
    else Set.univ
V : Set (↑(F.obj j) : Type (max u v)) := ⋂ e ∈ G, Vs e
S : Set (Set (↑(F.obj j) : Type (max u v)))
a : J
E : Finset J
_ha : a ∉ E
hh1 :
  ∀ (P : J → Set (↑(F.obj j) : Type (max u v))) (_univ : Set.univ ∈ S)
    (_inter : ∀ (A B : Set (↑(F.obj j) : Type (max u v))), A ∈ S → B ∈ S → A ∩ B ∈ S)
    (_cond : ∀ (e : J) (_he : e ∈ E), P e ∈ S), ⋂ e ∈ E, P e ∈ S
hh2 : J → Set (↑(F.obj j) : Type (max u v))
hh3 : Set.univ ∈ S
hh4 : ∀ (A B : Set (↑(F.obj j) : Type (max u v))), A ∈ S → B ∈ S → A ∩ B ∈ S
hh5 : ∀ (e : J) (_he : e ∈ insert a E), hh2 e ∈ S
⊢ hh2 a ∩ ⋂ x ∈ E, hh2 x ∈ S
have insert : ∀ (e : J) (_he : e ∈ E), hh2 e ∈ S
Tactic: refine hh4 _ _ (hh5 _ (Finset.mem_insert_self _ _)) (hh1 _ hh3 hh4 ?_)
-- Lean 4 proof step from Mathlib.Topology.Category.TopCat.Limits.Cofiltered (goal)
Goal:
J : Type v
inst : Category.{w, v} J
inst_1 : IsCofiltered.{w, v} J
F : J ⥤ TopCat
C : Cone F
hC : IsLimit C
T : (j : J) → Set (Set (↑(F.obj j) : Type (max u v)))
hT : ∀ (j : J), IsTopologicalBasis (T j)
univ : ∀ (i : J), Set.univ ∈ T i
inter : ∀ (i : J) (U1 U2 : Set (↑(F.obj i) : Type (max u v))), U1 ∈ T i → U2 ∈ T i → U1 ∩ U2 ∈ T i
compat :
  ∀ (i j : J) (f : i ⟶ j) (V : Set (↑(F.obj j) : Type (max u v))) (_hV : V ∈ T j),
    (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC := carrier)
              (F.map f)) :
          (a : (↑(F.obj i) : Type (max u v))) → (↑(F.obj j) : Type (max u v))) ⁻¹'
        V ∈
      T i
U0 : Set (↑C.pt : Type (max u v))
U : (i : J) → Set (↑(F.obj i) : Type (max u v))
G : Finset J
h1 : ∀ i ∈ G, U i ∈ T i
h2 :
  U0 =
    ⋂ i ∈ G,
      (fun (x : (↑C.pt : Type (max u v))) ↦
          (ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
                carrier) (C.π.app i) :
              (a : (↑(((Functor.const J).obj C.pt).obj i) : Type (max u v))) → (↑(F.obj i) : Type (max u v)))
            x) ⁻¹'
        U i
j : J
hj : ∀ {X : J}, X ∈ G → Nonempty.{w + 1} (j ⟶ X)
g : (e : J) → e ∈ G → (j ⟶ e) := fun (x : J) (he : x ∈ G) ↦ ⋯.some
Vs : J → Set (↑(F.obj j) : Type (max u v)) :=
  fun (e : J) ↦
    if h : e ∈ G then
      (⇑(ConcreteCategory.hom (FC := fun (X Y : TopCat) ↦ C((↑X : Type (max u v)), (↑Y : Type (max u v)))) (CC :=
              carrier) (F.map (g e h))) :
          (a : (↑(F.obj j) : Type (max u v))) → (↑(F.obj e) : Type (max u v))) ⁻¹'
        U e
    else Set.univ
V : Set (↑(F.obj j) : Type (max u v)) := ⋂ e ∈ G, Vs e
S : Set (Set (↑(F.obj j) : Type (max u v)))
E : Finset J
⊢ ∀ (P : J → Set (↑(F.obj j) : Type (max u v))) (_univ : Set.univ ∈ S)
    (_inter : ∀ (A B : Set (↑(F.obj j) : Type (max u v))), A ∈ S → B ∈ S → A ∩ B ∈ S)
    (_cond : ∀ (e : J) (_he : e ∈ E), P e ∈ S), ⋂ e ∈ E, P e ∈ S
have empty : ∀ (P : J → Set (↑(F.obj j) : Type (max u v))) (_univ : Set.univ ∈ S)
  (_inter : ∀ (A B : Set (↑(F.obj j) : Type (max u v))), A ∈ S → B ∈ S → A ∩ B ∈ S)
  (_cond : ∀ (e : J) (_he : Membership.mem (γ := Finset J) ∅ e), P e ∈ S),
  ⋂ (e : J), ⋂ (_ : Membership.mem (γ := Finset J) ∅ e), P e ∈ S
Tactic: induction E using Finset.induction_on with
        | empty =>
          intro P he _hh
          simpa
        | insert a E _ha hh1 =>
          intro hh2 hh3 hh4 hh5
          rw [Finset.set_biInter_insert]
          refine hh4 _ _ (hh5 _ (Finset.mem_insert_self _ _)) (hh1 _ hh3 hh4 ?_)
          intro e he
          exact hh5 e (Finset.mem_insert_of_mem he)
Cleared hypotheses: E