[GOAL]
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
ι : Type u_4
S : Set ι
hS : Set.Countable S
s : (i : ι) → i ∈ S → Set α
⊢ ⋂ (i : ι) (hi : i ∈ S), s i hi ∈ l ↔ ∀ (i : ι) (hi : i ∈ S), s i hi ∈ l
[PROOFSTEP]
rw [biInter_eq_iInter]
[GOAL]
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
ι : Type u_4
S : Set ι
hS : Set.Countable S
s : (i : ι) → i ∈ S → Set α
⊢ ⋂ (x : ↑S), s ↑x (_ : ↑x ∈ S) ∈ l ↔ ∀ (i : ι) (hi : i ∈ S), s i hi ∈ l
[PROOFSTEP]
haveI := hS.toEncodable
[GOAL]
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
ι : Type u_4
S : Set ι
hS : Set.Countable S
s : (i : ι) → i ∈ S → Set α
this : Encodable ↑S
⊢ ⋂ (x : ↑S), s ↑x (_ : ↑x ∈ S) ∈ l ↔ ∀ (i : ι) (hi : i ∈ S), s i hi ∈ l
[PROOFSTEP]
exact countable_iInter_mem.trans Subtype.forall
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
inst✝ : Countable ι
p : α → ι → Prop
⊢ (∀ᶠ (x : α) in l, ∀ (i : ι), p x i) ↔ ∀ (i : ι), ∀ᶠ (x : α) in l, p x i
[PROOFSTEP]
simpa only [Filter.Eventually, setOf_forall] using @countable_iInter_mem _ _ l _ _ fun i => {x | p x i}
[GOAL]
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
ι : Type u_4
S : Set ι
hS : Set.Countable S
p : α → (i : ι) → i ∈ S → Prop
⊢ (∀ᶠ (x : α) in l, ∀ (i : ι) (hi : i ∈ S), p x i hi) ↔ ∀ (i : ι) (hi : i ∈ S), ∀ᶠ (x : α) in l, p x i hi
[PROOFSTEP]
simpa only [Filter.Eventually, setOf_forall] using @countable_bInter_mem _ l _ _ _ hS fun i hi => {x | p x i hi}
[GOAL]
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
ι : Type u_4
S : Set ι
hS : Set.Countable S
s t : (i : ι) → i ∈ S → Set α
h : ∀ (i : ι) (hi : i ∈ S), s i hi ≤ᶠ[l] t i hi
⊢ ⋃ (i : ι) (h : i ∈ S), s i h ≤ᶠ[l] ⋃ (i : ι) (h : i ∈ S), t i h
[PROOFSTEP]
simp only [biUnion_eq_iUnion]
[GOAL]
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
ι : Type u_4
S : Set ι
hS : Set.Countable S
s t : (i : ι) → i ∈ S → Set α
h : ∀ (i : ι) (hi : i ∈ S), s i hi ≤ᶠ[l] t i hi
⊢ ⋃ (x : ↑S), s ↑x (_ : ↑x ∈ S) ≤ᶠ[l] ⋃ (x : ↑S), t ↑x (_ : ↑x ∈ S)
[PROOFSTEP]
haveI := hS.toEncodable
[GOAL]
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
ι : Type u_4
S : Set ι
hS : Set.Countable S
s t : (i : ι) → i ∈ S → Set α
h : ∀ (i : ι) (hi : i ∈ S), s i hi ≤ᶠ[l] t i hi
this : Encodable ↑S
⊢ ⋃ (x : ↑S), s ↑x (_ : ↑x ∈ S) ≤ᶠ[l] ⋃ (x : ↑S), t ↑x (_ : ↑x ∈ S)
[PROOFSTEP]
exact EventuallyLE.countable_iUnion fun i => h i i.2
[GOAL]
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
ι : Type u_4
S : Set ι
hS : Set.Countable S
s t : (i : ι) → i ∈ S → Set α
h : ∀ (i : ι) (hi : i ∈ S), s i hi ≤ᶠ[l] t i hi
⊢ ⋂ (i : ι) (h : i ∈ S), s i h ≤ᶠ[l] ⋂ (i : ι) (h : i ∈ S), t i h
[PROOFSTEP]
simp only [biInter_eq_iInter]
[GOAL]
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
ι : Type u_4
S : Set ι
hS : Set.Countable S
s t : (i : ι) → i ∈ S → Set α
h : ∀ (i : ι) (hi : i ∈ S), s i hi ≤ᶠ[l] t i hi
⊢ ⋂ (x : ↑S), s ↑x (_ : ↑x ∈ S) ≤ᶠ[l] ⋂ (x : ↑S), t ↑x (_ : ↑x ∈ S)
[PROOFSTEP]
haveI := hS.toEncodable
[GOAL]
ι✝ : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
ι : Type u_4
S : Set ι
hS : Set.Countable S
s t : (i : ι) → i ∈ S → Set α
h : ∀ (i : ι) (hi : i ∈ S), s i hi ≤ᶠ[l] t i hi
this : Encodable ↑S
⊢ ⋂ (x : ↑S), s ↑x (_ : ↑x ∈ S) ≤ᶠ[l] ⋂ (x : ↑S), t ↑x (_ : ↑x ∈ S)
[PROOFSTEP]
exact EventuallyLE.countable_iInter fun i => h i i.2
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
⊢ CountableInterFilter ⊥
[PROOFSTEP]
rw [← principal_empty]
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
⊢ CountableInterFilter (𝓟 ∅)
[PROOFSTEP]
apply countableInterFilter_principal
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
⊢ CountableInterFilter ⊤
[PROOFSTEP]
rw [← principal_univ]
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
⊢ CountableInterFilter (𝓟 univ)
[PROOFSTEP]
apply countableInterFilter_principal
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l✝ : Filter α
inst✝¹ : CountableInterFilter l✝
l : Filter β
inst✝ : CountableInterFilter l
f : α → β
⊢ CountableInterFilter (comap f l)
[PROOFSTEP]
refine' ⟨fun S hSc hS => _⟩
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l✝ : Filter α
inst✝¹ : CountableInterFilter l✝
l : Filter β
inst✝ : CountableInterFilter l
f : α → β
S : Set (Set α)
hSc : Set.Countable S
hS : ∀ (s : Set α), s ∈ S → s ∈ comap f l
⊢ ⋂₀ S ∈ comap f l
[PROOFSTEP]
choose! t htl ht using hS
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l✝ : Filter α
inst✝¹ : CountableInterFilter l✝
l : Filter β
inst✝ : CountableInterFilter l
f : α → β
S : Set (Set α)
hSc : Set.Countable S
t : Set α → Set β
htl : ∀ (s : Set α), s ∈ S → t s ∈ l
ht : ∀ (s : Set α), s ∈ S → f ⁻¹' t s ⊆ s
⊢ ⋂₀ S ∈ comap f l
[PROOFSTEP]
have : (⋂ s ∈ S, t s) ∈ l := (countable_bInter_mem hSc).2 htl
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l✝ : Filter α
inst✝¹ : CountableInterFilter l✝
l : Filter β
inst✝ : CountableInterFilter l
f : α → β
S : Set (Set α)
hSc : Set.Countable S
t : Set α → Set β
htl : ∀ (s : Set α), s ∈ S → t s ∈ l
ht : ∀ (s : Set α), s ∈ S → f ⁻¹' t s ⊆ s
this : ⋂ (s : Set α) (_ : s ∈ S), t s ∈ l
⊢ ⋂₀ S ∈ comap f l
[PROOFSTEP]
refine' ⟨_, this, _⟩
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l✝ : Filter α
inst✝¹ : CountableInterFilter l✝
l : Filter β
inst✝ : CountableInterFilter l
f : α → β
S : Set (Set α)
hSc : Set.Countable S
t : Set α → Set β
htl : ∀ (s : Set α), s ∈ S → t s ∈ l
ht : ∀ (s : Set α), s ∈ S → f ⁻¹' t s ⊆ s
this : ⋂ (s : Set α) (_ : s ∈ S), t s ∈ l
⊢ f ⁻¹' ⋂ (s : Set α) (_ : s ∈ S), t s ⊆ ⋂₀ S
[PROOFSTEP]
simpa [preimage_iInter] using iInter₂_mono ht
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l✝ : Filter α
inst✝¹ : CountableInterFilter l✝
l : Filter α
inst✝ : CountableInterFilter l
f : α → β
⊢ CountableInterFilter (map f l)
[PROOFSTEP]
refine' ⟨fun S hSc hS => _⟩
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l✝ : Filter α
inst✝¹ : CountableInterFilter l✝
l : Filter α
inst✝ : CountableInterFilter l
f : α → β
S : Set (Set β)
hSc : Set.Countable S
hS : ∀ (s : Set β), s ∈ S → s ∈ map f l
⊢ ⋂₀ S ∈ map f l
[PROOFSTEP]
simp only [mem_map, sInter_eq_biInter, preimage_iInter₂] at hS ⊢
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l✝ : Filter α
inst✝¹ : CountableInterFilter l✝
l : Filter α
inst✝ : CountableInterFilter l
f : α → β
S : Set (Set β)
hSc : Set.Countable S
hS : ∀ (s : Set β), s ∈ S → f ⁻¹' s ∈ l
⊢ ⋂ (i : Set β) (_ : i ∈ S), f ⁻¹' i ∈ l
[PROOFSTEP]
exact (countable_bInter_mem hSc).2 hS
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
⊢ CountableInterFilter (l₁ ⊓ l₂)
[PROOFSTEP]
refine' ⟨fun S hSc hS => _⟩
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
hS : ∀ (s : Set α), s ∈ S → s ∈ l₁ ⊓ l₂
⊢ ⋂₀ S ∈ l₁ ⊓ l₂
[PROOFSTEP]
choose s hs t ht hst using hS
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
s : (s : Set α) → s ∈ S → Set α
hs : ∀ (s_1 : Set α) (a : s_1 ∈ S), s s_1 a ∈ l₁
t : (s : Set α) → s ∈ S → Set α
ht : ∀ (s : Set α) (a : s ∈ S), t s a ∈ l₂
hst : ∀ (s_1 : Set α) (a : s_1 ∈ S), s_1 = s s_1 a ∩ t s_1 a
⊢ ⋂₀ S ∈ l₁ ⊓ l₂
[PROOFSTEP]
replace hs : (⋂ i ∈ S, s i ‹_›) ∈ l₁ := (countable_bInter_mem hSc).2 hs
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
s t : (s : Set α) → s ∈ S → Set α
ht : ∀ (s : Set α) (a : s ∈ S), t s a ∈ l₂
hst : ∀ (s_1 : Set α) (a : s_1 ∈ S), s_1 = s s_1 a ∩ t s_1 a
hs : ⋂ (i : Set α) (h : i ∈ S), s i h ∈ l₁
⊢ ⋂₀ S ∈ l₁ ⊓ l₂
[PROOFSTEP]
replace ht : (⋂ i ∈ S, t i ‹_›) ∈ l₂ := (countable_bInter_mem hSc).2 ht
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
s t : (s : Set α) → s ∈ S → Set α
hst : ∀ (s_1 : Set α) (a : s_1 ∈ S), s_1 = s s_1 a ∩ t s_1 a
hs : ⋂ (i : Set α) (h : i ∈ S), s i h ∈ l₁
ht : ⋂ (i : Set α) (h : i ∈ S), t i h ∈ l₂
⊢ ⋂₀ S ∈ l₁ ⊓ l₂
[PROOFSTEP]
refine' mem_of_superset (inter_mem_inf hs ht) (subset_sInter fun i hi => _)
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
s t : (s : Set α) → s ∈ S → Set α
hst : ∀ (s_1 : Set α) (a : s_1 ∈ S), s_1 = s s_1 a ∩ t s_1 a
hs : ⋂ (i : Set α) (h : i ∈ S), s i h ∈ l₁
ht : ⋂ (i : Set α) (h : i ∈ S), t i h ∈ l₂
i : Set α
hi : i ∈ S
⊢ (⋂ (i : Set α) (h : i ∈ S), s i h) ∩ ⋂ (i : Set α) (h : i ∈ S), t i h ⊆ i
[PROOFSTEP]
rw [hst i hi]
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
s t : (s : Set α) → s ∈ S → Set α
hst : ∀ (s_1 : Set α) (a : s_1 ∈ S), s_1 = s s_1 a ∩ t s_1 a
hs : ⋂ (i : Set α) (h : i ∈ S), s i h ∈ l₁
ht : ⋂ (i : Set α) (h : i ∈ S), t i h ∈ l₂
i : Set α
hi : i ∈ S
⊢ (⋂ (i : Set α) (h : i ∈ S), s i h) ∩ ⋂ (i : Set α) (h : i ∈ S), t i h ⊆ s i hi ∩ t i hi
[PROOFSTEP]
apply inter_subset_inter
[GOAL]
case h₁
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
s t : (s : Set α) → s ∈ S → Set α
hst : ∀ (s_1 : Set α) (a : s_1 ∈ S), s_1 = s s_1 a ∩ t s_1 a
hs : ⋂ (i : Set α) (h : i ∈ S), s i h ∈ l₁
ht : ⋂ (i : Set α) (h : i ∈ S), t i h ∈ l₂
i : Set α
hi : i ∈ S
⊢ ⋂ (i : Set α) (h : i ∈ S), s i h ⊆ s i hi
[PROOFSTEP]
exact iInter_subset_of_subset i (iInter_subset _ _)
[GOAL]
case h₂
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
s t : (s : Set α) → s ∈ S → Set α
hst : ∀ (s_1 : Set α) (a : s_1 ∈ S), s_1 = s s_1 a ∩ t s_1 a
hs : ⋂ (i : Set α) (h : i ∈ S), s i h ∈ l₁
ht : ⋂ (i : Set α) (h : i ∈ S), t i h ∈ l₂
i : Set α
hi : i ∈ S
⊢ ⋂ (i : Set α) (h : i ∈ S), t i h ⊆ t i hi
[PROOFSTEP]
exact iInter_subset_of_subset i (iInter_subset _ _)
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
⊢ CountableInterFilter (l₁ ⊔ l₂)
[PROOFSTEP]
refine' ⟨fun S hSc hS => ⟨_, _⟩⟩
[GOAL]
case refine'_1
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
hS : ∀ (s : Set α), s ∈ S → s ∈ l₁ ⊔ l₂
⊢ ⋂₀ S ∈ l₁.sets
[PROOFSTEP]
refine' (countable_sInter_mem hSc).2 fun s hs => _
[GOAL]
case refine'_2
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
hS : ∀ (s : Set α), s ∈ S → s ∈ l₁ ⊔ l₂
⊢ ⋂₀ S ∈ l₂.sets
[PROOFSTEP]
refine' (countable_sInter_mem hSc).2 fun s hs => _
[GOAL]
case refine'_1
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
hS : ∀ (s : Set α), s ∈ S → s ∈ l₁ ⊔ l₂
s : Set α
hs : s ∈ S
⊢ s ∈ l₁
case refine'_2
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝² : CountableInterFilter l
l₁ l₂ : Filter α
inst✝¹ : CountableInterFilter l₁
inst✝ : CountableInterFilter l₂
S : Set (Set α)
hSc : Set.Countable S
hS : ∀ (s : Set α), s ∈ S → s ∈ l₁ ⊔ l₂
s : Set α
hs : s ∈ S
⊢ s ∈ l₂
[PROOFSTEP]
exacts [(hS s hs).1, (hS s hs).2]
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
⊢ CountableInterFilter (countableGenerate g)
[PROOFSTEP]
delta countableGenerate
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
⊢ CountableInterFilter
    (ofCountableInter (CountableGenerateSets g)
      (_ :
        ∀ (x : Set (Set α)),
          Set.Countable x → (∀ (s : Set α), s ∈ x → CountableGenerateSets g s) → CountableGenerateSets g (⋂₀ x))
      (_ : ∀ (x x_1 : Set α), CountableGenerateSets g x → x ⊆ x_1 → CountableGenerateSets g x_1))
