-- Mathlib/Order/Filter/Bases.lean
theorem hasBasis_biInf_of_directed {ι : Type*} {ι' : Sort _} {dom : Set ι} (hdom : dom.Nonempty)
    {l : ι → Filter α} (s : ι → ι' → Set α) (p : ι → ι' → Prop)
    (hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)) (h : DirectedOn (l ⁻¹'o GE.ge) dom) :
    (⨅ i ∈ dom, l i).HasBasis (fun ii' : ι × ι' => ii'.1 ∈ dom ∧ p ii'.1 ii'.2) fun ii' =>
      s ii'.1 ii'.2

Proof state:
case refine_1.intro
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
hi : i ∈ dom
hti : t ∈ l i
⊢ ∃ b, ((i, b).1 ∈ dom ∧ p (i, b).1 (i, b).2) ∧ s (i, b).1 (i, b).2 ⊆ t

Tactic:
rcases (hl i hi).mem_iff.mp hti with ⟨b, hb, hbt⟩

Result:
case refine_1.intro.intro.intro
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
hi : i ∈ dom
hti : t ∈ l i
b : ι'
hb : p i b
hbt : s i b ⊆ t
⊢ ∃ b, ((i, b).1 ∈ dom ∧ p (i, b).1 (i, b).2) ∧ s (i, b).1 (i, b).2 ⊆ t

Proof state:
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
⊢ (⨅ i ∈ dom, l i).HasBasis (fun ii' => ii'.1 ∈ dom ∧ p ii'.1 ii'.2) fun ii' => s ii'.1 ii'.2

Tactic:
refine ⟨fun t => ?_⟩

Result:
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
⊢ t ∈ ⨅ i ∈ dom, l i ↔ ∃ i, (i.1 ∈ dom ∧ p i.1 i.2) ∧ s i.1 i.2 ⊆ t

Proof state:
case refine_1
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
⊢ i ∈ dom ∧ t ∈ l i → ∃ b, ((i, b).1 ∈ dom ∧ p (i, b).1 (i, b).2) ∧ s (i, b).1 (i, b).2 ⊆ t

Tactic:
rintro ⟨hi, hti⟩

Result:
case refine_1.intro
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
hi : i ∈ dom
hti : t ∈ l i
⊢ ∃ b, ((i, b).1 ∈ dom ∧ p (i, b).1 (i, b).2) ∧ s (i, b).1 (i, b).2 ⊆ t

Proof state:
case refine_2.intro.intro.intro
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
b : ι'
hibt : s (i, b).1 (i, b).2 ⊆ t
hi : (i, b).1 ∈ dom
hb : p (i, b).1 (i, b).2
⊢ i ∈ dom ∧ t ∈ l i

Tactic:
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩

Result:
no goals

Proof state:
case refine_2
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
⊢ (∃ b, ((i, b).1 ∈ dom ∧ p (i, b).1 (i, b).2) ∧ s (i, b).1 (i, b).2 ⊆ t) → i ∈ dom ∧ t ∈ l i

Tactic:
rintro ⟨b, ⟨hi, hb⟩, hibt⟩

Result:
case refine_2.intro.intro.intro
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
b : ι'
hibt : s (i, b).1 (i, b).2 ⊆ t
hi : (i, b).1 ∈ dom
hb : p (i, b).1 (i, b).2
⊢ i ∈ dom ∧ t ∈ l i

Proof state:
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
⊢ t ∈ ⨅ i ∈ dom, l i ↔ ∃ i, (i.1 ∈ dom ∧ p i.1 i.2) ∧ s i.1 i.2 ⊆ t

Tactic:
rw [mem_biInf_of_directed h hdom, Prod.exists]

Result:
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
⊢ (∃ i ∈ dom, t ∈ l i) ↔ ∃ a b, ((a, b).1 ∈ dom ∧ p (a, b).1 (a, b).2) ∧ s (a, b).1 (a, b).2 ⊆ t

Proof state:
case refine_1.intro.intro.intro
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
hi : i ∈ dom
hti : t ∈ l i
b : ι'
hb : p i b
hbt : s i b ⊆ t
⊢ ∃ b, ((i, b).1 ∈ dom ∧ p (i, b).1 (i, b).2) ∧ s (i, b).1 (i, b).2 ⊆ t

Tactic:
exact ⟨b, ⟨hi, hb⟩, hbt⟩

Result:
no goals

Proof state:
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
⊢ (∃ i ∈ dom, t ∈ l i) ↔ ∃ a b, ((a, b).1 ∈ dom ∧ p (a, b).1 (a, b).2) ∧ s (a, b).1 (a, b).2 ⊆ t

Tactic:
refine exists_congr fun i => ⟨?_, ?_⟩

Result:
case refine_1
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
⊢ i ∈ dom ∧ t ∈ l i → ∃ b, ((i, b).1 ∈ dom ∧ p (i, b).1 (i, b).2) ∧ s (i, b).1 (i, b).2 ⊆ t

case refine_2
α : Type u_1
ι : Type u_6
ι' : Type u_7
dom : Set ι
hdom : dom.Nonempty
l : ι → Filter α
s : ι → ι' → Set α
p : ι → ι' → Prop
hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)
h : DirectedOn (l ⁻¹'o GE.ge) dom
t : Set α
i : ι
⊢ (∃ b, ((i, b).1 ∈ dom ∧ p (i, b).1 (i, b).2) ∧ s (i, b).1 (i, b).2 ⊆ t) → i ∈ dom ∧ t ∈ l i