Theorem: Filter.mem_iInf_finset
File: Mathlib/Order/Filter/Basic.lean

tactic: simp only [← Finset.set_biInter_coe, biInter_eq_iInter, iInf_subtype']
state_before: α : Type u
β : Type v
γ : Type w
δ : Type ?u.107252
ι : Sort x
f✝ g : Filter α
s✝ t✝ : Set α
s : Finset α
f : α → Filter β
t : Set β
⊢ (t ∈ ⨅ (a : α) (_ : a ∈ s), f a) ↔ ∃ p, (∀ (a : α), a ∈ s → p a ∈ f a) ∧ t = ⋂ (a : α) (_ : a ∈ s), p a

tactic: refine' ⟨fun h => _, _⟩
state_before: α : Type u
β : Type v
γ : Type w
δ : Type ?u.107252
ι : Sort x
f✝ g : Filter α
s✝ t✝ : Set α
s : Finset α
f : α → Filter β
t : Set β
⊢ (t ∈ ⨅ (x : { i // i ∈ s }), f ↑x) ↔ ∃ p, (∀ (a : α), a ∈ s → p a ∈ f a) ∧ t = ⋂ (x : ↑↑s), p ↑x

tactic: rcases (mem_iInf_of_finite _).1 h with ⟨p, hp, rfl⟩
state_before: case refine'_1
α : Type u
β : Type v
γ : Type w
δ : Type ?u.107252
ι : Sort x
f✝ g : Filter α
s✝ t✝ : Set α
s : Finset α
f : α → Filter β
t : Set β
h : t ∈ ⨅ (x : { i // i ∈ s }), f ↑x
⊢ ∃ p, (∀ (a : α), a ∈ s → p a ∈ f a) ∧ t = ⋂ (x : ↑↑s), p ↑x

tactic: refine'
  ⟨fun a => if h : a ∈ s then p ⟨a, h⟩ else univ, fun a ha => by simpa [ha] using hp ⟨a, ha⟩, _⟩
state_before: case refine'_1.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type ?u.107252
ι : Sort x
f✝ g : Filter α
s✝ t : Set α
s : Finset α
f : α → Filter β
p : { i // i ∈ s } → Set β
hp : ∀ (i : { i // i ∈ s }), p i ∈ f ↑i
h : (⋂ (i : { i // i ∈ s }), p i) ∈ ⨅ (x : { i // i ∈ s }), f ↑x
⊢ ∃ p_1, (∀ (a : α), a ∈ s → p_1 a ∈ f a) ∧ (⋂ (i : { i // i ∈ s }), p i) = ⋂ (x : ↑↑s), p_1 ↑x

tactic: refine' iInter_congr_of_surjective id surjective_id _
state_before: case refine'_1.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type ?u.107252
ι : Sort x
f✝ g : Filter α
s✝ t : Set α
s : Finset α
f : α → Filter β
p : { i // i ∈ s } → Set β
hp : ∀ (i : { i // i ∈ s }), p i ∈ f ↑i
h : (⋂ (i : { i // i ∈ s }), p i) ∈ ⨅ (x : { i // i ∈ s }), f ↑x
⊢ (⋂ (i : { i // i ∈ s }), p i) = ⋂ (x : ↑↑s), (fun a => if h : a ∈ s then p { val := a, property := h } else univ) ↑x

tactic: rintro ⟨a, ha⟩
state_before: case refine'_1.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type ?u.107252
ι : Sort x
f✝ g : Filter α
s✝ t : Set α
s : Finset α
f : α → Filter β
p : { i // i ∈ s } → Set β
hp : ∀ (i : { i // i ∈ s }), p i ∈ f ↑i
h : (⋂ (i : { i // i ∈ s }), p i) ∈ ⨅ (x : { i // i ∈ s }), f ↑x
⊢ ∀ (x : { i // i ∈ s }), (fun a => if h : a ∈ s then p { val := a, property := h } else univ) ↑(id x) = p x

tactic: simp [ha]
state_before: case refine'_1.intro.intro.mk
α : Type u
β : Type v
γ : Type w
δ : Type ?u.107252
ι : Sort x
f✝ g : Filter α
s✝ t : Set α
s : Finset α
f : α → Filter β
p : { i // i ∈ s } → Set β
hp : ∀ (i : { i // i ∈ s }), p i ∈ f ↑i
h : (⋂ (i : { i // i ∈ s }), p i) ∈ ⨅ (x : { i // i ∈ s }), f ↑x
a : α
ha : a ∈ s
⊢ (fun a => if h : a ∈ s then p { val := a, property := h } else univ) ↑(id { val := a, property := ha }) =
    p { val := a, property := ha }

tactic: simpa [ha] using hp ⟨a, ha⟩
state_before: α : Type u
β : Type v
γ : Type w
δ : Type ?u.107252
ι : Sort x
f✝ g : Filter α
s✝ t : Set α
s : Finset α
f : α → Filter β
p : { i // i ∈ s } → Set β
hp : ∀ (i : { i // i ∈ s }), p i ∈ f ↑i
h : (⋂ (i : { i // i ∈ s }), p i) ∈ ⨅ (x : { i // i ∈ s }), f ↑x
a : α
ha : a ∈ s
⊢ (fun a => if h : a ∈ s then p { val := a, property := h } else univ) a ∈ f a

tactic: rintro ⟨p, hpf, rfl⟩
state_before: case refine'_2
α : Type u
β : Type v
γ : Type w
δ : Type ?u.107252
ι : Sort x
f✝ g : Filter α
s✝ t✝ : Set α
s : Finset α
f : α → Filter β
t : Set β
⊢ (∃ p, (∀ (a : α), a ∈ s → p a ∈ f a) ∧ t = ⋂ (x : ↑↑s), p ↑x) → t ∈ ⨅ (x : { i // i ∈ s }), f ↑x

tactic: exact iInter_mem.2 fun a => mem_iInf_of_mem a (hpf a a.2)
state_before: case refine'_2.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type ?u.107252
ι : Sort x
f✝ g : Filter α
s✝ t : Set α
s : Finset α
f : α → Filter β
p : α → Set β
hpf : ∀ (a : α), a ∈ s → p a ∈ f a
⊢ (⋂ (x : ↑↑s), p ↑x) ∈ ⨅ (x : { i // i ∈ s }), f ↑x