@@ -67,6 +67,12 @@ le_of_inf_eq (f.unique inf_le_left hg)
67
67
lemma le_of_inf_ne_bot' (f : ultrafilter α) {g : filter α} (hg : ne_bot (g ⊓ f)) : ↑f ≤ g :=
68
68
f.le_of_inf_ne_bot $ by rwa inf_comm
69
69
70
+ lemma inf_ne_bot_iff {f : ultrafilter α} {g : filter α} : ne_bot (↑f ⊓ g) ↔ ↑f ≤ g :=
71
+ ⟨le_of_inf_ne_bot f, λ h, (inf_of_le_left h).symm ▸ f.ne_bot⟩
72
+
73
+ lemma disjoint_iff_not_le {f : ultrafilter α} {g : filter α} : disjoint ↑f g ↔ ¬↑f ≤ g :=
74
+ by rw [← inf_ne_bot_iff, ne_bot_iff, ne.def, not_not, disjoint_iff]
75
+
70
76
@[simp] lemma compl_not_mem_iff : sᶜ ∉ f ↔ s ∈ f :=
71
77
⟨λ hsc, le_principal_iff.1 $ f.le_of_inf_ne_bot
72
78
⟨λ h, hsc $ mem_of_eq_bot$ by rwa compl_compl⟩, compl_not_mem⟩
@@ -92,6 +98,12 @@ lemma nonempty_of_mem (hs : s ∈ f) : s.nonempty := nonempty_of_mem hs
92
98
lemma ne_empty_of_mem (hs : s ∈ f) : s ≠ ∅ := (nonempty_of_mem hs).ne_empty
93
99
@[simp] lemma empty_not_mem : ∅ ∉ f := empty_not_mem f
94
100
101
+ @[simp] lemma le_sup_iff {u : ultrafilter α} {f g : filter α} : ↑u ≤ f ⊔ g ↔ ↑u ≤ f ∨ ↑u ≤ g :=
102
+ not_iff_not.1 $ by simp only [← disjoint_iff_not_le, not_or_distrib, disjoint_sup_right]
103
+
104
+ @[simp] lemma union_mem_iff : s ∪ t ∈ f ↔ s ∈ f ∨ t ∈ f :=
105
+ by simp only [← mem_coe, ← le_principal_iff, ← sup_principal, le_sup_iff]
106
+
95
107
lemma mem_or_compl_mem (f : ultrafilter α) (s : set α) : s ∈ f ∨ sᶜ ∈ f :=
96
108
or_iff_not_imp_left.2 compl_mem_iff_not_mem.2
97
109
@@ -100,10 +112,7 @@ protected lemma em (f : ultrafilter α) (p : α → Prop) :
100
112
f.mem_or_compl_mem {x | p x}
101
113
102
114
lemma eventually_or : (∀ᶠ x in f, p x ∨ q x) ↔ (∀ᶠ x in f, p x) ∨ ∀ᶠ x in f, q x :=
103
- ⟨λ H, (f.em p).imp_right $ λ hp, (H.and hp).mono $ λ x ⟨hx, hnx⟩, hx.resolve_left hnx,
104
- λ H, H.elim (λ hp, hp.mono $ λ x, or.inl) (λ hp, hp.mono $ λ x, or.inr)⟩
105
-
106
- lemma union_mem_iff : s ∪ t ∈ f ↔ s ∈ f ∨ t ∈ f := eventually_or
115
+ union_mem_iff
107
116
108
117
lemma eventually_not : (∀ᶠ x in f, ¬p x) ↔ ¬∀ᶠ x in f, p x := compl_mem_iff_not_mem
109
118
@@ -182,20 +191,22 @@ lemma pure_injective : injective (pure : α → ultrafilter α) :=
182
191
instance [inhabited α] : inhabited (ultrafilter α) := ⟨pure default⟩
183
192
instance [nonempty α] : nonempty (ultrafilter α) := nonempty.map pure infer_instance
184
193
185
- lemma eq_pure_of_finite_mem (h : s.finite) (h' : s ∈ f) : ∃ x ∈ s, (f : filter α) = pure x :=
194
+ lemma eq_pure_of_finite_mem (h : s.finite) (h' : s ∈ f) : ∃ x ∈ s, f = pure x :=
186
195
begin
187
196
rw ← bUnion_of_singleton s at h',
188
197
rcases (ultrafilter.finite_bUnion_mem_iff h).mp h' with ⟨a, has, haf⟩,
189
- use [a, has],
190
- change (f : filter α) = (pure a : ultrafilter α),
191
- rw [ultrafilter.coe_inj, ← ultrafilter.coe_le_coe],
192
- change (f : filter α) ≤ pure a,
193
- rwa [← principal_singleton, le_principal_iff]
198
+ exact ⟨a, has, eq_of_le (filter.le_pure_iff.2 haf)⟩
194
199
end
195
200
196
- lemma eq_pure_of_finite [finite α] (f : ultrafilter α) : ∃ a, (f : filter α) = pure a :=
201
+ lemma eq_pure_of_finite [finite α] (f : ultrafilter α) : ∃ a, f = pure a :=
197
202
(eq_pure_of_finite_mem finite_univ univ_mem).imp $ λ a ⟨_, ha⟩, ha
198
203
204
+ lemma le_cofinite_or_eq_pure (f : ultrafilter α) : (f : filter α) ≤ cofinite ∨ ∃ a, f = pure a :=
205
+ or_iff_not_imp_left.2 $ λ h,
206
+ let ⟨s, hs, hfin⟩ := filter.disjoint_cofinite_right.1 (disjoint_iff_not_le.2 h),
207
+ ⟨a, has, hf⟩ := eq_pure_of_finite_mem hfin hs
208
+ in ⟨a, hf⟩
209
+
199
210
/-- Monadic bind for ultrafilters, coming from the one on filters
200
211
defined in terms of map and join.-/
201
212
def bind (f : ultrafilter α) (m : α → ultrafilter β) : ultrafilter β :=
0 commit comments