Theorem: Filter.hasBasis_iInf
File: Mathlib/Order/Filter/Bases.lean

tactic: refine' ⟨fun t => ⟨fun ht => _, _⟩⟩
state_before: α : Type u_3
β : Type ?u.33284
γ : Type ?u.33287
ι✝ : Sort ?u.33290
ι'✝ : Sort ?u.33293
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_1
ι' : ι → Type u_2
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
⊢ HasBasis (⨅ (i : ι), l i) (fun If => Set.Finite If.fst ∧ ∀ (i : ↑If.fst), p (↑i) (Sigma.snd If i)) fun If =>
    ⋂ (i : ↑If.fst), s (↑i) (Sigma.snd If i)

tactic: rcases (hasBasis_iInf' hl).mem_iff.mp ht with ⟨⟨I, f⟩, ⟨hI, hf⟩, hsub⟩
state_before: case refine'_1
α : Type u_3
β : Type ?u.33284
γ : Type ?u.33287
ι✝ : Sort ?u.33290
ι'✝ : Sort ?u.33293
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_1
ι' : ι → Type u_2
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
ht : t ∈ ⨅ (i : ι), l i
⊢ ∃ i,
    (Set.Finite i.fst ∧ ∀ (i_1 : ↑i.fst), p (↑i_1) (Sigma.snd i i_1)) ∧
      (⋂ (i_1 : ↑i.fst), s (↑i_1) (Sigma.snd i i_1)) ⊆ t

tactic: exact ⟨⟨I, fun i => f i⟩, ⟨hI, Subtype.forall.mpr hf⟩, trans (iInter_subtype _ _) hsub⟩
state_before: case refine'_1.intro.mk.intro.intro
α : Type u_3
β : Type ?u.33284
γ : Type ?u.33287
ι✝ : Sort ?u.33290
ι'✝ : Sort ?u.33293
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_1
ι' : ι → Type u_2
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
ht : t ∈ ⨅ (i : ι), l i
I : Set ι
f : (i : ι) → ι' i
hsub : (⋂ (i : ι) (_ : i ∈ (I, f).fst), s i (Prod.snd (I, f) i)) ⊆ t
hI : Set.Finite (I, f).fst
hf : ∀ (i : ι), i ∈ (I, f).fst → p i (Prod.snd (I, f) i)
⊢ ∃ i,
    (Set.Finite i.fst ∧ ∀ (i_1 : ↑i.fst), p (↑i_1) (Sigma.snd i i_1)) ∧
      (⋂ (i_1 : ↑i.fst), s (↑i_1) (Sigma.snd i i_1)) ⊆ t

tactic: rintro ⟨⟨I, f⟩, ⟨hI, hf⟩, hsub⟩
state_before: case refine'_2
α : Type u_3
β : Type ?u.33284
γ : Type ?u.33287
ι✝ : Sort ?u.33290
ι'✝ : Sort ?u.33293
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_1
ι' : ι → Type u_2
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
⊢ (∃ i,
      (Set.Finite i.fst ∧ ∀ (i_1 : ↑i.fst), p (↑i_1) (Sigma.snd i i_1)) ∧
        (⋂ (i_1 : ↑i.fst), s (↑i_1) (Sigma.snd i i_1)) ⊆ t) →
    t ∈ ⨅ (i : ι), l i

tactic: refine' mem_of_superset _ hsub
state_before: case refine'_2.intro.mk.intro.intro
α : Type u_3
β : Type ?u.33284
γ : Type ?u.33287
ι✝ : Sort ?u.33290
ι'✝ : Sort ?u.33293
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_1
ι' : ι → Type u_2
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
I : Set ι
f : (i : ↑I) → ι' ↑i
hsub : (⋂ (i : ↑{ fst := I, snd := f }.fst), s (↑i) (Sigma.snd { fst := I, snd := f } i)) ⊆ t
hI : Set.Finite { fst := I, snd := f }.fst
hf : ∀ (i : ↑{ fst := I, snd := f }.fst), p (↑i) (Sigma.snd { fst := I, snd := f } i)
⊢ t ∈ ⨅ (i : ι), l i

tactic: cases hI.nonempty_fintype
state_before: case refine'_2.intro.mk.intro.intro
α : Type u_3
β : Type ?u.33284
γ : Type ?u.33287
ι✝ : Sort ?u.33290
ι'✝ : Sort ?u.33293
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_1
ι' : ι → Type u_2
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
I : Set ι
f : (i : ↑I) → ι' ↑i
hsub : (⋂ (i : ↑{ fst := I, snd := f }.fst), s (↑i) (Sigma.snd { fst := I, snd := f } i)) ⊆ t
hI : Set.Finite { fst := I, snd := f }.fst
hf : ∀ (i : ↑{ fst := I, snd := f }.fst), p (↑i) (Sigma.snd { fst := I, snd := f } i)
⊢ (⋂ (i : ↑{ fst := I, snd := f }.fst), s (↑i) (Sigma.snd { fst := I, snd := f } i)) ∈ ⨅ (i : ι), l i

tactic: exact iInter_mem.2 fun i => mem_iInf_of_mem ↑i <| (hl i).mem_of_mem <| hf _
state_before: case refine'_2.intro.mk.intro.intro.intro
α : Type u_3
β : Type ?u.33284
γ : Type ?u.33287
ι✝ : Sort ?u.33290
ι'✝ : Sort ?u.33293
l✝ l' : Filter α
p✝ : ι✝ → Prop
s✝ : ι✝ → Set α
t✝ : Set α
i : ι✝
p' : ι'✝ → Prop
s' : ι'✝ → Set α
i' : ι'✝
ι : Type u_1
ι' : ι → Type u_2
l : ι → Filter α
p : (i : ι) → ι' i → Prop
s : (i : ι) → ι' i → Set α
hl : ∀ (i : ι), HasBasis (l i) (p i) (s i)
t : Set α
I : Set ι
f : (i : ↑I) → ι' ↑i
hsub : (⋂ (i : ↑{ fst := I, snd := f }.fst), s (↑i) (Sigma.snd { fst := I, snd := f } i)) ⊆ t
hI : Set.Finite { fst := I, snd := f }.fst
hf : ∀ (i : ↑{ fst := I, snd := f }.fst), p (↑i) (Sigma.snd { fst := I, snd := f } i)
val✝ : Fintype ↑{ fst := I, snd := f }.fst
⊢ (⋂ (i : ↑{ fst := I, snd := f }.fst), s (↑i) (Sigma.snd { fst := I, snd := f } i)) ∈ ⨅ (i : ι), l i