[PROOFSTEP]
infer_instance
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
⊢ s ∈ countableGenerate g ↔ ∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ s
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
⊢ s ∈ countableGenerate g → ∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ s
[PROOFSTEP]
intro h
[GOAL]
case mpr
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
⊢ (∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ s) → s ∈ countableGenerate g
[PROOFSTEP]
intro h
[GOAL]
case mp
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
h : s ∈ countableGenerate g
⊢ ∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ s
[PROOFSTEP]
induction' h with s hs s t _ st ih S Sct _ ih
[GOAL]
case mp.basic
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s✝ s : Set α
hs : s ∈ g
⊢ ∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ s
[PROOFSTEP]
exact ⟨{ s }, by simp [hs, subset_refl]⟩
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s✝ s : Set α
hs : s ∈ g
⊢ {s} ⊆ g ∧ Set.Countable {s} ∧ ⋂₀ {s} ⊆ s
[PROOFSTEP]
simp [hs, subset_refl]
[GOAL]
case mp.univ
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
⊢ ∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ univ
[PROOFSTEP]
exact ⟨∅, by simp⟩
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
⊢ ∅ ⊆ g ∧ Set.Countable ∅ ∧ ⋂₀ ∅ ⊆ univ
[PROOFSTEP]
simp
[GOAL]
case mp.superset
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s✝ s t : Set α
a✝ : CountableGenerateSets g s
st : s ⊆ t
ih : ∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ s
⊢ ∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ t
[PROOFSTEP]
refine' Exists.imp (fun S => _) ih
[GOAL]
case mp.superset
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s✝ s t : Set α
a✝ : CountableGenerateSets g s
st : s ⊆ t
ih : ∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ s
S : Set (Set α)
⊢ S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ s → S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ t
[PROOFSTEP]
tauto
[GOAL]
case mp.sInter
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
S : Set (Set α)
Sct : Set.Countable S
a✝ : ∀ (s : Set α), s ∈ S → CountableGenerateSets g s
ih : ∀ (s : Set α), s ∈ S → ∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ s
⊢ ∃ S_1, S_1 ⊆ g ∧ Set.Countable S_1 ∧ ⋂₀ S_1 ⊆ ⋂₀ S
[PROOFSTEP]
choose T Tg Tct hT using ih
[GOAL]
case mp.sInter
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
S : Set (Set α)
Sct : Set.Countable S
a✝ : ∀ (s : Set α), s ∈ S → CountableGenerateSets g s
T : (s : Set α) → s ∈ S → Set (Set α)
Tg : ∀ (s : Set α) (a : s ∈ S), T s a ⊆ g
Tct : ∀ (s : Set α) (a : s ∈ S), Set.Countable (T s a)
hT : ∀ (s : Set α) (a : s ∈ S), ⋂₀ T s a ⊆ s
⊢ ∃ S_1, S_1 ⊆ g ∧ Set.Countable S_1 ∧ ⋂₀ S_1 ⊆ ⋂₀ S
[PROOFSTEP]
refine' ⟨⋃ (s) (H : s ∈ S), T s H, by simpa, Sct.biUnion Tct, _⟩
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
S : Set (Set α)
Sct : Set.Countable S
a✝ : ∀ (s : Set α), s ∈ S → CountableGenerateSets g s
T : (s : Set α) → s ∈ S → Set (Set α)
Tg : ∀ (s : Set α) (a : s ∈ S), T s a ⊆ g
Tct : ∀ (s : Set α) (a : s ∈ S), Set.Countable (T s a)
hT : ∀ (s : Set α) (a : s ∈ S), ⋂₀ T s a ⊆ s
⊢ ⋃ (s : Set α) (H : s ∈ S), T s H ⊆ g
[PROOFSTEP]
simpa
[GOAL]
case mp.sInter
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
S : Set (Set α)
Sct : Set.Countable S
a✝ : ∀ (s : Set α), s ∈ S → CountableGenerateSets g s
T : (s : Set α) → s ∈ S → Set (Set α)
Tg : ∀ (s : Set α) (a : s ∈ S), T s a ⊆ g
Tct : ∀ (s : Set α) (a : s ∈ S), Set.Countable (T s a)
hT : ∀ (s : Set α) (a : s ∈ S), ⋂₀ T s a ⊆ s
⊢ ⋂₀ ⋃ (s : Set α) (H : s ∈ S), T s H ⊆ ⋂₀ S
[PROOFSTEP]
apply subset_sInter
[GOAL]
case mp.sInter.h
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
S : Set (Set α)
Sct : Set.Countable S
a✝ : ∀ (s : Set α), s ∈ S → CountableGenerateSets g s
T : (s : Set α) → s ∈ S → Set (Set α)
Tg : ∀ (s : Set α) (a : s ∈ S), T s a ⊆ g
Tct : ∀ (s : Set α) (a : s ∈ S), Set.Countable (T s a)
hT : ∀ (s : Set α) (a : s ∈ S), ⋂₀ T s a ⊆ s
⊢ ∀ (t' : Set α), t' ∈ S → ⋂₀ ⋃ (s : Set α) (H : s ∈ S), T s H ⊆ t'
[PROOFSTEP]
intro s H
[GOAL]
case mp.sInter.h
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s✝ : Set α
S : Set (Set α)
Sct : Set.Countable S
a✝ : ∀ (s : Set α), s ∈ S → CountableGenerateSets g s
T : (s : Set α) → s ∈ S → Set (Set α)
Tg : ∀ (s : Set α) (a : s ∈ S), T s a ⊆ g
Tct : ∀ (s : Set α) (a : s ∈ S), Set.Countable (T s a)
hT : ∀ (s : Set α) (a : s ∈ S), ⋂₀ T s a ⊆ s
s : Set α
H : s ∈ S
⊢ ⋂₀ ⋃ (s : Set α) (H : s ∈ S), T s H ⊆ s
[PROOFSTEP]
refine' subset_trans (sInter_subset_sInter (subset_iUnion₂ s H)) (hT s H)
[GOAL]
case mpr
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
h : ∃ S, S ⊆ g ∧ Set.Countable S ∧ ⋂₀ S ⊆ s
⊢ s ∈ countableGenerate g
[PROOFSTEP]
rcases h with ⟨S, Sg, Sct, hS⟩
[GOAL]
case mpr.intro.intro.intro
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
S : Set (Set α)
Sg : S ⊆ g
Sct : Set.Countable S
hS : ⋂₀ S ⊆ s
⊢ s ∈ countableGenerate g
[PROOFSTEP]
refine' mem_of_superset ((countable_sInter_mem Sct).mpr _) hS
[GOAL]
case mpr.intro.intro.intro
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s : Set α
S : Set (Set α)
Sg : S ⊆ g
Sct : Set.Countable S
hS : ⋂₀ S ⊆ s
⊢ ∀ (s : Set α), s ∈ S → s ∈ countableGenerate g
[PROOFSTEP]
intro s H
[GOAL]
case mpr.intro.intro.intro
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
s✝ : Set α
S : Set (Set α)
Sg : S ⊆ g
Sct : Set.Countable S
hS : ⋂₀ S ⊆ s✝
s : Set α
H : s ∈ S
⊢ s ∈ countableGenerate g
[PROOFSTEP]
exact CountableGenerateSets.basic (Sg H)
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
g : Set (Set α)
f : Filter α
inst✝ : CountableInterFilter f
⊢ f ≤ countableGenerate g ↔ g ⊆ f.sets
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
g : Set (Set α)
f : Filter α
inst✝ : CountableInterFilter f
⊢ f ≤ countableGenerate g → g ⊆ f.sets
[PROOFSTEP]
intro h
[GOAL]
case mpr
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
g : Set (Set α)
f : Filter α
inst✝ : CountableInterFilter f
⊢ g ⊆ f.sets → f ≤ countableGenerate g
[PROOFSTEP]
intro h
[GOAL]
case mp
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
g : Set (Set α)
f : Filter α
inst✝ : CountableInterFilter f
h : f ≤ countableGenerate g
⊢ g ⊆ f.sets
[PROOFSTEP]
exact subset_trans (fun s => CountableGenerateSets.basic) h
[GOAL]
case mpr
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
g : Set (Set α)
f : Filter α
inst✝ : CountableInterFilter f
h : g ⊆ f.sets
⊢ f ≤ countableGenerate g
[PROOFSTEP]
intro s hs
[GOAL]
case mpr
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
g : Set (Set α)
f : Filter α
inst✝ : CountableInterFilter f
h : g ⊆ f.sets
s : Set α
hs : s ∈ countableGenerate g
⊢ s ∈ f
[PROOFSTEP]
induction' hs with s hs s t _ st ih S Sct _ ih
[GOAL]
case mpr.basic
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
g : Set (Set α)
f : Filter α
inst✝ : CountableInterFilter f
h : g ⊆ f.sets
s✝ s : Set α
hs : s ∈ g
⊢ s ∈ f
[PROOFSTEP]
exact h hs
[GOAL]
case mpr.univ
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
g : Set (Set α)
f : Filter α
inst✝ : CountableInterFilter f
h : g ⊆ f.sets
s : Set α
⊢ univ ∈ f
[PROOFSTEP]
exact univ_mem
[GOAL]
case mpr.superset
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
g : Set (Set α)
f : Filter α
inst✝ : CountableInterFilter f
h : g ⊆ f.sets
s✝ s t : Set α
a✝ : CountableGenerateSets g s
st : s ⊆ t
ih : s ∈ f
⊢ t ∈ f
[PROOFSTEP]
exact mem_of_superset ih st
[GOAL]
case mpr.sInter
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝¹ : CountableInterFilter l
g : Set (Set α)
f : Filter α
inst✝ : CountableInterFilter f
h : g ⊆ f.sets
s : Set α
S : Set (Set α)
Sct : Set.Countable S
a✝ : ∀ (s : Set α), s ∈ S → CountableGenerateSets g s
ih : ∀ (s : Set α), s ∈ S → s ∈ f
⊢ ⋂₀ S ∈ f
[PROOFSTEP]
exact (countable_sInter_mem Sct).mpr ih
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
⊢ IsGreatest {f | CountableInterFilter f ∧ g ⊆ f.sets} (countableGenerate g)
[PROOFSTEP]
refine' ⟨⟨inferInstance, fun s => CountableGenerateSets.basic⟩, _⟩
[GOAL]
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
⊢ countableGenerate g ∈ upperBounds {f | CountableInterFilter f ∧ g ⊆ f.sets}
[PROOFSTEP]
rintro f ⟨fct, hf⟩
[GOAL]
case intro
ι : Sort u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : CountableInterFilter l
g : Set (Set α)
f : Filter α
fct : CountableInterFilter f
hf : g ⊆ f.sets
⊢ f ≤ countableGenerate g
[PROOFSTEP]
rwa [@le_countableGenerate_iff_of_countableInterFilter _ _ _ fct]