order.filter.bases
⟷
Mathlib.Order.Filter.Bases
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
set.maps_to_prod_map_diagonal
, set.diagonal_nonempty
, and set.diagonal_subset_iff
.nhds_eq_comap_uniformity_aux
to filter.mem_comap_prod_mk
.set.nonempty.principal_ne_bot
and filter.comap_id'
.filter.has_basis.comp_of_surjective
to filter.has_basis.comp_surjective
.monotone_comp_rel
to monotone.comp_rel
to enable dot notation.nhds_eq_comap_uniformity'
.𝓝ˢ (diagonal γ)
instead of ⨆ x, 𝓝 (x, x)
in uniform_space_of_compact_t2
.Relevant parts are forward-ported in leanprover-community/mathlib4#1438
@@ -347,12 +347,12 @@ begin
exact forall_congr (λ s, ⟨λ h, h.1, λ h, ⟨h, λ ⟨t, hl, hP, hts⟩, mem_of_superset hl hts⟩⟩)
end
-lemma has_basis.comp_of_surjective (h : l.has_basis p s) {g : ι' → ι} (hg : function.surjective g) :
+lemma has_basis.comp_surjective (h : l.has_basis p s) {g : ι' → ι} (hg : function.surjective g) :
l.has_basis (p ∘ g) (s ∘ g) :=
⟨λ t, h.mem_iff.trans hg.exists⟩
lemma has_basis.comp_equiv (h : l.has_basis p s) (e : ι' ≃ ι) : l.has_basis (p ∘ e) (s ∘ e) :=
-h.comp_of_surjective e.surjective
+h.comp_surjective e.surjective
/-- If `{s i | p i}` is a basis of a filter `l` and each `s i` includes `s j` such that
`p j ∧ q j`, then `{s j | p j ∧ q j}` is a basis of `l`. -/
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -479,7 +479,7 @@ theorem HasBasis.eq_bot_iff (hl : l.HasBasis p s) : l = ⊥ ↔ ∃ i, p i ∧ s
#print Filter.generate_neBot_iff /-
theorem generate_neBot_iff {s : Set (Set α)} :
NeBot (generate s) ↔ ∀ (t) (_ : t ⊆ s), t.Finite → (⋂₀ t).Nonempty :=
- (hasBasis_generate s).neBot_iff.trans <| by simp only [← and_imp, and_comm']
+ (hasBasis_generate s).neBot_iff.trans <| by simp only [← and_imp, and_comm]
#align filter.generate_ne_bot_iff Filter.generate_neBot_iff
-/
@@ -499,7 +499,7 @@ theorem asBasis_filter (f : Filter α) : f.asBasis.filterₓ = f := by
theorem hasBasis_self {l : Filter α} {P : Set α → Prop} :
HasBasis l (fun s => s ∈ l ∧ P s) id ↔ ∀ t ∈ l, ∃ r ∈ l, P r ∧ r ⊆ t :=
by
- simp only [has_basis_iff, exists_prop, id, and_assoc']
+ simp only [has_basis_iff, exists_prop, id, and_assoc]
exact
forall_congr' fun s =>
⟨fun h => h.1, fun h => ⟨h, fun ⟨t, hl, hP, hts⟩ => mem_of_superset hl hts⟩⟩
@@ -546,7 +546,7 @@ theorem HasBasis.restrict_subset (h : l.HasBasis p s) {V : Set α} (hV : V ∈ l
#print Filter.HasBasis.hasBasis_self_subset /-
theorem HasBasis.hasBasis_self_subset {p : Set α → Prop} (h : l.HasBasis (fun s => s ∈ l ∧ p s) id)
{V : Set α} (hV : V ∈ l) : l.HasBasis (fun s => s ∈ l ∧ p s ∧ s ⊆ V) id := by
- simpa only [and_assoc'] using h.restrict_subset hV
+ simpa only [and_assoc] using h.restrict_subset hV
#align filter.has_basis.has_basis_self_subset Filter.HasBasis.hasBasis_self_subset
-/
@@ -714,8 +714,8 @@ theorem HasBasis.sup' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
⟨by
intro t
simp only [mem_sup, hl.mem_iff, hl'.mem_iff, PProd.exists, union_subset_iff, exists_prop,
- and_assoc', exists_and_left]
- simp only [← and_assoc', exists_and_right, and_comm']⟩
+ and_assoc, exists_and_left]
+ simp only [← and_assoc, exists_and_right, and_comm]⟩
#align filter.has_basis.sup' Filter.HasBasis.sup'
-/
@@ -914,7 +914,7 @@ theorem le_iff_forall_inf_principal_compl {f g : Filter α} : f ≤ g ↔ ∀ V
#print Filter.inf_neBot_iff_frequently_left /-
theorem inf_neBot_iff_frequently_left {f g : Filter α} :
NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ x in f, p x) → ∃ᶠ x in g, p x := by
- simpa only [inf_ne_bot_iff, frequently_iff, exists_prop, and_comm']
+ simpa only [inf_ne_bot_iff, frequently_iff, exists_prop, and_comm]
#align filter.inf_ne_bot_iff_frequently_left Filter.inf_neBot_iff_frequently_left
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov, Johannes Hölzl, Mario Carneiro, Patrick Massot
-/
-import Data.Prod.Pprod
+import Data.Prod.PProd
import Data.Set.Countable
import Order.Filter.Prod
@@ -475,7 +475,7 @@ theorem HasBasis.eq_bot_iff (hl : l.HasBasis p s) : l = ⊥ ↔ ∃ i, p i ∧ s
#align filter.has_basis.eq_bot_iff Filter.HasBasis.eq_bot_iff
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print Filter.generate_neBot_iff /-
theorem generate_neBot_iff {s : Set (Set α)} :
NeBot (generate s) ↔ ∀ (t) (_ : t ⊆ s), t.Finite → (⋂₀ t).Nonempty :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1221,7 +1221,7 @@ namespace Filter
variable {α β γ ι : Type _} {ι' : Sort _}
#print Filter.IsCountablyGenerated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
/-- `is_countably_generated f` means `f = generate s` for some countable `s`. -/
class IsCountablyGenerated (f : Filter α) : Prop where
out : ∃ s : Set (Set α), s.Countable ∧ f = generate s
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1221,7 +1221,7 @@ namespace Filter
variable {α β γ ι : Type _} {ι' : Sort _}
#print Filter.IsCountablyGenerated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
/-- `is_countably_generated f` means `f = generate s` for some countable `s`. -/
class IsCountablyGenerated (f : Filter α) : Prop where
out : ∃ s : Set (Set α), s.Countable ∧ f = generate s
mathlib commit https://github.com/leanprover-community/mathlib/commit/3365b20c2ffa7c35e47e5209b89ba9abdddf3ffe
@@ -1359,7 +1359,7 @@ theorem HasBasis.exists_antitone_subbasis {f : Filter α} [h : f.IsCountablyGene
exacts [hs.set_index_subset _, subset.trans (hs.set_index_subset _) (inter_subset_left _ _)]
refine' ⟨fun i => x i, fun i => (x i).2, _⟩
have : (⨅ i, 𝓟 (s (x i))).HasAntitoneBasis fun i => s (x i) :=
- ⟨has_basis_infi_principal (directed_of_sup x_mono), x_mono⟩
+ ⟨has_basis_infi_principal (directed_of_isDirected_le x_mono), x_mono⟩
convert this
exact
le_antisymm (le_iInf fun i => le_principal_iff.2 <| by cases i <;> apply hs.set_index_mem)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov, Johannes Hölzl, Mario Carneiro, Patrick Massot
-/
-import Mathbin.Data.Prod.Pprod
-import Mathbin.Data.Set.Countable
-import Mathbin.Order.Filter.Prod
+import Data.Prod.Pprod
+import Data.Set.Countable
+import Order.Filter.Prod
#align_import order.filter.bases from "leanprover-community/mathlib"@"f974ae84dfc9fea6a036a8f30f09414254e3bc40"
@@ -475,7 +475,7 @@ theorem HasBasis.eq_bot_iff (hl : l.HasBasis p s) : l = ⊥ ↔ ∃ i, p i ∧ s
#align filter.has_basis.eq_bot_iff Filter.HasBasis.eq_bot_iff
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print Filter.generate_neBot_iff /-
theorem generate_neBot_iff {s : Set (Set α)} :
NeBot (generate s) ↔ ∀ (t) (_ : t ⊆ s), t.Finite → (⋂₀ t).Nonempty :=
@@ -1221,7 +1221,7 @@ namespace Filter
variable {α β γ ι : Type _} {ι' : Sort _}
#print Filter.IsCountablyGenerated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
/-- `is_countably_generated f` means `f = generate s` for some countable `s`. -/
class IsCountablyGenerated (f : Filter α) : Prop where
out : ∃ s : Set (Set α), s.Countable ∧ f = generate s
mathlib commit https://github.com/leanprover-community/mathlib/commit/001ffdc42920050657fd45bd2b8bfbec8eaaeb29
@@ -1032,10 +1032,10 @@ protected theorem HasBasis.biInter_mem {f : Set α → Set β} (h : HasBasis l p
#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_mem
-/
-#print Filter.HasBasis.sInter_sets /-
-theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (hi : p i), s i := by
+#print Filter.HasBasis.ker /-
+theorem HasBasis.ker (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (hi : p i), s i := by
rw [sInter_eq_bInter]; exact h.bInter_mem monotone_id
-#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_sets
+#align filter.has_basis.sInter_sets Filter.HasBasis.ker
-/
variable {ι'' : Type _} [Preorder ι''] (l) (s'' : ι'' → Set α)
mathlib commit https://github.com/leanprover-community/mathlib/commit/001ffdc42920050657fd45bd2b8bfbec8eaaeb29
@@ -405,21 +405,21 @@ protected theorem FilterBasis.hasBasis {α : Type _} (B : FilterBasis α) :
#align filter_basis.has_basis FilterBasis.hasBasis
-/
-#print Filter.HasBasis.to_has_basis' /-
-theorem HasBasis.to_has_basis' (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i)
+#print Filter.HasBasis.to_hasBasis' /-
+theorem HasBasis.to_hasBasis' (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i)
(h' : ∀ i', p' i' → s' i' ∈ l) : l.HasBasis p' s' :=
by
refine' ⟨fun t => ⟨fun ht => _, fun ⟨i', hi', ht⟩ => mem_of_superset (h' i' hi') ht⟩⟩
rcases hl.mem_iff.1 ht with ⟨i, hi, ht⟩
rcases h i hi with ⟨i', hi', hs's⟩
exact ⟨i', hi', subset.trans hs's ht⟩
-#align filter.has_basis.to_has_basis' Filter.HasBasis.to_has_basis'
+#align filter.has_basis.to_has_basis' Filter.HasBasis.to_hasBasis'
-/
#print Filter.HasBasis.to_hasBasis /-
theorem HasBasis.to_hasBasis (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i)
(h' : ∀ i', p' i' → ∃ i, p i ∧ s i ⊆ s' i') : l.HasBasis p' s' :=
- hl.to_has_basis' h fun i' hi' =>
+ hl.to_hasBasis' h fun i' hi' =>
let ⟨i, hi, hss'⟩ := h' i' hi'
hl.mem_iff.2 ⟨i, hi, hss'⟩
#align filter.has_basis.to_has_basis Filter.HasBasis.to_hasBasis
@@ -428,7 +428,7 @@ theorem HasBasis.to_hasBasis (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p
#print Filter.HasBasis.to_subset /-
theorem HasBasis.to_subset (hl : l.HasBasis p s) {t : ι → Set α} (h : ∀ i, p i → t i ⊆ s i)
(ht : ∀ i, p i → t i ∈ l) : l.HasBasis p t :=
- hl.to_has_basis' (fun i hi => ⟨i, hi, h i hi⟩) ht
+ hl.to_hasBasis' (fun i hi => ⟨i, hi, h i hi⟩) ht
#align filter.has_basis.to_subset Filter.HasBasis.to_subset
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -877,7 +877,7 @@ theorem disjoint_principal_principal {s t : Set α} : Disjoint (𝓟 s) (𝓟 t)
#align filter.disjoint_principal_principal Filter.disjoint_principal_principal
-/
-alias disjoint_principal_principal ↔ _ _root_.disjoint.filter_principal
+alias ⟨_, _root_.disjoint.filter_principal⟩ := disjoint_principal_principal
#align disjoint.filter_principal Disjoint.filter_principal
#print Filter.disjoint_pure_pure /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/63721b2c3eba6c325ecf8ae8cca27155a4f6306f
@@ -585,7 +585,7 @@ theorem HasBasis.inf' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
constructor
· simp only [mem_inf_iff, exists_prop, hl.mem_iff, hl'.mem_iff]
rintro ⟨t, ⟨i, hi, ht⟩, t', ⟨i', hi', ht'⟩, rfl⟩
- use ⟨i, i'⟩, ⟨hi, hi'⟩, inter_subset_inter ht ht'
+ use⟨i, i'⟩, ⟨hi, hi'⟩, inter_subset_inter ht ht'
· rintro ⟨⟨i, i'⟩, ⟨hi, hi'⟩, H⟩
exact mem_inf_of_inter (hl.mem_of_mem hi) (hl'.mem_of_mem hi') H⟩
#align filter.has_basis.inf' Filter.HasBasis.inf'
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov, Johannes Hölzl, Mario Carneiro, Patrick Massot
-
-! This file was ported from Lean 3 source module order.filter.bases
-! leanprover-community/mathlib commit f974ae84dfc9fea6a036a8f30f09414254e3bc40
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Prod.Pprod
import Mathbin.Data.Set.Countable
import Mathbin.Order.Filter.Prod
+#align_import order.filter.bases from "leanprover-community/mathlib"@"f974ae84dfc9fea6a036a8f30f09414254e3bc40"
+
/-!
# Filter bases
@@ -478,7 +475,7 @@ theorem HasBasis.eq_bot_iff (hl : l.HasBasis p s) : l = ⊥ ↔ ∃ i, p i ∧ s
#align filter.has_basis.eq_bot_iff Filter.HasBasis.eq_bot_iff
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print Filter.generate_neBot_iff /-
theorem generate_neBot_iff {s : Set (Set α)} :
NeBot (generate s) ↔ ∀ (t) (_ : t ⊆ s), t.Finite → (⋂₀ t).Nonempty :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -157,9 +157,11 @@ protected def filterBasis {p : ι → Prop} {s : ι → Set α} (h : IsBasis p s
variable {p : ι → Prop} {s : ι → Set α} (h : IsBasis p s)
+#print Filter.IsBasis.mem_filterBasis_iff /-
theorem mem_filterBasis_iff {U : Set α} : U ∈ h.FilterBasis ↔ ∃ i, p i ∧ s i = U :=
Iff.rfl
#align filter.is_basis.mem_filter_basis_iff Filter.IsBasis.mem_filterBasis_iff
+-/
end IsBasis
@@ -182,9 +184,11 @@ protected def filter (B : FilterBasis α) : Filter α
#align filter_basis.filter FilterBasis.filter
-/
+#print FilterBasis.mem_filter_iff /-
theorem mem_filter_iff (B : FilterBasis α) {U : Set α} : U ∈ B.filterₓ ↔ ∃ s ∈ B, s ⊆ U :=
Iff.rfl
#align filter_basis.mem_filter_iff FilterBasis.mem_filter_iff
+-/
#print FilterBasis.mem_filter_of_mem /-
theorem mem_filter_of_mem (B : FilterBasis α) {U : Set α} : U ∈ B → U ∈ B.filterₓ := fun U_in =>
@@ -192,6 +196,7 @@ theorem mem_filter_of_mem (B : FilterBasis α) {U : Set α} : U ∈ B → U ∈
#align filter_basis.mem_filter_of_mem FilterBasis.mem_filter_of_mem
-/
+#print FilterBasis.eq_iInf_principal /-
theorem eq_iInf_principal (B : FilterBasis α) : B.filterₓ = ⨅ s : B.sets, 𝓟 s :=
by
have : Directed (· ≥ ·) fun s : B.sets => 𝓟 (s : Set α) :=
@@ -204,6 +209,7 @@ theorem eq_iInf_principal (B : FilterBasis α) : B.filterₓ = ⨅ s : B.sets,
ext U
simp [mem_filter_iff, mem_infi_of_directed this]
#align filter_basis.eq_infi_principal FilterBasis.eq_iInf_principal
+-/
#print FilterBasis.generate /-
protected theorem generate (B : FilterBasis α) : generate B.sets = B.filterₓ :=
@@ -232,6 +238,7 @@ protected def filter (h : IsBasis p s) : Filter α :=
#align filter.is_basis.filter Filter.IsBasis.filter
-/
+#print Filter.IsBasis.mem_filter_iff /-
protected theorem mem_filter_iff (h : IsBasis p s) {U : Set α} :
U ∈ h.filterₓ ↔ ∃ i, p i ∧ s i ⊆ U :=
by
@@ -242,10 +249,13 @@ protected theorem mem_filter_iff (h : IsBasis p s) {U : Set α} :
tauto
· tauto
#align filter.is_basis.mem_filter_iff Filter.IsBasis.mem_filter_iff
+-/
+#print Filter.IsBasis.filter_eq_generate /-
theorem filter_eq_generate (h : IsBasis p s) : h.filterₓ = generate {U | ∃ i, p i ∧ s i = U} := by
erw [h.filter_basis.generate] <;> rfl
#align filter.is_basis.filter_eq_generate Filter.IsBasis.filter_eq_generate
+-/
end IsBasis
@@ -288,36 +298,48 @@ theorem HasBasis.mem_iff (hl : l.HasBasis p s) : t ∈ l ↔ ∃ (i : _) (hi : p
hl.mem_iff' t
#align filter.has_basis.mem_iff Filter.HasBasis.mem_iffₓ
+#print Filter.HasBasis.eq_of_same_basis /-
theorem HasBasis.eq_of_same_basis (hl : l.HasBasis p s) (hl' : l'.HasBasis p s) : l = l' :=
by
ext t
rw [hl.mem_iff, hl'.mem_iff]
#align filter.has_basis.eq_of_same_basis Filter.HasBasis.eq_of_same_basis
+-/
theorem hasBasis_iff : l.HasBasis p s ↔ ∀ t, t ∈ l ↔ ∃ (i : _) (hi : p i), s i ⊆ t :=
⟨fun ⟨h⟩ => h, fun h => ⟨h⟩⟩
#align filter.has_basis_iff Filter.hasBasis_iffₓ
+#print Filter.HasBasis.ex_mem /-
theorem HasBasis.ex_mem (h : l.HasBasis p s) : ∃ i, p i :=
let ⟨i, pi, h⟩ := h.mem_iff.mp univ_mem
⟨i, pi⟩
#align filter.has_basis.ex_mem Filter.HasBasis.ex_mem
+-/
+#print Filter.HasBasis.nonempty /-
protected theorem HasBasis.nonempty (h : l.HasBasis p s) : Nonempty ι :=
nonempty_of_exists h.ex_mem
#align filter.has_basis.nonempty Filter.HasBasis.nonempty
+-/
+#print Filter.IsBasis.hasBasis /-
protected theorem IsBasis.hasBasis (h : IsBasis p s) : HasBasis h.filterₓ p s :=
⟨fun t => by simp only [h.mem_filter_iff, exists_prop]⟩
#align filter.is_basis.has_basis Filter.IsBasis.hasBasis
+-/
+#print Filter.HasBasis.mem_of_superset /-
theorem HasBasis.mem_of_superset (hl : l.HasBasis p s) (hi : p i) (ht : s i ⊆ t) : t ∈ l :=
hl.mem_iff.2 ⟨i, hi, ht⟩
#align filter.has_basis.mem_of_superset Filter.HasBasis.mem_of_superset
+-/
+#print Filter.HasBasis.mem_of_mem /-
theorem HasBasis.mem_of_mem (hl : l.HasBasis p s) (hi : p i) : s i ∈ l :=
hl.mem_of_superset hi <| Subset.refl _
#align filter.has_basis.mem_of_mem Filter.HasBasis.mem_of_mem
+-/
#print Filter.HasBasis.index /-
/-- Index of a basis set such that `s i ⊆ t` as an element of `subtype p`. -/
@@ -326,18 +348,25 @@ noncomputable def HasBasis.index (h : l.HasBasis p s) (t : Set α) (ht : t ∈ l
#align filter.has_basis.index Filter.HasBasis.index
-/
+#print Filter.HasBasis.property_index /-
theorem HasBasis.property_index (h : l.HasBasis p s) (ht : t ∈ l) : p (h.index t ht) :=
(h.index t ht).2
#align filter.has_basis.property_index Filter.HasBasis.property_index
+-/
+#print Filter.HasBasis.set_index_mem /-
theorem HasBasis.set_index_mem (h : l.HasBasis p s) (ht : t ∈ l) : s (h.index t ht) ∈ l :=
h.mem_of_mem <| h.property_index _
#align filter.has_basis.set_index_mem Filter.HasBasis.set_index_mem
+-/
+#print Filter.HasBasis.set_index_subset /-
theorem HasBasis.set_index_subset (h : l.HasBasis p s) (ht : t ∈ l) : s (h.index t ht) ⊆ t :=
(h.mem_iff.1 ht).choose_spec.snd
#align filter.has_basis.set_index_subset Filter.HasBasis.set_index_subset
+-/
+#print Filter.HasBasis.isBasis /-
theorem HasBasis.isBasis (h : l.HasBasis p s) : IsBasis p s :=
{ Nonempty :=
let ⟨i, hi, H⟩ := h.mem_iff.mp univ_mem
@@ -345,14 +374,19 @@ theorem HasBasis.isBasis (h : l.HasBasis p s) : IsBasis p s :=
inter := fun i j hi hj => by
simpa [h.mem_iff] using l.inter_sets (h.mem_of_mem hi) (h.mem_of_mem hj) }
#align filter.has_basis.is_basis Filter.HasBasis.isBasis
+-/
+#print Filter.HasBasis.filter_eq /-
theorem HasBasis.filter_eq (h : l.HasBasis p s) : h.IsBasis.filterₓ = l := by ext U;
simp [h.mem_iff, is_basis.mem_filter_iff]
#align filter.has_basis.filter_eq Filter.HasBasis.filter_eq
+-/
+#print Filter.HasBasis.eq_generate /-
theorem HasBasis.eq_generate (h : l.HasBasis p s) : l = generate {U | ∃ i, p i ∧ s i = U} := by
rw [← h.is_basis.filter_eq_generate, h.filter_eq]
#align filter.has_basis.eq_generate Filter.HasBasis.eq_generate
+-/
#print Filter.generate_eq_generate_inter /-
theorem generate_eq_generate_inter (s : Set (Set α)) :
@@ -374,6 +408,7 @@ protected theorem FilterBasis.hasBasis {α : Type _} (B : FilterBasis α) :
#align filter_basis.has_basis FilterBasis.hasBasis
-/
+#print Filter.HasBasis.to_has_basis' /-
theorem HasBasis.to_has_basis' (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i)
(h' : ∀ i', p' i' → s' i' ∈ l) : l.HasBasis p' s' :=
by
@@ -382,26 +417,35 @@ theorem HasBasis.to_has_basis' (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i',
rcases h i hi with ⟨i', hi', hs's⟩
exact ⟨i', hi', subset.trans hs's ht⟩
#align filter.has_basis.to_has_basis' Filter.HasBasis.to_has_basis'
+-/
+#print Filter.HasBasis.to_hasBasis /-
theorem HasBasis.to_hasBasis (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i)
(h' : ∀ i', p' i' → ∃ i, p i ∧ s i ⊆ s' i') : l.HasBasis p' s' :=
hl.to_has_basis' h fun i' hi' =>
let ⟨i, hi, hss'⟩ := h' i' hi'
hl.mem_iff.2 ⟨i, hi, hss'⟩
#align filter.has_basis.to_has_basis Filter.HasBasis.to_hasBasis
+-/
+#print Filter.HasBasis.to_subset /-
theorem HasBasis.to_subset (hl : l.HasBasis p s) {t : ι → Set α} (h : ∀ i, p i → t i ⊆ s i)
(ht : ∀ i, p i → t i ∈ l) : l.HasBasis p t :=
hl.to_has_basis' (fun i hi => ⟨i, hi, h i hi⟩) ht
#align filter.has_basis.to_subset Filter.HasBasis.to_subset
+-/
+#print Filter.HasBasis.eventually_iff /-
theorem HasBasis.eventually_iff (hl : l.HasBasis p s) {q : α → Prop} :
(∀ᶠ x in l, q x) ↔ ∃ i, p i ∧ ∀ ⦃x⦄, x ∈ s i → q x := by simpa using hl.mem_iff
#align filter.has_basis.eventually_iff Filter.HasBasis.eventually_iff
+-/
+#print Filter.HasBasis.frequently_iff /-
theorem HasBasis.frequently_iff (hl : l.HasBasis p s) {q : α → Prop} :
(∃ᶠ x in l, q x) ↔ ∀ i, p i → ∃ x ∈ s i, q x := by simp [Filter.Frequently, hl.eventually_iff]
#align filter.has_basis.frequently_iff Filter.HasBasis.frequently_iff
+-/
theorem HasBasis.exists_iff (hl : l.HasBasis p s) {P : Set α → Prop}
(mono : ∀ ⦃s t⦄, s ⊆ t → P t → P s) : (∃ s ∈ l, P s) ↔ ∃ (i : _) (hi : p i), P (s i) :=
@@ -411,22 +455,28 @@ theorem HasBasis.exists_iff (hl : l.HasBasis p s) {P : Set α → Prop}
fun ⟨i, hi, hP⟩ => ⟨s i, hl.mem_of_mem hi, hP⟩⟩
#align filter.has_basis.exists_iff Filter.HasBasis.exists_iffₓ
+#print Filter.HasBasis.forall_iff /-
theorem HasBasis.forall_iff (hl : l.HasBasis p s) {P : Set α → Prop}
(mono : ∀ ⦃s t⦄, s ⊆ t → P s → P t) : (∀ s ∈ l, P s) ↔ ∀ i, p i → P (s i) :=
⟨fun H i hi => H (s i) <| hl.mem_of_mem hi, fun H s hs =>
let ⟨i, hi, his⟩ := hl.mem_iff.1 hs
mono his (H i hi)⟩
#align filter.has_basis.forall_iff Filter.HasBasis.forall_iff
+-/
+#print Filter.HasBasis.neBot_iff /-
theorem HasBasis.neBot_iff (hl : l.HasBasis p s) : NeBot l ↔ ∀ {i}, p i → (s i).Nonempty :=
forall_mem_nonempty_iff_neBot.symm.trans <| hl.forall_iff fun _ _ => Nonempty.mono
#align filter.has_basis.ne_bot_iff Filter.HasBasis.neBot_iff
+-/
+#print Filter.HasBasis.eq_bot_iff /-
theorem HasBasis.eq_bot_iff (hl : l.HasBasis p s) : l = ⊥ ↔ ∃ i, p i ∧ s i = ∅ :=
not_iff_not.1 <|
neBot_iff.symm.trans <|
hl.neBot_iff.trans <| by simp only [not_exists, not_and, nonempty_iff_ne_empty]
#align filter.has_basis.eq_bot_iff Filter.HasBasis.eq_bot_iff
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print Filter.generate_neBot_iff /-
@@ -448,6 +498,7 @@ theorem asBasis_filter (f : Filter α) : f.asBasis.filterₓ = f := by
#align filter.as_basis_filter Filter.asBasis_filter
-/
+#print Filter.hasBasis_self /-
theorem hasBasis_self {l : Filter α} {P : Set α → Prop} :
HasBasis l (fun s => s ∈ l ∧ P s) id ↔ ∀ t ∈ l, ∃ r ∈ l, P r ∧ r ⊆ t :=
by
@@ -456,16 +507,22 @@ theorem hasBasis_self {l : Filter α} {P : Set α → Prop} :
forall_congr' fun s =>
⟨fun h => h.1, fun h => ⟨h, fun ⟨t, hl, hP, hts⟩ => mem_of_superset hl hts⟩⟩
#align filter.has_basis_self Filter.hasBasis_self
+-/
+#print Filter.HasBasis.comp_surjective /-
theorem HasBasis.comp_surjective (h : l.HasBasis p s) {g : ι' → ι} (hg : Function.Surjective g) :
l.HasBasis (p ∘ g) (s ∘ g) :=
⟨fun t => h.mem_iff.trans hg.exists⟩
#align filter.has_basis.comp_surjective Filter.HasBasis.comp_surjective
+-/
+#print Filter.HasBasis.comp_equiv /-
theorem HasBasis.comp_equiv (h : l.HasBasis p s) (e : ι' ≃ ι) : l.HasBasis (p ∘ e) (s ∘ e) :=
h.comp_surjective e.Surjective
#align filter.has_basis.comp_equiv Filter.HasBasis.comp_equiv
+-/
+#print Filter.HasBasis.restrict /-
/-- If `{s i | p i}` is a basis of a filter `l` and each `s i` includes `s j` such that
`p j ∧ q j`, then `{s j | p j ∧ q j}` is a basis of `l`. -/
theorem HasBasis.restrict (h : l.HasBasis p s) {q : ι → Prop}
@@ -476,7 +533,9 @@ theorem HasBasis.restrict (h : l.HasBasis p s) {q : ι → Prop}
rcases hq i hpi with ⟨j, hpj, hqj, hji⟩
exact ⟨j, ⟨hpj, hqj⟩, subset.trans hji hti⟩
#align filter.has_basis.restrict Filter.HasBasis.restrict
+-/
+#print Filter.HasBasis.restrict_subset /-
/-- If `{s i | p i}` is a basis of a filter `l` and `V ∈ l`, then `{s i | p i ∧ s i ⊆ V}`
is a basis of `l`. -/
theorem HasBasis.restrict_subset (h : l.HasBasis p s) {V : Set α} (hV : V ∈ l) :
@@ -485,6 +544,7 @@ theorem HasBasis.restrict_subset (h : l.HasBasis p s) {V : Set α} (hV : V ∈ l
(h.mem_iff.1 (inter_mem hV (h.mem_of_mem hi))).imp fun j hj =>
⟨hj.fst, subset_inter_iff.1 hj.snd⟩
#align filter.has_basis.restrict_subset Filter.HasBasis.restrict_subset
+-/
#print Filter.HasBasis.hasBasis_self_subset /-
theorem HasBasis.hasBasis_self_subset {p : Set α → Prop} (h : l.HasBasis (fun s => s ∈ l ∧ p s) id)
@@ -493,11 +553,13 @@ theorem HasBasis.hasBasis_self_subset {p : Set α → Prop} (h : l.HasBasis (fun
#align filter.has_basis.has_basis_self_subset Filter.HasBasis.hasBasis_self_subset
-/
+#print Filter.HasBasis.ge_iff /-
theorem HasBasis.ge_iff (hl' : l'.HasBasis p' s') : l ≤ l' ↔ ∀ i', p' i' → s' i' ∈ l :=
⟨fun h i' hi' => h <| hl'.mem_of_mem hi', fun h s hs =>
let ⟨i', hi', hs⟩ := hl'.mem_iff.1 hs
mem_of_superset (h _ hi') hs⟩
#align filter.has_basis.ge_iff Filter.HasBasis.ge_iff
+-/
theorem HasBasis.le_iff (hl : l.HasBasis p s) : l ≤ l' ↔ ∀ t ∈ l', ∃ (i : _) (hi : p i), s i ⊆ t :=
by simp only [le_def, hl.mem_iff]
@@ -518,6 +580,7 @@ theorem HasBasis.ext (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s')
simpa using h
#align filter.has_basis.ext Filter.HasBasis.extₓ
+#print Filter.HasBasis.inf' /-
theorem HasBasis.inf' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊓ l').HasBasis (fun i : PProd ι ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∩ s' i.2 :=
⟨by
@@ -529,14 +592,18 @@ theorem HasBasis.inf' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
· rintro ⟨⟨i, i'⟩, ⟨hi, hi'⟩, H⟩
exact mem_inf_of_inter (hl.mem_of_mem hi) (hl'.mem_of_mem hi') H⟩
#align filter.has_basis.inf' Filter.HasBasis.inf'
+-/
+#print Filter.HasBasis.inf /-
theorem HasBasis.inf {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p' : ι' → Prop}
{s' : ι' → Set α} (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊓ l').HasBasis (fun i : ι × ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∩ s' i.2 :=
(hl.inf' hl').to_hasBasis (fun i hi => ⟨⟨i.1, i.2⟩, hi, Subset.rfl⟩) fun i hi =>
⟨⟨i.1, i.2⟩, hi, Subset.rfl⟩
#align filter.has_basis.inf Filter.HasBasis.inf
+-/
+#print Filter.hasBasis_iInf' /-
theorem hasBasis_iInf' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis (fun If : Set ι × ∀ i, ι' i => If.1.Finite ∧ ∀ i ∈ If.1, p i (If.2 i))
@@ -552,7 +619,9 @@ theorem hasBasis_iInf' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α
refine' mem_of_superset _ hsub
exact (bInter_mem hI₁).mpr fun i hi => mem_infi_of_mem i <| (hl i).mem_of_mem <| hI₂ _ hi⟩
#align filter.has_basis_infi' Filter.hasBasis_iInf'
+-/
+#print Filter.hasBasis_iInf /-
theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis
@@ -568,7 +637,9 @@ theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α}
cases hI.nonempty_fintype
exact Inter_mem.2 fun i => mem_infi_of_mem i <| (hl i).mem_of_mem <| hf _
#align filter.has_basis_infi Filter.hasBasis_iInf
+-/
+#print Filter.hasBasis_iInf_of_directed' /-
theorem hasBasis_iInf_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
@@ -578,7 +649,9 @@ theorem hasBasis_iInf_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty
rw [mem_infi_of_directed h, Sigma.exists]
exact exists_congr fun i => (hl i).mem_iff
#align filter.has_basis_infi_of_directed' Filter.hasBasis_iInf_of_directed'
+-/
+#print Filter.hasBasis_iInf_of_directed /-
theorem hasBasis_iInf_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ι → ι' → Set α) (p : ι → ι' → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
@@ -588,7 +661,9 @@ theorem hasBasis_iInf_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l
rw [mem_infi_of_directed h, Prod.exists]
exact exists_congr fun i => (hl i).mem_iff
#align filter.has_basis_infi_of_directed Filter.hasBasis_iInf_of_directed
+-/
+#print Filter.hasBasis_biInf_of_directed' /-
theorem hasBasis_biInf_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : Set ι}
(hdom : dom.Nonempty) {l : ι → Filter α} (s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → Prop)
(hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)) (h : DirectedOn (l ⁻¹'o GE.ge) dom) :
@@ -604,7 +679,9 @@ theorem hasBasis_biInf_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : S
· rintro ⟨b, ⟨hi, hb⟩, hibt⟩
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
#align filter.has_basis_binfi_of_directed' Filter.hasBasis_biInf_of_directed'
+-/
+#print Filter.hasBasis_biInf_of_directed /-
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) :
@@ -620,6 +697,7 @@ theorem hasBasis_biInf_of_directed {ι : Type _} {ι' : Sort _} {dom : Set ι} (
· rintro ⟨b, ⟨hi, hb⟩, hibt⟩
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
#align filter.has_basis_binfi_of_directed Filter.hasBasis_biInf_of_directed
+-/
#print Filter.hasBasis_principal /-
theorem hasBasis_principal (t : Set α) : (𝓟 t).HasBasis (fun i : Unit => True) fun i => t :=
@@ -633,6 +711,7 @@ theorem hasBasis_pure (x : α) : (pure x : Filter α).HasBasis (fun i : Unit =>
#align filter.has_basis_pure Filter.hasBasis_pure
-/
+#print Filter.HasBasis.sup' /-
theorem HasBasis.sup' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊔ l').HasBasis (fun i : PProd ι ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∪ s' i.2 :=
⟨by
@@ -641,14 +720,18 @@ theorem HasBasis.sup' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
and_assoc', exists_and_left]
simp only [← and_assoc', exists_and_right, and_comm']⟩
#align filter.has_basis.sup' Filter.HasBasis.sup'
+-/
+#print Filter.HasBasis.sup /-
theorem HasBasis.sup {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p' : ι' → Prop}
{s' : ι' → Set α} (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊔ l').HasBasis (fun i : ι × ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∪ s' i.2 :=
(hl.sup' hl').to_hasBasis (fun i hi => ⟨⟨i.1, i.2⟩, hi, Subset.rfl⟩) fun i hi =>
⟨⟨i.1, i.2⟩, hi, Subset.rfl⟩
#align filter.has_basis.sup Filter.HasBasis.sup
+-/
+#print Filter.hasBasis_iSup /-
theorem hasBasis_iSup {ι : Sort _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨆ i, l i).HasBasis (fun f : ∀ i, ι' i => ∀ i, p i (f i)) fun f : ∀ i, ι' i => ⋃ i, s i (f i) :=
@@ -656,44 +739,59 @@ theorem hasBasis_iSup {ι : Sort _} {ι' : ι → Type _} {l : ι → Filter α}
simp only [has_basis_iff, (hl _).mem_iff, Classical.skolem, forall_and, Union_subset_iff,
mem_supr]
#align filter.has_basis_supr Filter.hasBasis_iSup
+-/
+#print Filter.HasBasis.sup_principal /-
theorem HasBasis.sup_principal (hl : l.HasBasis p s) (t : Set α) :
(l ⊔ 𝓟 t).HasBasis p fun i => s i ∪ t :=
⟨fun u => by
simp only [(hl.sup' (has_basis_principal t)).mem_iff, PProd.exists, exists_prop, and_true_iff,
Unique.exists_iff]⟩
#align filter.has_basis.sup_principal Filter.HasBasis.sup_principal
+-/
+#print Filter.HasBasis.sup_pure /-
theorem HasBasis.sup_pure (hl : l.HasBasis p s) (x : α) :
(l ⊔ pure x).HasBasis p fun i => s i ∪ {x} := by
simp only [← principal_singleton, hl.sup_principal]
#align filter.has_basis.sup_pure Filter.HasBasis.sup_pure
+-/
+#print Filter.HasBasis.inf_principal /-
theorem HasBasis.inf_principal (hl : l.HasBasis p s) (s' : Set α) :
(l ⊓ 𝓟 s').HasBasis p fun i => s i ∩ s' :=
⟨fun t => by
simp only [mem_inf_principal, hl.mem_iff, subset_def, mem_set_of_eq, mem_inter_iff, and_imp]⟩
#align filter.has_basis.inf_principal Filter.HasBasis.inf_principal
+-/
+#print Filter.HasBasis.principal_inf /-
theorem HasBasis.principal_inf (hl : l.HasBasis p s) (s' : Set α) :
(𝓟 s' ⊓ l).HasBasis p fun i => s' ∩ s i := by
simpa only [inf_comm, inter_comm] using hl.inf_principal s'
#align filter.has_basis.principal_inf Filter.HasBasis.principal_inf
+-/
+#print Filter.HasBasis.inf_basis_neBot_iff /-
theorem HasBasis.inf_basis_neBot_iff (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
NeBot (l ⊓ l') ↔ ∀ ⦃i⦄ (hi : p i) ⦃i'⦄ (hi' : p' i'), (s i ∩ s' i').Nonempty :=
(hl.inf' hl').neBot_iff.trans <| by simp [@forall_swap _ ι']
#align filter.has_basis.inf_basis_ne_bot_iff Filter.HasBasis.inf_basis_neBot_iff
+-/
+#print Filter.HasBasis.inf_neBot_iff /-
theorem HasBasis.inf_neBot_iff (hl : l.HasBasis p s) :
NeBot (l ⊓ l') ↔ ∀ ⦃i⦄ (hi : p i) ⦃s'⦄ (hs' : s' ∈ l'), (s i ∩ s').Nonempty :=
hl.inf_basis_neBot_iff l'.basis_sets
#align filter.has_basis.inf_ne_bot_iff Filter.HasBasis.inf_neBot_iff
+-/
+#print Filter.HasBasis.inf_principal_neBot_iff /-
theorem HasBasis.inf_principal_neBot_iff (hl : l.HasBasis p s) {t : Set α} :
NeBot (l ⊓ 𝓟 t) ↔ ∀ ⦃i⦄ (hi : p i), (s i ∩ t).Nonempty :=
(hl.inf_principal t).neBot_iff
#align filter.has_basis.inf_principal_ne_bot_iff Filter.HasBasis.inf_principal_neBot_iff
+-/
theorem HasBasis.disjoint_iff (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
Disjoint l l' ↔ ∃ (i : _) (hi : p i) (i' : _) (hi' : p' i'), Disjoint (s i) (s' i') :=
@@ -708,6 +806,7 @@ theorem Disjoint.exists_mem_filter_basis (h : Disjoint l l') (hl : l.HasBasis p
(hl.disjoint_iff hl').1 h
#align disjoint.exists_mem_filter_basis Disjoint.exists_mem_filter_basisₓ
+#print Pairwise.exists_mem_filter_basis_of_disjoint /-
theorem Pairwise.exists_mem_filter_basis_of_disjoint {I : Type _} [Finite I] {l : I → Filter α}
{ι : I → Sort _} {p : ∀ i, ι i → Prop} {s : ∀ i, ι i → Set α} (hd : Pairwise (Disjoint on l))
(h : ∀ i, (l i).HasBasis (p i) (s i)) :
@@ -717,7 +816,9 @@ theorem Pairwise.exists_mem_filter_basis_of_disjoint {I : Type _} [Finite I] {l
choose ind hp ht using fun i => (h i).mem_iff.1 (htl i)
exact ⟨ind, hp, hd.mono fun i j hij => hij.mono (ht _) (ht _)⟩
#align pairwise.exists_mem_filter_basis_of_disjoint Pairwise.exists_mem_filter_basis_of_disjoint
+-/
+#print Set.PairwiseDisjoint.exists_mem_filter_basis /-
theorem Set.PairwiseDisjoint.exists_mem_filter_basis {I : Type _} {l : I → Filter α}
{ι : I → Sort _} {p : ∀ i, ι i → Prop} {s : ∀ i, ι i → Set α} {S : Set I}
(hd : S.PairwiseDisjoint l) (hS : S.Finite) (h : ∀ i, (l i).HasBasis (p i) (s i)) :
@@ -727,16 +828,22 @@ theorem Set.PairwiseDisjoint.exists_mem_filter_basis {I : Type _} {l : I → Fil
choose ind hp ht using fun i => (h i).mem_iff.1 (htl i)
exact ⟨ind, hp, hd.mono ht⟩
#align set.pairwise_disjoint.exists_mem_filter_basis Set.PairwiseDisjoint.exists_mem_filter_basis
+-/
+#print Filter.inf_neBot_iff /-
theorem inf_neBot_iff :
NeBot (l ⊓ l') ↔ ∀ ⦃s : Set α⦄ (hs : s ∈ l) ⦃s'⦄ (hs' : s' ∈ l'), (s ∩ s').Nonempty :=
l.basis_sets.inf_neBot_iff
#align filter.inf_ne_bot_iff Filter.inf_neBot_iff
+-/
+#print Filter.inf_principal_neBot_iff /-
theorem inf_principal_neBot_iff {s : Set α} : NeBot (l ⊓ 𝓟 s) ↔ ∀ U ∈ l, (U ∩ s).Nonempty :=
l.basis_sets.inf_principal_neBot_iff
#align filter.inf_principal_ne_bot_iff Filter.inf_principal_neBot_iff
+-/
+#print Filter.mem_iff_inf_principal_compl /-
theorem mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∈ f ↔ f ⊓ 𝓟 (sᶜ) = ⊥ :=
by
refine' not_iff_not.1 ((inf_principal_ne_bot_iff.trans _).symm.trans ne_bot_iff)
@@ -744,38 +851,51 @@ theorem mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∈ f ↔ f
⟨fun h hs => by simpa [not_nonempty_empty] using h s hs, fun hs t ht =>
inter_compl_nonempty_iff.2 fun hts => hs <| mem_of_superset ht hts⟩
#align filter.mem_iff_inf_principal_compl Filter.mem_iff_inf_principal_compl
+-/
+#print Filter.not_mem_iff_inf_principal_compl /-
theorem not_mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∉ f ↔ NeBot (f ⊓ 𝓟 (sᶜ)) :=
(not_congr mem_iff_inf_principal_compl).trans neBot_iff.symm
#align filter.not_mem_iff_inf_principal_compl Filter.not_mem_iff_inf_principal_compl
+-/
+#print Filter.disjoint_principal_right /-
@[simp]
theorem disjoint_principal_right {f : Filter α} {s : Set α} : Disjoint f (𝓟 s) ↔ sᶜ ∈ f := by
rw [mem_iff_inf_principal_compl, compl_compl, disjoint_iff]
#align filter.disjoint_principal_right Filter.disjoint_principal_right
+-/
+#print Filter.disjoint_principal_left /-
@[simp]
theorem disjoint_principal_left {f : Filter α} {s : Set α} : Disjoint (𝓟 s) f ↔ sᶜ ∈ f := by
rw [disjoint_comm, disjoint_principal_right]
#align filter.disjoint_principal_left Filter.disjoint_principal_left
+-/
+#print Filter.disjoint_principal_principal /-
@[simp]
theorem disjoint_principal_principal {s t : Set α} : Disjoint (𝓟 s) (𝓟 t) ↔ Disjoint s t := by
simp [← subset_compl_iff_disjoint_left]
#align filter.disjoint_principal_principal Filter.disjoint_principal_principal
+-/
alias disjoint_principal_principal ↔ _ _root_.disjoint.filter_principal
#align disjoint.filter_principal Disjoint.filter_principal
+#print Filter.disjoint_pure_pure /-
@[simp]
theorem disjoint_pure_pure {x y : α} : Disjoint (pure x : Filter α) (pure y) ↔ x ≠ y := by
simp only [← principal_singleton, disjoint_principal_principal, disjoint_singleton]
#align filter.disjoint_pure_pure Filter.disjoint_pure_pure
+-/
+#print Filter.compl_diagonal_mem_prod /-
@[simp]
theorem compl_diagonal_mem_prod {l₁ l₂ : Filter α} : diagonal αᶜ ∈ l₁ ×ᶠ l₂ ↔ Disjoint l₁ l₂ := by
simp only [mem_prod_iff, Filter.disjoint_iff, prod_subset_compl_diagonal_iff_disjoint]
#align filter.compl_diagonal_mem_prod Filter.compl_diagonal_mem_prod
+-/
theorem HasBasis.disjoint_iff_left (h : l.HasBasis p s) :
Disjoint l l' ↔ ∃ (i : _) (hi : p i), s iᶜ ∈ l' := by
@@ -788,28 +908,39 @@ theorem HasBasis.disjoint_iff_right (h : l.HasBasis p s) :
disjoint_comm.trans h.disjoint_iff_leftₓ
#align filter.has_basis.disjoint_iff_right Filter.HasBasis.disjoint_iff_rightₓ
+#print Filter.le_iff_forall_inf_principal_compl /-
theorem le_iff_forall_inf_principal_compl {f g : Filter α} : f ≤ g ↔ ∀ V ∈ g, f ⊓ 𝓟 (Vᶜ) = ⊥ :=
forall₂_congr fun _ _ => mem_iff_inf_principal_compl
#align filter.le_iff_forall_inf_principal_compl Filter.le_iff_forall_inf_principal_compl
+-/
+#print Filter.inf_neBot_iff_frequently_left /-
theorem inf_neBot_iff_frequently_left {f g : Filter α} :
NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ x in f, p x) → ∃ᶠ x in g, p x := by
simpa only [inf_ne_bot_iff, frequently_iff, exists_prop, and_comm']
#align filter.inf_ne_bot_iff_frequently_left Filter.inf_neBot_iff_frequently_left
+-/
+#print Filter.inf_neBot_iff_frequently_right /-
theorem inf_neBot_iff_frequently_right {f g : Filter α} :
NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ x in g, p x) → ∃ᶠ x in f, p x := by rw [inf_comm];
exact inf_ne_bot_iff_frequently_left
#align filter.inf_ne_bot_iff_frequently_right Filter.inf_neBot_iff_frequently_right
+-/
+#print Filter.HasBasis.eq_biInf /-
theorem HasBasis.eq_biInf (h : l.HasBasis p s) : l = ⨅ (i) (_ : p i), 𝓟 (s i) :=
eq_biInf_of_mem_iff_exists_mem fun t => by simp only [h.mem_iff, mem_principal]
#align filter.has_basis.eq_binfi Filter.HasBasis.eq_biInf
+-/
+#print Filter.HasBasis.eq_iInf /-
theorem HasBasis.eq_iInf (h : l.HasBasis (fun _ => True) s) : l = ⨅ i, 𝓟 (s i) := by
simpa only [iInf_true] using h.eq_binfi
#align filter.has_basis.eq_infi Filter.HasBasis.eq_iInf
+-/
+#print Filter.hasBasis_iInf_principal /-
theorem hasBasis_iInf_principal {s : ι → Set α} (h : Directed (· ≥ ·) s) [Nonempty ι] :
(⨅ i, 𝓟 (s i)).HasBasis (fun _ => True) s :=
⟨by
@@ -818,7 +949,9 @@ theorem hasBasis_iInf_principal {s : ι → Set α} (h : Directed (· ≥ ·) s)
simp only [exists_prop, true_and_iff, mem_principal]
exact fun _ _ => principal_mono.2⟩
#align filter.has_basis_infi_principal Filter.hasBasis_iInf_principal
+-/
+#print Filter.hasBasis_iInf_principal_finite /-
/-- If `s : ι → set α` is an indexed family of sets, then finite intersections of `s i` form a basis
of `⨅ i, 𝓟 (s i)`. -/
theorem hasBasis_iInf_principal_finite {ι : Type _} (s : ι → Set α) :
@@ -828,7 +961,9 @@ theorem hasBasis_iInf_principal_finite {ι : Type _} (s : ι → Set α) :
simp only [infi_principal_finset, mem_Union, mem_principal, exists_prop, exists_finite_iff_finset,
Finset.set_biInter_coe]
#align filter.has_basis_infi_principal_finite Filter.hasBasis_iInf_principal_finite
+-/
+#print Filter.hasBasis_biInf_principal /-
theorem hasBasis_biInf_principal {s : β → Set α} {S : Set β} (h : DirectedOn (s ⁻¹'o (· ≥ ·)) S)
(ne : S.Nonempty) : (⨅ i ∈ S, 𝓟 (s i)).HasBasis (fun i => i ∈ S) s :=
⟨by
@@ -837,17 +972,23 @@ theorem hasBasis_biInf_principal {s : β → Set α} {S : Set β} (h : DirectedO
apply h.mono_comp _ _
exact fun _ _ => principal_mono.2⟩
#align filter.has_basis_binfi_principal Filter.hasBasis_biInf_principal
+-/
+#print Filter.hasBasis_biInf_principal' /-
theorem hasBasis_biInf_principal' {ι : Type _} {p : ι → Prop} {s : ι → Set α}
(h : ∀ i, p i → ∀ j, p j → ∃ (k : _) (h : p k), s k ⊆ s i ∧ s k ⊆ s j) (ne : ∃ i, p i) :
(⨅ (i) (h : p i), 𝓟 (s i)).HasBasis p s :=
Filter.hasBasis_biInf_principal h Ne
#align filter.has_basis_binfi_principal' Filter.hasBasis_biInf_principal'
+-/
+#print Filter.HasBasis.map /-
theorem HasBasis.map (f : α → β) (hl : l.HasBasis p s) : (l.map f).HasBasis p fun i => f '' s i :=
⟨fun t => by simp only [mem_map, image_subset_iff, hl.mem_iff, preimage]⟩
#align filter.has_basis.map Filter.HasBasis.map
+-/
+#print Filter.HasBasis.comap /-
theorem HasBasis.comap (f : β → α) (hl : l.HasBasis p s) :
(l.comap f).HasBasis p fun i => f ⁻¹' s i :=
⟨by
@@ -859,6 +1000,7 @@ theorem HasBasis.comap (f : β → α) (hl : l.HasBasis p s) :
· rintro ⟨i, hi, H⟩
exact ⟨s i, ⟨i, hi, subset.refl _⟩, H⟩⟩
#align filter.has_basis.comap Filter.HasBasis.comap
+-/
#print Filter.comap_hasBasis /-
theorem comap_hasBasis (f : α → β) (l : Filter β) :
@@ -867,13 +1009,16 @@ theorem comap_hasBasis (f : α → β) (l : Filter β) :
#align filter.comap_has_basis Filter.comap_hasBasis
-/
+#print Filter.HasBasis.forall_mem_mem /-
theorem HasBasis.forall_mem_mem (h : HasBasis l p s) {x : α} :
(∀ t ∈ l, x ∈ t) ↔ ∀ i, p i → x ∈ s i :=
by
simp only [h.mem_iff, exists_imp]
exact ⟨fun h i hi => h (s i) i hi subset.rfl, fun h t i hi ht => ht (h i hi)⟩
#align filter.has_basis.forall_mem_mem Filter.HasBasis.forall_mem_mem
+-/
+#print Filter.HasBasis.biInf_mem /-
protected theorem HasBasis.biInf_mem [CompleteLattice β] {f : Set α → β} (h : HasBasis l p s)
(hf : Monotone f) : (⨅ t ∈ l, f t) = ⨅ (i) (hi : p i), f (s i) :=
le_antisymm (le_iInf₂ fun i hi => iInf₂_le (s i) (h.mem_of_mem hi)) <|
@@ -881,15 +1026,20 @@ protected theorem HasBasis.biInf_mem [CompleteLattice β] {f : Set α → β} (h
let ⟨i, hpi, hi⟩ := h.mem_iff.1 ht
iInf₂_le_of_le i hpi (hf hi)
#align filter.has_basis.binfi_mem Filter.HasBasis.biInf_mem
+-/
+#print Filter.HasBasis.biInter_mem /-
protected theorem HasBasis.biInter_mem {f : Set α → Set β} (h : HasBasis l p s) (hf : Monotone f) :
(⋂ t ∈ l, f t) = ⋂ (i) (hi : p i), f (s i) :=
h.biInf_mem hf
#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_mem
+-/
+#print Filter.HasBasis.sInter_sets /-
theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (hi : p i), s i := by
rw [sInter_eq_bInter]; exact h.bInter_mem monotone_id
#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_sets
+-/
variable {ι'' : Type _} [Preorder ι''] (l) (s'' : ι'' → Set α)
@@ -911,10 +1061,12 @@ structure HasAntitoneBasis (l : Filter α) (s : ι'' → Set α) extends HasBasi
#align filter.has_antitone_basis Filter.HasAntitoneBasis
-/
+#print Filter.HasAntitoneBasis.map /-
theorem HasAntitoneBasis.map {l : Filter α} {s : ι'' → Set α} {m : α → β}
(hf : HasAntitoneBasis l s) : HasAntitoneBasis (map m l) fun n => m '' s n :=
⟨HasBasis.map _ hf.to_hasBasis, fun i j hij => image_subset _ <| hf.2 hij⟩
#align filter.has_antitone_basis.map Filter.HasAntitoneBasis.map
+-/
end SameType
@@ -928,10 +1080,12 @@ theorem HasBasis.tendsto_left_iff (hla : la.HasBasis pa sa) :
simp only [tendsto, (hla.map f).le_iffₓ, image_subset_iff]; rfl
#align filter.has_basis.tendsto_left_iff Filter.HasBasis.tendsto_left_iffₓ
+#print Filter.HasBasis.tendsto_right_iff /-
theorem HasBasis.tendsto_right_iff (hlb : lb.HasBasis pb sb) :
Tendsto f la lb ↔ ∀ (i) (hi : pb i), ∀ᶠ x in la, f x ∈ sb i := by
simpa only [tendsto, hlb.ge_iff, mem_map, Filter.Eventually]
#align filter.has_basis.tendsto_right_iff Filter.HasBasis.tendsto_right_iff
+-/
theorem HasBasis.tendsto_iff (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
Tendsto f la lb ↔ ∀ (ib) (hib : pb ib), ∃ (ia : _) (hia : pa ia), ∀ x ∈ sa ia, f x ∈ sb ib := by
@@ -943,10 +1097,12 @@ theorem Tendsto.basis_left (H : Tendsto f la lb) (hla : la.HasBasis pa sa) :
hla.tendsto_left_iffₓ.1 H
#align filter.tendsto.basis_left Filter.Tendsto.basis_leftₓ
+#print Filter.Tendsto.basis_right /-
theorem Tendsto.basis_right (H : Tendsto f la lb) (hlb : lb.HasBasis pb sb) :
∀ (i) (hi : pb i), ∀ᶠ x in la, f x ∈ sb i :=
hlb.tendsto_right_iff.1 H
#align filter.tendsto.basis_right Filter.Tendsto.basis_right
+-/
theorem Tendsto.basis_both (H : Tendsto f la lb) (hla : la.HasBasis pa sa)
(hlb : lb.HasBasis pb sb) :
@@ -955,20 +1111,25 @@ theorem Tendsto.basis_both (H : Tendsto f la lb) (hla : la.HasBasis pa sa)
#align filter.tendsto.basis_both Filter.Tendsto.basis_bothₓ
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Filter.HasBasis.prod_pprod /-
theorem HasBasis.prod_pprod (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
(la ×ᶠ lb).HasBasis (fun i : PProd ι ι' => pa i.1 ∧ pb i.2) fun i => sa i.1 ×ˢ sb i.2 :=
(hla.comap Prod.fst).inf' (hlb.comap Prod.snd)
#align filter.has_basis.prod_pprod Filter.HasBasis.prod_pprod
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Filter.HasBasis.prod /-
theorem HasBasis.prod {ι ι' : Type _} {pa : ι → Prop} {sa : ι → Set α} {pb : ι' → Prop}
{sb : ι' → Set β} (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
(la ×ᶠ lb).HasBasis (fun i : ι × ι' => pa i.1 ∧ pb i.2) fun i => sa i.1 ×ˢ sb i.2 :=
(hla.comap Prod.fst).inf (hlb.comap Prod.snd)
#align filter.has_basis.prod Filter.HasBasis.prod
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Filter.HasBasis.prod_same_index /-
theorem HasBasis.prod_same_index {p : ι → Prop} {sb : ι → Set β} (hla : la.HasBasis p sa)
(hlb : lb.HasBasis p sb) (h_dir : ∀ {i j}, p i → p j → ∃ k, p k ∧ sa k ⊆ sa i ∧ sb k ⊆ sb j) :
(la ×ᶠ lb).HasBasis p fun i => sa i ×ˢ sb i :=
@@ -981,8 +1142,10 @@ theorem HasBasis.prod_same_index {p : ι → Prop} {sb : ι → Set β} (hla : l
· rintro ⟨i, hi, h⟩
exact ⟨⟨i, i⟩, ⟨hi, hi⟩, h⟩
#align filter.has_basis.prod_same_index Filter.HasBasis.prod_same_index
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Filter.HasBasis.prod_same_index_mono /-
theorem HasBasis.prod_same_index_mono {ι : Type _} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
{sb : ι → Set β} (hla : la.HasBasis p sa) (hlb : lb.HasBasis p sb)
(hsa : MonotoneOn sa {i | p i}) (hsb : MonotoneOn sb {i | p i}) :
@@ -991,44 +1154,56 @@ theorem HasBasis.prod_same_index_mono {ι : Type _} [LinearOrder ι] {p : ι →
have : p (min i j) := min_rec' _ hi hj
⟨min i j, this, hsa this hi <| min_le_left _ _, hsb this hj <| min_le_right _ _⟩
#align filter.has_basis.prod_same_index_mono Filter.HasBasis.prod_same_index_mono
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Filter.HasBasis.prod_same_index_anti /-
theorem HasBasis.prod_same_index_anti {ι : Type _} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
{sb : ι → Set β} (hla : la.HasBasis p sa) (hlb : lb.HasBasis p sb)
(hsa : AntitoneOn sa {i | p i}) (hsb : AntitoneOn sb {i | p i}) :
(la ×ᶠ lb).HasBasis p fun i => sa i ×ˢ sb i :=
@HasBasis.prod_same_index_mono _ _ _ _ ιᵒᵈ _ _ _ _ hla hlb hsa.dual_left hsb.dual_left
#align filter.has_basis.prod_same_index_anti Filter.HasBasis.prod_same_index_anti
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Filter.HasBasis.prod_self /-
theorem HasBasis.prod_self (hl : la.HasBasis pa sa) :
(la ×ᶠ la).HasBasis pa fun i => sa i ×ˢ sa i :=
hl.prod_same_index hl fun i j hi hj => by
simpa only [exists_prop, subset_inter_iff] using
hl.mem_iff.1 (inter_mem (hl.mem_of_mem hi) (hl.mem_of_mem hj))
#align filter.has_basis.prod_self Filter.HasBasis.prod_self
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Filter.mem_prod_self_iff /-
theorem mem_prod_self_iff {s} : s ∈ la ×ᶠ la ↔ ∃ t ∈ la, t ×ˢ t ⊆ s :=
la.basis_sets.prod_self.mem_iff
#align filter.mem_prod_self_iff Filter.mem_prod_self_iff
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Filter.HasAntitoneBasis.prod /-
theorem HasAntitoneBasis.prod {ι : Type _} [LinearOrder ι] {f : Filter α} {g : Filter β}
{s : ι → Set α} {t : ι → Set β} (hf : HasAntitoneBasis f s) (hg : HasAntitoneBasis g t) :
HasAntitoneBasis (f ×ᶠ g) fun n => s n ×ˢ t n :=
⟨hf.1.prod_same_index_anti hg.1 (hf.2.AntitoneOn _) (hg.2.AntitoneOn _), hf.2.set_prod hg.2⟩
#align filter.has_antitone_basis.prod Filter.HasAntitoneBasis.prod
+-/
+#print Filter.HasBasis.coprod /-
theorem HasBasis.coprod {ι ι' : Type _} {pa : ι → Prop} {sa : ι → Set α} {pb : ι' → Prop}
{sb : ι' → Set β} (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
(la.coprod lb).HasBasis (fun i : ι × ι' => pa i.1 ∧ pb i.2) fun i =>
Prod.fst ⁻¹' sa i.1 ∪ Prod.snd ⁻¹' sb i.2 :=
(hla.comap Prod.fst).sup (hlb.comap Prod.snd)
#align filter.has_basis.coprod Filter.HasBasis.coprod
+-/
end TwoTypes
+#print Filter.map_sigma_mk_comap /-
theorem map_sigma_mk_comap {π : α → Type _} {π' : β → Type _} {f : α → β}
(hf : Function.Injective f) (g : ∀ a, π a → π' (f a)) (a : α) (l : Filter (π' (f a))) :
map (Sigma.mk a) (comap (g a) l) = comap (Sigma.map f g) (map (Sigma.mk (f a)) l) :=
@@ -1038,6 +1213,7 @@ theorem map_sigma_mk_comap {π : α → Type _} {π' : β → Type _} {f : α
ext1 s
apply image_sigma_mk_preimage_sigma_map hf
#align filter.map_sigma_mk_comap Filter.map_sigma_mk_comap
+-/
end Filter
@@ -1048,7 +1224,7 @@ namespace Filter
variable {α β γ ι : Type _} {ι' : Sort _}
#print Filter.IsCountablyGenerated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
/-- `is_countably_generated f` means `f = generate s` for some countable `s`. -/
class IsCountablyGenerated (f : Filter α) : Prop where
out : ∃ s : Set (Set α), s.Countable ∧ f = generate s
@@ -1088,11 +1264,14 @@ instance Nat.inhabitedCountableFilterBasis : Inhabited (CountableFilterBasis ℕ
#align filter.nat.inhabited_countable_filter_basis Filter.Nat.inhabitedCountableFilterBasis
-/
+#print Filter.HasCountableBasis.isCountablyGenerated /-
theorem HasCountableBasis.isCountablyGenerated {f : Filter α} {p : ι → Prop} {s : ι → Set α}
(h : f.HasCountableBasis p s) : f.IsCountablyGenerated :=
⟨⟨{t | ∃ i, p i ∧ s i = t}, h.Countable.image s, h.to_hasBasis.eq_generate⟩⟩
#align filter.has_countable_basis.is_countably_generated Filter.HasCountableBasis.isCountablyGenerated
+-/
+#print Filter.antitone_seq_of_seq /-
theorem antitone_seq_of_seq (s : ℕ → Set α) :
∃ t : ℕ → Set α, Antitone t ∧ (⨅ i, 𝓟 <| s i) = ⨅ i, 𝓟 (t i) :=
by
@@ -1103,13 +1282,17 @@ theorem antitone_seq_of_seq (s : ℕ → Set α) :
rw [← le_principal_iff]; apply iInf_le_of_le j _; exact le_rfl
· apply iInf_le_of_le i _; rw [principal_mono]; intro a; simp; intro h; apply h; rfl
#align filter.antitone_seq_of_seq Filter.antitone_seq_of_seq
+-/
+#print Filter.countable_biInf_eq_iInf_seq /-
theorem countable_biInf_eq_iInf_seq [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
(Bne : B.Nonempty) (f : ι → α) : ∃ x : ℕ → ι, (⨅ t ∈ B, f t) = ⨅ i, f (x i) :=
let ⟨g, hg⟩ := Bcbl.exists_eq_range Bne
⟨g, hg.symm ▸ iInf_range⟩
#align filter.countable_binfi_eq_infi_seq Filter.countable_biInf_eq_iInf_seq
+-/
+#print Filter.countable_biInf_eq_iInf_seq' /-
theorem countable_biInf_eq_iInf_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
(f : ι → α) {i₀ : ι} (h : f i₀ = ⊤) : ∃ x : ℕ → ι, (⨅ t ∈ B, f t) = ⨅ i, f (x i) :=
by
@@ -1119,11 +1302,14 @@ theorem countable_biInf_eq_iInf_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B
simp [h]
· exact countable_binfi_eq_infi_seq Bcbl Bnonempty f
#align filter.countable_binfi_eq_infi_seq' Filter.countable_biInf_eq_iInf_seq'
+-/
+#print Filter.countable_biInf_principal_eq_seq_iInf /-
theorem countable_biInf_principal_eq_seq_iInf {B : Set (Set α)} (Bcbl : B.Countable) :
∃ x : ℕ → Set α, (⨅ t ∈ B, 𝓟 t) = ⨅ i, 𝓟 (x i) :=
countable_biInf_eq_iInf_seq' Bcbl 𝓟 principal_univ
#align filter.countable_binfi_principal_eq_seq_infi Filter.countable_biInf_principal_eq_seq_iInf
+-/
section IsCountablyGenerated
@@ -1149,6 +1335,7 @@ theorem HasAntitoneBasis.hasBasis_ge [Preorder ι] [IsDirected ι (· ≤ ·)] {
#align filter.has_antitone_basis.has_basis_ge Filter.HasAntitoneBasis.hasBasis_ge
-/
+#print Filter.HasBasis.exists_antitone_subbasis /-
/-- If `f` is countably generated and `f.has_basis p s`, then `f` admits a decreasing basis
enumerated by natural numbers such that all sets have the form `s i`. More precisely, there is a
sequence `i n` such that `p (i n)` for all `n` and `s (i n)` is a decreasing sequence of sets which
@@ -1182,6 +1369,7 @@ theorem HasBasis.exists_antitone_subbasis {f : Filter α} [h : f.IsCountablyGene
(hx'.symm ▸
le_iInf fun i => le_principal_iff.2 <| this.to_has_basis.mem_iff.2 ⟨i, trivial, x_subset i⟩)
#align filter.has_basis.exists_antitone_subbasis Filter.HasBasis.exists_antitone_subbasis
+-/
#print Filter.exists_antitone_basis /-
/-- A countably generated filter admits a basis formed by an antitone sequence of sets. -/
@@ -1192,12 +1380,15 @@ theorem exists_antitone_basis (f : Filter α) [f.IsCountablyGenerated] :
#align filter.exists_antitone_basis Filter.exists_antitone_basis
-/
+#print Filter.exists_antitone_seq /-
theorem exists_antitone_seq (f : Filter α) [f.IsCountablyGenerated] :
∃ x : ℕ → Set α, Antitone x ∧ ∀ {s}, s ∈ f ↔ ∃ i, x i ⊆ s :=
let ⟨x, hx⟩ := f.exists_antitone_basis
⟨x, hx.Antitone, fun s => by simp [hx.to_has_basis.mem_iff]⟩
#align filter.exists_antitone_seq Filter.exists_antitone_seq
+-/
+#print Filter.Inf.isCountablyGenerated /-
instance Inf.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
[IsCountablyGenerated g] : IsCountablyGenerated (f ⊓ g) :=
by
@@ -1207,6 +1398,7 @@ instance Inf.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
has_countable_basis.is_countably_generated
⟨hs.to_has_basis.inf ht.to_has_basis, Set.to_countable _⟩
#align filter.inf.is_countably_generated Filter.Inf.isCountablyGenerated
+-/
#print Filter.map.isCountablyGenerated /-
instance map.isCountablyGenerated (l : Filter α) [l.IsCountablyGenerated] (f : α → β) :
@@ -1224,6 +1416,7 @@ instance comap.isCountablyGenerated (l : Filter β) [l.IsCountablyGenerated] (f
#align filter.comap.is_countably_generated Filter.comap.isCountablyGenerated
-/
+#print Filter.Sup.isCountablyGenerated /-
instance Sup.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
[IsCountablyGenerated g] : IsCountablyGenerated (f ⊔ g) :=
by
@@ -1233,6 +1426,7 @@ instance Sup.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
has_countable_basis.is_countably_generated
⟨hs.to_has_basis.sup ht.to_has_basis, Set.to_countable _⟩
#align filter.sup.is_countably_generated Filter.Sup.isCountablyGenerated
+-/
#print Filter.prod.isCountablyGenerated /-
instance prod.isCountablyGenerated (la : Filter α) (lb : Filter β) [IsCountablyGenerated la]
@@ -1250,23 +1444,29 @@ instance coprod.isCountablyGenerated (la : Filter α) (lb : Filter β) [IsCounta
end IsCountablyGenerated
+#print Filter.isCountablyGenerated_seq /-
theorem isCountablyGenerated_seq [Countable β] (x : β → Set α) :
IsCountablyGenerated (⨅ i, 𝓟 <| x i) :=
by
use range x, countable_range x
rw [generate_eq_binfi, iInf_range]
#align filter.is_countably_generated_seq Filter.isCountablyGenerated_seq
+-/
+#print Filter.isCountablyGenerated_of_seq /-
theorem isCountablyGenerated_of_seq {f : Filter α} (h : ∃ x : ℕ → Set α, f = ⨅ i, 𝓟 <| x i) :
f.IsCountablyGenerated := by
let ⟨x, h⟩ := h
rw [h] <;> apply is_countably_generated_seq
#align filter.is_countably_generated_of_seq Filter.isCountablyGenerated_of_seq
+-/
+#print Filter.isCountablyGenerated_biInf_principal /-
theorem isCountablyGenerated_biInf_principal {B : Set <| Set α} (h : B.Countable) :
IsCountablyGenerated (⨅ s ∈ B, 𝓟 s) :=
isCountablyGenerated_of_seq (countable_biInf_principal_eq_seq_iInf h)
#align filter.is_countably_generated_binfi_principal Filter.isCountablyGenerated_biInf_principal
+-/
#print Filter.isCountablyGenerated_iff_exists_antitone_basis /-
theorem isCountablyGenerated_iff_exists_antitone_basis {f : Filter α} :
@@ -1294,16 +1494,21 @@ theorem isCountablyGenerated_pure (a : α) : IsCountablyGenerated (pure a) := by
#align filter.is_countably_generated_pure Filter.isCountablyGenerated_pure
-/
+#print Filter.isCountablyGenerated_bot /-
@[instance]
theorem isCountablyGenerated_bot : IsCountablyGenerated (⊥ : Filter α) :=
@principal_empty α ▸ isCountablyGenerated_principal _
#align filter.is_countably_generated_bot Filter.isCountablyGenerated_bot
+-/
+#print Filter.isCountablyGenerated_top /-
@[instance]
theorem isCountablyGenerated_top : IsCountablyGenerated (⊤ : Filter α) :=
@principal_univ α ▸ isCountablyGenerated_principal _
#align filter.is_countably_generated_top Filter.isCountablyGenerated_top
+-/
+#print Filter.iInf.isCountablyGenerated /-
instance iInf.isCountablyGenerated {ι : Sort _} [Countable ι] (f : ι → Filter α)
[∀ i, IsCountablyGenerated (f i)] : IsCountablyGenerated (⨅ i, f i) :=
by
@@ -1315,6 +1520,7 @@ instance iInf.isCountablyGenerated {ι : Sort _} [Countable ι] (f : ι → Filt
lift I to Finset (PLift ι) using hI
exact ⟨⟨I, f⟩, rfl⟩
#align filter.infi.is_countably_generated Filter.iInf.isCountablyGenerated
+-/
end Filter
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -428,7 +428,7 @@ theorem HasBasis.eq_bot_iff (hl : l.HasBasis p s) : l = ⊥ ↔ ∃ i, p i ∧ s
hl.neBot_iff.trans <| by simp only [not_exists, not_and, nonempty_iff_ne_empty]
#align filter.has_basis.eq_bot_iff Filter.HasBasis.eq_bot_iff
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print Filter.generate_neBot_iff /-
theorem generate_neBot_iff {s : Set (Set α)} :
NeBot (generate s) ↔ ∀ (t) (_ : t ⊆ s), t.Finite → (⋂₀ t).Nonempty :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -144,7 +144,7 @@ namespace IsBasis
/-- Constructs a filter basis from an indexed family of sets satisfying `is_basis`. -/
protected def filterBasis {p : ι → Prop} {s : ι → Set α} (h : IsBasis p s) : FilterBasis α
where
- sets := { t | ∃ i, p i ∧ s i = t }
+ sets := {t | ∃ i, p i ∧ s i = t}
Nonempty :=
let ⟨i, hi⟩ := h.Nonempty
⟨s i, ⟨i, hi, rfl⟩⟩
@@ -171,7 +171,7 @@ namespace FilterBasis
/-- The filter associated to a filter basis. -/
protected def filter (B : FilterBasis α) : Filter α
where
- sets := { s | ∃ t ∈ B, t ⊆ s }
+ sets := {s | ∃ t ∈ B, t ⊆ s}
univ_sets :=
let ⟨s, s_in⟩ := B.Nonempty
⟨s, s_in, s.subset_univ⟩
@@ -243,7 +243,7 @@ protected theorem mem_filter_iff (h : IsBasis p s) {U : Set α} :
· tauto
#align filter.is_basis.mem_filter_iff Filter.IsBasis.mem_filter_iff
-theorem filter_eq_generate (h : IsBasis p s) : h.filterₓ = generate { U | ∃ i, p i ∧ s i = U } := by
+theorem filter_eq_generate (h : IsBasis p s) : h.filterₓ = generate {U | ∃ i, p i ∧ s i = U} := by
erw [h.filter_basis.generate] <;> rfl
#align filter.is_basis.filter_eq_generate Filter.IsBasis.filter_eq_generate
@@ -273,7 +273,7 @@ theorem hasBasis_generate (s : Set (Set α)) :
/-- The smallest filter basis containing a given collection of sets. -/
def FilterBasis.ofSets (s : Set (Set α)) : FilterBasis α
where
- sets := sInter '' { t | Set.Finite t ∧ t ⊆ s }
+ sets := sInter '' {t | Set.Finite t ∧ t ⊆ s}
Nonempty := ⟨univ, ∅, ⟨⟨finite_empty, empty_subset s⟩, sInter_empty⟩⟩
inter_sets := by
rintro _ _ ⟨a, ⟨fina, suba⟩, rfl⟩ ⟨b, ⟨finb, subb⟩, rfl⟩
@@ -350,13 +350,13 @@ theorem HasBasis.filter_eq (h : l.HasBasis p s) : h.IsBasis.filterₓ = l := by
simp [h.mem_iff, is_basis.mem_filter_iff]
#align filter.has_basis.filter_eq Filter.HasBasis.filter_eq
-theorem HasBasis.eq_generate (h : l.HasBasis p s) : l = generate { U | ∃ i, p i ∧ s i = U } := by
+theorem HasBasis.eq_generate (h : l.HasBasis p s) : l = generate {U | ∃ i, p i ∧ s i = U} := by
rw [← h.is_basis.filter_eq_generate, h.filter_eq]
#align filter.has_basis.eq_generate Filter.HasBasis.eq_generate
#print Filter.generate_eq_generate_inter /-
theorem generate_eq_generate_inter (s : Set (Set α)) :
- generate s = generate (sInter '' { t | Set.Finite t ∧ t ⊆ s }) := by
+ generate s = generate (sInter '' {t | Set.Finite t ∧ t ⊆ s}) := by
erw [(filter_basis.of_sets s).generate, ← (has_basis_generate s).filter_eq] <;> rfl
#align filter.generate_eq_generate_inter Filter.generate_eq_generate_inter
-/
@@ -985,7 +985,7 @@ theorem HasBasis.prod_same_index {p : ι → Prop} {sb : ι → Set β} (hla : l
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem HasBasis.prod_same_index_mono {ι : Type _} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
{sb : ι → Set β} (hla : la.HasBasis p sa) (hlb : lb.HasBasis p sb)
- (hsa : MonotoneOn sa { i | p i }) (hsb : MonotoneOn sb { i | p i }) :
+ (hsa : MonotoneOn sa {i | p i}) (hsb : MonotoneOn sb {i | p i}) :
(la ×ᶠ lb).HasBasis p fun i => sa i ×ˢ sb i :=
hla.prod_same_index hlb fun i j hi hj =>
have : p (min i j) := min_rec' _ hi hj
@@ -995,7 +995,7 @@ theorem HasBasis.prod_same_index_mono {ι : Type _} [LinearOrder ι] {p : ι →
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem HasBasis.prod_same_index_anti {ι : Type _} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
{sb : ι → Set β} (hla : la.HasBasis p sa) (hlb : lb.HasBasis p sb)
- (hsa : AntitoneOn sa { i | p i }) (hsb : AntitoneOn sb { i | p i }) :
+ (hsa : AntitoneOn sa {i | p i}) (hsb : AntitoneOn sb {i | p i}) :
(la ×ᶠ lb).HasBasis p fun i => sa i ×ˢ sb i :=
@HasBasis.prod_same_index_mono _ _ _ _ ιᵒᵈ _ _ _ _ hla hlb hsa.dual_left hsb.dual_left
#align filter.has_basis.prod_same_index_anti Filter.HasBasis.prod_same_index_anti
@@ -1034,7 +1034,7 @@ theorem map_sigma_mk_comap {π : α → Type _} {π' : β → Type _} {f : α
map (Sigma.mk a) (comap (g a) l) = comap (Sigma.map f g) (map (Sigma.mk (f a)) l) :=
by
refine' (((basis_sets _).comap _).map _).eq_of_same_basis _
- convert((basis_sets _).map _).comap _
+ convert ((basis_sets _).map _).comap _
ext1 s
apply image_sigma_mk_preimage_sigma_map hf
#align filter.map_sigma_mk_comap Filter.map_sigma_mk_comap
@@ -1048,7 +1048,7 @@ namespace Filter
variable {α β γ ι : Type _} {ι' : Sort _}
#print Filter.IsCountablyGenerated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
/-- `is_countably_generated f` means `f = generate s` for some countable `s`. -/
class IsCountablyGenerated (f : Filter α) : Prop where
out : ∃ s : Set (Set α), s.Countable ∧ f = generate s
@@ -1090,7 +1090,7 @@ instance Nat.inhabitedCountableFilterBasis : Inhabited (CountableFilterBasis ℕ
theorem HasCountableBasis.isCountablyGenerated {f : Filter α} {p : ι → Prop} {s : ι → Set α}
(h : f.HasCountableBasis p s) : f.IsCountablyGenerated :=
- ⟨⟨{ t | ∃ i, p i ∧ s i = t }, h.Countable.image s, h.to_hasBasis.eq_generate⟩⟩
+ ⟨⟨{t | ∃ i, p i ∧ s i = t}, h.Countable.image s, h.to_hasBasis.eq_generate⟩⟩
#align filter.has_countable_basis.is_countably_generated Filter.HasCountableBasis.isCountablyGenerated
theorem antitone_seq_of_seq (s : ℕ → Set α) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -253,7 +253,7 @@ end IsBasis
/-- We say that a filter `l` has a basis `s : ι → set α` bounded by `p : ι → Prop`,
if `t ∈ l` if and only if `t` includes `s i` for some `i` such that `p i`. -/
protected structure HasBasis (l : Filter α) (p : ι → Prop) (s : ι → Set α) : Prop where
- mem_iff' : ∀ t : Set α, t ∈ l ↔ ∃ (i : _)(hi : p i), s i ⊆ t
+ mem_iff' : ∀ t : Set α, t ∈ l ↔ ∃ (i : _) (hi : p i), s i ⊆ t
#align filter.has_basis Filter.HasBasis
-/
@@ -284,7 +284,7 @@ def FilterBasis.ofSets (s : Set (Set α)) : FilterBasis α
-/
/-- Definition of `has_basis` unfolded with implicit set argument. -/
-theorem HasBasis.mem_iff (hl : l.HasBasis p s) : t ∈ l ↔ ∃ (i : _)(hi : p i), s i ⊆ t :=
+theorem HasBasis.mem_iff (hl : l.HasBasis p s) : t ∈ l ↔ ∃ (i : _) (hi : p i), s i ⊆ t :=
hl.mem_iff' t
#align filter.has_basis.mem_iff Filter.HasBasis.mem_iffₓ
@@ -294,7 +294,7 @@ theorem HasBasis.eq_of_same_basis (hl : l.HasBasis p s) (hl' : l'.HasBasis p s)
rw [hl.mem_iff, hl'.mem_iff]
#align filter.has_basis.eq_of_same_basis Filter.HasBasis.eq_of_same_basis
-theorem hasBasis_iff : l.HasBasis p s ↔ ∀ t, t ∈ l ↔ ∃ (i : _)(hi : p i), s i ⊆ t :=
+theorem hasBasis_iff : l.HasBasis p s ↔ ∀ t, t ∈ l ↔ ∃ (i : _) (hi : p i), s i ⊆ t :=
⟨fun ⟨h⟩ => h, fun h => ⟨h⟩⟩
#align filter.has_basis_iff Filter.hasBasis_iffₓ
@@ -404,7 +404,7 @@ theorem HasBasis.frequently_iff (hl : l.HasBasis p s) {q : α → Prop} :
#align filter.has_basis.frequently_iff Filter.HasBasis.frequently_iff
theorem HasBasis.exists_iff (hl : l.HasBasis p s) {P : Set α → Prop}
- (mono : ∀ ⦃s t⦄, s ⊆ t → P t → P s) : (∃ s ∈ l, P s) ↔ ∃ (i : _)(hi : p i), P (s i) :=
+ (mono : ∀ ⦃s t⦄, s ⊆ t → P t → P s) : (∃ s ∈ l, P s) ↔ ∃ (i : _) (hi : p i), P (s i) :=
⟨fun ⟨s, hs, hP⟩ =>
let ⟨i, hi, his⟩ := hl.mem_iff.1 hs
⟨i, hi, mono his hP⟩,
@@ -499,12 +499,13 @@ theorem HasBasis.ge_iff (hl' : l'.HasBasis p' s') : l ≤ l' ↔ ∀ i', p' i'
mem_of_superset (h _ hi') hs⟩
#align filter.has_basis.ge_iff Filter.HasBasis.ge_iff
-theorem HasBasis.le_iff (hl : l.HasBasis p s) : l ≤ l' ↔ ∀ t ∈ l', ∃ (i : _)(hi : p i), s i ⊆ t :=
+theorem HasBasis.le_iff (hl : l.HasBasis p s) : l ≤ l' ↔ ∀ t ∈ l', ∃ (i : _) (hi : p i), s i ⊆ t :=
by simp only [le_def, hl.mem_iff]
#align filter.has_basis.le_iff Filter.HasBasis.le_iffₓ
theorem HasBasis.le_basis_iff (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
- l ≤ l' ↔ ∀ i', p' i' → ∃ (i : _)(hi : p i), s i ⊆ s' i' := by simp only [hl'.ge_iff, hl.mem_iff]
+ l ≤ l' ↔ ∀ i', p' i' → ∃ (i : _) (hi : p i), s i ⊆ s' i' := by
+ simp only [hl'.ge_iff, hl.mem_iff]
#align filter.has_basis.le_basis_iff Filter.HasBasis.le_basis_iffₓ
theorem HasBasis.ext (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s')
@@ -555,7 +556,7 @@ theorem hasBasis_iInf' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α
theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis
- (fun If : ΣI : Set ι, ∀ i : I, ι' i => If.1.Finite ∧ ∀ i : If.1, p i (If.2 i)) fun If =>
+ (fun If : Σ I : Set ι, ∀ i : I, ι' i => If.1.Finite ∧ ∀ i : If.1, p i (If.2 i)) fun If =>
⋂ i : If.1, s i (If.2 i) :=
by
refine' ⟨fun t => ⟨fun ht => _, _⟩⟩
@@ -571,7 +572,7 @@ theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α}
theorem hasBasis_iInf_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
- (⨅ i, l i).HasBasis (fun ii' : Σi, ι' i => p ii'.1 ii'.2) fun ii' => s ii'.1 ii'.2 :=
+ (⨅ i, l i).HasBasis (fun ii' : Σ i, ι' i => p ii'.1 ii'.2) fun ii' => s ii'.1 ii'.2 :=
by
refine' ⟨fun t => _⟩
rw [mem_infi_of_directed h, Sigma.exists]
@@ -591,7 +592,7 @@ theorem hasBasis_iInf_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l
theorem hasBasis_biInf_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : Set ι}
(hdom : dom.Nonempty) {l : ι → Filter α} (s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → 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' : Σi, ι' i => ii'.1 ∈ dom ∧ p ii'.1 ii'.2) fun ii' =>
+ (⨅ i ∈ dom, l i).HasBasis (fun ii' : Σ i, ι' i => ii'.1 ∈ dom ∧ p ii'.1 ii'.2) fun ii' =>
s ii'.1 ii'.2 :=
by
refine' ⟨fun t => _⟩
@@ -695,14 +696,15 @@ theorem HasBasis.inf_principal_neBot_iff (hl : l.HasBasis p s) {t : Set α} :
#align filter.has_basis.inf_principal_ne_bot_iff Filter.HasBasis.inf_principal_neBot_iff
theorem HasBasis.disjoint_iff (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
- Disjoint l l' ↔ ∃ (i : _)(hi : p i)(i' : _)(hi' : p' i'), Disjoint (s i) (s' i') :=
+ Disjoint l l' ↔ ∃ (i : _) (hi : p i) (i' : _) (hi' : p' i'), Disjoint (s i) (s' i') :=
not_iff_not.mp <| by
simp only [disjoint_iff, ← Ne.def, ← ne_bot_iff, hl.inf_basis_ne_bot_iff hl', not_exists,
bot_eq_empty, ← nonempty_iff_ne_empty, inf_eq_inter]
#align filter.has_basis.disjoint_iff Filter.HasBasis.disjoint_iffₓ
theorem Disjoint.exists_mem_filter_basis (h : Disjoint l l') (hl : l.HasBasis p s)
- (hl' : l'.HasBasis p' s') : ∃ (i : _)(hi : p i)(i' : _)(hi' : p' i'), Disjoint (s i) (s' i') :=
+ (hl' : l'.HasBasis p' s') :
+ ∃ (i : _) (hi : p i) (i' : _) (hi' : p' i'), Disjoint (s i) (s' i') :=
(hl.disjoint_iff hl').1 h
#align disjoint.exists_mem_filter_basis Disjoint.exists_mem_filter_basisₓ
@@ -776,13 +778,13 @@ theorem compl_diagonal_mem_prod {l₁ l₂ : Filter α} : diagonal αᶜ ∈ l
#align filter.compl_diagonal_mem_prod Filter.compl_diagonal_mem_prod
theorem HasBasis.disjoint_iff_left (h : l.HasBasis p s) :
- Disjoint l l' ↔ ∃ (i : _)(hi : p i), s iᶜ ∈ l' := by
+ Disjoint l l' ↔ ∃ (i : _) (hi : p i), s iᶜ ∈ l' := by
simp only [h.disjoint_iff l'.basis_sets, exists_prop, id, ← disjoint_principal_left,
(has_basis_principal _).disjoint_iff l'.basis_sets, Unique.exists_iff]
#align filter.has_basis.disjoint_iff_left Filter.HasBasis.disjoint_iff_leftₓ
theorem HasBasis.disjoint_iff_right (h : l.HasBasis p s) :
- Disjoint l' l ↔ ∃ (i : _)(hi : p i), s iᶜ ∈ l' :=
+ Disjoint l' l ↔ ∃ (i : _) (hi : p i), s iᶜ ∈ l' :=
disjoint_comm.trans h.disjoint_iff_leftₓ
#align filter.has_basis.disjoint_iff_right Filter.HasBasis.disjoint_iff_rightₓ
@@ -831,13 +833,13 @@ theorem hasBasis_biInf_principal {s : β → Set α} {S : Set β} (h : DirectedO
(ne : S.Nonempty) : (⨅ i ∈ S, 𝓟 (s i)).HasBasis (fun i => i ∈ S) s :=
⟨by
refine' fun t => (mem_binfi_of_directed _ Ne).trans <| by simp only [mem_principal]
- rw [directedOn_iff_directed, ← directed_comp, (· ∘ ·)] at h⊢
+ rw [directedOn_iff_directed, ← directed_comp, (· ∘ ·)] at h ⊢
apply h.mono_comp _ _
exact fun _ _ => principal_mono.2⟩
#align filter.has_basis_binfi_principal Filter.hasBasis_biInf_principal
theorem hasBasis_biInf_principal' {ι : Type _} {p : ι → Prop} {s : ι → Set α}
- (h : ∀ i, p i → ∀ j, p j → ∃ (k : _)(h : p k), s k ⊆ s i ∧ s k ⊆ s j) (ne : ∃ i, p i) :
+ (h : ∀ i, p i → ∀ j, p j → ∃ (k : _) (h : p k), s k ⊆ s i ∧ s k ⊆ s j) (ne : ∃ i, p i) :
(⨅ (i) (h : p i), 𝓟 (s i)).HasBasis p s :=
Filter.hasBasis_biInf_principal h Ne
#align filter.has_basis_binfi_principal' Filter.hasBasis_biInf_principal'
@@ -904,7 +906,7 @@ structure IsAntitoneBasis extends IsBasis (fun _ => True) s'' : Prop where
includes `s i` for some `i`, and `s` is decreasing. -/
@[protect_proj]
structure HasAntitoneBasis (l : Filter α) (s : ι'' → Set α) extends HasBasis l (fun _ => True) s :
- Prop where
+ Prop where
Antitone : Antitone s
#align filter.has_antitone_basis Filter.HasAntitoneBasis
-/
@@ -922,7 +924,7 @@ variable {la : Filter α} {pa : ι → Prop} {sa : ι → Set α} {lb : Filter
{sb : ι' → Set β} {f : α → β}
theorem HasBasis.tendsto_left_iff (hla : la.HasBasis pa sa) :
- Tendsto f la lb ↔ ∀ t ∈ lb, ∃ (i : _)(hi : pa i), MapsTo f (sa i) t := by
+ Tendsto f la lb ↔ ∀ t ∈ lb, ∃ (i : _) (hi : pa i), MapsTo f (sa i) t := by
simp only [tendsto, (hla.map f).le_iffₓ, image_subset_iff]; rfl
#align filter.has_basis.tendsto_left_iff Filter.HasBasis.tendsto_left_iffₓ
@@ -932,12 +934,12 @@ theorem HasBasis.tendsto_right_iff (hlb : lb.HasBasis pb sb) :
#align filter.has_basis.tendsto_right_iff Filter.HasBasis.tendsto_right_iff
theorem HasBasis.tendsto_iff (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
- Tendsto f la lb ↔ ∀ (ib) (hib : pb ib), ∃ (ia : _)(hia : pa ia), ∀ x ∈ sa ia, f x ∈ sb ib := by
+ Tendsto f la lb ↔ ∀ (ib) (hib : pb ib), ∃ (ia : _) (hia : pa ia), ∀ x ∈ sa ia, f x ∈ sb ib := by
simp [hlb.tendsto_right_iff, hla.eventually_iff]
#align filter.has_basis.tendsto_iff Filter.HasBasis.tendsto_iffₓ
theorem Tendsto.basis_left (H : Tendsto f la lb) (hla : la.HasBasis pa sa) :
- ∀ t ∈ lb, ∃ (i : _)(hi : pa i), MapsTo f (sa i) t :=
+ ∀ t ∈ lb, ∃ (i : _) (hi : pa i), MapsTo f (sa i) t :=
hla.tendsto_left_iffₓ.1 H
#align filter.tendsto.basis_left Filter.Tendsto.basis_leftₓ
@@ -948,7 +950,7 @@ theorem Tendsto.basis_right (H : Tendsto f la lb) (hlb : lb.HasBasis pb sb) :
theorem Tendsto.basis_both (H : Tendsto f la lb) (hla : la.HasBasis pa sa)
(hlb : lb.HasBasis pb sb) :
- ∀ (ib) (hib : pb ib), ∃ (ia : _)(hia : pa ia), ∀ x ∈ sa ia, f x ∈ sb ib :=
+ ∀ (ib) (hib : pb ib), ∃ (ia : _) (hia : pa ia), ∀ x ∈ sa ia, f x ∈ sb ib :=
(hla.tendsto_iffₓ hlb).1 H
#align filter.tendsto.basis_both Filter.Tendsto.basis_bothₓ
@@ -1065,7 +1067,7 @@ structure IsCountableBasis (p : ι → Prop) (s : ι → Set α) extends IsBasis
if `t ∈ l` if and only if `t` includes `s i` for some `i` such that `p i`, and the set
defined by `p` is countable. -/
structure HasCountableBasis (l : Filter α) (p : ι → Prop) (s : ι → Set α) extends HasBasis l p s :
- Prop where
+ Prop where
Countable : (setOf p).Countable
#align filter.has_countable_basis Filter.HasCountableBasis
-/
@@ -1170,7 +1172,7 @@ theorem HasBasis.exists_antitone_subbasis {f : Filter α} [h : f.IsCountablyGene
exact (hs.set_index_subset _).trans (inter_subset_right _ _)
have x_subset : ∀ i, s (x i) ⊆ x' i := by
rintro (_ | i)
- exacts[hs.set_index_subset _, subset.trans (hs.set_index_subset _) (inter_subset_left _ _)]
+ exacts [hs.set_index_subset _, subset.trans (hs.set_index_subset _) (inter_subset_left _ _)]
refine' ⟨fun i => x i, fun i => (x i).2, _⟩
have : (⨅ i, 𝓟 (s (x i))).HasAntitoneBasis fun i => s (x i) :=
⟨has_basis_infi_principal (directed_of_sup x_mono), x_mono⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -80,7 +80,7 @@ with the case `p = λ _, true`.
open Set Filter
-open Filter Classical
+open scoped Filter Classical
section Sort
@@ -1139,11 +1139,13 @@ protected theorem HasAntitoneBasis.mem [Preorder ι] {l : Filter α} {s : ι →
#align filter.has_antitone_basis.mem Filter.HasAntitoneBasis.mem
-/
+#print Filter.HasAntitoneBasis.hasBasis_ge /-
theorem HasAntitoneBasis.hasBasis_ge [Preorder ι] [IsDirected ι (· ≤ ·)] {l : Filter α}
{s : ι → Set α} (hs : l.HasAntitoneBasis s) (i : ι) : l.HasBasis (fun j => i ≤ j) s :=
hs.1.to_hasBasis (fun j _ => (exists_ge_ge i j).imp fun k hk => ⟨hk.1, hs.2 hk.2⟩) fun j hj =>
⟨j, trivial, Subset.rfl⟩
#align filter.has_antitone_basis.has_basis_ge Filter.HasAntitoneBasis.hasBasis_ge
+-/
/-- If `f` is countably generated and `f.has_basis p s`, then `f` admits a decreasing basis
enumerated by natural numbers such that all sets have the form `s i`. More precisely, there is a
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -157,12 +157,6 @@ protected def filterBasis {p : ι → Prop} {s : ι → Set α} (h : IsBasis p s
variable {p : ι → Prop} {s : ι → Set α} (h : IsBasis p s)
-/- warning: filter.is_basis.mem_filter_basis_iff -> Filter.IsBasis.mem_filterBasis_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} (h : Filter.IsBasis.{u1, u2} α ι p s) {U : Set.{u1} α}, Iff (Membership.Mem.{u1, u1} (Set.{u1} α) (FilterBasis.{u1} α) (FilterBasis.hasMem.{u1} α) U (Filter.IsBasis.filterBasis.{u1, u2} α ι p s h)) (Exists.{u2} ι (fun (i : ι) => And (p i) (Eq.{succ u1} (Set.{u1} α) (s i) U)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} (h : Filter.IsBasis.{u2, u1} α ι p s) {U : Set.{u2} α}, Iff (Membership.mem.{u2, u2} (Set.{u2} α) (FilterBasis.{u2} α) (instMembershipSetFilterBasis.{u2} α) U (Filter.IsBasis.filterBasis.{u2, u1} α ι p s h)) (Exists.{u1} ι (fun (i : ι) => And (p i) (Eq.{succ u2} (Set.{u2} α) (s i) U)))
-Case conversion may be inaccurate. Consider using '#align filter.is_basis.mem_filter_basis_iff Filter.IsBasis.mem_filterBasis_iffₓ'. -/
theorem mem_filterBasis_iff {U : Set α} : U ∈ h.FilterBasis ↔ ∃ i, p i ∧ s i = U :=
Iff.rfl
#align filter.is_basis.mem_filter_basis_iff Filter.IsBasis.mem_filterBasis_iff
@@ -188,12 +182,6 @@ protected def filter (B : FilterBasis α) : Filter α
#align filter_basis.filter FilterBasis.filter
-/
-/- warning: filter_basis.mem_filter_iff -> FilterBasis.mem_filter_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (B : FilterBasis.{u1} α) {U : Set.{u1} α}, Iff (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) U (FilterBasis.filter.{u1} α B)) (Exists.{succ u1} (Set.{u1} α) (fun (s : Set.{u1} α) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} α) (FilterBasis.{u1} α) (FilterBasis.hasMem.{u1} α) s B) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (FilterBasis.{u1} α) (FilterBasis.hasMem.{u1} α) s B) => HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s U)))
-but is expected to have type
- forall {α : Type.{u1}} (B : FilterBasis.{u1} α) {U : Set.{u1} α}, Iff (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) U (FilterBasis.filter.{u1} α B)) (Exists.{succ u1} (Set.{u1} α) (fun (s : Set.{u1} α) => And (Membership.mem.{u1, u1} (Set.{u1} α) (FilterBasis.{u1} α) (instMembershipSetFilterBasis.{u1} α) s B) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s U)))
-Case conversion may be inaccurate. Consider using '#align filter_basis.mem_filter_iff FilterBasis.mem_filter_iffₓ'. -/
theorem mem_filter_iff (B : FilterBasis α) {U : Set α} : U ∈ B.filterₓ ↔ ∃ s ∈ B, s ⊆ U :=
Iff.rfl
#align filter_basis.mem_filter_iff FilterBasis.mem_filter_iff
@@ -204,12 +192,6 @@ theorem mem_filter_of_mem (B : FilterBasis α) {U : Set α} : U ∈ B → U ∈
#align filter_basis.mem_filter_of_mem FilterBasis.mem_filter_of_mem
-/
-/- warning: filter_basis.eq_infi_principal -> FilterBasis.eq_iInf_principal is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (B : FilterBasis.{u1} α), Eq.{succ u1} (Filter.{u1} α) (FilterBasis.filter.{u1} α B) (iInf.{u1, succ u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (fun (s : coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) => Filter.principal.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (coeSubtype.{succ u1} (Set.{u1} α) (fun (x : Set.{u1} α) => Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) x (FilterBasis.sets.{u1} α B)))))) s)))
-but is expected to have type
- forall {α : Type.{u1}} (B : FilterBasis.{u1} α), Eq.{succ u1} (Filter.{u1} α) (FilterBasis.filter.{u1} α B) (iInf.{u1, succ u1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Set.Elem.{u1} (Set.{u1} α) (FilterBasis.sets.{u1} α B)) (fun (s : Set.Elem.{u1} (Set.{u1} α) (FilterBasis.sets.{u1} α B)) => Filter.principal.{u1} α (Subtype.val.{succ u1} (Set.{u1} α) (fun (x : Set.{u1} α) => Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) x (FilterBasis.sets.{u1} α B)) s)))
-Case conversion may be inaccurate. Consider using '#align filter_basis.eq_infi_principal FilterBasis.eq_iInf_principalₓ'. -/
theorem eq_iInf_principal (B : FilterBasis α) : B.filterₓ = ⨅ s : B.sets, 𝓟 s :=
by
have : Directed (· ≥ ·) fun s : B.sets => 𝓟 (s : Set α) :=
@@ -250,12 +232,6 @@ protected def filter (h : IsBasis p s) : Filter α :=
#align filter.is_basis.filter Filter.IsBasis.filter
-/
-/- warning: filter.is_basis.mem_filter_iff -> Filter.IsBasis.mem_filter_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} (h : Filter.IsBasis.{u1, u2} α ι p s) {U : Set.{u1} α}, Iff (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) U (Filter.IsBasis.filter.{u1, u2} α ι p s h)) (Exists.{u2} ι (fun (i : ι) => And (p i) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s i) U)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} (h : Filter.IsBasis.{u2, u1} α ι p s) {U : Set.{u2} α}, Iff (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) U (Filter.IsBasis.filter.{u2, u1} α ι p s h)) (Exists.{u1} ι (fun (i : ι) => And (p i) (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (s i) U)))
-Case conversion may be inaccurate. Consider using '#align filter.is_basis.mem_filter_iff Filter.IsBasis.mem_filter_iffₓ'. -/
protected theorem mem_filter_iff (h : IsBasis p s) {U : Set α} :
U ∈ h.filterₓ ↔ ∃ i, p i ∧ s i ⊆ U :=
by
@@ -267,12 +243,6 @@ protected theorem mem_filter_iff (h : IsBasis p s) {U : Set α} :
· tauto
#align filter.is_basis.mem_filter_iff Filter.IsBasis.mem_filter_iff
-/- warning: filter.is_basis.filter_eq_generate -> Filter.IsBasis.filter_eq_generate is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} (h : Filter.IsBasis.{u1, u2} α ι p s), Eq.{succ u1} (Filter.{u1} α) (Filter.IsBasis.filter.{u1, u2} α ι p s h) (Filter.generate.{u1} α (setOf.{u1} (Set.{u1} α) (fun (U : Set.{u1} α) => Exists.{u2} ι (fun (i : ι) => And (p i) (Eq.{succ u1} (Set.{u1} α) (s i) U)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} (h : Filter.IsBasis.{u2, u1} α ι p s), Eq.{succ u2} (Filter.{u2} α) (Filter.IsBasis.filter.{u2, u1} α ι p s h) (Filter.generate.{u2} α (setOf.{u2} (Set.{u2} α) (fun (U : Set.{u2} α) => Exists.{u1} ι (fun (i : ι) => And (p i) (Eq.{succ u2} (Set.{u2} α) (s i) U)))))
-Case conversion may be inaccurate. Consider using '#align filter.is_basis.filter_eq_generate Filter.IsBasis.filter_eq_generateₓ'. -/
theorem filter_eq_generate (h : IsBasis p s) : h.filterₓ = generate { U | ∃ i, p i ∧ s i = U } := by
erw [h.filter_basis.generate] <;> rfl
#align filter.is_basis.filter_eq_generate Filter.IsBasis.filter_eq_generate
@@ -318,12 +288,6 @@ theorem HasBasis.mem_iff (hl : l.HasBasis p s) : t ∈ l ↔ ∃ (i : _)(hi : p
hl.mem_iff' t
#align filter.has_basis.mem_iff Filter.HasBasis.mem_iffₓ
-/- warning: filter.has_basis.eq_of_same_basis -> Filter.HasBasis.eq_of_same_basis is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.HasBasis.{u1, u2} α ι l' p s) -> (Eq.{succ u1} (Filter.{u1} α) l l')
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {l' : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Filter.HasBasis.{u2, u1} α ι l' p s) -> (Eq.{succ u2} (Filter.{u2} α) l l')
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.eq_of_same_basis Filter.HasBasis.eq_of_same_basisₓ'. -/
theorem HasBasis.eq_of_same_basis (hl : l.HasBasis p s) (hl' : l'.HasBasis p s) : l = l' :=
by
ext t
@@ -334,53 +298,23 @@ theorem hasBasis_iff : l.HasBasis p s ↔ ∀ t, t ∈ l ↔ ∃ (i : _)(hi : p
⟨fun ⟨h⟩ => h, fun h => ⟨h⟩⟩
#align filter.has_basis_iff Filter.hasBasis_iffₓ
-/- warning: filter.has_basis.ex_mem -> Filter.HasBasis.ex_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Exists.{u2} ι (fun (i : ι) => p i))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Exists.{u1} ι (fun (i : ι) => p i))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.ex_mem Filter.HasBasis.ex_memₓ'. -/
theorem HasBasis.ex_mem (h : l.HasBasis p s) : ∃ i, p i :=
let ⟨i, pi, h⟩ := h.mem_iff.mp univ_mem
⟨i, pi⟩
#align filter.has_basis.ex_mem Filter.HasBasis.ex_mem
-/- warning: filter.has_basis.nonempty -> Filter.HasBasis.nonempty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Nonempty.{u2} ι)
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Nonempty.{u1} ι)
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.nonempty Filter.HasBasis.nonemptyₓ'. -/
protected theorem HasBasis.nonempty (h : l.HasBasis p s) : Nonempty ι :=
nonempty_of_exists h.ex_mem
#align filter.has_basis.nonempty Filter.HasBasis.nonempty
-/- warning: filter.is_basis.has_basis -> Filter.IsBasis.hasBasis is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} (h : Filter.IsBasis.{u1, u2} α ι p s), Filter.HasBasis.{u1, u2} α ι (Filter.IsBasis.filter.{u1, u2} α ι p s h) p s
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} (h : Filter.IsBasis.{u2, u1} α ι p s), Filter.HasBasis.{u2, u1} α ι (Filter.IsBasis.filter.{u2, u1} α ι p s h) p s
-Case conversion may be inaccurate. Consider using '#align filter.is_basis.has_basis Filter.IsBasis.hasBasisₓ'. -/
protected theorem IsBasis.hasBasis (h : IsBasis p s) : HasBasis h.filterₓ p s :=
⟨fun t => by simp only [h.mem_filter_iff, exists_prop]⟩
#align filter.is_basis.has_basis Filter.IsBasis.hasBasis
-/- warning: filter.has_basis.mem_of_superset -> Filter.HasBasis.mem_of_superset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {t : Set.{u1} α} {i : ι}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (p i) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s i) t) -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l)
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} {t : Set.{u2} α} {i : ι}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (p i) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (s i) t) -> (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l)
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.mem_of_superset Filter.HasBasis.mem_of_supersetₓ'. -/
theorem HasBasis.mem_of_superset (hl : l.HasBasis p s) (hi : p i) (ht : s i ⊆ t) : t ∈ l :=
hl.mem_iff.2 ⟨i, hi, ht⟩
#align filter.has_basis.mem_of_superset Filter.HasBasis.mem_of_superset
-/- warning: filter.has_basis.mem_of_mem -> Filter.HasBasis.mem_of_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {i : ι}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (p i) -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (s i) l)
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} {i : ι}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (p i) -> (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) (s i) l)
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.mem_of_mem Filter.HasBasis.mem_of_memₓ'. -/
theorem HasBasis.mem_of_mem (hl : l.HasBasis p s) (hi : p i) : s i ∈ l :=
hl.mem_of_superset hi <| Subset.refl _
#align filter.has_basis.mem_of_mem Filter.HasBasis.mem_of_mem
@@ -392,42 +326,18 @@ noncomputable def HasBasis.index (h : l.HasBasis p s) (t : Set α) (ht : t ∈ l
#align filter.has_basis.index Filter.HasBasis.index
-/
-/- warning: filter.has_basis.property_index -> Filter.HasBasis.property_index is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {t : Set.{u1} α} (h : Filter.HasBasis.{u1, u2} α ι l p s) (ht : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l), p ((fun (a : Sort.{max 1 u2}) (b : Sort.{u2}) [self : HasLiftT.{max 1 u2, u2} a b] => self.0) (Subtype.{u2} ι (fun (i : ι) => p i)) ι (HasLiftT.mk.{max 1 u2, u2} (Subtype.{u2} ι (fun (i : ι) => p i)) ι (CoeTCₓ.coe.{max 1 u2, u2} (Subtype.{u2} ι (fun (i : ι) => p i)) ι (coeBase.{max 1 u2, u2} (Subtype.{u2} ι (fun (i : ι) => p i)) ι (coeSubtype.{u2} ι (fun (i : ι) => p i))))) (Filter.HasBasis.index.{u1, u2} α ι l p s h t ht))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} {t : Set.{u2} α} (h : Filter.HasBasis.{u2, u1} α ι l p s) (ht : Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l), p (Subtype.val.{u1} ι (fun (i : ι) => p i) (Filter.HasBasis.index.{u2, u1} α ι l p s h t ht))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.property_index Filter.HasBasis.property_indexₓ'. -/
theorem HasBasis.property_index (h : l.HasBasis p s) (ht : t ∈ l) : p (h.index t ht) :=
(h.index t ht).2
#align filter.has_basis.property_index Filter.HasBasis.property_index
-/- warning: filter.has_basis.set_index_mem -> Filter.HasBasis.set_index_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {t : Set.{u1} α} (h : Filter.HasBasis.{u1, u2} α ι l p s) (ht : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l), Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (s ((fun (a : Sort.{max 1 u2}) (b : Sort.{u2}) [self : HasLiftT.{max 1 u2, u2} a b] => self.0) (Subtype.{u2} ι (fun (i : ι) => p i)) ι (HasLiftT.mk.{max 1 u2, u2} (Subtype.{u2} ι (fun (i : ι) => p i)) ι (CoeTCₓ.coe.{max 1 u2, u2} (Subtype.{u2} ι (fun (i : ι) => p i)) ι (coeBase.{max 1 u2, u2} (Subtype.{u2} ι (fun (i : ι) => p i)) ι (coeSubtype.{u2} ι (fun (i : ι) => p i))))) (Filter.HasBasis.index.{u1, u2} α ι l p s h t ht))) l
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} {t : Set.{u2} α} (h : Filter.HasBasis.{u2, u1} α ι l p s) (ht : Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l), Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) (s (Subtype.val.{u1} ι (fun (i : ι) => p i) (Filter.HasBasis.index.{u2, u1} α ι l p s h t ht))) l
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.set_index_mem Filter.HasBasis.set_index_memₓ'. -/
theorem HasBasis.set_index_mem (h : l.HasBasis p s) (ht : t ∈ l) : s (h.index t ht) ∈ l :=
h.mem_of_mem <| h.property_index _
#align filter.has_basis.set_index_mem Filter.HasBasis.set_index_mem
-/- warning: filter.has_basis.set_index_subset -> Filter.HasBasis.set_index_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {t : Set.{u1} α} (h : Filter.HasBasis.{u1, u2} α ι l p s) (ht : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s ((fun (a : Sort.{max 1 u2}) (b : Sort.{u2}) [self : HasLiftT.{max 1 u2, u2} a b] => self.0) (Subtype.{u2} ι (fun (i : ι) => p i)) ι (HasLiftT.mk.{max 1 u2, u2} (Subtype.{u2} ι (fun (i : ι) => p i)) ι (CoeTCₓ.coe.{max 1 u2, u2} (Subtype.{u2} ι (fun (i : ι) => p i)) ι (coeBase.{max 1 u2, u2} (Subtype.{u2} ι (fun (i : ι) => p i)) ι (coeSubtype.{u2} ι (fun (i : ι) => p i))))) (Filter.HasBasis.index.{u1, u2} α ι l p s h t ht))) t
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} {t : Set.{u2} α} (h : Filter.HasBasis.{u2, u1} α ι l p s) (ht : Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l), HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (s (Subtype.val.{u1} ι (fun (i : ι) => p i) (Filter.HasBasis.index.{u2, u1} α ι l p s h t ht))) t
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.set_index_subset Filter.HasBasis.set_index_subsetₓ'. -/
theorem HasBasis.set_index_subset (h : l.HasBasis p s) (ht : t ∈ l) : s (h.index t ht) ⊆ t :=
(h.mem_iff.1 ht).choose_spec.snd
#align filter.has_basis.set_index_subset Filter.HasBasis.set_index_subset
-/- warning: filter.has_basis.is_basis -> Filter.HasBasis.isBasis is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.IsBasis.{u1, u2} α ι p s)
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Filter.IsBasis.{u2, u1} α ι p s)
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.is_basis Filter.HasBasis.isBasisₓ'. -/
theorem HasBasis.isBasis (h : l.HasBasis p s) : IsBasis p s :=
{ Nonempty :=
let ⟨i, hi, H⟩ := h.mem_iff.mp univ_mem
@@ -436,22 +346,10 @@ theorem HasBasis.isBasis (h : l.HasBasis p s) : IsBasis p s :=
simpa [h.mem_iff] using l.inter_sets (h.mem_of_mem hi) (h.mem_of_mem hj) }
#align filter.has_basis.is_basis Filter.HasBasis.isBasis
-/- warning: filter.has_basis.filter_eq -> Filter.HasBasis.filter_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} (h : Filter.HasBasis.{u1, u2} α ι l p s), Eq.{succ u1} (Filter.{u1} α) (Filter.IsBasis.filter.{u1, u2} α ι p s (Filter.HasBasis.isBasis.{u1, u2} α ι l p s h)) l
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} (h : Filter.HasBasis.{u2, u1} α ι l p s), Eq.{succ u2} (Filter.{u2} α) (Filter.IsBasis.filter.{u2, u1} α ι p s (Filter.HasBasis.isBasis.{u1, u2} α ι l p s h)) l
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.filter_eq Filter.HasBasis.filter_eqₓ'. -/
theorem HasBasis.filter_eq (h : l.HasBasis p s) : h.IsBasis.filterₓ = l := by ext U;
simp [h.mem_iff, is_basis.mem_filter_iff]
#align filter.has_basis.filter_eq Filter.HasBasis.filter_eq
-/- warning: filter.has_basis.eq_generate -> Filter.HasBasis.eq_generate is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Eq.{succ u1} (Filter.{u1} α) l (Filter.generate.{u1} α (setOf.{u1} (Set.{u1} α) (fun (U : Set.{u1} α) => Exists.{u2} ι (fun (i : ι) => And (p i) (Eq.{succ u1} (Set.{u1} α) (s i) U))))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Eq.{succ u2} (Filter.{u2} α) l (Filter.generate.{u2} α (setOf.{u2} (Set.{u2} α) (fun (U : Set.{u2} α) => Exists.{u1} ι (fun (i : ι) => And (p i) (Eq.{succ u2} (Set.{u2} α) (s i) U))))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.eq_generate Filter.HasBasis.eq_generateₓ'. -/
theorem HasBasis.eq_generate (h : l.HasBasis p s) : l = generate { U | ∃ i, p i ∧ s i = U } := by
rw [← h.is_basis.filter_eq_generate, h.filter_eq]
#align filter.has_basis.eq_generate Filter.HasBasis.eq_generate
@@ -476,12 +374,6 @@ protected theorem FilterBasis.hasBasis {α : Type _} (B : FilterBasis α) :
#align filter_basis.has_basis FilterBasis.hasBasis
-/
-/- warning: filter.has_basis.to_has_basis' -> Filter.HasBasis.to_has_basis' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (i : ι), (p i) -> (Exists.{u3} ι' (fun (i' : ι') => And (p' i') (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s' i') (s i))))) -> (forall (i' : ι'), (p' i') -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (s' i') l)) -> (Filter.HasBasis.{u1, u3} α ι' l p' s')
-but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (forall (i : ι), (p i) -> (Exists.{u1} ι' (fun (i' : ι') => And (p' i') (HasSubset.Subset.{u3} (Set.{u3} α) (Set.instHasSubsetSet.{u3} α) (s' i') (s i))))) -> (forall (i' : ι'), (p' i') -> (Membership.mem.{u3, u3} (Set.{u3} α) (Filter.{u3} α) (instMembershipSetFilter.{u3} α) (s' i') l)) -> (Filter.HasBasis.{u3, u1} α ι' l p' s')
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.to_has_basis' Filter.HasBasis.to_has_basis'ₓ'. -/
theorem HasBasis.to_has_basis' (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i)
(h' : ∀ i', p' i' → s' i' ∈ l) : l.HasBasis p' s' :=
by
@@ -491,12 +383,6 @@ theorem HasBasis.to_has_basis' (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i',
exact ⟨i', hi', subset.trans hs's ht⟩
#align filter.has_basis.to_has_basis' Filter.HasBasis.to_has_basis'
-/- warning: filter.has_basis.to_has_basis -> Filter.HasBasis.to_hasBasis is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (i : ι), (p i) -> (Exists.{u3} ι' (fun (i' : ι') => And (p' i') (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s' i') (s i))))) -> (forall (i' : ι'), (p' i') -> (Exists.{u2} ι (fun (i : ι) => And (p i) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s i) (s' i'))))) -> (Filter.HasBasis.{u1, u3} α ι' l p' s')
-but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (forall (i : ι), (p i) -> (Exists.{u1} ι' (fun (i' : ι') => And (p' i') (HasSubset.Subset.{u3} (Set.{u3} α) (Set.instHasSubsetSet.{u3} α) (s' i') (s i))))) -> (forall (i' : ι'), (p' i') -> (Exists.{u2} ι (fun (i : ι) => And (p i) (HasSubset.Subset.{u3} (Set.{u3} α) (Set.instHasSubsetSet.{u3} α) (s i) (s' i'))))) -> (Filter.HasBasis.{u3, u1} α ι' l p' s')
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.to_has_basis Filter.HasBasis.to_hasBasisₓ'. -/
theorem HasBasis.to_hasBasis (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i)
(h' : ∀ i', p' i' → ∃ i, p i ∧ s i ⊆ s' i') : l.HasBasis p' s' :=
hl.to_has_basis' h fun i' hi' =>
@@ -504,33 +390,15 @@ theorem HasBasis.to_hasBasis (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p
hl.mem_iff.2 ⟨i, hi, hss'⟩
#align filter.has_basis.to_has_basis Filter.HasBasis.to_hasBasis
-/- warning: filter.has_basis.to_subset -> Filter.HasBasis.to_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {t : ι -> (Set.{u1} α)}, (forall (i : ι), (p i) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (t i) (s i))) -> (forall (i : ι), (p i) -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (t i) l)) -> (Filter.HasBasis.{u1, u2} α ι l p t))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall {t : ι -> (Set.{u2} α)}, (forall (i : ι), (p i) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (t i) (s i))) -> (forall (i : ι), (p i) -> (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) (t i) l)) -> (Filter.HasBasis.{u2, u1} α ι l p t))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.to_subset Filter.HasBasis.to_subsetₓ'. -/
theorem HasBasis.to_subset (hl : l.HasBasis p s) {t : ι → Set α} (h : ∀ i, p i → t i ⊆ s i)
(ht : ∀ i, p i → t i ∈ l) : l.HasBasis p t :=
hl.to_has_basis' (fun i hi => ⟨i, hi, h i hi⟩) ht
#align filter.has_basis.to_subset Filter.HasBasis.to_subset
-/- warning: filter.has_basis.eventually_iff -> Filter.HasBasis.eventually_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {q : α -> Prop}, Iff (Filter.Eventually.{u1} α (fun (x : α) => q x) l) (Exists.{u2} ι (fun (i : ι) => And (p i) (forall {{x : α}}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (s i)) -> (q x)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall {q : α -> Prop}, Iff (Filter.Eventually.{u2} α (fun (x : α) => q x) l) (Exists.{u1} ι (fun (i : ι) => And (p i) (forall {{x : α}}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (s i)) -> (q x)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.eventually_iff Filter.HasBasis.eventually_iffₓ'. -/
theorem HasBasis.eventually_iff (hl : l.HasBasis p s) {q : α → Prop} :
(∀ᶠ x in l, q x) ↔ ∃ i, p i ∧ ∀ ⦃x⦄, x ∈ s i → q x := by simpa using hl.mem_iff
#align filter.has_basis.eventually_iff Filter.HasBasis.eventually_iff
-/- warning: filter.has_basis.frequently_iff -> Filter.HasBasis.frequently_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {q : α -> Prop}, Iff (Filter.Frequently.{u1} α (fun (x : α) => q x) l) (forall (i : ι), (p i) -> (Exists.{succ u1} α (fun (x : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (s i)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (s i)) => q x)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall {q : α -> Prop}, Iff (Filter.Frequently.{u2} α (fun (x : α) => q x) l) (forall (i : ι), (p i) -> (Exists.{succ u2} α (fun (x : α) => And (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (s i)) (q x)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.frequently_iff Filter.HasBasis.frequently_iffₓ'. -/
theorem HasBasis.frequently_iff (hl : l.HasBasis p s) {q : α → Prop} :
(∃ᶠ x in l, q x) ↔ ∀ i, p i → ∃ x ∈ s i, q x := by simp [Filter.Frequently, hl.eventually_iff]
#align filter.has_basis.frequently_iff Filter.HasBasis.frequently_iff
@@ -543,12 +411,6 @@ theorem HasBasis.exists_iff (hl : l.HasBasis p s) {P : Set α → Prop}
fun ⟨i, hi, hP⟩ => ⟨s i, hl.mem_of_mem hi, hP⟩⟩
#align filter.has_basis.exists_iff Filter.HasBasis.exists_iffₓ
-/- warning: filter.has_basis.forall_iff -> Filter.HasBasis.forall_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {P : (Set.{u1} α) -> Prop}, (forall {{s : Set.{u1} α}} {{t : Set.{u1} α}}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (P s) -> (P t)) -> (Iff (forall (s : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s l) -> (P s)) (forall (i : ι), (p i) -> (P (s i)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall {P : (Set.{u2} α) -> Prop}, (forall {{s : Set.{u2} α}} {{t : Set.{u2} α}}, (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s t) -> (P s) -> (P t)) -> (Iff (forall (s : Set.{u2} α), (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) s l) -> (P s)) (forall (i : ι), (p i) -> (P (s i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.forall_iff Filter.HasBasis.forall_iffₓ'. -/
theorem HasBasis.forall_iff (hl : l.HasBasis p s) {P : Set α → Prop}
(mono : ∀ ⦃s t⦄, s ⊆ t → P s → P t) : (∀ s ∈ l, P s) ↔ ∀ i, p i → P (s i) :=
⟨fun H i hi => H (s i) <| hl.mem_of_mem hi, fun H s hs =>
@@ -556,22 +418,10 @@ theorem HasBasis.forall_iff (hl : l.HasBasis p s) {P : Set α → Prop}
mono his (H i hi)⟩
#align filter.has_basis.forall_iff Filter.HasBasis.forall_iff
-/- warning: filter.has_basis.ne_bot_iff -> Filter.HasBasis.neBot_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Iff (Filter.NeBot.{u1} α l) (forall {i : ι}, (p i) -> (Set.Nonempty.{u1} α (s i))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Iff (Filter.NeBot.{u2} α l) (forall {i : ι}, (p i) -> (Set.Nonempty.{u2} α (s i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.ne_bot_iff Filter.HasBasis.neBot_iffₓ'. -/
theorem HasBasis.neBot_iff (hl : l.HasBasis p s) : NeBot l ↔ ∀ {i}, p i → (s i).Nonempty :=
forall_mem_nonempty_iff_neBot.symm.trans <| hl.forall_iff fun _ _ => Nonempty.mono
#align filter.has_basis.ne_bot_iff Filter.HasBasis.neBot_iff
-/- warning: filter.has_basis.eq_bot_iff -> Filter.HasBasis.eq_bot_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Iff (Eq.{succ u1} (Filter.{u1} α) l (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α)))) (Exists.{u2} ι (fun (i : ι) => And (p i) (Eq.{succ u1} (Set.{u1} α) (s i) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Iff (Eq.{succ u2} (Filter.{u2} α) l (Bot.bot.{u2} (Filter.{u2} α) (CompleteLattice.toBot.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)))) (Exists.{u1} ι (fun (i : ι) => And (p i) (Eq.{succ u2} (Set.{u2} α) (s i) (EmptyCollection.emptyCollection.{u2} (Set.{u2} α) (Set.instEmptyCollectionSet.{u2} α))))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.eq_bot_iff Filter.HasBasis.eq_bot_iffₓ'. -/
theorem HasBasis.eq_bot_iff (hl : l.HasBasis p s) : l = ⊥ ↔ ∃ i, p i ∧ s i = ∅ :=
not_iff_not.1 <|
neBot_iff.symm.trans <|
@@ -598,12 +448,6 @@ theorem asBasis_filter (f : Filter α) : f.asBasis.filterₓ = f := by
#align filter.as_basis_filter Filter.asBasis_filter
-/
-/- warning: filter.has_basis_self -> Filter.hasBasis_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {P : (Set.{u1} α) -> Prop}, Iff (Filter.HasBasis.{u1, succ u1} α (Set.{u1} α) l (fun (s : Set.{u1} α) => And (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s l) (P s)) (id.{succ u1} (Set.{u1} α))) (forall (t : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) -> (Exists.{succ u1} (Set.{u1} α) (fun (r : Set.{u1} α) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) r l) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) r l) => And (P r) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) r t)))))
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {P : (Set.{u1} α) -> Prop}, Iff (Filter.HasBasis.{u1, succ u1} α (Set.{u1} α) l (fun (s : Set.{u1} α) => And (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s l) (P s)) (id.{succ u1} (Set.{u1} α))) (forall (t : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) t l) -> (Exists.{succ u1} (Set.{u1} α) (fun (r : Set.{u1} α) => And (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) r l) (And (P r) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) r t)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_self Filter.hasBasis_selfₓ'. -/
theorem hasBasis_self {l : Filter α} {P : Set α → Prop} :
HasBasis l (fun s => s ∈ l ∧ P s) id ↔ ∀ t ∈ l, ∃ r ∈ l, P r ∧ r ⊆ t :=
by
@@ -613,33 +457,15 @@ theorem hasBasis_self {l : Filter α} {P : Set α → Prop} :
⟨fun h => h.1, fun h => ⟨h, fun ⟨t, hl, hP, hts⟩ => mem_of_superset hl hts⟩⟩
#align filter.has_basis_self Filter.hasBasis_self
-/- warning: filter.has_basis.comp_surjective -> Filter.HasBasis.comp_surjective is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {g : ι' -> ι}, (Function.Surjective.{u3, u2} ι' ι g) -> (Filter.HasBasis.{u1, u3} α ι' l (Function.comp.{u3, u2, 1} ι' ι Prop p g) (Function.comp.{u3, u2, succ u1} ι' ι (Set.{u1} α) s g)))
-but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (forall {g : ι' -> ι}, (Function.Surjective.{u1, u2} ι' ι g) -> (Filter.HasBasis.{u3, u1} α ι' l (Function.comp.{u1, u2, 1} ι' ι Prop p g) (Function.comp.{u1, u2, succ u3} ι' ι (Set.{u3} α) s g)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.comp_surjective Filter.HasBasis.comp_surjectiveₓ'. -/
theorem HasBasis.comp_surjective (h : l.HasBasis p s) {g : ι' → ι} (hg : Function.Surjective g) :
l.HasBasis (p ∘ g) (s ∘ g) :=
⟨fun t => h.mem_iff.trans hg.exists⟩
#align filter.has_basis.comp_surjective Filter.HasBasis.comp_surjective
-/- warning: filter.has_basis.comp_equiv -> Filter.HasBasis.comp_equiv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (e : Equiv.{u3, u2} ι' ι), Filter.HasBasis.{u1, u3} α ι' l (Function.comp.{u3, u2, 1} ι' ι Prop p (coeFn.{max 1 (imax u3 u2) (imax u2 u3), imax u3 u2} (Equiv.{u3, u2} ι' ι) (fun (_x : Equiv.{u3, u2} ι' ι) => ι' -> ι) (Equiv.hasCoeToFun.{u3, u2} ι' ι) e)) (Function.comp.{u3, u2, succ u1} ι' ι (Set.{u1} α) s (coeFn.{max 1 (imax u3 u2) (imax u2 u3), imax u3 u2} (Equiv.{u3, u2} ι' ι) (fun (_x : Equiv.{u3, u2} ι' ι) => ι' -> ι) (Equiv.hasCoeToFun.{u3, u2} ι' ι) e)))
-but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (forall (e : Equiv.{u1, u2} ι' ι), Filter.HasBasis.{u3, u1} α ι' l (Function.comp.{u1, u2, 1} ι' ι Prop p (FunLike.coe.{max (max 1 u2) u1, u1, u2} (Equiv.{u1, u2} ι' ι) ι' (fun (_x : ι') => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι') => ι) _x) (Equiv.instFunLikeEquiv.{u1, u2} ι' ι) e)) (Function.comp.{u1, u2, succ u3} ι' ι (Set.{u3} α) s (FunLike.coe.{max (max 1 u2) u1, u1, u2} (Equiv.{u1, u2} ι' ι) ι' (fun (_x : ι') => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι') => ι) _x) (Equiv.instFunLikeEquiv.{u1, u2} ι' ι) e)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.comp_equiv Filter.HasBasis.comp_equivₓ'. -/
theorem HasBasis.comp_equiv (h : l.HasBasis p s) (e : ι' ≃ ι) : l.HasBasis (p ∘ e) (s ∘ e) :=
h.comp_surjective e.Surjective
#align filter.has_basis.comp_equiv Filter.HasBasis.comp_equiv
-/- warning: filter.has_basis.restrict -> Filter.HasBasis.restrict is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {q : ι -> Prop}, (forall (i : ι), (p i) -> (Exists.{u2} ι (fun (j : ι) => And (p j) (And (q j) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s j) (s i)))))) -> (Filter.HasBasis.{u1, u2} α ι l (fun (i : ι) => And (p i) (q i)) s))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall {q : ι -> Prop}, (forall (i : ι), (p i) -> (Exists.{u1} ι (fun (j : ι) => And (p j) (And (q j) (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (s j) (s i)))))) -> (Filter.HasBasis.{u2, u1} α ι l (fun (i : ι) => And (p i) (q i)) s))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.restrict Filter.HasBasis.restrictₓ'. -/
/-- If `{s i | p i}` is a basis of a filter `l` and each `s i` includes `s j` such that
`p j ∧ q j`, then `{s j | p j ∧ q j}` is a basis of `l`. -/
theorem HasBasis.restrict (h : l.HasBasis p s) {q : ι → Prop}
@@ -651,12 +477,6 @@ theorem HasBasis.restrict (h : l.HasBasis p s) {q : ι → Prop}
exact ⟨j, ⟨hpj, hqj⟩, subset.trans hji hti⟩
#align filter.has_basis.restrict Filter.HasBasis.restrict
-/- warning: filter.has_basis.restrict_subset -> Filter.HasBasis.restrict_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {V : Set.{u1} α}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) V l) -> (Filter.HasBasis.{u1, u2} α ι l (fun (i : ι) => And (p i) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s i) V)) s))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall {V : Set.{u2} α}, (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) V l) -> (Filter.HasBasis.{u2, u1} α ι l (fun (i : ι) => And (p i) (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (s i) V)) s))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.restrict_subset Filter.HasBasis.restrict_subsetₓ'. -/
/-- If `{s i | p i}` is a basis of a filter `l` and `V ∈ l`, then `{s i | p i ∧ s i ⊆ V}`
is a basis of `l`. -/
theorem HasBasis.restrict_subset (h : l.HasBasis p s) {V : Set α} (hV : V ∈ l) :
@@ -673,12 +493,6 @@ theorem HasBasis.hasBasis_self_subset {p : Set α → Prop} (h : l.HasBasis (fun
#align filter.has_basis.has_basis_self_subset Filter.HasBasis.hasBasis_self_subset
-/
-/- warning: filter.has_basis.ge_iff -> Filter.HasBasis.ge_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι' l' p' s') -> (Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') (forall (i' : ι'), (p' i') -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (s' i') l)))
-but is expected to have type
- forall {α : Type.{u2}} {ι' : Sort.{u1}} {l : Filter.{u2} α} {l' : Filter.{u2} α} {p' : ι' -> Prop} {s' : ι' -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι' l' p' s') -> (Iff (LE.le.{u2} (Filter.{u2} α) (Preorder.toLE.{u2} (Filter.{u2} α) (PartialOrder.toPreorder.{u2} (Filter.{u2} α) (Filter.instPartialOrderFilter.{u2} α))) l l') (forall (i' : ι'), (p' i') -> (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) (s' i') l)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.ge_iff Filter.HasBasis.ge_iffₓ'. -/
theorem HasBasis.ge_iff (hl' : l'.HasBasis p' s') : l ≤ l' ↔ ∀ i', p' i' → s' i' ∈ l :=
⟨fun h i' hi' => h <| hl'.mem_of_mem hi', fun h s hs =>
let ⟨i', hi', hs⟩ := hl'.mem_iff.1 hs
@@ -703,12 +517,6 @@ theorem HasBasis.ext (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s')
simpa using h
#align filter.has_basis.ext Filter.HasBasis.extₓ
-/- warning: filter.has_basis.inf' -> Filter.HasBasis.inf' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.HasBasis.{u1, u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max 1 u2 u3} α (PProd.{u2, u3} ι ι') (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l') (fun (i : PProd.{u2, u3} ι ι') => And (p (PProd.fst.{u2, u3} ι ι' i)) (p' (PProd.snd.{u2, u3} ι ι' i))) (fun (i : PProd.{u2, u3} ι ι') => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s (PProd.fst.{u2, u3} ι ι' i)) (s' (PProd.snd.{u2, u3} ι ι' i))))
-but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {l' : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u3, u1} α ι' l' p' s') -> (Filter.HasBasis.{u3, max (max 1 u2) u1} α (PProd.{u2, u1} ι ι') (Inf.inf.{u3} (Filter.{u3} α) (Filter.instInfFilter.{u3} α) l l') (fun (i : PProd.{u2, u1} ι ι') => And (p (PProd.fst.{u2, u1} ι ι' i)) (p' (PProd.snd.{u2, u1} ι ι' i))) (fun (i : PProd.{u2, u1} ι ι') => Inter.inter.{u3} (Set.{u3} α) (Set.instInterSet.{u3} α) (s (PProd.fst.{u2, u1} ι ι' i)) (s' (PProd.snd.{u2, u1} ι ι' i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf' Filter.HasBasis.inf'ₓ'. -/
theorem HasBasis.inf' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊓ l').HasBasis (fun i : PProd ι ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∩ s' i.2 :=
⟨by
@@ -721,12 +529,6 @@ theorem HasBasis.inf' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
exact mem_inf_of_inter (hl.mem_of_mem hi) (hl'.mem_of_mem hi') H⟩
#align filter.has_basis.inf' Filter.HasBasis.inf'
-/- warning: filter.has_basis.inf -> Filter.HasBasis.inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u2}} {ι' : Type.{u3}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u2} α ι l p s) -> (Filter.HasBasis.{u1, succ u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l') (fun (i : Prod.{u2, u3} ι ι') => And (p (Prod.fst.{u2, u3} ι ι' i)) (p' (Prod.snd.{u2, u3} ι ι' i))) (fun (i : Prod.{u2, u3} ι ι') => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s (Prod.fst.{u2, u3} ι ι' i)) (s' (Prod.snd.{u2, u3} ι ι' i))))
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u3}} {ι' : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u3} α ι l p s) -> (Filter.HasBasis.{u1, succ u2} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) l l') (fun (i : Prod.{u3, u2} ι ι') => And (p (Prod.fst.{u3, u2} ι ι' i)) (p' (Prod.snd.{u3, u2} ι ι' i))) (fun (i : Prod.{u3, u2} ι ι') => Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s (Prod.fst.{u3, u2} ι ι' i)) (s' (Prod.snd.{u3, u2} ι ι' i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf Filter.HasBasis.infₓ'. -/
theorem HasBasis.inf {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p' : ι' → Prop}
{s' : ι' → Set α} (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊓ l').HasBasis (fun i : ι × ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∩ s' i.2 :=
@@ -734,12 +536,6 @@ theorem HasBasis.inf {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p'
⟨⟨i.1, i.2⟩, hi, Subset.rfl⟩
#align filter.has_basis.inf Filter.HasBasis.inf
-/- warning: filter.has_basis_infi' -> Filter.hasBasis_iInf' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u2) (succ (max u2 u3))} α (Prod.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i)) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (If : Prod.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i)) => And (Set.Finite.{u2} ι (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) -> (p i (Prod.snd.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If i)))) (fun (If : Prod.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i)) => Set.iInter.{u1, succ u2} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) => s i (Prod.snd.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If i)))))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i)) (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (If : Prod.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i)) => And (Set.Finite.{u3} ι (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) -> (p i (Prod.snd.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If i)))) (fun (If : Prod.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i)) => Set.iInter.{u1, succ u3} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) => s i (Prod.snd.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi' Filter.hasBasis_iInf'ₓ'. -/
theorem hasBasis_iInf' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis (fun If : Set ι × ∀ i, ι' i => If.1.Finite ∧ ∀ i ∈ If.1, p i (If.2 i))
@@ -756,9 +552,6 @@ theorem hasBasis_iInf' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α
exact (bInter_mem hI₁).mpr fun i hi => mem_infi_of_mem i <| (hl i).mem_of_mem <| hI₂ _ hi⟩
#align filter.has_basis_infi' Filter.hasBasis_iInf'
-/- warning: filter.has_basis_infi -> Filter.hasBasis_iInf is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi Filter.hasBasis_iInfₓ'. -/
theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis
@@ -775,12 +568,6 @@ theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α}
exact Inter_mem.2 fun i => mem_infi_of_mem i <| (hl i).mem_of_mem <| hf _
#align filter.has_basis_infi Filter.hasBasis_iInf
-/- warning: filter.has_basis_infi_of_directed' -> Filter.hasBasis_iInf_of_directed' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5723 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5725 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5723 x._@.Mathlib.Order.Filter.Bases._hyg.5725) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_of_directed' Filter.hasBasis_iInf_of_directed'ₓ'. -/
theorem hasBasis_iInf_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
@@ -791,12 +578,6 @@ theorem hasBasis_iInf_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty
exact exists_congr fun i => (hl i).mem_iff
#align filter.has_basis_infi_of_directed' Filter.hasBasis_iInf_of_directed'
-/- warning: filter.has_basis_infi_of_directed -> Filter.hasBasis_iInf_of_directed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u2, u3} ι ι') => p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5900 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5902 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5900 x._@.Mathlib.Order.Filter.Bases._hyg.5902) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u3, u2} ι ι') => p (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')) (fun (ii' : Prod.{u3, u2} ι ι') => s (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_of_directed Filter.hasBasis_iInf_of_directedₓ'. -/
theorem hasBasis_iInf_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ι → ι' → Set α) (p : ι → ι' → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
@@ -807,12 +588,6 @@ theorem hasBasis_iInf_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l
exact exists_congr fun i => (hl i).mem_iff
#align filter.has_basis_infi_of_directed Filter.hasBasis_iInf_of_directed
-/- warning: filter.has_basis_binfi_of_directed' -> Filter.hasBasis_biInf_of_directed' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {dom : Set.{u2} ι}, (Set.Nonempty.{u2} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) -> (Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i))) -> (DirectedOn.{u2} ι (Order.Preimage.{succ u2, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) => l i))) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => And (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') dom) (p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii'))) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii'))))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} {dom : Set.{u3} ι}, (Set.Nonempty.{u3} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) -> (Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i))) -> (DirectedOn.{u3} ι (Order.Preimage.{succ u3, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) => l i))) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => And (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') dom) (p (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii'))) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii'))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_of_directed' Filter.hasBasis_biInf_of_directed'ₓ'. -/
theorem hasBasis_biInf_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : Set ι}
(hdom : dom.Nonempty) {l : ι → Filter α} (s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → Prop)
(hl : ∀ i ∈ dom, (l i).HasBasis (p i) (s i)) (h : DirectedOn (l ⁻¹'o GE.ge) dom) :
@@ -829,12 +604,6 @@ theorem hasBasis_biInf_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : S
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
#align filter.has_basis_binfi_of_directed' Filter.hasBasis_biInf_of_directed'
-/- warning: filter.has_basis_binfi_of_directed -> Filter.hasBasis_biInf_of_directed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} {dom : Set.{u2} ι}, (Set.Nonempty.{u2} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) -> (Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i))) -> (DirectedOn.{u2} ι (Order.Preimage.{succ u2, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) => l i))) (fun (ii' : Prod.{u2, u3} ι ι') => And (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) (Prod.fst.{u2, u3} ι ι' ii') dom) (p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii'))) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii'))))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : Type.{u2}} {dom : Set.{u3} ι}, (Set.Nonempty.{u3} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) -> (Filter.HasBasis.{u1, succ u2} α ι' (l i) (p i) (s i))) -> (DirectedOn.{u3} ι (Order.Preimage.{succ u3, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) => l i))) (fun (ii' : Prod.{u3, u2} ι ι') => And (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) (Prod.fst.{u3, u2} ι ι' ii') dom) (p (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii'))) (fun (ii' : Prod.{u3, u2} ι ι') => s (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii'))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_of_directed Filter.hasBasis_biInf_of_directedₓ'. -/
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) :
@@ -863,12 +632,6 @@ theorem hasBasis_pure (x : α) : (pure x : Filter α).HasBasis (fun i : Unit =>
#align filter.has_basis_pure Filter.hasBasis_pure
-/
-/- warning: filter.has_basis.sup' -> Filter.HasBasis.sup' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.HasBasis.{u1, u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max 1 u2 u3} α (PProd.{u2, u3} ι ι') (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') (fun (i : PProd.{u2, u3} ι ι') => And (p (PProd.fst.{u2, u3} ι ι' i)) (p' (PProd.snd.{u2, u3} ι ι' i))) (fun (i : PProd.{u2, u3} ι ι') => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s (PProd.fst.{u2, u3} ι ι' i)) (s' (PProd.snd.{u2, u3} ι ι' i))))
-but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {l' : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u3, u1} α ι' l' p' s') -> (Filter.HasBasis.{u3, max (max 1 u2) u1} α (PProd.{u2, u1} ι ι') (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (CompleteLattice.toLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α)))) l l') (fun (i : PProd.{u2, u1} ι ι') => And (p (PProd.fst.{u2, u1} ι ι' i)) (p' (PProd.snd.{u2, u1} ι ι' i))) (fun (i : PProd.{u2, u1} ι ι') => Union.union.{u3} (Set.{u3} α) (Set.instUnionSet.{u3} α) (s (PProd.fst.{u2, u1} ι ι' i)) (s' (PProd.snd.{u2, u1} ι ι' i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.sup' Filter.HasBasis.sup'ₓ'. -/
theorem HasBasis.sup' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊔ l').HasBasis (fun i : PProd ι ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∪ s' i.2 :=
⟨by
@@ -878,12 +641,6 @@ theorem HasBasis.sup' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
simp only [← and_assoc', exists_and_right, and_comm']⟩
#align filter.has_basis.sup' Filter.HasBasis.sup'
-/- warning: filter.has_basis.sup -> Filter.HasBasis.sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u2}} {ι' : Type.{u3}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u2} α ι l p s) -> (Filter.HasBasis.{u1, succ u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') (fun (i : Prod.{u2, u3} ι ι') => And (p (Prod.fst.{u2, u3} ι ι' i)) (p' (Prod.snd.{u2, u3} ι ι' i))) (fun (i : Prod.{u2, u3} ι ι') => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s (Prod.fst.{u2, u3} ι ι' i)) (s' (Prod.snd.{u2, u3} ι ι' i))))
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u3}} {ι' : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u3} α ι l p s) -> (Filter.HasBasis.{u1, succ u2} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (CompleteLattice.toLattice.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))) l l') (fun (i : Prod.{u3, u2} ι ι') => And (p (Prod.fst.{u3, u2} ι ι' i)) (p' (Prod.snd.{u3, u2} ι ι' i))) (fun (i : Prod.{u3, u2} ι ι') => Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) (s (Prod.fst.{u3, u2} ι ι' i)) (s' (Prod.snd.{u3, u2} ι ι' i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.sup Filter.HasBasis.supₓ'. -/
theorem HasBasis.sup {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p' : ι' → Prop}
{s' : ι' → Set α} (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊔ l').HasBasis (fun i : ι × ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∪ s' i.2 :=
@@ -891,12 +648,6 @@ theorem HasBasis.sup {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p'
⟨⟨i.1, i.2⟩, hi, Subset.rfl⟩
#align filter.has_basis.sup Filter.HasBasis.sup
-/- warning: filter.has_basis_supr -> Filter.hasBasis_iSup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : ι -> Type.{u3}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max u2 (succ u3)} α (forall (i : ι), ι' i) (iSup.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasSup.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (f : forall (i : ι), ι' i) => forall (i : ι), p i (f i)) (fun (f : forall (i : ι), ι' i) => Set.iUnion.{u1, u2} α ι (fun (i : ι) => s i (f i))))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Sort.{u3}} {ι' : ι -> Type.{u2}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max u3 (succ u2)} α (forall (i : ι), ι' i) (iSup.{u1, u3} (Filter.{u1} α) (CompleteLattice.toSupSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (f : forall (i : ι), ι' i) => forall (i : ι), p i (f i)) (fun (f : forall (i : ι), ι' i) => Set.iUnion.{u1, u3} α ι (fun (i : ι) => s i (f i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_supr Filter.hasBasis_iSupₓ'. -/
theorem hasBasis_iSup {ι : Sort _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨆ i, l i).HasBasis (fun f : ∀ i, ι' i => ∀ i, p i (f i)) fun f : ∀ i, ι' i => ⋃ i, s i (f i) :=
@@ -905,12 +656,6 @@ theorem hasBasis_iSup {ι : Sort _} {ι' : ι → Type _} {l : ι → Filter α}
mem_supr]
#align filter.has_basis_supr Filter.hasBasis_iSup
-/- warning: filter.has_basis.sup_principal -> Filter.HasBasis.sup_principal is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (t : Set.{u1} α), Filter.HasBasis.{u1, u2} α ι (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l (Filter.principal.{u1} α t)) p (fun (i : ι) => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s i) t))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (t : Set.{u2} α), Filter.HasBasis.{u2, u1} α ι (Sup.sup.{u2} (Filter.{u2} α) (SemilatticeSup.toSup.{u2} (Filter.{u2} α) (Lattice.toSemilatticeSup.{u2} (Filter.{u2} α) (CompleteLattice.toLattice.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)))) l (Filter.principal.{u2} α t)) p (fun (i : ι) => Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) (s i) t))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.sup_principal Filter.HasBasis.sup_principalₓ'. -/
theorem HasBasis.sup_principal (hl : l.HasBasis p s) (t : Set α) :
(l ⊔ 𝓟 t).HasBasis p fun i => s i ∪ t :=
⟨fun u => by
@@ -918,68 +663,32 @@ theorem HasBasis.sup_principal (hl : l.HasBasis p s) (t : Set α) :
Unique.exists_iff]⟩
#align filter.has_basis.sup_principal Filter.HasBasis.sup_principal
-/- warning: filter.has_basis.sup_pure -> Filter.HasBasis.sup_pure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (x : α), Filter.HasBasis.{u1, u2} α ι (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x)) p (fun (i : ι) => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s i) (Singleton.singleton.{u1, u1} α (Set.{u1} α) (Set.hasSingleton.{u1} α) x)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (x : α), Filter.HasBasis.{u2, u1} α ι (Sup.sup.{u2} (Filter.{u2} α) (SemilatticeSup.toSup.{u2} (Filter.{u2} α) (Lattice.toSemilatticeSup.{u2} (Filter.{u2} α) (CompleteLattice.toLattice.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)))) l (Pure.pure.{u2, u2} Filter.{u2} Filter.instPureFilter.{u2} α x)) p (fun (i : ι) => Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) (s i) (Singleton.singleton.{u2, u2} α (Set.{u2} α) (Set.instSingletonSet.{u2} α) x)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.sup_pure Filter.HasBasis.sup_pureₓ'. -/
theorem HasBasis.sup_pure (hl : l.HasBasis p s) (x : α) :
(l ⊔ pure x).HasBasis p fun i => s i ∪ {x} := by
simp only [← principal_singleton, hl.sup_principal]
#align filter.has_basis.sup_pure Filter.HasBasis.sup_pure
-/- warning: filter.has_basis.inf_principal -> Filter.HasBasis.inf_principal is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (s' : Set.{u1} α), Filter.HasBasis.{u1, u2} α ι (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l (Filter.principal.{u1} α s')) p (fun (i : ι) => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) s'))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (s' : Set.{u2} α), Filter.HasBasis.{u2, u1} α ι (Inf.inf.{u2} (Filter.{u2} α) (Filter.instInfFilter.{u2} α) l (Filter.principal.{u2} α s')) p (fun (i : ι) => Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) s'))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf_principal Filter.HasBasis.inf_principalₓ'. -/
theorem HasBasis.inf_principal (hl : l.HasBasis p s) (s' : Set α) :
(l ⊓ 𝓟 s').HasBasis p fun i => s i ∩ s' :=
⟨fun t => by
simp only [mem_inf_principal, hl.mem_iff, subset_def, mem_set_of_eq, mem_inter_iff, and_imp]⟩
#align filter.has_basis.inf_principal Filter.HasBasis.inf_principal
-/- warning: filter.has_basis.principal_inf -> Filter.HasBasis.principal_inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (s' : Set.{u1} α), Filter.HasBasis.{u1, u2} α ι (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) (Filter.principal.{u1} α s') l) p (fun (i : ι) => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s' (s i)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (s' : Set.{u2} α), Filter.HasBasis.{u2, u1} α ι (Inf.inf.{u2} (Filter.{u2} α) (Filter.instInfFilter.{u2} α) (Filter.principal.{u2} α s') l) p (fun (i : ι) => Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s' (s i)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.principal_inf Filter.HasBasis.principal_infₓ'. -/
theorem HasBasis.principal_inf (hl : l.HasBasis p s) (s' : Set α) :
(𝓟 s' ⊓ l).HasBasis p fun i => s' ∩ s i := by
simpa only [inf_comm, inter_comm] using hl.inf_principal s'
#align filter.has_basis.principal_inf Filter.HasBasis.principal_inf
-/- warning: filter.has_basis.inf_basis_ne_bot_iff -> Filter.HasBasis.inf_basis_neBot_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.HasBasis.{u1, u3} α ι' l' p' s') -> (Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{i' : ι'}}, (p' i') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s' i'))))))
-but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {l' : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u3, u1} α ι' l' p' s') -> (Iff (Filter.NeBot.{u3} α (Inf.inf.{u3} (Filter.{u3} α) (Filter.instInfFilter.{u3} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{i' : ι'}}, (p' i') -> (Set.Nonempty.{u3} α (Inter.inter.{u3} (Set.{u3} α) (Set.instInterSet.{u3} α) (s i) (s' i'))))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf_basis_ne_bot_iff Filter.HasBasis.inf_basis_neBot_iffₓ'. -/
theorem HasBasis.inf_basis_neBot_iff (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
NeBot (l ⊓ l') ↔ ∀ ⦃i⦄ (hi : p i) ⦃i'⦄ (hi' : p' i'), (s i ∩ s' i').Nonempty :=
(hl.inf' hl').neBot_iff.trans <| by simp [@forall_swap _ ι']
#align filter.has_basis.inf_basis_ne_bot_iff Filter.HasBasis.inf_basis_neBot_iff
-/- warning: filter.has_basis.inf_ne_bot_iff -> Filter.HasBasis.inf_neBot_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{s' : Set.{u1} α}}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s' l') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) s')))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {l' : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Iff (Filter.NeBot.{u2} α (Inf.inf.{u2} (Filter.{u2} α) (Filter.instInfFilter.{u2} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{s' : Set.{u2} α}}, (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) s' l') -> (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) s')))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf_ne_bot_iff Filter.HasBasis.inf_neBot_iffₓ'. -/
theorem HasBasis.inf_neBot_iff (hl : l.HasBasis p s) :
NeBot (l ⊓ l') ↔ ∀ ⦃i⦄ (hi : p i) ⦃s'⦄ (hs' : s' ∈ l'), (s i ∩ s').Nonempty :=
hl.inf_basis_neBot_iff l'.basis_sets
#align filter.has_basis.inf_ne_bot_iff Filter.HasBasis.inf_neBot_iff
-/- warning: filter.has_basis.inf_principal_ne_bot_iff -> Filter.HasBasis.inf_principal_neBot_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {t : Set.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l (Filter.principal.{u1} α t))) (forall {{i : ι}}, (p i) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) t))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall {t : Set.{u2} α}, Iff (Filter.NeBot.{u2} α (Inf.inf.{u2} (Filter.{u2} α) (Filter.instInfFilter.{u2} α) l (Filter.principal.{u2} α t))) (forall {{i : ι}}, (p i) -> (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) t))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf_principal_ne_bot_iff Filter.HasBasis.inf_principal_neBot_iffₓ'. -/
theorem HasBasis.inf_principal_neBot_iff (hl : l.HasBasis p s) {t : Set α} :
NeBot (l ⊓ 𝓟 t) ↔ ∀ ⦃i⦄ (hi : p i), (s i ∩ t).Nonempty :=
(hl.inf_principal t).neBot_iff
@@ -997,12 +706,6 @@ theorem Disjoint.exists_mem_filter_basis (h : Disjoint l l') (hl : l.HasBasis p
(hl.disjoint_iff hl').1 h
#align disjoint.exists_mem_filter_basis Disjoint.exists_mem_filter_basisₓ
-/- warning: pairwise.exists_mem_filter_basis_of_disjoint -> Pairwise.exists_mem_filter_basis_of_disjoint is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {I : Type.{u2}} [_inst_1 : Finite.{succ u2} I] {l : I -> (Filter.{u1} α)} {ι : I -> Sort.{u3}} {p : forall (i : I), (ι i) -> Prop} {s : forall (i : I), (ι i) -> (Set.{u1} α)}, (Pairwise.{u2} I (Function.onFun.{succ u2, succ u1, 1} I (Filter.{u1} α) Prop (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α)))) l)) -> (forall (i : I), Filter.HasBasis.{u1, u3} α (ι i) (l i) (p i) (s i)) -> (Exists.{imax (succ u2) u3} (forall (i : I), ι i) (fun (ind : forall (i : I), ι i) => And (forall (i : I), p i (ind i)) (Pairwise.{u2} I (Function.onFun.{succ u2, succ u1, 1} I (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)))) (fun (i : I) => s i (ind i))))))
-but is expected to have type
- forall {α : Type.{u2}} {I : Type.{u3}} [_inst_1 : Finite.{succ u3} I] {l : I -> (Filter.{u2} α)} {ι : I -> Sort.{u1}} {p : forall (i : I), (ι i) -> Prop} {s : forall (i : I), (ι i) -> (Set.{u2} α)}, (Pairwise.{u3} I (Function.onFun.{succ u3, succ u2, 1} I (Filter.{u2} α) Prop (Disjoint.{u2} (Filter.{u2} α) (Filter.instPartialOrderFilter.{u2} α) (BoundedOrder.toOrderBot.{u2} (Filter.{u2} α) (Preorder.toLE.{u2} (Filter.{u2} α) (PartialOrder.toPreorder.{u2} (Filter.{u2} α) (Filter.instPartialOrderFilter.{u2} α))) (CompleteLattice.toBoundedOrder.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)))) l)) -> (forall (i : I), Filter.HasBasis.{u2, u1} α (ι i) (l i) (p i) (s i)) -> (Exists.{imax (succ u3) u1} (forall (i : I), ι i) (fun (ind : forall (i : I), ι i) => And (forall (i : I), p i (ind i)) (Pairwise.{u3} I (Function.onFun.{succ u3, succ u2, 1} I (Set.{u2} α) Prop (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α))))))) (fun (i : I) => s i (ind i))))))
-Case conversion may be inaccurate. Consider using '#align pairwise.exists_mem_filter_basis_of_disjoint Pairwise.exists_mem_filter_basis_of_disjointₓ'. -/
theorem Pairwise.exists_mem_filter_basis_of_disjoint {I : Type _} [Finite I] {l : I → Filter α}
{ι : I → Sort _} {p : ∀ i, ι i → Prop} {s : ∀ i, ι i → Set α} (hd : Pairwise (Disjoint on l))
(h : ∀ i, (l i).HasBasis (p i) (s i)) :
@@ -1013,12 +716,6 @@ theorem Pairwise.exists_mem_filter_basis_of_disjoint {I : Type _} [Finite I] {l
exact ⟨ind, hp, hd.mono fun i j hij => hij.mono (ht _) (ht _)⟩
#align pairwise.exists_mem_filter_basis_of_disjoint Pairwise.exists_mem_filter_basis_of_disjoint
-/- warning: set.pairwise_disjoint.exists_mem_filter_basis -> Set.PairwiseDisjoint.exists_mem_filter_basis is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {I : Type.{u2}} {l : I -> (Filter.{u1} α)} {ι : I -> Sort.{u3}} {p : forall (i : I), (ι i) -> Prop} {s : forall (i : I), (ι i) -> (Set.{u1} α)} {S : Set.{u2} I}, (Set.PairwiseDisjoint.{u1, u2} (Filter.{u1} α) I (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) S l) -> (Set.Finite.{u2} I S) -> (forall (i : I), Filter.HasBasis.{u1, u3} α (ι i) (l i) (p i) (s i)) -> (Exists.{imax (succ u2) u3} (forall (i : I), ι i) (fun (ind : forall (i : I), ι i) => And (forall (i : I), p i (ind i)) (Set.PairwiseDisjoint.{u1, u2} (Set.{u1} α) I (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) S (fun (i : I) => s i (ind i)))))
-but is expected to have type
- forall {α : Type.{u2}} {I : Type.{u3}} {l : I -> (Filter.{u2} α)} {ι : I -> Sort.{u1}} {p : forall (i : I), (ι i) -> Prop} {s : forall (i : I), (ι i) -> (Set.{u2} α)} {S : Set.{u3} I}, (Set.PairwiseDisjoint.{u2, u3} (Filter.{u2} α) I (Filter.instPartialOrderFilter.{u2} α) (BoundedOrder.toOrderBot.{u2} (Filter.{u2} α) (Preorder.toLE.{u2} (Filter.{u2} α) (PartialOrder.toPreorder.{u2} (Filter.{u2} α) (Filter.instPartialOrderFilter.{u2} α))) (CompleteLattice.toBoundedOrder.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α))) S l) -> (Set.Finite.{u3} I S) -> (forall (i : I), Filter.HasBasis.{u2, u1} α (ι i) (l i) (p i) (s i)) -> (Exists.{imax (succ u3) u1} (forall (i : I), ι i) (fun (ind : forall (i : I), ι i) => And (forall (i : I), p i (ind i)) (Set.PairwiseDisjoint.{u2, u3} (Set.{u2} α) I (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) S (fun (i : I) => s i (ind i)))))
-Case conversion may be inaccurate. Consider using '#align set.pairwise_disjoint.exists_mem_filter_basis Set.PairwiseDisjoint.exists_mem_filter_basisₓ'. -/
theorem Set.PairwiseDisjoint.exists_mem_filter_basis {I : Type _} {l : I → Filter α}
{ι : I → Sort _} {p : ∀ i, ι i → Prop} {s : ∀ i, ι i → Set α} {S : Set I}
(hd : S.PairwiseDisjoint l) (hS : S.Finite) (h : ∀ i, (l i).HasBasis (p i) (s i)) :
@@ -1029,33 +726,15 @@ theorem Set.PairwiseDisjoint.exists_mem_filter_basis {I : Type _} {l : I → Fil
exact ⟨ind, hp, hd.mono ht⟩
#align set.pairwise_disjoint.exists_mem_filter_basis Set.PairwiseDisjoint.exists_mem_filter_basis
-/- warning: filter.inf_ne_bot_iff -> Filter.inf_neBot_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l')) (forall {{s : Set.{u1} α}}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s l) -> (forall {{s' : Set.{u1} α}}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s' l') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s s'))))
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) l l')) (forall {{s : Set.{u1} α}}, (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s l) -> (forall {{s' : Set.{u1} α}}, (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s' l') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s s'))))
-Case conversion may be inaccurate. Consider using '#align filter.inf_ne_bot_iff Filter.inf_neBot_iffₓ'. -/
theorem inf_neBot_iff :
NeBot (l ⊓ l') ↔ ∀ ⦃s : Set α⦄ (hs : s ∈ l) ⦃s'⦄ (hs' : s' ∈ l'), (s ∩ s').Nonempty :=
l.basis_sets.inf_neBot_iff
#align filter.inf_ne_bot_iff Filter.inf_neBot_iff
-/- warning: filter.inf_principal_ne_bot_iff -> Filter.inf_principal_neBot_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {s : Set.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l (Filter.principal.{u1} α s))) (forall (U : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) U l) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) U s)))
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {s : Set.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) l (Filter.principal.{u1} α s))) (forall (U : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) U l) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) U s)))
-Case conversion may be inaccurate. Consider using '#align filter.inf_principal_ne_bot_iff Filter.inf_principal_neBot_iffₓ'. -/
theorem inf_principal_neBot_iff {s : Set α} : NeBot (l ⊓ 𝓟 s) ↔ ∀ U ∈ l, (U ∩ s).Nonempty :=
l.basis_sets.inf_principal_neBot_iff
#align filter.inf_principal_ne_bot_iff Filter.inf_principal_neBot_iff
-/- warning: filter.mem_iff_inf_principal_compl -> Filter.mem_iff_inf_principal_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s f) (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))
-but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s f) (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toBot.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))))
-Case conversion may be inaccurate. Consider using '#align filter.mem_iff_inf_principal_compl Filter.mem_iff_inf_principal_complₓ'. -/
theorem mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∈ f ↔ f ⊓ 𝓟 (sᶜ) = ⊥ :=
by
refine' not_iff_not.1 ((inf_principal_ne_bot_iff.trans _).symm.trans ne_bot_iff)
@@ -1064,75 +743,33 @@ theorem mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∈ f ↔ f
inter_compl_nonempty_iff.2 fun hts => hs <| mem_of_superset ht hts⟩
#align filter.mem_iff_inf_principal_compl Filter.mem_iff_inf_principal_compl
-/- warning: filter.not_mem_iff_inf_principal_compl -> Filter.not_mem_iff_inf_principal_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Not (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s f)) (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s))))
-but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Not (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s f)) (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s))))
-Case conversion may be inaccurate. Consider using '#align filter.not_mem_iff_inf_principal_compl Filter.not_mem_iff_inf_principal_complₓ'. -/
theorem not_mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∉ f ↔ NeBot (f ⊓ 𝓟 (sᶜ)) :=
(not_congr mem_iff_inf_principal_compl).trans neBot_iff.symm
#align filter.not_mem_iff_inf_principal_compl Filter.not_mem_iff_inf_principal_compl
-/- warning: filter.disjoint_principal_right -> Filter.disjoint_principal_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) f (Filter.principal.{u1} α s)) (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f)
-but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) f (Filter.principal.{u1} α s)) (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s) f)
-Case conversion may be inaccurate. Consider using '#align filter.disjoint_principal_right Filter.disjoint_principal_rightₓ'. -/
@[simp]
theorem disjoint_principal_right {f : Filter α} {s : Set α} : Disjoint f (𝓟 s) ↔ sᶜ ∈ f := by
rw [mem_iff_inf_principal_compl, compl_compl, disjoint_iff]
#align filter.disjoint_principal_right Filter.disjoint_principal_right
-/- warning: filter.disjoint_principal_left -> Filter.disjoint_principal_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Filter.principal.{u1} α s) f) (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f)
-but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) (Filter.principal.{u1} α s) f) (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s) f)
-Case conversion may be inaccurate. Consider using '#align filter.disjoint_principal_left Filter.disjoint_principal_leftₓ'. -/
@[simp]
theorem disjoint_principal_left {f : Filter α} {s : Set α} : Disjoint (𝓟 s) f ↔ sᶜ ∈ f := by
rw [disjoint_comm, disjoint_principal_right]
#align filter.disjoint_principal_left Filter.disjoint_principal_left
-/- warning: filter.disjoint_principal_principal -> Filter.disjoint_principal_principal is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Filter.principal.{u1} α s) (Filter.principal.{u1} α t)) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t)
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) (Filter.principal.{u1} α s) (Filter.principal.{u1} α t)) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t)
-Case conversion may be inaccurate. Consider using '#align filter.disjoint_principal_principal Filter.disjoint_principal_principalₓ'. -/
@[simp]
theorem disjoint_principal_principal {s t : Set α} : Disjoint (𝓟 s) (𝓟 t) ↔ Disjoint s t := by
simp [← subset_compl_iff_disjoint_left]
#align filter.disjoint_principal_principal Filter.disjoint_principal_principal
-/- warning: disjoint.filter_principal -> Disjoint.filter_principal is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Filter.principal.{u1} α s) (Filter.principal.{u1} α t))
-but is expected to have type
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t) -> (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) (Filter.principal.{u1} α s) (Filter.principal.{u1} α t))
-Case conversion may be inaccurate. Consider using '#align disjoint.filter_principal Disjoint.filter_principalₓ'. -/
alias disjoint_principal_principal ↔ _ _root_.disjoint.filter_principal
#align disjoint.filter_principal Disjoint.filter_principal
-/- warning: filter.disjoint_pure_pure -> Filter.disjoint_pure_pure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {x : α} {y : α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α y)) (Ne.{succ u1} α x y)
-but is expected to have type
- forall {α : Type.{u1}} {x : α} {y : α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} α x) (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} α y)) (Ne.{succ u1} α x y)
-Case conversion may be inaccurate. Consider using '#align filter.disjoint_pure_pure Filter.disjoint_pure_pureₓ'. -/
@[simp]
theorem disjoint_pure_pure {x y : α} : Disjoint (pure x : Filter α) (pure y) ↔ x ≠ y := by
simp only [← principal_singleton, disjoint_principal_principal, disjoint_singleton]
#align filter.disjoint_pure_pure Filter.disjoint_pure_pure
-/- warning: filter.compl_diagonal_mem_prod -> Filter.compl_diagonal_mem_prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l₁ : Filter.{u1} α} {l₂ : Filter.{u1} α}, Iff (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.hasMem.{u1} (Prod.{u1, u1} α α)) (HasCompl.compl.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (Set.booleanAlgebra.{u1} (Prod.{u1, u1} α α))) (Set.diagonal.{u1} α)) (Filter.prod.{u1, u1} α α l₁ l₂)) (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) l₁ l₂)
-but is expected to have type
- forall {α : Type.{u1}} {l₁ : Filter.{u1} α} {l₂ : Filter.{u1} α}, Iff (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) (HasCompl.compl.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (Set.instBooleanAlgebraSet.{u1} (Prod.{u1, u1} α α))) (Set.diagonal.{u1} α)) (Filter.prod.{u1, u1} α α l₁ l₂)) (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) l₁ l₂)
-Case conversion may be inaccurate. Consider using '#align filter.compl_diagonal_mem_prod Filter.compl_diagonal_mem_prodₓ'. -/
@[simp]
theorem compl_diagonal_mem_prod {l₁ l₂ : Filter α} : diagonal αᶜ ∈ l₁ ×ᶠ l₂ ↔ Disjoint l₁ l₂ := by
simp only [mem_prod_iff, Filter.disjoint_iff, prod_subset_compl_diagonal_iff_disjoint]
@@ -1149,64 +786,28 @@ theorem HasBasis.disjoint_iff_right (h : l.HasBasis p s) :
disjoint_comm.trans h.disjoint_iff_leftₓ
#align filter.has_basis.disjoint_iff_right Filter.HasBasis.disjoint_iff_rightₓ
-/- warning: filter.le_iff_forall_inf_principal_compl -> Filter.le_iff_forall_inf_principal_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) f g) (forall (V : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) V g) -> (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) V))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α)))))
-but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) f g) (forall (V : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) V g) -> (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) V))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toBot.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))))
-Case conversion may be inaccurate. Consider using '#align filter.le_iff_forall_inf_principal_compl Filter.le_iff_forall_inf_principal_complₓ'. -/
theorem le_iff_forall_inf_principal_compl {f g : Filter α} : f ≤ g ↔ ∀ V ∈ g, f ⊓ 𝓟 (Vᶜ) = ⊥ :=
forall₂_congr fun _ _ => mem_iff_inf_principal_compl
#align filter.le_iff_forall_inf_principal_compl Filter.le_iff_forall_inf_principal_compl
-/- warning: filter.inf_ne_bot_iff_frequently_left -> Filter.inf_neBot_iff_frequently_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) f) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) g))
-but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) f) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) g))
-Case conversion may be inaccurate. Consider using '#align filter.inf_ne_bot_iff_frequently_left Filter.inf_neBot_iff_frequently_leftₓ'. -/
theorem inf_neBot_iff_frequently_left {f g : Filter α} :
NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ x in f, p x) → ∃ᶠ x in g, p x := by
simpa only [inf_ne_bot_iff, frequently_iff, exists_prop, and_comm']
#align filter.inf_ne_bot_iff_frequently_left Filter.inf_neBot_iff_frequently_left
-/- warning: filter.inf_ne_bot_iff_frequently_right -> Filter.inf_neBot_iff_frequently_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) g) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) f))
-but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) g) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) f))
-Case conversion may be inaccurate. Consider using '#align filter.inf_ne_bot_iff_frequently_right Filter.inf_neBot_iff_frequently_rightₓ'. -/
theorem inf_neBot_iff_frequently_right {f g : Filter α} :
NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ x in g, p x) → ∃ᶠ x in f, p x := by rw [inf_comm];
exact inf_ne_bot_iff_frequently_left
#align filter.inf_ne_bot_iff_frequently_right Filter.inf_neBot_iff_frequently_right
-/- warning: filter.has_basis.eq_binfi -> Filter.HasBasis.eq_biInf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Eq.{succ u1} (Filter.{u1} α) l (iInf.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (p i) (fun (_x : p i) => Filter.principal.{u1} α (s i)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Eq.{succ u2} (Filter.{u2} α) l (iInf.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => iInf.{u2, 0} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) (p i) (fun (_x : p i) => Filter.principal.{u2} α (s i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.eq_binfi Filter.HasBasis.eq_biInfₓ'. -/
theorem HasBasis.eq_biInf (h : l.HasBasis p s) : l = ⨅ (i) (_ : p i), 𝓟 (s i) :=
eq_biInf_of_mem_iff_exists_mem fun t => by simp only [h.mem_iff, mem_principal]
#align filter.has_basis.eq_binfi Filter.HasBasis.eq_biInf
-/- warning: filter.has_basis.eq_infi -> Filter.HasBasis.eq_iInf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l (fun (_x : ι) => True) s) -> (Eq.{succ u1} (Filter.{u1} α) l (iInf.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l (fun (_x : ι) => True) s) -> (Eq.{succ u2} (Filter.{u2} α) l (iInf.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => Filter.principal.{u2} α (s i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.eq_infi Filter.HasBasis.eq_iInfₓ'. -/
theorem HasBasis.eq_iInf (h : l.HasBasis (fun _ => True) s) : l = ⨅ i, 𝓟 (s i) := by
simpa only [iInf_true] using h.eq_binfi
#align filter.has_basis.eq_infi Filter.HasBasis.eq_iInf
-/- warning: filter.has_basis_infi_principal -> Filter.hasBasis_iInf_principal is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {s : ι -> (Set.{u1} α)}, (Directed.{u1, u2} (Set.{u1} α) ι (GE.ge.{u1} (Set.{u1} α) (Set.hasLe.{u1} α)) s) -> (forall [_inst_1 : Nonempty.{u2} ι], Filter.HasBasis.{u1, u2} α ι (iInf.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (_x : ι) => True) s)
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {s : ι -> (Set.{u2} α)}, (Directed.{u2, u1} (Set.{u2} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9263 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9265 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9263 x._@.Mathlib.Order.Filter.Bases._hyg.9265) s) -> (forall [_inst_1 : Nonempty.{u1} ι], Filter.HasBasis.{u2, u1} α ι (iInf.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => Filter.principal.{u2} α (s i))) (fun (_x : ι) => True) s)
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_principal Filter.hasBasis_iInf_principalₓ'. -/
theorem hasBasis_iInf_principal {s : ι → Set α} (h : Directed (· ≥ ·) s) [Nonempty ι] :
(⨅ i, 𝓟 (s i)).HasBasis (fun _ => True) s :=
⟨by
@@ -1216,12 +817,6 @@ theorem hasBasis_iInf_principal {s : ι → Set α} (h : Directed (· ≥ ·) s)
exact fun _ _ => principal_mono.2⟩
#align filter.has_basis_infi_principal Filter.hasBasis_iInf_principal
-/- warning: filter.has_basis_infi_principal_finite -> Filter.hasBasis_iInf_principal_finite is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Filter.HasBasis.{u1, succ u2} α (Set.{u2} ι) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (t : Set.{u2} ι) => Set.Finite.{u2} ι t) (fun (t : Set.{u2} ι) => Set.iInter.{u1, succ u2} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) => s i)))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Filter.HasBasis.{u1, succ u2} α (Set.{u2} ι) (iInf.{u1, succ u2} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (t : Set.{u2} ι) => Set.Finite.{u2} ι t) (fun (t : Set.{u2} ι) => Set.iInter.{u1, succ u2} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) i t) (fun (H : Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) i t) => s i)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_principal_finite Filter.hasBasis_iInf_principal_finiteₓ'. -/
/-- If `s : ι → set α` is an indexed family of sets, then finite intersections of `s i` form a basis
of `⨅ i, 𝓟 (s i)`. -/
theorem hasBasis_iInf_principal_finite {ι : Type _} (s : ι → Set α) :
@@ -1232,12 +827,6 @@ theorem hasBasis_iInf_principal_finite {ι : Type _} (s : ι → Set α) :
Finset.set_biInter_coe]
#align filter.has_basis_infi_principal_finite Filter.hasBasis_iInf_principal_finite
-/- warning: filter.has_basis_binfi_principal -> Filter.hasBasis_biInf_principal is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {s : β -> (Set.{u1} α)} {S : Set.{u2} β}, (DirectedOn.{u2} β (Order.Preimage.{succ u2, succ u1} β (Set.{u1} α) s (GE.ge.{u1} (Set.{u1} α) (Set.hasLe.{u1} α))) S) -> (Set.Nonempty.{u2} β S) -> (Filter.HasBasis.{u1, succ u2} α β (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) β (fun (i : β) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) => Filter.principal.{u1} α (s i)))) (fun (i : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {s : β -> (Set.{u2} α)} {S : Set.{u1} β}, (DirectedOn.{u1} β (Order.Preimage.{succ u1, succ u2} β (Set.{u2} α) s (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9496 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9498 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9496 x._@.Mathlib.Order.Filter.Bases._hyg.9498)) S) -> (Set.Nonempty.{u1} β S) -> (Filter.HasBasis.{u2, succ u1} α β (iInf.{u2, succ u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) β (fun (i : β) => iInf.{u2, 0} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) (fun (H : Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) => Filter.principal.{u2} α (s i)))) (fun (i : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) s)
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_principal Filter.hasBasis_biInf_principalₓ'. -/
theorem hasBasis_biInf_principal {s : β → Set α} {S : Set β} (h : DirectedOn (s ⁻¹'o (· ≥ ·)) S)
(ne : S.Nonempty) : (⨅ i ∈ S, 𝓟 (s i)).HasBasis (fun i => i ∈ S) s :=
⟨by
@@ -1247,34 +836,16 @@ theorem hasBasis_biInf_principal {s : β → Set α} {S : Set β} (h : DirectedO
exact fun _ _ => principal_mono.2⟩
#align filter.has_basis_binfi_principal Filter.hasBasis_biInf_principal
-/- warning: filter.has_basis_binfi_principal' -> Filter.hasBasis_biInf_principal' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (forall (i : ι), (p i) -> (forall (j : ι), (p j) -> (Exists.{succ u2} ι (fun (k : ι) => Exists.{0} (p k) (fun (h : p k) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s k) (s i)) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s k) (s j))))))) -> (Exists.{succ u2} ι (fun (i : ι) => p i)) -> (Filter.HasBasis.{u1, succ u2} α ι (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (p i) (fun (h : p i) => Filter.principal.{u1} α (s i)))) p s)
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (forall (i : ι), (p i) -> (forall (j : ι), (p j) -> (Exists.{succ u2} ι (fun (k : ι) => And (p k) (And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (s k) (s i)) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (s k) (s j))))))) -> (Exists.{succ u2} ι (fun (i : ι) => p i)) -> (Filter.HasBasis.{u1, succ u2} α ι (iInf.{u1, succ u2} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (p i) (fun (h : p i) => Filter.principal.{u1} α (s i)))) p s)
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_principal' Filter.hasBasis_biInf_principal'ₓ'. -/
theorem hasBasis_biInf_principal' {ι : Type _} {p : ι → Prop} {s : ι → Set α}
(h : ∀ i, p i → ∀ j, p j → ∃ (k : _)(h : p k), s k ⊆ s i ∧ s k ⊆ s j) (ne : ∃ i, p i) :
(⨅ (i) (h : p i), 𝓟 (s i)).HasBasis p s :=
Filter.hasBasis_biInf_principal h Ne
#align filter.has_basis_binfi_principal' Filter.hasBasis_biInf_principal'
-/- warning: filter.has_basis.map -> Filter.HasBasis.map is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} (f : α -> β), (Filter.HasBasis.{u1, u3} α ι l p s) -> (Filter.HasBasis.{u2, u3} β ι (Filter.map.{u1, u2} α β f l) p (fun (i : ι) => Set.image.{u1, u2} α β f (s i)))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} (f : α -> β), (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u1, u2} β ι (Filter.map.{u3, u1} α β f l) p (fun (i : ι) => Set.image.{u3, u1} α β f (s i)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.map Filter.HasBasis.mapₓ'. -/
theorem HasBasis.map (f : α → β) (hl : l.HasBasis p s) : (l.map f).HasBasis p fun i => f '' s i :=
⟨fun t => by simp only [mem_map, image_subset_iff, hl.mem_iff, preimage]⟩
#align filter.has_basis.map Filter.HasBasis.map
-/- warning: filter.has_basis.comap -> Filter.HasBasis.comap is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} (f : β -> α), (Filter.HasBasis.{u1, u3} α ι l p s) -> (Filter.HasBasis.{u2, u3} β ι (Filter.comap.{u2, u1} β α f l) p (fun (i : ι) => Set.preimage.{u2, u1} β α f (s i)))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} (f : β -> α), (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u1, u2} β ι (Filter.comap.{u1, u3} β α f l) p (fun (i : ι) => Set.preimage.{u1, u3} β α f (s i)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.comap Filter.HasBasis.comapₓ'. -/
theorem HasBasis.comap (f : β → α) (hl : l.HasBasis p s) :
(l.comap f).HasBasis p fun i => f ⁻¹' s i :=
⟨by
@@ -1294,12 +865,6 @@ theorem comap_hasBasis (f : α → β) (l : Filter β) :
#align filter.comap_has_basis Filter.comap_hasBasis
-/
-/- warning: filter.has_basis.forall_mem_mem -> Filter.HasBasis.forall_mem_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {x : α}, Iff (forall (t : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t)) (forall (i : ι), (p i) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (s i))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall {x : α}, Iff (forall (t : Set.{u2} α), (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x t)) (forall (i : ι), (p i) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (s i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.forall_mem_mem Filter.HasBasis.forall_mem_memₓ'. -/
theorem HasBasis.forall_mem_mem (h : HasBasis l p s) {x : α} :
(∀ t ∈ l, x ∈ t) ↔ ∀ i, p i → x ∈ s i :=
by
@@ -1307,12 +872,6 @@ theorem HasBasis.forall_mem_mem (h : HasBasis l p s) {x : α} :
exact ⟨fun h i hi => h (s i) i hi subset.rfl, fun h t i hi ht => ht (h i hi)⟩
#align filter.has_basis.forall_mem_mem Filter.HasBasis.forall_mem_mem
-/- warning: filter.has_basis.binfi_mem -> Filter.HasBasis.biInf_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} [_inst_1 : CompleteLattice.{u2} β] {f : (Set.{u1} α) -> β}, (Filter.HasBasis.{u1, u3} α ι l p s) -> (Monotone.{u1, u2} (Set.{u1} α) β (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) (PartialOrder.toPreorder.{u2} β (CompleteSemilatticeInf.toPartialOrder.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1))) f) -> (Eq.{succ u2} β (iInf.{u2, succ u1} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) (Set.{u1} α) (fun (t : Set.{u1} α) => iInf.{u2, 0} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) => f t))) (iInf.{u2, u3} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) ι (fun (i : ι) => iInf.{u2, 0} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) (p i) (fun (hi : p i) => f (s i)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} [_inst_1 : CompleteLattice.{u3} β] {f : (Set.{u2} α) -> β}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Monotone.{u2, u3} (Set.{u2} α) β (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α))))))) (PartialOrder.toPreorder.{u3} β (CompleteSemilatticeInf.toPartialOrder.{u3} β (CompleteLattice.toCompleteSemilatticeInf.{u3} β _inst_1))) f) -> (Eq.{succ u3} β (iInf.{u3, succ u2} β (CompleteLattice.toInfSet.{u3} β _inst_1) (Set.{u2} α) (fun (t : Set.{u2} α) => iInf.{u3, 0} β (CompleteLattice.toInfSet.{u3} β _inst_1) (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l) (fun (H : Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l) => f t))) (iInf.{u3, u1} β (CompleteLattice.toInfSet.{u3} β _inst_1) ι (fun (i : ι) => iInf.{u3, 0} β (CompleteLattice.toInfSet.{u3} β _inst_1) (p i) (fun (hi : p i) => f (s i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.binfi_mem Filter.HasBasis.biInf_memₓ'. -/
protected theorem HasBasis.biInf_mem [CompleteLattice β] {f : Set α → β} (h : HasBasis l p s)
(hf : Monotone f) : (⨅ t ∈ l, f t) = ⨅ (i) (hi : p i), f (s i) :=
le_antisymm (le_iInf₂ fun i hi => iInf₂_le (s i) (h.mem_of_mem hi)) <|
@@ -1321,23 +880,11 @@ protected theorem HasBasis.biInf_mem [CompleteLattice β] {f : Set α → β} (h
iInf₂_le_of_le i hpi (hf hi)
#align filter.has_basis.binfi_mem Filter.HasBasis.biInf_mem
-/- warning: filter.has_basis.bInter_mem -> Filter.HasBasis.biInter_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {f : (Set.{u1} α) -> (Set.{u2} β)}, (Filter.HasBasis.{u1, u3} α ι l p s) -> (Monotone.{u1, u2} (Set.{u1} α) (Set.{u2} β) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β))))))) f) -> (Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β (Set.{u1} α) (fun (t : Set.{u1} α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) => f t))) (Set.iInter.{u2, u3} β ι (fun (i : ι) => Set.iInter.{u2, 0} β (p i) (fun (hi : p i) => f (s i)))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {f : (Set.{u3} α) -> (Set.{u2} β)}, (Filter.HasBasis.{u3, u1} α ι l p s) -> (Monotone.{u3, u2} (Set.{u3} α) (Set.{u2} β) (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.instCompleteBooleanAlgebraSet.{u3} α))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.instCompleteBooleanAlgebraSet.{u2} β))))))) f) -> (Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u3} β (Set.{u3} α) (fun (t : Set.{u3} α) => Set.iInter.{u2, 0} β (Membership.mem.{u3, u3} (Set.{u3} α) (Filter.{u3} α) (instMembershipSetFilter.{u3} α) t l) (fun (H : Membership.mem.{u3, u3} (Set.{u3} α) (Filter.{u3} α) (instMembershipSetFilter.{u3} α) t l) => f t))) (Set.iInter.{u2, u1} β ι (fun (i : ι) => Set.iInter.{u2, 0} β (p i) (fun (hi : p i) => f (s i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_memₓ'. -/
protected theorem HasBasis.biInter_mem {f : Set α → Set β} (h : HasBasis l p s) (hf : Monotone f) :
(⋂ t ∈ l, f t) = ⋂ (i) (hi : p i), f (s i) :=
h.biInf_mem hf
#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_mem
-/- warning: filter.has_basis.sInter_sets -> Filter.HasBasis.sInter_sets is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Eq.{succ u1} (Set.{u1} α) (Set.sInter.{u1} α (Filter.sets.{u1} α l)) (Set.iInter.{u1, u2} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (p i) (fun (hi : p i) => s i))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Eq.{succ u2} (Set.{u2} α) (Set.sInter.{u2} α (Filter.sets.{u2} α l)) (Set.iInter.{u2, u1} α ι (fun (i : ι) => Set.iInter.{u2, 0} α (p i) (fun (hi : p i) => s i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_setsₓ'. -/
theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (hi : p i), s i := by
rw [sInter_eq_bInter]; exact h.bInter_mem monotone_id
#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_sets
@@ -1362,12 +909,6 @@ structure HasAntitoneBasis (l : Filter α) (s : ι'' → Set α) extends HasBasi
#align filter.has_antitone_basis Filter.HasAntitoneBasis
-/
-/- warning: filter.has_antitone_basis.map -> Filter.HasAntitoneBasis.map is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι'' : Type.{u3}} [_inst_1 : Preorder.{u3} ι''] {l : Filter.{u1} α} {s : ι'' -> (Set.{u1} α)} {m : α -> β}, (Filter.HasAntitoneBasis.{u1, u3} α ι'' _inst_1 l s) -> (Filter.HasAntitoneBasis.{u2, u3} β ι'' _inst_1 (Filter.map.{u1, u2} α β m l) (fun (n : ι'') => Set.image.{u1, u2} α β m (s n)))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {ι'' : Type.{u2}} [_inst_1 : Preorder.{u2} ι''] {l : Filter.{u3} α} {s : ι'' -> (Set.{u3} α)} {m : α -> β}, (Filter.HasAntitoneBasis.{u3, u2} α ι'' _inst_1 l s) -> (Filter.HasAntitoneBasis.{u1, u2} β ι'' _inst_1 (Filter.map.{u3, u1} α β m l) (fun (n : ι'') => Set.image.{u3, u1} α β m (s n)))
-Case conversion may be inaccurate. Consider using '#align filter.has_antitone_basis.map Filter.HasAntitoneBasis.mapₓ'. -/
theorem HasAntitoneBasis.map {l : Filter α} {s : ι'' → Set α} {m : α → β}
(hf : HasAntitoneBasis l s) : HasAntitoneBasis (map m l) fun n => m '' s n :=
⟨HasBasis.map _ hf.to_hasBasis, fun i j hij => image_subset _ <| hf.2 hij⟩
@@ -1385,12 +926,6 @@ theorem HasBasis.tendsto_left_iff (hla : la.HasBasis pa sa) :
simp only [tendsto, (hla.map f).le_iffₓ, image_subset_iff]; rfl
#align filter.has_basis.tendsto_left_iff Filter.HasBasis.tendsto_left_iffₓ
-/- warning: filter.has_basis.tendsto_right_iff -> Filter.HasBasis.tendsto_right_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι' : Sort.{u3}} {la : Filter.{u1} α} {lb : Filter.{u2} β} {pb : ι' -> Prop} {sb : ι' -> (Set.{u2} β)} {f : α -> β}, (Filter.HasBasis.{u2, u3} β ι' lb pb sb) -> (Iff (Filter.Tendsto.{u1, u2} α β f la lb) (forall (i : ι'), (pb i) -> (Filter.Eventually.{u1} α (fun (x : α) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (f x) (sb i)) la)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {ι' : Sort.{u2}} {la : Filter.{u1} α} {lb : Filter.{u3} β} {pb : ι' -> Prop} {sb : ι' -> (Set.{u3} β)} {f : α -> β}, (Filter.HasBasis.{u3, u2} β ι' lb pb sb) -> (Iff (Filter.Tendsto.{u1, u3} α β f la lb) (forall (i : ι'), (pb i) -> (Filter.Eventually.{u1} α (fun (x : α) => Membership.mem.{u3, u3} β (Set.{u3} β) (Set.instMembershipSet.{u3} β) (f x) (sb i)) la)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.tendsto_right_iff Filter.HasBasis.tendsto_right_iffₓ'. -/
theorem HasBasis.tendsto_right_iff (hlb : lb.HasBasis pb sb) :
Tendsto f la lb ↔ ∀ (i) (hi : pb i), ∀ᶠ x in la, f x ∈ sb i := by
simpa only [tendsto, hlb.ge_iff, mem_map, Filter.Eventually]
@@ -1406,12 +941,6 @@ theorem Tendsto.basis_left (H : Tendsto f la lb) (hla : la.HasBasis pa sa) :
hla.tendsto_left_iffₓ.1 H
#align filter.tendsto.basis_left Filter.Tendsto.basis_leftₓ
-/- warning: filter.tendsto.basis_right -> Filter.Tendsto.basis_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι' : Sort.{u3}} {la : Filter.{u1} α} {lb : Filter.{u2} β} {pb : ι' -> Prop} {sb : ι' -> (Set.{u2} β)} {f : α -> β}, (Filter.Tendsto.{u1, u2} α β f la lb) -> (Filter.HasBasis.{u2, u3} β ι' lb pb sb) -> (forall (i : ι'), (pb i) -> (Filter.Eventually.{u1} α (fun (x : α) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (f x) (sb i)) la))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {ι' : Sort.{u1}} {la : Filter.{u3} α} {lb : Filter.{u2} β} {pb : ι' -> Prop} {sb : ι' -> (Set.{u2} β)} {f : α -> β}, (Filter.Tendsto.{u3, u2} α β f la lb) -> (Filter.HasBasis.{u2, u1} β ι' lb pb sb) -> (forall (i : ι'), (pb i) -> (Filter.Eventually.{u3} α (fun (x : α) => Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) (f x) (sb i)) la))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.basis_right Filter.Tendsto.basis_rightₓ'. -/
theorem Tendsto.basis_right (H : Tendsto f la lb) (hlb : lb.HasBasis pb sb) :
∀ (i) (hi : pb i), ∀ᶠ x in la, f x ∈ sb i :=
hlb.tendsto_right_iff.1 H
@@ -1423,24 +952,12 @@ theorem Tendsto.basis_both (H : Tendsto f la lb) (hla : la.HasBasis pa sa)
(hla.tendsto_iffₓ hlb).1 H
#align filter.tendsto.basis_both Filter.Tendsto.basis_bothₓ
-/- warning: filter.has_basis.prod_pprod -> Filter.HasBasis.prod_pprod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Sort.{u3}} {ι' : Sort.{u4}} {la : Filter.{u1} α} {pa : ι -> Prop} {sa : ι -> (Set.{u1} α)} {lb : Filter.{u2} β} {pb : ι' -> Prop} {sb : ι' -> (Set.{u2} β)}, (Filter.HasBasis.{u1, u3} α ι la pa sa) -> (Filter.HasBasis.{u2, u4} β ι' lb pb sb) -> (Filter.HasBasis.{max u1 u2, max 1 u3 u4} (Prod.{u1, u2} α β) (PProd.{u3, u4} ι ι') (Filter.prod.{u1, u2} α β la lb) (fun (i : PProd.{u3, u4} ι ι') => And (pa (PProd.fst.{u3, u4} ι ι' i)) (pb (PProd.snd.{u3, u4} ι ι' i))) (fun (i : PProd.{u3, u4} ι ι') => Set.prod.{u1, u2} α β (sa (PProd.fst.{u3, u4} ι ι' i)) (sb (PProd.snd.{u3, u4} ι ι' i))))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u2}} {ι : Sort.{u3}} {ι' : Sort.{u1}} {la : Filter.{u4} α} {pa : ι -> Prop} {sa : ι -> (Set.{u4} α)} {lb : Filter.{u2} β} {pb : ι' -> Prop} {sb : ι' -> (Set.{u2} β)}, (Filter.HasBasis.{u4, u3} α ι la pa sa) -> (Filter.HasBasis.{u2, u1} β ι' lb pb sb) -> (Filter.HasBasis.{max u4 u2, max (max 1 u3) u1} (Prod.{u4, u2} α β) (PProd.{u3, u1} ι ι') (Filter.prod.{u4, u2} α β la lb) (fun (i : PProd.{u3, u1} ι ι') => And (pa (PProd.fst.{u3, u1} ι ι' i)) (pb (PProd.snd.{u3, u1} ι ι' i))) (fun (i : PProd.{u3, u1} ι ι') => Set.prod.{u4, u2} α β (sa (PProd.fst.{u3, u1} ι ι' i)) (sb (PProd.snd.{u3, u1} ι ι' i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.prod_pprod Filter.HasBasis.prod_pprodₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem HasBasis.prod_pprod (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
(la ×ᶠ lb).HasBasis (fun i : PProd ι ι' => pa i.1 ∧ pb i.2) fun i => sa i.1 ×ˢ sb i.2 :=
(hla.comap Prod.fst).inf' (hlb.comap Prod.snd)
#align filter.has_basis.prod_pprod Filter.HasBasis.prod_pprod
-/- warning: filter.has_basis.prod -> Filter.HasBasis.prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {la : Filter.{u1} α} {lb : Filter.{u2} β} {ι : Type.{u3}} {ι' : Type.{u4}} {pa : ι -> Prop} {sa : ι -> (Set.{u1} α)} {pb : ι' -> Prop} {sb : ι' -> (Set.{u2} β)}, (Filter.HasBasis.{u1, succ u3} α ι la pa sa) -> (Filter.HasBasis.{u2, succ u4} β ι' lb pb sb) -> (Filter.HasBasis.{max u1 u2, max (succ u3) (succ u4)} (Prod.{u1, u2} α β) (Prod.{u3, u4} ι ι') (Filter.prod.{u1, u2} α β la lb) (fun (i : Prod.{u3, u4} ι ι') => And (pa (Prod.fst.{u3, u4} ι ι' i)) (pb (Prod.snd.{u3, u4} ι ι' i))) (fun (i : Prod.{u3, u4} ι ι') => Set.prod.{u1, u2} α β (sa (Prod.fst.{u3, u4} ι ι' i)) (sb (Prod.snd.{u3, u4} ι ι' i))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {la : Filter.{u2} α} {lb : Filter.{u1} β} {ι : Type.{u4}} {ι' : Type.{u3}} {pa : ι -> Prop} {sa : ι -> (Set.{u2} α)} {pb : ι' -> Prop} {sb : ι' -> (Set.{u1} β)}, (Filter.HasBasis.{u2, succ u4} α ι la pa sa) -> (Filter.HasBasis.{u1, succ u3} β ι' lb pb sb) -> (Filter.HasBasis.{max u2 u1, max (succ u4) (succ u3)} (Prod.{u2, u1} α β) (Prod.{u4, u3} ι ι') (Filter.prod.{u2, u1} α β la lb) (fun (i : Prod.{u4, u3} ι ι') => And (pa (Prod.fst.{u4, u3} ι ι' i)) (pb (Prod.snd.{u4, u3} ι ι' i))) (fun (i : Prod.{u4, u3} ι ι') => Set.prod.{u2, u1} α β (sa (Prod.fst.{u4, u3} ι ι' i)) (sb (Prod.snd.{u4, u3} ι ι' i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.prod Filter.HasBasis.prodₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem HasBasis.prod {ι ι' : Type _} {pa : ι → Prop} {sa : ι → Set α} {pb : ι' → Prop}
{sb : ι' → Set β} (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
@@ -1448,12 +965,6 @@ theorem HasBasis.prod {ι ι' : Type _} {pa : ι → Prop} {sa : ι → Set α}
(hla.comap Prod.fst).inf (hlb.comap Prod.snd)
#align filter.has_basis.prod Filter.HasBasis.prod
-/- warning: filter.has_basis.prod_same_index -> Filter.HasBasis.prod_same_index is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Sort.{u3}} {la : Filter.{u1} α} {sa : ι -> (Set.{u1} α)} {lb : Filter.{u2} β} {p : ι -> Prop} {sb : ι -> (Set.{u2} β)}, (Filter.HasBasis.{u1, u3} α ι la p sa) -> (Filter.HasBasis.{u2, u3} β ι lb p sb) -> (forall {i : ι} {j : ι}, (p i) -> (p j) -> (Exists.{u3} ι (fun (k : ι) => And (p k) (And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (sa k) (sa i)) (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) (sb k) (sb j)))))) -> (Filter.HasBasis.{max u1 u2, u3} (Prod.{u1, u2} α β) ι (Filter.prod.{u1, u2} α β la lb) p (fun (i : ι) => Set.prod.{u1, u2} α β (sa i) (sb i)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {ι : Sort.{u1}} {la : Filter.{u2} α} {sa : ι -> (Set.{u2} α)} {lb : Filter.{u3} β} {p : ι -> Prop} {sb : ι -> (Set.{u3} β)}, (Filter.HasBasis.{u2, u1} α ι la p sa) -> (Filter.HasBasis.{u3, u1} β ι lb p sb) -> (forall {i : ι} {j : ι}, (p i) -> (p j) -> (Exists.{u1} ι (fun (k : ι) => And (p k) (And (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (sa k) (sa i)) (HasSubset.Subset.{u3} (Set.{u3} β) (Set.instHasSubsetSet.{u3} β) (sb k) (sb j)))))) -> (Filter.HasBasis.{max u2 u3, u1} (Prod.{u2, u3} α β) ι (Filter.prod.{u2, u3} α β la lb) p (fun (i : ι) => Set.prod.{u2, u3} α β (sa i) (sb i)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.prod_same_index Filter.HasBasis.prod_same_indexₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem HasBasis.prod_same_index {p : ι → Prop} {sb : ι → Set β} (hla : la.HasBasis p sa)
@@ -1469,12 +980,6 @@ theorem HasBasis.prod_same_index {p : ι → Prop} {sb : ι → Set β} (hla : l
exact ⟨⟨i, i⟩, ⟨hi, hi⟩, h⟩
#align filter.has_basis.prod_same_index Filter.HasBasis.prod_same_index
-/- warning: filter.has_basis.prod_same_index_mono -> Filter.HasBasis.prod_same_index_mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {la : Filter.{u1} α} {lb : Filter.{u2} β} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u3} ι] {p : ι -> Prop} {sa : ι -> (Set.{u1} α)} {sb : ι -> (Set.{u2} β)}, (Filter.HasBasis.{u1, succ u3} α ι la p sa) -> (Filter.HasBasis.{u2, succ u3} β ι lb p sb) -> (MonotoneOn.{u3, u1} ι (Set.{u1} α) (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (LinearOrder.toLattice.{u3} ι _inst_1)))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) sa (setOf.{u3} ι (fun (i : ι) => p i))) -> (MonotoneOn.{u3, u2} ι (Set.{u2} β) (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (LinearOrder.toLattice.{u3} ι _inst_1)))) (PartialOrder.toPreorder.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β))))))) sb (setOf.{u3} ι (fun (i : ι) => p i))) -> (Filter.HasBasis.{max u1 u2, succ u3} (Prod.{u1, u2} α β) ι (Filter.prod.{u1, u2} α β la lb) p (fun (i : ι) => Set.prod.{u1, u2} α β (sa i) (sb i)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {la : Filter.{u2} α} {lb : Filter.{u1} β} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u3} ι] {p : ι -> Prop} {sa : ι -> (Set.{u2} α)} {sb : ι -> (Set.{u1} β)}, (Filter.HasBasis.{u2, succ u3} α ι la p sa) -> (Filter.HasBasis.{u1, succ u3} β ι lb p sb) -> (MonotoneOn.{u3, u2} ι (Set.{u2} α) (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (DistribLattice.toLattice.{u3} ι (instDistribLattice.{u3} ι _inst_1))))) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α))))))) sa (setOf.{u3} ι (fun (i : ι) => p i))) -> (MonotoneOn.{u3, u1} ι (Set.{u1} β) (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (DistribLattice.toLattice.{u3} ι (instDistribLattice.{u3} ι _inst_1))))) (PartialOrder.toPreorder.{u1} (Set.{u1} β) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} β) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β))))))) sb (setOf.{u3} ι (fun (i : ι) => p i))) -> (Filter.HasBasis.{max u2 u1, succ u3} (Prod.{u2, u1} α β) ι (Filter.prod.{u2, u1} α β la lb) p (fun (i : ι) => Set.prod.{u2, u1} α β (sa i) (sb i)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.prod_same_index_mono Filter.HasBasis.prod_same_index_monoₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem HasBasis.prod_same_index_mono {ι : Type _} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
{sb : ι → Set β} (hla : la.HasBasis p sa) (hlb : lb.HasBasis p sb)
@@ -1485,12 +990,6 @@ theorem HasBasis.prod_same_index_mono {ι : Type _} [LinearOrder ι] {p : ι →
⟨min i j, this, hsa this hi <| min_le_left _ _, hsb this hj <| min_le_right _ _⟩
#align filter.has_basis.prod_same_index_mono Filter.HasBasis.prod_same_index_mono
-/- warning: filter.has_basis.prod_same_index_anti -> Filter.HasBasis.prod_same_index_anti is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {la : Filter.{u1} α} {lb : Filter.{u2} β} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u3} ι] {p : ι -> Prop} {sa : ι -> (Set.{u1} α)} {sb : ι -> (Set.{u2} β)}, (Filter.HasBasis.{u1, succ u3} α ι la p sa) -> (Filter.HasBasis.{u2, succ u3} β ι lb p sb) -> (AntitoneOn.{u3, u1} ι (Set.{u1} α) (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (LinearOrder.toLattice.{u3} ι _inst_1)))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) sa (setOf.{u3} ι (fun (i : ι) => p i))) -> (AntitoneOn.{u3, u2} ι (Set.{u2} β) (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (LinearOrder.toLattice.{u3} ι _inst_1)))) (PartialOrder.toPreorder.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β))))))) sb (setOf.{u3} ι (fun (i : ι) => p i))) -> (Filter.HasBasis.{max u1 u2, succ u3} (Prod.{u1, u2} α β) ι (Filter.prod.{u1, u2} α β la lb) p (fun (i : ι) => Set.prod.{u1, u2} α β (sa i) (sb i)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {la : Filter.{u2} α} {lb : Filter.{u1} β} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u3} ι] {p : ι -> Prop} {sa : ι -> (Set.{u2} α)} {sb : ι -> (Set.{u1} β)}, (Filter.HasBasis.{u2, succ u3} α ι la p sa) -> (Filter.HasBasis.{u1, succ u3} β ι lb p sb) -> (AntitoneOn.{u3, u2} ι (Set.{u2} α) (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (DistribLattice.toLattice.{u3} ι (instDistribLattice.{u3} ι _inst_1))))) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α))))))) sa (setOf.{u3} ι (fun (i : ι) => p i))) -> (AntitoneOn.{u3, u1} ι (Set.{u1} β) (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (DistribLattice.toLattice.{u3} ι (instDistribLattice.{u3} ι _inst_1))))) (PartialOrder.toPreorder.{u1} (Set.{u1} β) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} β) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β))))))) sb (setOf.{u3} ι (fun (i : ι) => p i))) -> (Filter.HasBasis.{max u2 u1, succ u3} (Prod.{u2, u1} α β) ι (Filter.prod.{u2, u1} α β la lb) p (fun (i : ι) => Set.prod.{u2, u1} α β (sa i) (sb i)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.prod_same_index_anti Filter.HasBasis.prod_same_index_antiₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem HasBasis.prod_same_index_anti {ι : Type _} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
{sb : ι → Set β} (hla : la.HasBasis p sa) (hlb : lb.HasBasis p sb)
@@ -1499,12 +998,6 @@ theorem HasBasis.prod_same_index_anti {ι : Type _} [LinearOrder ι] {p : ι →
@HasBasis.prod_same_index_mono _ _ _ _ ιᵒᵈ _ _ _ _ hla hlb hsa.dual_left hsb.dual_left
#align filter.has_basis.prod_same_index_anti Filter.HasBasis.prod_same_index_anti
-/- warning: filter.has_basis.prod_self -> Filter.HasBasis.prod_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {la : Filter.{u1} α} {pa : ι -> Prop} {sa : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι la pa sa) -> (Filter.HasBasis.{u1, u2} (Prod.{u1, u1} α α) ι (Filter.prod.{u1, u1} α α la la) pa (fun (i : ι) => Set.prod.{u1, u1} α α (sa i) (sa i)))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {la : Filter.{u2} α} {pa : ι -> Prop} {sa : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι la pa sa) -> (Filter.HasBasis.{u2, u1} (Prod.{u2, u2} α α) ι (Filter.prod.{u2, u2} α α la la) pa (fun (i : ι) => Set.prod.{u2, u2} α α (sa i) (sa i)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.prod_self Filter.HasBasis.prod_selfₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem HasBasis.prod_self (hl : la.HasBasis pa sa) :
(la ×ᶠ la).HasBasis pa fun i => sa i ×ˢ sa i :=
@@ -1513,23 +1006,11 @@ theorem HasBasis.prod_self (hl : la.HasBasis pa sa) :
hl.mem_iff.1 (inter_mem (hl.mem_of_mem hi) (hl.mem_of_mem hj))
#align filter.has_basis.prod_self Filter.HasBasis.prod_self
-/- warning: filter.mem_prod_self_iff -> Filter.mem_prod_self_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {la : Filter.{u1} α} {s : Set.{u1} (Prod.{u1, u1} α α)}, Iff (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.hasMem.{u1} (Prod.{u1, u1} α α)) s (Filter.prod.{u1, u1} α α la la)) (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => Exists.{0} (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t la) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t la) => HasSubset.Subset.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasSubset.{u1} (Prod.{u1, u1} α α)) (Set.prod.{u1, u1} α α t t) s)))
-but is expected to have type
- forall {α : Type.{u1}} {la : Filter.{u1} α} {s : Set.{u1} (Prod.{u1, u1} α α)}, Iff (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) s (Filter.prod.{u1, u1} α α la la)) (Exists.{succ u1} (Set.{u1} α) (fun (t : Set.{u1} α) => And (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) t la) (HasSubset.Subset.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (Set.instHasSubsetSet.{u1} (Prod.{u1, u1} α α)) (Set.prod.{u1, u1} α α t t) s)))
-Case conversion may be inaccurate. Consider using '#align filter.mem_prod_self_iff Filter.mem_prod_self_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem mem_prod_self_iff {s} : s ∈ la ×ᶠ la ↔ ∃ t ∈ la, t ×ˢ t ⊆ s :=
la.basis_sets.prod_self.mem_iff
#align filter.mem_prod_self_iff Filter.mem_prod_self_iff
-/- warning: filter.has_antitone_basis.prod -> Filter.HasAntitoneBasis.prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u3} ι] {f : Filter.{u1} α} {g : Filter.{u2} β} {s : ι -> (Set.{u1} α)} {t : ι -> (Set.{u2} β)}, (Filter.HasAntitoneBasis.{u1, u3} α ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (LinearOrder.toLattice.{u3} ι _inst_1)))) f s) -> (Filter.HasAntitoneBasis.{u2, u3} β ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (LinearOrder.toLattice.{u3} ι _inst_1)))) g t) -> (Filter.HasAntitoneBasis.{max u1 u2, u3} (Prod.{u1, u2} α β) ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (LinearOrder.toLattice.{u3} ι _inst_1)))) (Filter.prod.{u1, u2} α β f g) (fun (n : ι) => Set.prod.{u1, u2} α β (s n) (t n)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {ι : Type.{u3}} [_inst_1 : LinearOrder.{u3} ι] {f : Filter.{u2} α} {g : Filter.{u1} β} {s : ι -> (Set.{u2} α)} {t : ι -> (Set.{u1} β)}, (Filter.HasAntitoneBasis.{u2, u3} α ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (DistribLattice.toLattice.{u3} ι (instDistribLattice.{u3} ι _inst_1))))) f s) -> (Filter.HasAntitoneBasis.{u1, u3} β ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (DistribLattice.toLattice.{u3} ι (instDistribLattice.{u3} ι _inst_1))))) g t) -> (Filter.HasAntitoneBasis.{max u1 u2, u3} (Prod.{u2, u1} α β) ι (PartialOrder.toPreorder.{u3} ι (SemilatticeInf.toPartialOrder.{u3} ι (Lattice.toSemilatticeInf.{u3} ι (DistribLattice.toLattice.{u3} ι (instDistribLattice.{u3} ι _inst_1))))) (Filter.prod.{u2, u1} α β f g) (fun (n : ι) => Set.prod.{u2, u1} α β (s n) (t n)))
-Case conversion may be inaccurate. Consider using '#align filter.has_antitone_basis.prod Filter.HasAntitoneBasis.prodₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
theorem HasAntitoneBasis.prod {ι : Type _} [LinearOrder ι] {f : Filter α} {g : Filter β}
{s : ι → Set α} {t : ι → Set β} (hf : HasAntitoneBasis f s) (hg : HasAntitoneBasis g t) :
@@ -1537,12 +1018,6 @@ theorem HasAntitoneBasis.prod {ι : Type _} [LinearOrder ι] {f : Filter α} {g
⟨hf.1.prod_same_index_anti hg.1 (hf.2.AntitoneOn _) (hg.2.AntitoneOn _), hf.2.set_prod hg.2⟩
#align filter.has_antitone_basis.prod Filter.HasAntitoneBasis.prod
-/- warning: filter.has_basis.coprod -> Filter.HasBasis.coprod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {la : Filter.{u1} α} {lb : Filter.{u2} β} {ι : Type.{u3}} {ι' : Type.{u4}} {pa : ι -> Prop} {sa : ι -> (Set.{u1} α)} {pb : ι' -> Prop} {sb : ι' -> (Set.{u2} β)}, (Filter.HasBasis.{u1, succ u3} α ι la pa sa) -> (Filter.HasBasis.{u2, succ u4} β ι' lb pb sb) -> (Filter.HasBasis.{max u1 u2, max (succ u3) (succ u4)} (Prod.{u1, u2} α β) (Prod.{u3, u4} ι ι') (Filter.coprod.{u1, u2} α β la lb) (fun (i : Prod.{u3, u4} ι ι') => And (pa (Prod.fst.{u3, u4} ι ι' i)) (pb (Prod.snd.{u3, u4} ι ι' i))) (fun (i : Prod.{u3, u4} ι ι') => Union.union.{max u1 u2} (Set.{max u1 u2} (Prod.{u1, u2} α β)) (Set.hasUnion.{max u1 u2} (Prod.{u1, u2} α β)) (Set.preimage.{max u1 u2, u1} (Prod.{u1, u2} α β) α (Prod.fst.{u1, u2} α β) (sa (Prod.fst.{u3, u4} ι ι' i))) (Set.preimage.{max u1 u2, u2} (Prod.{u1, u2} α β) β (Prod.snd.{u1, u2} α β) (sb (Prod.snd.{u3, u4} ι ι' i)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {la : Filter.{u2} α} {lb : Filter.{u1} β} {ι : Type.{u4}} {ι' : Type.{u3}} {pa : ι -> Prop} {sa : ι -> (Set.{u2} α)} {pb : ι' -> Prop} {sb : ι' -> (Set.{u1} β)}, (Filter.HasBasis.{u2, succ u4} α ι la pa sa) -> (Filter.HasBasis.{u1, succ u3} β ι' lb pb sb) -> (Filter.HasBasis.{max u2 u1, max (succ u4) (succ u3)} (Prod.{u2, u1} α β) (Prod.{u4, u3} ι ι') (Filter.coprod.{u2, u1} α β la lb) (fun (i : Prod.{u4, u3} ι ι') => And (pa (Prod.fst.{u4, u3} ι ι' i)) (pb (Prod.snd.{u4, u3} ι ι' i))) (fun (i : Prod.{u4, u3} ι ι') => Union.union.{max u2 u1} (Set.{max u2 u1} (Prod.{u2, u1} α β)) (Set.instUnionSet.{max u2 u1} (Prod.{u2, u1} α β)) (Set.preimage.{max u2 u1, u2} (Prod.{u2, u1} α β) α (Prod.fst.{u2, u1} α β) (sa (Prod.fst.{u4, u3} ι ι' i))) (Set.preimage.{max u2 u1, u1} (Prod.{u2, u1} α β) β (Prod.snd.{u2, u1} α β) (sb (Prod.snd.{u4, u3} ι ι' i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.coprod Filter.HasBasis.coprodₓ'. -/
theorem HasBasis.coprod {ι ι' : Type _} {pa : ι → Prop} {sa : ι → Set α} {pb : ι' → Prop}
{sb : ι' → Set β} (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
(la.coprod lb).HasBasis (fun i : ι × ι' => pa i.1 ∧ pb i.2) fun i =>
@@ -1552,12 +1027,6 @@ theorem HasBasis.coprod {ι ι' : Type _} {pa : ι → Prop} {sa : ι → Set α
end TwoTypes
-/- warning: filter.map_sigma_mk_comap -> Filter.map_sigma_mk_comap is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {π : α -> Type.{u3}} {π' : β -> Type.{u4}} {f : α -> β}, (Function.Injective.{succ u1, succ u2} α β f) -> (forall (g : forall (a : α), (π a) -> (π' (f a))) (a : α) (l : Filter.{u4} (π' (f a))), Eq.{succ (max u1 u3)} (Filter.{max u1 u3} (Sigma.{u1, u3} α (fun (a : α) => π a))) (Filter.map.{u3, max u1 u3} (π a) (Sigma.{u1, u3} α (fun (a : α) => π a)) (Sigma.mk.{u1, u3} α (fun (a : α) => π a) a) (Filter.comap.{u3, u4} (π a) (π' (f a)) (g a) l)) (Filter.comap.{max u1 u3, max u2 u4} (Sigma.{u1, u3} α (fun (a : α) => π a)) (Sigma.{u2, u4} β π') (Sigma.map.{u1, u2, u3, u4} α β (fun (a : α) => π a) π' f g) (Filter.map.{u4, max u2 u4} (π' (f a)) (Sigma.{u2, u4} β π') (Sigma.mk.{u2, u4} β π' (f a)) l)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {π : α -> Type.{u4}} {π' : β -> Type.{u3}} {f : α -> β}, (Function.Injective.{succ u2, succ u1} α β f) -> (forall (g : forall (a : α), (π a) -> (π' (f a))) (a : α) (l : Filter.{u3} (π' (f a))), Eq.{max (succ u2) (succ u4)} (Filter.{max u2 u4} (Sigma.{u2, u4} α π)) (Filter.map.{u4, max u2 u4} (π a) (Sigma.{u2, u4} α π) (Sigma.mk.{u2, u4} α π a) (Filter.comap.{u4, u3} (π a) (π' (f a)) (g a) l)) (Filter.comap.{max u4 u2, max u3 u1} (Sigma.{u2, u4} α (fun (a : α) => π a)) (Sigma.{u1, u3} β π') (Sigma.map.{u2, u1, u4, u3} α β (fun (a : α) => π a) π' f g) (Filter.map.{u3, max u1 u3} (π' (f a)) (Sigma.{u1, u3} β π') (Sigma.mk.{u1, u3} β π' (f a)) l)))
-Case conversion may be inaccurate. Consider using '#align filter.map_sigma_mk_comap Filter.map_sigma_mk_comapₓ'. -/
theorem map_sigma_mk_comap {π : α → Type _} {π' : β → Type _} {f : α → β}
(hf : Function.Injective f) (g : ∀ a, π a → π' (f a)) (a : α) (l : Filter (π' (f a))) :
map (Sigma.mk a) (comap (g a) l) = comap (Sigma.map f g) (map (Sigma.mk (f a)) l) :=
@@ -1617,23 +1086,11 @@ instance Nat.inhabitedCountableFilterBasis : Inhabited (CountableFilterBasis ℕ
#align filter.nat.inhabited_countable_filter_basis Filter.Nat.inhabitedCountableFilterBasis
-/
-/- warning: filter.has_countable_basis.is_countably_generated -> Filter.HasCountableBasis.isCountablyGenerated is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {f : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasCountableBasis.{u1, u2} α ι f p s) -> (Filter.IsCountablyGenerated.{u1} α f)
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} {f : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasCountableBasis.{u2, u1} α ι f p s) -> (Filter.IsCountablyGenerated.{u2} α f)
-Case conversion may be inaccurate. Consider using '#align filter.has_countable_basis.is_countably_generated Filter.HasCountableBasis.isCountablyGeneratedₓ'. -/
theorem HasCountableBasis.isCountablyGenerated {f : Filter α} {p : ι → Prop} {s : ι → Set α}
(h : f.HasCountableBasis p s) : f.IsCountablyGenerated :=
⟨⟨{ t | ∃ i, p i ∧ s i = t }, h.Countable.image s, h.to_hasBasis.eq_generate⟩⟩
#align filter.has_countable_basis.is_countably_generated Filter.HasCountableBasis.isCountablyGenerated
-/- warning: filter.antitone_seq_of_seq -> Filter.antitone_seq_of_seq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (s : Nat -> (Set.{u1} α)), Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (t : Nat -> (Set.{u1} α)) => And (Antitone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) t) (Eq.{succ u1} (Filter.{u1} α) (iInf.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (s i))) (iInf.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (t i)))))
-but is expected to have type
- forall {α : Type.{u1}} (s : Nat -> (Set.{u1} α)), Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (t : Nat -> (Set.{u1} α)) => And (Antitone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) t) (Eq.{succ u1} (Filter.{u1} α) (iInf.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (s i))) (iInf.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (t i)))))
-Case conversion may be inaccurate. Consider using '#align filter.antitone_seq_of_seq Filter.antitone_seq_of_seqₓ'. -/
theorem antitone_seq_of_seq (s : ℕ → Set α) :
∃ t : ℕ → Set α, Antitone t ∧ (⨅ i, 𝓟 <| s i) = ⨅ i, 𝓟 (t i) :=
by
@@ -1645,24 +1102,12 @@ theorem antitone_seq_of_seq (s : ℕ → Set α) :
· apply iInf_le_of_le i _; rw [principal_mono]; intro a; simp; intro h; apply h; rfl
#align filter.antitone_seq_of_seq Filter.antitone_seq_of_seq
-/- warning: filter.countable_binfi_eq_infi_seq -> Filter.countable_biInf_eq_iInf_seq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] {B : Set.{u2} ι}, (Set.Countable.{u2} ι B) -> (Set.Nonempty.{u2} ι B) -> (forall (f : ι -> α), Exists.{succ u2} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u1} α (iInf.{u1, succ u2} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) ι (fun (t : ι) => iInf.{u1, 0} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) => f t))) (iInf.{u1, 1} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) Nat (fun (i : Nat) => f (x i)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] {B : Set.{u1} ι}, (Set.Countable.{u1} ι B) -> (Set.Nonempty.{u1} ι B) -> (forall (f : ι -> α), Exists.{succ u1} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u2} α (iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (t : ι) => iInf.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) => f t))) (iInf.{u2, 1} α (CompleteLattice.toInfSet.{u2} α _inst_1) Nat (fun (i : Nat) => f (x i)))))
-Case conversion may be inaccurate. Consider using '#align filter.countable_binfi_eq_infi_seq Filter.countable_biInf_eq_iInf_seqₓ'. -/
theorem countable_biInf_eq_iInf_seq [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
(Bne : B.Nonempty) (f : ι → α) : ∃ x : ℕ → ι, (⨅ t ∈ B, f t) = ⨅ i, f (x i) :=
let ⟨g, hg⟩ := Bcbl.exists_eq_range Bne
⟨g, hg.symm ▸ iInf_range⟩
#align filter.countable_binfi_eq_infi_seq Filter.countable_biInf_eq_iInf_seq
-/- warning: filter.countable_binfi_eq_infi_seq' -> Filter.countable_biInf_eq_iInf_seq' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] {B : Set.{u2} ι}, (Set.Countable.{u2} ι B) -> (forall (f : ι -> α) {i₀ : ι}, (Eq.{succ u1} α (f i₀) (Top.top.{u1} α (CompleteLattice.toHasTop.{u1} α _inst_1))) -> (Exists.{succ u2} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u1} α (iInf.{u1, succ u2} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) ι (fun (t : ι) => iInf.{u1, 0} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) => f t))) (iInf.{u1, 1} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) Nat (fun (i : Nat) => f (x i))))))
-but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] {B : Set.{u1} ι}, (Set.Countable.{u1} ι B) -> (forall (f : ι -> α) {i₀ : ι}, (Eq.{succ u2} α (f i₀) (Top.top.{u2} α (CompleteLattice.toTop.{u2} α _inst_1))) -> (Exists.{succ u1} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u2} α (iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (t : ι) => iInf.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) => f t))) (iInf.{u2, 1} α (CompleteLattice.toInfSet.{u2} α _inst_1) Nat (fun (i : Nat) => f (x i))))))
-Case conversion may be inaccurate. Consider using '#align filter.countable_binfi_eq_infi_seq' Filter.countable_biInf_eq_iInf_seq'ₓ'. -/
theorem countable_biInf_eq_iInf_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
(f : ι → α) {i₀ : ι} (h : f i₀ = ⊤) : ∃ x : ℕ → ι, (⨅ t ∈ B, f t) = ⨅ i, f (x i) :=
by
@@ -1673,12 +1118,6 @@ theorem countable_biInf_eq_iInf_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B
· exact countable_binfi_eq_infi_seq Bcbl Bnonempty f
#align filter.countable_binfi_eq_infi_seq' Filter.countable_biInf_eq_iInf_seq'
-/- warning: filter.countable_binfi_principal_eq_seq_infi -> Filter.countable_biInf_principal_eq_seq_iInf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) (iInf.{u1, succ u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Set.{u1} α) (fun (t : Set.{u1} α) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) t B) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) t B) => Filter.principal.{u1} α t))) (iInf.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i)))))
-but is expected to have type
- forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) (iInf.{u1, succ u1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Set.{u1} α) (fun (t : Set.{u1} α) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) t B) (fun (H : Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) t B) => Filter.principal.{u1} α t))) (iInf.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i)))))
-Case conversion may be inaccurate. Consider using '#align filter.countable_binfi_principal_eq_seq_infi Filter.countable_biInf_principal_eq_seq_iInfₓ'. -/
theorem countable_biInf_principal_eq_seq_iInf {B : Set (Set α)} (Bcbl : B.Countable) :
∃ x : ℕ → Set α, (⨅ t ∈ B, 𝓟 t) = ⨅ i, 𝓟 (x i) :=
countable_biInf_eq_iInf_seq' Bcbl 𝓟 principal_univ
@@ -1700,24 +1139,12 @@ protected theorem HasAntitoneBasis.mem [Preorder ι] {l : Filter α} {s : ι →
#align filter.has_antitone_basis.mem Filter.HasAntitoneBasis.mem
-/
-/- warning: filter.has_antitone_basis.has_basis_ge -> Filter.HasAntitoneBasis.hasBasis_ge is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : Preorder.{u2} ι] [_inst_2 : IsDirected.{u2} ι (LE.le.{u2} ι (Preorder.toHasLe.{u2} ι _inst_1))] {l : Filter.{u1} α} {s : ι -> (Set.{u1} α)}, (Filter.HasAntitoneBasis.{u1, u2} α ι _inst_1 l s) -> (forall (i : ι), Filter.HasBasis.{u1, succ u2} α ι l (fun (j : ι) => LE.le.{u2} ι (Preorder.toHasLe.{u2} ι _inst_1) i j) s)
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : Preorder.{u2} ι] [_inst_2 : IsDirected.{u2} ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.13517 : ι) (x._@.Mathlib.Order.Filter.Bases._hyg.13519 : ι) => LE.le.{u2} ι (Preorder.toLE.{u2} ι _inst_1) x._@.Mathlib.Order.Filter.Bases._hyg.13517 x._@.Mathlib.Order.Filter.Bases._hyg.13519)] {l : Filter.{u1} α} {s : ι -> (Set.{u1} α)}, (Filter.HasAntitoneBasis.{u1, u2} α ι _inst_1 l s) -> (forall (i : ι), Filter.HasBasis.{u1, succ u2} α ι l (fun (j : ι) => LE.le.{u2} ι (Preorder.toLE.{u2} ι _inst_1) i j) s)
-Case conversion may be inaccurate. Consider using '#align filter.has_antitone_basis.has_basis_ge Filter.HasAntitoneBasis.hasBasis_geₓ'. -/
theorem HasAntitoneBasis.hasBasis_ge [Preorder ι] [IsDirected ι (· ≤ ·)] {l : Filter α}
{s : ι → Set α} (hs : l.HasAntitoneBasis s) (i : ι) : l.HasBasis (fun j => i ≤ j) s :=
hs.1.to_hasBasis (fun j _ => (exists_ge_ge i j).imp fun k hk => ⟨hk.1, hs.2 hk.2⟩) fun j hj =>
⟨j, trivial, Subset.rfl⟩
#align filter.has_antitone_basis.has_basis_ge Filter.HasAntitoneBasis.hasBasis_ge
-/- warning: filter.has_basis.exists_antitone_subbasis -> Filter.HasBasis.exists_antitone_subbasis is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} {f : Filter.{u1} α} [h : Filter.IsCountablyGenerated.{u1} α f] {p : ι' -> Prop} {s : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι' f p s) -> (Exists.{imax 1 u2} (Nat -> ι') (fun (x : Nat -> ι') => And (forall (i : Nat), p (x i)) (Filter.HasAntitoneBasis.{u1, 0} α Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) f (fun (i : Nat) => s (x i)))))
-but is expected to have type
- forall {α : Type.{u2}} {ι' : Sort.{u1}} {f : Filter.{u2} α} [h : Filter.IsCountablyGenerated.{u2} α f] {p : ι' -> Prop} {s : ι' -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι' f p s) -> (Exists.{imax 1 u1} (Nat -> ι') (fun (x : Nat -> ι') => And (forall (i : Nat), p (x i)) (Filter.HasAntitoneBasis.{u2, 0} α Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) f (fun (i : Nat) => s (x i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.exists_antitone_subbasis Filter.HasBasis.exists_antitone_subbasisₓ'. -/
/-- If `f` is countably generated and `f.has_basis p s`, then `f` admits a decreasing basis
enumerated by natural numbers such that all sets have the form `s i`. More precisely, there is a
sequence `i n` such that `p (i n)` for all `n` and `s (i n)` is a decreasing sequence of sets which
@@ -1761,24 +1188,12 @@ theorem exists_antitone_basis (f : Filter α) [f.IsCountablyGenerated] :
#align filter.exists_antitone_basis Filter.exists_antitone_basis
-/
-/- warning: filter.exists_antitone_seq -> Filter.exists_antitone_seq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (f : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f], Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => And (Antitone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) x) (forall {s : Set.{u1} α}, Iff (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s f) (Exists.{1} Nat (fun (i : Nat) => HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (x i) s))))
-but is expected to have type
- forall {α : Type.{u1}} (f : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f], Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => And (Antitone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) x) (forall {s : Set.{u1} α}, Iff (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s f) (Exists.{1} Nat (fun (i : Nat) => HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (x i) s))))
-Case conversion may be inaccurate. Consider using '#align filter.exists_antitone_seq Filter.exists_antitone_seqₓ'. -/
theorem exists_antitone_seq (f : Filter α) [f.IsCountablyGenerated] :
∃ x : ℕ → Set α, Antitone x ∧ ∀ {s}, s ∈ f ↔ ∃ i, x i ⊆ s :=
let ⟨x, hx⟩ := f.exists_antitone_basis
⟨x, hx.Antitone, fun s => by simp [hx.to_has_basis.mem_iff]⟩
#align filter.exists_antitone_seq Filter.exists_antitone_seq
-/- warning: filter.inf.is_countably_generated -> Filter.Inf.isCountablyGenerated is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f g)
-but is expected to have type
- forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f g)
-Case conversion may be inaccurate. Consider using '#align filter.inf.is_countably_generated Filter.Inf.isCountablyGeneratedₓ'. -/
instance Inf.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
[IsCountablyGenerated g] : IsCountablyGenerated (f ⊓ g) :=
by
@@ -1805,12 +1220,6 @@ instance comap.isCountablyGenerated (l : Filter β) [l.IsCountablyGenerated] (f
#align filter.comap.is_countably_generated Filter.comap.isCountablyGenerated
-/
-/- warning: filter.sup.is_countably_generated -> Filter.Sup.isCountablyGenerated is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) f g)
-but is expected to have type
- forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (CompleteLattice.toLattice.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))) f g)
-Case conversion may be inaccurate. Consider using '#align filter.sup.is_countably_generated Filter.Sup.isCountablyGeneratedₓ'. -/
instance Sup.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
[IsCountablyGenerated g] : IsCountablyGenerated (f ⊔ g) :=
by
@@ -1837,12 +1246,6 @@ instance coprod.isCountablyGenerated (la : Filter α) (lb : Filter β) [IsCounta
end IsCountablyGenerated
-/- warning: filter.is_countably_generated_seq -> Filter.isCountablyGenerated_seq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Countable.{succ u2} β] (x : β -> (Set.{u1} α)), Filter.IsCountablyGenerated.{u1} α (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) β (fun (i : β) => Filter.principal.{u1} α (x i)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Countable.{succ u2} β] (x : β -> (Set.{u1} α)), Filter.IsCountablyGenerated.{u1} α (iInf.{u1, succ u2} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) β (fun (i : β) => Filter.principal.{u1} α (x i)))
-Case conversion may be inaccurate. Consider using '#align filter.is_countably_generated_seq Filter.isCountablyGenerated_seqₓ'. -/
theorem isCountablyGenerated_seq [Countable β] (x : β → Set α) :
IsCountablyGenerated (⨅ i, 𝓟 <| x i) :=
by
@@ -1850,24 +1253,12 @@ theorem isCountablyGenerated_seq [Countable β] (x : β → Set α) :
rw [generate_eq_binfi, iInf_range]
#align filter.is_countably_generated_seq Filter.isCountablyGenerated_seq
-/- warning: filter.is_countably_generated_of_seq -> Filter.isCountablyGenerated_of_seq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α}, (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) f (iInf.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i))))) -> (Filter.IsCountablyGenerated.{u1} α f)
-but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α}, (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) f (iInf.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i))))) -> (Filter.IsCountablyGenerated.{u1} α f)
-Case conversion may be inaccurate. Consider using '#align filter.is_countably_generated_of_seq Filter.isCountablyGenerated_of_seqₓ'. -/
theorem isCountablyGenerated_of_seq {f : Filter α} (h : ∃ x : ℕ → Set α, f = ⨅ i, 𝓟 <| x i) :
f.IsCountablyGenerated := by
let ⟨x, h⟩ := h
rw [h] <;> apply is_countably_generated_seq
#align filter.is_countably_generated_of_seq Filter.isCountablyGenerated_of_seq
-/- warning: filter.is_countably_generated_binfi_principal -> Filter.isCountablyGenerated_biInf_principal is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Filter.IsCountablyGenerated.{u1} α (iInf.{u1, succ u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Set.{u1} α) (fun (s : Set.{u1} α) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) s B) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) s B) => Filter.principal.{u1} α s))))
-but is expected to have type
- forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Filter.IsCountablyGenerated.{u1} α (iInf.{u1, succ u1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Set.{u1} α) (fun (s : Set.{u1} α) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) s B) (fun (H : Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) s B) => Filter.principal.{u1} α s))))
-Case conversion may be inaccurate. Consider using '#align filter.is_countably_generated_binfi_principal Filter.isCountablyGenerated_biInf_principalₓ'. -/
theorem isCountablyGenerated_biInf_principal {B : Set <| Set α} (h : B.Countable) :
IsCountablyGenerated (⨅ s ∈ B, 𝓟 s) :=
isCountablyGenerated_of_seq (countable_biInf_principal_eq_seq_iInf h)
@@ -1899,34 +1290,16 @@ theorem isCountablyGenerated_pure (a : α) : IsCountablyGenerated (pure a) := by
#align filter.is_countably_generated_pure Filter.isCountablyGenerated_pure
-/
-/- warning: filter.is_countably_generated_bot -> Filter.isCountablyGenerated_bot is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}}, Filter.IsCountablyGenerated.{u1} α (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α)))
-but is expected to have type
- forall {α : Type.{u1}}, Filter.IsCountablyGenerated.{u1} α (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toBot.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))
-Case conversion may be inaccurate. Consider using '#align filter.is_countably_generated_bot Filter.isCountablyGenerated_botₓ'. -/
@[instance]
theorem isCountablyGenerated_bot : IsCountablyGenerated (⊥ : Filter α) :=
@principal_empty α ▸ isCountablyGenerated_principal _
#align filter.is_countably_generated_bot Filter.isCountablyGenerated_bot
-/- warning: filter.is_countably_generated_top -> Filter.isCountablyGenerated_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}}, Filter.IsCountablyGenerated.{u1} α (Top.top.{u1} (Filter.{u1} α) (Filter.hasTop.{u1} α))
-but is expected to have type
- forall {α : Type.{u1}}, Filter.IsCountablyGenerated.{u1} α (Top.top.{u1} (Filter.{u1} α) (Filter.instTopFilter.{u1} α))
-Case conversion may be inaccurate. Consider using '#align filter.is_countably_generated_top Filter.isCountablyGenerated_topₓ'. -/
@[instance]
theorem isCountablyGenerated_top : IsCountablyGenerated (⊤ : Filter α) :=
@principal_univ α ▸ isCountablyGenerated_principal _
#align filter.is_countably_generated_top Filter.isCountablyGenerated_top
-/- warning: filter.infi.is_countably_generated -> Filter.iInf.isCountablyGenerated is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} [_inst_1 : Countable.{u2} ι] (f : ι -> (Filter.{u1} α)) [_inst_2 : forall (i : ι), Filter.IsCountablyGenerated.{u1} α (f i)], Filter.IsCountablyGenerated.{u1} α (iInf.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => f i))
-but is expected to have type
- forall {α : Sort.{u1}} {ι : Type.{u2}} [_inst_1 : Countable.{u1} α] (f : α -> (Filter.{u2} ι)) [_inst_2 : forall (i : α), Filter.IsCountablyGenerated.{u2} ι (f i)], Filter.IsCountablyGenerated.{u2} ι (iInf.{u2, u1} (Filter.{u2} ι) (CompleteLattice.toInfSet.{u2} (Filter.{u2} ι) (Filter.instCompleteLatticeFilter.{u2} ι)) α (fun (i : α) => f i))
-Case conversion may be inaccurate. Consider using '#align filter.infi.is_countably_generated Filter.iInf.isCountablyGeneratedₓ'. -/
instance iInf.isCountablyGenerated {ι : Sort _} [Countable ι] (f : ι → Filter α)
[∀ i, IsCountablyGenerated (f i)] : IsCountablyGenerated (⨅ i, f i) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -442,9 +442,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} (h : Filter.HasBasis.{u2, u1} α ι l p s), Eq.{succ u2} (Filter.{u2} α) (Filter.IsBasis.filter.{u2, u1} α ι p s (Filter.HasBasis.isBasis.{u1, u2} α ι l p s h)) l
Case conversion may be inaccurate. Consider using '#align filter.has_basis.filter_eq Filter.HasBasis.filter_eqₓ'. -/
-theorem HasBasis.filter_eq (h : l.HasBasis p s) : h.IsBasis.filterₓ = l :=
- by
- ext U
+theorem HasBasis.filter_eq (h : l.HasBasis p s) : h.IsBasis.filterₓ = l := by ext U;
simp [h.mem_iff, is_basis.mem_filter_iff]
#align filter.has_basis.filter_eq Filter.HasBasis.filter_eq
@@ -1179,9 +1177,7 @@ but is expected to have type
forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) g) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) f))
Case conversion may be inaccurate. Consider using '#align filter.inf_ne_bot_iff_frequently_right Filter.inf_neBot_iff_frequently_rightₓ'. -/
theorem inf_neBot_iff_frequently_right {f g : Filter α} :
- NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ x in g, p x) → ∃ᶠ x in f, p x :=
- by
- rw [inf_comm]
+ NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ x in g, p x) → ∃ᶠ x in f, p x := by rw [inf_comm];
exact inf_ne_bot_iff_frequently_left
#align filter.inf_ne_bot_iff_frequently_right Filter.inf_neBot_iff_frequently_right
@@ -1342,10 +1338,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Eq.{succ u2} (Set.{u2} α) (Set.sInter.{u2} α (Filter.sets.{u2} α l)) (Set.iInter.{u2, u1} α ι (fun (i : ι) => Set.iInter.{u2, 0} α (p i) (fun (hi : p i) => s i))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_setsₓ'. -/
-theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (hi : p i), s i :=
- by
- rw [sInter_eq_bInter]
- exact h.bInter_mem monotone_id
+theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (hi : p i), s i := by
+ rw [sInter_eq_bInter]; exact h.bInter_mem monotone_id
#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_sets
variable {ι'' : Type _} [Preorder ι''] (l) (s'' : ι'' → Set α)
@@ -1387,10 +1381,8 @@ variable {la : Filter α} {pa : ι → Prop} {sa : ι → Set α} {lb : Filter
{sb : ι' → Set β} {f : α → β}
theorem HasBasis.tendsto_left_iff (hla : la.HasBasis pa sa) :
- Tendsto f la lb ↔ ∀ t ∈ lb, ∃ (i : _)(hi : pa i), MapsTo f (sa i) t :=
- by
- simp only [tendsto, (hla.map f).le_iffₓ, image_subset_iff]
- rfl
+ Tendsto f la lb ↔ ∀ t ∈ lb, ∃ (i : _)(hi : pa i), MapsTo f (sa i) t := by
+ simp only [tendsto, (hla.map f).le_iffₓ, image_subset_iff]; rfl
#align filter.has_basis.tendsto_left_iff Filter.HasBasis.tendsto_left_iffₓ
/- warning: filter.has_basis.tendsto_right_iff -> Filter.HasBasis.tendsto_right_iff is a dubious translation:
@@ -1648,18 +1640,9 @@ theorem antitone_seq_of_seq (s : ℕ → Set α) :
use fun n => ⋂ m ≤ n, s m; constructor
· exact fun i j hij => bInter_mono (Iic_subset_Iic.2 hij) fun n hn => subset.refl _
apply le_antisymm <;> rw [le_iInf_iff] <;> intro i
- · rw [le_principal_iff]
- refine' (bInter_mem (finite_le_nat _)).2 fun j hji => _
- rw [← le_principal_iff]
- apply iInf_le_of_le j _
- exact le_rfl
- · apply iInf_le_of_le i _
- rw [principal_mono]
- intro a
- simp
- intro h
- apply h
- rfl
+ · rw [le_principal_iff]; refine' (bInter_mem (finite_le_nat _)).2 fun j hji => _
+ rw [← le_principal_iff]; apply iInf_le_of_le j _; exact le_rfl
+ · apply iInf_le_of_le i _; rw [principal_mono]; intro a; simp; intro h; apply h; rfl
#align filter.antitone_seq_of_seq Filter.antitone_seq_of_seq
/- warning: filter.countable_binfi_eq_infi_seq -> Filter.countable_biInf_eq_iInf_seq is a dubious translation:
@@ -1895,8 +1878,7 @@ theorem isCountablyGenerated_iff_exists_antitone_basis {f : Filter α} :
IsCountablyGenerated f ↔ ∃ x : ℕ → Set α, f.HasAntitoneBasis x :=
by
constructor
- · intro h
- exact f.exists_antitone_basis
+ · intro h; exact f.exists_antitone_basis
· rintro ⟨x, h⟩
rw [h.to_has_basis.eq_infi]
exact is_countably_generated_seq x
@@ -1912,10 +1894,8 @@ theorem isCountablyGenerated_principal (s : Set α) : IsCountablyGenerated (𝓟
#print Filter.isCountablyGenerated_pure /-
@[instance]
-theorem isCountablyGenerated_pure (a : α) : IsCountablyGenerated (pure a) :=
- by
- rw [← principal_singleton]
- exact is_countably_generated_principal _
+theorem isCountablyGenerated_pure (a : α) : IsCountablyGenerated (pure a) := by
+ rw [← principal_singleton]; exact is_countably_generated_principal _
#align filter.is_countably_generated_pure Filter.isCountablyGenerated_pure
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -759,10 +759,7 @@ theorem hasBasis_iInf' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α
#align filter.has_basis_infi' Filter.hasBasis_iInf'
/- warning: filter.has_basis_infi -> Filter.hasBasis_iInf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u2) (succ (max u2 u3))} α (Sigma.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i))) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (If : Sigma.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i))) => And (Set.Finite.{u2} ι (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) (forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)), p ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)))))) i) (Sigma.snd.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If i))) (fun (If : Sigma.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i))) => Set.iInter.{u1, succ u2} α (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) (fun (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) => s ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)))))) i) (Sigma.snd.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If i))))
-but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i))) (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (If : Sigma.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i))) => And (Set.Finite.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) (forall (i : Set.Elem.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)), p (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) i) (Sigma.snd.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If i))) (fun (If : Sigma.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i))) => Set.iInter.{u1, succ u3} α (Set.Elem.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) (fun (i : Set.Elem.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) => s (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) i) (Sigma.snd.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If i))))
+<too large>
Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi Filter.hasBasis_iInfₓ'. -/
theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -630,7 +630,7 @@ theorem HasBasis.comp_surjective (h : l.HasBasis p s) {g : ι' → ι} (hg : Fun
lean 3 declaration is
forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (e : Equiv.{u3, u2} ι' ι), Filter.HasBasis.{u1, u3} α ι' l (Function.comp.{u3, u2, 1} ι' ι Prop p (coeFn.{max 1 (imax u3 u2) (imax u2 u3), imax u3 u2} (Equiv.{u3, u2} ι' ι) (fun (_x : Equiv.{u3, u2} ι' ι) => ι' -> ι) (Equiv.hasCoeToFun.{u3, u2} ι' ι) e)) (Function.comp.{u3, u2, succ u1} ι' ι (Set.{u1} α) s (coeFn.{max 1 (imax u3 u2) (imax u2 u3), imax u3 u2} (Equiv.{u3, u2} ι' ι) (fun (_x : Equiv.{u3, u2} ι' ι) => ι' -> ι) (Equiv.hasCoeToFun.{u3, u2} ι' ι) e)))
but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (forall (e : Equiv.{u1, u2} ι' ι), Filter.HasBasis.{u3, u1} α ι' l (Function.comp.{u1, u2, 1} ι' ι Prop p (FunLike.coe.{max (max 1 u2) u1, u1, u2} (Equiv.{u1, u2} ι' ι) ι' (fun (_x : ι') => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι') => ι) _x) (Equiv.instFunLikeEquiv.{u1, u2} ι' ι) e)) (Function.comp.{u1, u2, succ u3} ι' ι (Set.{u3} α) s (FunLike.coe.{max (max 1 u2) u1, u1, u2} (Equiv.{u1, u2} ι' ι) ι' (fun (_x : ι') => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι') => ι) _x) (Equiv.instFunLikeEquiv.{u1, u2} ι' ι) e)))
+ forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (forall (e : Equiv.{u1, u2} ι' ι), Filter.HasBasis.{u3, u1} α ι' l (Function.comp.{u1, u2, 1} ι' ι Prop p (FunLike.coe.{max (max 1 u2) u1, u1, u2} (Equiv.{u1, u2} ι' ι) ι' (fun (_x : ι') => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι') => ι) _x) (Equiv.instFunLikeEquiv.{u1, u2} ι' ι) e)) (Function.comp.{u1, u2, succ u3} ι' ι (Set.{u3} α) s (FunLike.coe.{max (max 1 u2) u1, u1, u2} (Equiv.{u1, u2} ι' ι) ι' (fun (_x : ι') => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι') => ι) _x) (Equiv.instFunLikeEquiv.{u1, u2} ι' ι) e)))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.comp_equiv Filter.HasBasis.comp_equivₓ'. -/
theorem HasBasis.comp_equiv (h : l.HasBasis p s) (e : ι' ≃ ι) : l.HasBasis (p ∘ e) (s ∘ e) :=
h.comp_surjective e.Surjective
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -677,7 +677,7 @@ theorem HasBasis.hasBasis_self_subset {p : Set α → Prop} (h : l.HasBasis (fun
/- warning: filter.has_basis.ge_iff -> Filter.HasBasis.ge_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι' : Sort.{u2}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι' l' p' s') -> (Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') (forall (i' : ι'), (p' i') -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (s' i') l)))
+ forall {α : Type.{u1}} {ι' : Sort.{u2}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι' l' p' s') -> (Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') (forall (i' : ι'), (p' i') -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (s' i') l)))
but is expected to have type
forall {α : Type.{u2}} {ι' : Sort.{u1}} {l : Filter.{u2} α} {l' : Filter.{u2} α} {p' : ι' -> Prop} {s' : ι' -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι' l' p' s') -> (Iff (LE.le.{u2} (Filter.{u2} α) (Preorder.toLE.{u2} (Filter.{u2} α) (PartialOrder.toPreorder.{u2} (Filter.{u2} α) (Filter.instPartialOrderFilter.{u2} α))) l l') (forall (i' : ι'), (p' i') -> (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) (s' i') l)))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.ge_iff Filter.HasBasis.ge_iffₓ'. -/
@@ -782,7 +782,7 @@ theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α}
/- warning: filter.has_basis_infi_of_directed' -> Filter.hasBasis_iInf_of_directed' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5723 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5725 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5723 x._@.Mathlib.Order.Filter.Bases._hyg.5725) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')))
Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_of_directed' Filter.hasBasis_iInf_of_directed'ₓ'. -/
@@ -798,7 +798,7 @@ theorem hasBasis_iInf_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty
/- warning: filter.has_basis_infi_of_directed -> Filter.hasBasis_iInf_of_directed is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u2, u3} ι ι') => p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u2, u3} ι ι') => p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5900 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5902 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5900 x._@.Mathlib.Order.Filter.Bases._hyg.5902) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u3, u2} ι ι') => p (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')) (fun (ii' : Prod.{u3, u2} ι ι') => s (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')))
Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_of_directed Filter.hasBasis_iInf_of_directedₓ'. -/
@@ -814,7 +814,7 @@ theorem hasBasis_iInf_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l
/- warning: filter.has_basis_binfi_of_directed' -> Filter.hasBasis_biInf_of_directed' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {dom : Set.{u2} ι}, (Set.Nonempty.{u2} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) -> (Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i))) -> (DirectedOn.{u2} ι (Order.Preimage.{succ u2, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) => l i))) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => And (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') dom) (p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii'))) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii'))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {dom : Set.{u2} ι}, (Set.Nonempty.{u2} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) -> (Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i))) -> (DirectedOn.{u2} ι (Order.Preimage.{succ u2, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) => l i))) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => And (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') dom) (p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii'))) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii'))))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} {dom : Set.{u3} ι}, (Set.Nonempty.{u3} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) -> (Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i))) -> (DirectedOn.{u3} ι (Order.Preimage.{succ u3, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) => l i))) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => And (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') dom) (p (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii'))) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii'))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_of_directed' Filter.hasBasis_biInf_of_directed'ₓ'. -/
@@ -836,7 +836,7 @@ theorem hasBasis_biInf_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : S
/- warning: filter.has_basis_binfi_of_directed -> Filter.hasBasis_biInf_of_directed is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} {dom : Set.{u2} ι}, (Set.Nonempty.{u2} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) -> (Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i))) -> (DirectedOn.{u2} ι (Order.Preimage.{succ u2, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) => l i))) (fun (ii' : Prod.{u2, u3} ι ι') => And (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) (Prod.fst.{u2, u3} ι ι' ii') dom) (p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii'))) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii'))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} {dom : Set.{u2} ι}, (Set.Nonempty.{u2} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) -> (Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i))) -> (DirectedOn.{u2} ι (Order.Preimage.{succ u2, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) => l i))) (fun (ii' : Prod.{u2, u3} ι ι') => And (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) (Prod.fst.{u2, u3} ι ι' ii') dom) (p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii'))) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii'))))
but is expected to have type
forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : Type.{u2}} {dom : Set.{u3} ι}, (Set.Nonempty.{u3} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) -> (Filter.HasBasis.{u1, succ u2} α ι' (l i) (p i) (s i))) -> (DirectedOn.{u3} ι (Order.Preimage.{succ u3, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) => l i))) (fun (ii' : Prod.{u3, u2} ι ι') => And (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) (Prod.fst.{u3, u2} ι ι' ii') dom) (p (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii'))) (fun (ii' : Prod.{u3, u2} ι ι') => s (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii'))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_of_directed Filter.hasBasis_biInf_of_directedₓ'. -/
@@ -1004,7 +1004,7 @@ theorem Disjoint.exists_mem_filter_basis (h : Disjoint l l') (hl : l.HasBasis p
/- warning: pairwise.exists_mem_filter_basis_of_disjoint -> Pairwise.exists_mem_filter_basis_of_disjoint is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {I : Type.{u2}} [_inst_1 : Finite.{succ u2} I] {l : I -> (Filter.{u1} α)} {ι : I -> Sort.{u3}} {p : forall (i : I), (ι i) -> Prop} {s : forall (i : I), (ι i) -> (Set.{u1} α)}, (Pairwise.{u2} I (Function.onFun.{succ u2, succ u1, 1} I (Filter.{u1} α) Prop (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α)))) l)) -> (forall (i : I), Filter.HasBasis.{u1, u3} α (ι i) (l i) (p i) (s i)) -> (Exists.{imax (succ u2) u3} (forall (i : I), ι i) (fun (ind : forall (i : I), ι i) => And (forall (i : I), p i (ind i)) (Pairwise.{u2} I (Function.onFun.{succ u2, succ u1, 1} I (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)))) (fun (i : I) => s i (ind i))))))
+ forall {α : Type.{u1}} {I : Type.{u2}} [_inst_1 : Finite.{succ u2} I] {l : I -> (Filter.{u1} α)} {ι : I -> Sort.{u3}} {p : forall (i : I), (ι i) -> Prop} {s : forall (i : I), (ι i) -> (Set.{u1} α)}, (Pairwise.{u2} I (Function.onFun.{succ u2, succ u1, 1} I (Filter.{u1} α) Prop (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α)))) l)) -> (forall (i : I), Filter.HasBasis.{u1, u3} α (ι i) (l i) (p i) (s i)) -> (Exists.{imax (succ u2) u3} (forall (i : I), ι i) (fun (ind : forall (i : I), ι i) => And (forall (i : I), p i (ind i)) (Pairwise.{u2} I (Function.onFun.{succ u2, succ u1, 1} I (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)))) (fun (i : I) => s i (ind i))))))
but is expected to have type
forall {α : Type.{u2}} {I : Type.{u3}} [_inst_1 : Finite.{succ u3} I] {l : I -> (Filter.{u2} α)} {ι : I -> Sort.{u1}} {p : forall (i : I), (ι i) -> Prop} {s : forall (i : I), (ι i) -> (Set.{u2} α)}, (Pairwise.{u3} I (Function.onFun.{succ u3, succ u2, 1} I (Filter.{u2} α) Prop (Disjoint.{u2} (Filter.{u2} α) (Filter.instPartialOrderFilter.{u2} α) (BoundedOrder.toOrderBot.{u2} (Filter.{u2} α) (Preorder.toLE.{u2} (Filter.{u2} α) (PartialOrder.toPreorder.{u2} (Filter.{u2} α) (Filter.instPartialOrderFilter.{u2} α))) (CompleteLattice.toBoundedOrder.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)))) l)) -> (forall (i : I), Filter.HasBasis.{u2, u1} α (ι i) (l i) (p i) (s i)) -> (Exists.{imax (succ u3) u1} (forall (i : I), ι i) (fun (ind : forall (i : I), ι i) => And (forall (i : I), p i (ind i)) (Pairwise.{u3} I (Function.onFun.{succ u3, succ u2, 1} I (Set.{u2} α) Prop (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α))))))) (fun (i : I) => s i (ind i))))))
Case conversion may be inaccurate. Consider using '#align pairwise.exists_mem_filter_basis_of_disjoint Pairwise.exists_mem_filter_basis_of_disjointₓ'. -/
@@ -1020,7 +1020,7 @@ theorem Pairwise.exists_mem_filter_basis_of_disjoint {I : Type _} [Finite I] {l
/- warning: set.pairwise_disjoint.exists_mem_filter_basis -> Set.PairwiseDisjoint.exists_mem_filter_basis is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {I : Type.{u2}} {l : I -> (Filter.{u1} α)} {ι : I -> Sort.{u3}} {p : forall (i : I), (ι i) -> Prop} {s : forall (i : I), (ι i) -> (Set.{u1} α)} {S : Set.{u2} I}, (Set.PairwiseDisjoint.{u1, u2} (Filter.{u1} α) I (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) S l) -> (Set.Finite.{u2} I S) -> (forall (i : I), Filter.HasBasis.{u1, u3} α (ι i) (l i) (p i) (s i)) -> (Exists.{imax (succ u2) u3} (forall (i : I), ι i) (fun (ind : forall (i : I), ι i) => And (forall (i : I), p i (ind i)) (Set.PairwiseDisjoint.{u1, u2} (Set.{u1} α) I (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) S (fun (i : I) => s i (ind i)))))
+ forall {α : Type.{u1}} {I : Type.{u2}} {l : I -> (Filter.{u1} α)} {ι : I -> Sort.{u3}} {p : forall (i : I), (ι i) -> Prop} {s : forall (i : I), (ι i) -> (Set.{u1} α)} {S : Set.{u2} I}, (Set.PairwiseDisjoint.{u1, u2} (Filter.{u1} α) I (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) S l) -> (Set.Finite.{u2} I S) -> (forall (i : I), Filter.HasBasis.{u1, u3} α (ι i) (l i) (p i) (s i)) -> (Exists.{imax (succ u2) u3} (forall (i : I), ι i) (fun (ind : forall (i : I), ι i) => And (forall (i : I), p i (ind i)) (Set.PairwiseDisjoint.{u1, u2} (Set.{u1} α) I (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) S (fun (i : I) => s i (ind i)))))
but is expected to have type
forall {α : Type.{u2}} {I : Type.{u3}} {l : I -> (Filter.{u2} α)} {ι : I -> Sort.{u1}} {p : forall (i : I), (ι i) -> Prop} {s : forall (i : I), (ι i) -> (Set.{u2} α)} {S : Set.{u3} I}, (Set.PairwiseDisjoint.{u2, u3} (Filter.{u2} α) I (Filter.instPartialOrderFilter.{u2} α) (BoundedOrder.toOrderBot.{u2} (Filter.{u2} α) (Preorder.toLE.{u2} (Filter.{u2} α) (PartialOrder.toPreorder.{u2} (Filter.{u2} α) (Filter.instPartialOrderFilter.{u2} α))) (CompleteLattice.toBoundedOrder.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α))) S l) -> (Set.Finite.{u3} I S) -> (forall (i : I), Filter.HasBasis.{u2, u1} α (ι i) (l i) (p i) (s i)) -> (Exists.{imax (succ u3) u1} (forall (i : I), ι i) (fun (ind : forall (i : I), ι i) => And (forall (i : I), p i (ind i)) (Set.PairwiseDisjoint.{u2, u3} (Set.{u2} α) I (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) S (fun (i : I) => s i (ind i)))))
Case conversion may be inaccurate. Consider using '#align set.pairwise_disjoint.exists_mem_filter_basis Set.PairwiseDisjoint.exists_mem_filter_basisₓ'. -/
@@ -1081,7 +1081,7 @@ theorem not_mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∉ f
/- warning: filter.disjoint_principal_right -> Filter.disjoint_principal_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) f (Filter.principal.{u1} α s)) (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f)
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) f (Filter.principal.{u1} α s)) (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f)
but is expected to have type
forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) f (Filter.principal.{u1} α s)) (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s) f)
Case conversion may be inaccurate. Consider using '#align filter.disjoint_principal_right Filter.disjoint_principal_rightₓ'. -/
@@ -1092,7 +1092,7 @@ theorem disjoint_principal_right {f : Filter α} {s : Set α} : Disjoint f (𝓟
/- warning: filter.disjoint_principal_left -> Filter.disjoint_principal_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Filter.principal.{u1} α s) f) (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f)
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Filter.principal.{u1} α s) f) (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) f)
but is expected to have type
forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) (Filter.principal.{u1} α s) f) (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s) f)
Case conversion may be inaccurate. Consider using '#align filter.disjoint_principal_left Filter.disjoint_principal_leftₓ'. -/
@@ -1103,7 +1103,7 @@ theorem disjoint_principal_left {f : Filter α} {s : Set α} : Disjoint (𝓟 s)
/- warning: filter.disjoint_principal_principal -> Filter.disjoint_principal_principal is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Filter.principal.{u1} α s) (Filter.principal.{u1} α t)) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t)
+ forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Filter.principal.{u1} α s) (Filter.principal.{u1} α t)) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t)
but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) (Filter.principal.{u1} α s) (Filter.principal.{u1} α t)) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t)
Case conversion may be inaccurate. Consider using '#align filter.disjoint_principal_principal Filter.disjoint_principal_principalₓ'. -/
@@ -1114,7 +1114,7 @@ theorem disjoint_principal_principal {s t : Set α} : Disjoint (𝓟 s) (𝓟 t)
/- warning: disjoint.filter_principal -> Disjoint.filter_principal is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Filter.principal.{u1} α s) (Filter.principal.{u1} α t))
+ forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Filter.principal.{u1} α s) (Filter.principal.{u1} α t))
but is expected to have type
forall {α : Type.{u1}} {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t) -> (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) (Filter.principal.{u1} α s) (Filter.principal.{u1} α t))
Case conversion may be inaccurate. Consider using '#align disjoint.filter_principal Disjoint.filter_principalₓ'. -/
@@ -1123,7 +1123,7 @@ alias disjoint_principal_principal ↔ _ _root_.disjoint.filter_principal
/- warning: filter.disjoint_pure_pure -> Filter.disjoint_pure_pure is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {x : α} {y : α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α y)) (Ne.{succ u1} α x y)
+ forall {α : Type.{u1}} {x : α} {y : α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α y)) (Ne.{succ u1} α x y)
but is expected to have type
forall {α : Type.{u1}} {x : α} {y : α}, Iff (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} α x) (Pure.pure.{u1, u1} Filter.{u1} Filter.instPureFilter.{u1} α y)) (Ne.{succ u1} α x y)
Case conversion may be inaccurate. Consider using '#align filter.disjoint_pure_pure Filter.disjoint_pure_pureₓ'. -/
@@ -1134,7 +1134,7 @@ theorem disjoint_pure_pure {x y : α} : Disjoint (pure x : Filter α) (pure y)
/- warning: filter.compl_diagonal_mem_prod -> Filter.compl_diagonal_mem_prod is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {l₁ : Filter.{u1} α} {l₂ : Filter.{u1} α}, Iff (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.hasMem.{u1} (Prod.{u1, u1} α α)) (HasCompl.compl.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (Set.booleanAlgebra.{u1} (Prod.{u1, u1} α α))) (Set.diagonal.{u1} α)) (Filter.prod.{u1, u1} α α l₁ l₂)) (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) l₁ l₂)
+ forall {α : Type.{u1}} {l₁ : Filter.{u1} α} {l₂ : Filter.{u1} α}, Iff (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.hasMem.{u1} (Prod.{u1, u1} α α)) (HasCompl.compl.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (Set.booleanAlgebra.{u1} (Prod.{u1, u1} α α))) (Set.diagonal.{u1} α)) (Filter.prod.{u1, u1} α α l₁ l₂)) (Disjoint.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) l₁ l₂)
but is expected to have type
forall {α : Type.{u1}} {l₁ : Filter.{u1} α} {l₂ : Filter.{u1} α}, Iff (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) (HasCompl.compl.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} (Prod.{u1, u1} α α)) (Set.instBooleanAlgebraSet.{u1} (Prod.{u1, u1} α α))) (Set.diagonal.{u1} α)) (Filter.prod.{u1, u1} α α l₁ l₂)) (Disjoint.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α) (BoundedOrder.toOrderBot.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (CompleteLattice.toBoundedOrder.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))) l₁ l₂)
Case conversion may be inaccurate. Consider using '#align filter.compl_diagonal_mem_prod Filter.compl_diagonal_mem_prodₓ'. -/
@@ -1156,7 +1156,7 @@ theorem HasBasis.disjoint_iff_right (h : l.HasBasis p s) :
/- warning: filter.le_iff_forall_inf_principal_compl -> Filter.le_iff_forall_inf_principal_compl is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) f g) (forall (V : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) V g) -> (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) V))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α)))))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) f g) (forall (V : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) V g) -> (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) V))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α)))))
but is expected to have type
forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) f g) (forall (V : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) V g) -> (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) V))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toBot.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))))
Case conversion may be inaccurate. Consider using '#align filter.le_iff_forall_inf_principal_compl Filter.le_iff_forall_inf_principal_complₓ'. -/
@@ -1720,13 +1720,17 @@ protected theorem HasAntitoneBasis.mem [Preorder ι] {l : Filter α} {s : ι →
#align filter.has_antitone_basis.mem Filter.HasAntitoneBasis.mem
-/
-#print Filter.HasAntitoneBasis.hasBasis_ge /-
+/- warning: filter.has_antitone_basis.has_basis_ge -> Filter.HasAntitoneBasis.hasBasis_ge is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : Preorder.{u2} ι] [_inst_2 : IsDirected.{u2} ι (LE.le.{u2} ι (Preorder.toHasLe.{u2} ι _inst_1))] {l : Filter.{u1} α} {s : ι -> (Set.{u1} α)}, (Filter.HasAntitoneBasis.{u1, u2} α ι _inst_1 l s) -> (forall (i : ι), Filter.HasBasis.{u1, succ u2} α ι l (fun (j : ι) => LE.le.{u2} ι (Preorder.toHasLe.{u2} ι _inst_1) i j) s)
+but is expected to have type
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : Preorder.{u2} ι] [_inst_2 : IsDirected.{u2} ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.13517 : ι) (x._@.Mathlib.Order.Filter.Bases._hyg.13519 : ι) => LE.le.{u2} ι (Preorder.toLE.{u2} ι _inst_1) x._@.Mathlib.Order.Filter.Bases._hyg.13517 x._@.Mathlib.Order.Filter.Bases._hyg.13519)] {l : Filter.{u1} α} {s : ι -> (Set.{u1} α)}, (Filter.HasAntitoneBasis.{u1, u2} α ι _inst_1 l s) -> (forall (i : ι), Filter.HasBasis.{u1, succ u2} α ι l (fun (j : ι) => LE.le.{u2} ι (Preorder.toLE.{u2} ι _inst_1) i j) s)
+Case conversion may be inaccurate. Consider using '#align filter.has_antitone_basis.has_basis_ge Filter.HasAntitoneBasis.hasBasis_geₓ'. -/
theorem HasAntitoneBasis.hasBasis_ge [Preorder ι] [IsDirected ι (· ≤ ·)] {l : Filter α}
{s : ι → Set α} (hs : l.HasAntitoneBasis s) (i : ι) : l.HasBasis (fun j => i ≤ j) s :=
hs.1.to_hasBasis (fun j _ => (exists_ge_ge i j).imp fun k hk => ⟨hk.1, hs.2 hk.2⟩) fun j hj =>
⟨j, trivial, Subset.rfl⟩
#align filter.has_antitone_basis.has_basis_ge Filter.HasAntitoneBasis.hasBasis_ge
--/
/- warning: filter.has_basis.exists_antitone_subbasis -> Filter.HasBasis.exists_antitone_subbasis is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -204,13 +204,13 @@ theorem mem_filter_of_mem (B : FilterBasis α) {U : Set α} : U ∈ B → U ∈
#align filter_basis.mem_filter_of_mem FilterBasis.mem_filter_of_mem
-/
-/- warning: filter_basis.eq_infi_principal -> FilterBasis.eq_infᵢ_principal is a dubious translation:
+/- warning: filter_basis.eq_infi_principal -> FilterBasis.eq_iInf_principal is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} (B : FilterBasis.{u1} α), Eq.{succ u1} (Filter.{u1} α) (FilterBasis.filter.{u1} α B) (infᵢ.{u1, succ u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (fun (s : coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) => Filter.principal.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (coeSubtype.{succ u1} (Set.{u1} α) (fun (x : Set.{u1} α) => Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) x (FilterBasis.sets.{u1} α B)))))) s)))
+ forall {α : Type.{u1}} (B : FilterBasis.{u1} α), Eq.{succ u1} (Filter.{u1} α) (FilterBasis.filter.{u1} α B) (iInf.{u1, succ u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (fun (s : coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) => Filter.principal.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} (Set.{u1} α)) Type.{u1} (Set.hasCoeToSort.{u1} (Set.{u1} α)) (FilterBasis.sets.{u1} α B)) (Set.{u1} α) (coeSubtype.{succ u1} (Set.{u1} α) (fun (x : Set.{u1} α) => Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) x (FilterBasis.sets.{u1} α B)))))) s)))
but is expected to have type
- forall {α : Type.{u1}} (B : FilterBasis.{u1} α), Eq.{succ u1} (Filter.{u1} α) (FilterBasis.filter.{u1} α B) (infᵢ.{u1, succ u1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Set.Elem.{u1} (Set.{u1} α) (FilterBasis.sets.{u1} α B)) (fun (s : Set.Elem.{u1} (Set.{u1} α) (FilterBasis.sets.{u1} α B)) => Filter.principal.{u1} α (Subtype.val.{succ u1} (Set.{u1} α) (fun (x : Set.{u1} α) => Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) x (FilterBasis.sets.{u1} α B)) s)))
-Case conversion may be inaccurate. Consider using '#align filter_basis.eq_infi_principal FilterBasis.eq_infᵢ_principalₓ'. -/
-theorem eq_infᵢ_principal (B : FilterBasis α) : B.filterₓ = ⨅ s : B.sets, 𝓟 s :=
+ forall {α : Type.{u1}} (B : FilterBasis.{u1} α), Eq.{succ u1} (Filter.{u1} α) (FilterBasis.filter.{u1} α B) (iInf.{u1, succ u1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Set.Elem.{u1} (Set.{u1} α) (FilterBasis.sets.{u1} α B)) (fun (s : Set.Elem.{u1} (Set.{u1} α) (FilterBasis.sets.{u1} α B)) => Filter.principal.{u1} α (Subtype.val.{succ u1} (Set.{u1} α) (fun (x : Set.{u1} α) => Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) x (FilterBasis.sets.{u1} α B)) s)))
+Case conversion may be inaccurate. Consider using '#align filter_basis.eq_infi_principal FilterBasis.eq_iInf_principalₓ'. -/
+theorem eq_iInf_principal (B : FilterBasis α) : B.filterₓ = ⨅ s : B.sets, 𝓟 s :=
by
have : Directed (· ≥ ·) fun s : B.sets => 𝓟 (s : Set α) :=
by
@@ -221,7 +221,7 @@ theorem eq_infᵢ_principal (B : FilterBasis α) : B.filterₓ = ⨅ s : B.sets,
exact subset_inter_iff.mp W_sub
ext U
simp [mem_filter_iff, mem_infi_of_directed this]
-#align filter_basis.eq_infi_principal FilterBasis.eq_infᵢ_principal
+#align filter_basis.eq_infi_principal FilterBasis.eq_iInf_principal
#print FilterBasis.generate /-
protected theorem generate (B : FilterBasis α) : generate B.sets = B.filterₓ :=
@@ -303,8 +303,8 @@ theorem hasBasis_generate (s : Set (Set α)) :
/-- The smallest filter basis containing a given collection of sets. -/
def FilterBasis.ofSets (s : Set (Set α)) : FilterBasis α
where
- sets := interₛ '' { t | Set.Finite t ∧ t ⊆ s }
- Nonempty := ⟨univ, ∅, ⟨⟨finite_empty, empty_subset s⟩, interₛ_empty⟩⟩
+ sets := sInter '' { t | Set.Finite t ∧ t ⊆ s }
+ Nonempty := ⟨univ, ∅, ⟨⟨finite_empty, empty_subset s⟩, sInter_empty⟩⟩
inter_sets := by
rintro _ _ ⟨a, ⟨fina, suba⟩, rfl⟩ ⟨b, ⟨finb, subb⟩, rfl⟩
exact
@@ -460,7 +460,7 @@ theorem HasBasis.eq_generate (h : l.HasBasis p s) : l = generate { U | ∃ i, p
#print Filter.generate_eq_generate_inter /-
theorem generate_eq_generate_inter (s : Set (Set α)) :
- generate s = generate (interₛ '' { t | Set.Finite t ∧ t ⊆ s }) := by
+ generate s = generate (sInter '' { t | Set.Finite t ∧ t ⊆ s }) := by
erw [(filter_basis.of_sets s).generate, ← (has_basis_generate s).filter_eq] <;> rfl
#align filter.generate_eq_generate_inter Filter.generate_eq_generate_inter
-/
@@ -736,13 +736,13 @@ theorem HasBasis.inf {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p'
⟨⟨i.1, i.2⟩, hi, Subset.rfl⟩
#align filter.has_basis.inf Filter.HasBasis.inf
-/- warning: filter.has_basis_infi' -> Filter.hasBasis_infᵢ' is a dubious translation:
+/- warning: filter.has_basis_infi' -> Filter.hasBasis_iInf' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u2) (succ (max u2 u3))} α (Prod.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i)) (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (If : Prod.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i)) => And (Set.Finite.{u2} ι (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) -> (p i (Prod.snd.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If i)))) (fun (If : Prod.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i)) => Set.interᵢ.{u1, succ u2} α ι (fun (i : ι) => Set.interᵢ.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) => s i (Prod.snd.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If i)))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u2) (succ (max u2 u3))} α (Prod.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i)) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (If : Prod.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i)) => And (Set.Finite.{u2} ι (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) -> (p i (Prod.snd.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If i)))) (fun (If : Prod.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i)) => Set.iInter.{u1, succ u2} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i (Prod.fst.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If)) => s i (Prod.snd.{u2, max u2 u3} (Set.{u2} ι) (forall (i : ι), ι' i) If i)))))
but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i)) (infᵢ.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (If : Prod.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i)) => And (Set.Finite.{u3} ι (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) -> (p i (Prod.snd.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If i)))) (fun (If : Prod.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i)) => Set.interᵢ.{u1, succ u3} α ι (fun (i : ι) => Set.interᵢ.{u1, 0} α (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) => s i (Prod.snd.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi' Filter.hasBasis_infᵢ'ₓ'. -/
-theorem hasBasis_infᵢ' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
+ forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i)) (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (If : Prod.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i)) => And (Set.Finite.{u3} ι (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) -> (p i (Prod.snd.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If i)))) (fun (If : Prod.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i)) => Set.iInter.{u1, succ u3} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i (Prod.fst.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If)) => s i (Prod.snd.{u3, max u3 u2} (Set.{u3} ι) (forall (i : ι), ι' i) If i)))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi' Filter.hasBasis_iInf'ₓ'. -/
+theorem hasBasis_iInf' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis (fun If : Set ι × ∀ i, ι' i => If.1.Finite ∧ ∀ i ∈ If.1, p i (If.2 i))
fun If : Set ι × ∀ i, ι' i => ⋂ i ∈ If.1, s i (If.2 i) :=
@@ -756,15 +756,15 @@ theorem hasBasis_infᵢ' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter
· rintro ⟨⟨I, f⟩, ⟨hI₁, hI₂⟩, hsub⟩
refine' mem_of_superset _ hsub
exact (bInter_mem hI₁).mpr fun i hi => mem_infi_of_mem i <| (hl i).mem_of_mem <| hI₂ _ hi⟩
-#align filter.has_basis_infi' Filter.hasBasis_infᵢ'
+#align filter.has_basis_infi' Filter.hasBasis_iInf'
-/- warning: filter.has_basis_infi -> Filter.hasBasis_infᵢ is a dubious translation:
+/- warning: filter.has_basis_infi -> Filter.hasBasis_iInf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u2) (succ (max u2 u3))} α (Sigma.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i))) (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (If : Sigma.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i))) => And (Set.Finite.{u2} ι (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) (forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)), p ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)))))) i) (Sigma.snd.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If i))) (fun (If : Sigma.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i))) => Set.interᵢ.{u1, succ u2} α (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) (fun (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) => s ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)))))) i) (Sigma.snd.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If i))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u2) (succ (max u2 u3))} α (Sigma.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i))) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (If : Sigma.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i))) => And (Set.Finite.{u2} ι (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) (forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)), p ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)))))) i) (Sigma.snd.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If i))) (fun (If : Sigma.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i))) => Set.iInter.{u1, succ u2} α (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) (fun (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) => s ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x (Sigma.fst.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If)))))) i) (Sigma.snd.{u2, max u2 u3} (Set.{u2} ι) (fun (I : Set.{u2} ι) => forall (i : coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I), ι' ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} ι) Type.{u2} (Set.hasCoeToSort.{u2} ι) I) ι (coeSubtype.{succ u2} ι (fun (x : ι) => Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) x I))))) i)) If i))))
but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i))) (infᵢ.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (If : Sigma.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i))) => And (Set.Finite.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) (forall (i : Set.Elem.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)), p (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) i) (Sigma.snd.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If i))) (fun (If : Sigma.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i))) => Set.interᵢ.{u1, succ u3} α (Set.Elem.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) (fun (i : Set.Elem.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) => s (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) i) (Sigma.snd.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi Filter.hasBasis_infᵢₓ'. -/
-theorem hasBasis_infᵢ {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
+ forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i))) (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (If : Sigma.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i))) => And (Set.Finite.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) (forall (i : Set.Elem.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)), p (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) i) (Sigma.snd.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If i))) (fun (If : Sigma.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i))) => Set.iInter.{u1, succ u3} α (Set.Elem.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) (fun (i : Set.Elem.{u3} ι (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) => s (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x (Sigma.fst.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If)) i) (Sigma.snd.{u3, max u3 u2} (Set.{u3} ι) (fun (I : Set.{u3} ι) => forall (i : Set.Elem.{u3} ι I), ι' (Subtype.val.{succ u3} ι (fun (x : ι) => Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) x I) i)) If i))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi Filter.hasBasis_iInfₓ'. -/
+theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis
(fun If : ΣI : Set ι, ∀ i : I, ι' i => If.1.Finite ∧ ∀ i : If.1, p i (If.2 i)) fun If =>
@@ -778,15 +778,15 @@ theorem hasBasis_infᵢ {ι : Type _} {ι' : ι → Type _} {l : ι → Filter
refine' mem_of_superset _ hsub
cases hI.nonempty_fintype
exact Inter_mem.2 fun i => mem_infi_of_mem i <| (hl i).mem_of_mem <| hf _
-#align filter.has_basis_infi Filter.hasBasis_infᵢ
+#align filter.has_basis_infi Filter.hasBasis_iInf
-/- warning: filter.has_basis_infi_of_directed' -> Filter.hasBasis_infᵢ_of_directed' is a dubious translation:
+/- warning: filter.has_basis_infi_of_directed' -> Filter.hasBasis_iInf_of_directed' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')))
but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5723 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5725 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5723 x._@.Mathlib.Order.Filter.Bases._hyg.5725) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) (infᵢ.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_of_directed' Filter.hasBasis_infᵢ_of_directed'ₓ'. -/
-theorem hasBasis_infᵢ_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty ι] {l : ι → Filter α}
+ forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5723 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5725 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5723 x._@.Mathlib.Order.Filter.Bases._hyg.5725) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_of_directed' Filter.hasBasis_iInf_of_directed'ₓ'. -/
+theorem hasBasis_iInf_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
(⨅ i, l i).HasBasis (fun ii' : Σi, ι' i => p ii'.1 ii'.2) fun ii' => s ii'.1 ii'.2 :=
@@ -794,15 +794,15 @@ theorem hasBasis_infᵢ_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonemp
refine' ⟨fun t => _⟩
rw [mem_infi_of_directed h, Sigma.exists]
exact exists_congr fun i => (hl i).mem_iff
-#align filter.has_basis_infi_of_directed' Filter.hasBasis_infᵢ_of_directed'
+#align filter.has_basis_infi_of_directed' Filter.hasBasis_iInf_of_directed'
-/- warning: filter.has_basis_infi_of_directed -> Filter.hasBasis_infᵢ_of_directed is a dubious translation:
+/- warning: filter.has_basis_infi_of_directed -> Filter.hasBasis_iInf_of_directed is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u2, u3} ι ι') => p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u2, u3} ι ι') => p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')))
but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5900 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5902 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5900 x._@.Mathlib.Order.Filter.Bases._hyg.5902) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (infᵢ.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u3, u2} ι ι') => p (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')) (fun (ii' : Prod.{u3, u2} ι ι') => s (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_of_directed Filter.hasBasis_infᵢ_of_directedₓ'. -/
-theorem hasBasis_infᵢ_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l : ι → Filter α}
+ forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5900 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5902 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5900 x._@.Mathlib.Order.Filter.Bases._hyg.5902) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u3, u2} ι ι') => p (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')) (fun (ii' : Prod.{u3, u2} ι ι') => s (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_of_directed Filter.hasBasis_iInf_of_directedₓ'. -/
+theorem hasBasis_iInf_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ι → ι' → Set α) (p : ι → ι' → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
(⨅ i, l i).HasBasis (fun ii' : ι × ι' => p ii'.1 ii'.2) fun ii' => s ii'.1 ii'.2 :=
@@ -810,15 +810,15 @@ theorem hasBasis_infᵢ_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {
refine' ⟨fun t => _⟩
rw [mem_infi_of_directed h, Prod.exists]
exact exists_congr fun i => (hl i).mem_iff
-#align filter.has_basis_infi_of_directed Filter.hasBasis_infᵢ_of_directed
+#align filter.has_basis_infi_of_directed Filter.hasBasis_iInf_of_directed
-/- warning: filter.has_basis_binfi_of_directed' -> Filter.hasBasis_binfᵢ_of_directed' is a dubious translation:
+/- warning: filter.has_basis_binfi_of_directed' -> Filter.hasBasis_biInf_of_directed' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {dom : Set.{u2} ι}, (Set.Nonempty.{u2} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) -> (Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i))) -> (DirectedOn.{u2} ι (Order.Preimage.{succ u2, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => infᵢ.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) => l i))) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => And (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') dom) (p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii'))) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii'))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} {dom : Set.{u2} ι}, (Set.Nonempty.{u2} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) -> (Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i))) -> (DirectedOn.{u2} ι (Order.Preimage.{succ u2, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) => l i))) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => And (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') dom) (p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii'))) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii'))))
but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} {dom : Set.{u3} ι}, (Set.Nonempty.{u3} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) -> (Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i))) -> (DirectedOn.{u3} ι (Order.Preimage.{succ u3, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) (infᵢ.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => infᵢ.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) => l i))) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => And (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') dom) (p (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii'))) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii'))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_of_directed' Filter.hasBasis_binfᵢ_of_directed'ₓ'. -/
-theorem hasBasis_binfᵢ_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : Set ι}
+ forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} {dom : Set.{u3} ι}, (Set.Nonempty.{u3} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) -> (Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i))) -> (DirectedOn.{u3} ι (Order.Preimage.{succ u3, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) => l i))) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => And (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') dom) (p (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii'))) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii'))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_of_directed' Filter.hasBasis_biInf_of_directed'ₓ'. -/
+theorem hasBasis_biInf_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : Set ι}
(hdom : dom.Nonempty) {l : ι → Filter α} (s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → 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' : Σi, ι' i => ii'.1 ∈ dom ∧ p ii'.1 ii'.2) fun ii' =>
@@ -832,15 +832,15 @@ theorem hasBasis_binfᵢ_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom :
exact ⟨b, ⟨hi, hb⟩, hbt⟩
· rintro ⟨b, ⟨hi, hb⟩, hibt⟩
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
-#align filter.has_basis_binfi_of_directed' Filter.hasBasis_binfᵢ_of_directed'
+#align filter.has_basis_binfi_of_directed' Filter.hasBasis_biInf_of_directed'
-/- warning: filter.has_basis_binfi_of_directed -> Filter.hasBasis_binfᵢ_of_directed is a dubious translation:
+/- warning: filter.has_basis_binfi_of_directed -> Filter.hasBasis_biInf_of_directed is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} {dom : Set.{u2} ι}, (Set.Nonempty.{u2} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) -> (Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i))) -> (DirectedOn.{u2} ι (Order.Preimage.{succ u2, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => infᵢ.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) => l i))) (fun (ii' : Prod.{u2, u3} ι ι') => And (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) (Prod.fst.{u2, u3} ι ι' ii') dom) (p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii'))) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii'))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} {dom : Set.{u2} ι}, (Set.Nonempty.{u2} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) -> (Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i))) -> (DirectedOn.{u2} ι (Order.Preimage.{succ u2, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i dom) => l i))) (fun (ii' : Prod.{u2, u3} ι ι') => And (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) (Prod.fst.{u2, u3} ι ι' ii') dom) (p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii'))) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii'))))
but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : Type.{u2}} {dom : Set.{u3} ι}, (Set.Nonempty.{u3} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) -> (Filter.HasBasis.{u1, succ u2} α ι' (l i) (p i) (s i))) -> (DirectedOn.{u3} ι (Order.Preimage.{succ u3, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (infᵢ.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => infᵢ.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) => l i))) (fun (ii' : Prod.{u3, u2} ι ι') => And (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) (Prod.fst.{u3, u2} ι ι' ii') dom) (p (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii'))) (fun (ii' : Prod.{u3, u2} ι ι') => s (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii'))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_of_directed Filter.hasBasis_binfᵢ_of_directedₓ'. -/
-theorem hasBasis_binfᵢ_of_directed {ι : Type _} {ι' : Sort _} {dom : Set ι} (hdom : dom.Nonempty)
+ forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : Type.{u2}} {dom : Set.{u3} ι}, (Set.Nonempty.{u3} ι dom) -> (forall {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) -> (Filter.HasBasis.{u1, succ u2} α ι' (l i) (p i) (s i))) -> (DirectedOn.{u3} ι (Order.Preimage.{succ u3, succ u1} ι (Filter.{u1} α) l (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))))) dom) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (iInf.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) (fun (H : Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) i dom) => l i))) (fun (ii' : Prod.{u3, u2} ι ι') => And (Membership.mem.{u3, u3} ι (Set.{u3} ι) (Set.instMembershipSet.{u3} ι) (Prod.fst.{u3, u2} ι ι' ii') dom) (p (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii'))) (fun (ii' : Prod.{u3, u2} ι ι') => s (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii'))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_of_directed Filter.hasBasis_biInf_of_directedₓ'. -/
+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' =>
@@ -854,7 +854,7 @@ theorem hasBasis_binfᵢ_of_directed {ι : Type _} {ι' : Sort _} {dom : Set ι}
exact ⟨b, ⟨hi, hb⟩, hbt⟩
· rintro ⟨b, ⟨hi, hb⟩, hibt⟩
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
-#align filter.has_basis_binfi_of_directed Filter.hasBasis_binfᵢ_of_directed
+#align filter.has_basis_binfi_of_directed Filter.hasBasis_biInf_of_directed
#print Filter.hasBasis_principal /-
theorem hasBasis_principal (t : Set α) : (𝓟 t).HasBasis (fun i : Unit => True) fun i => t :=
@@ -896,19 +896,19 @@ theorem HasBasis.sup {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p'
⟨⟨i.1, i.2⟩, hi, Subset.rfl⟩
#align filter.has_basis.sup Filter.HasBasis.sup
-/- warning: filter.has_basis_supr -> Filter.hasBasis_supᵢ is a dubious translation:
+/- warning: filter.has_basis_supr -> Filter.hasBasis_iSup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : ι -> Type.{u3}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max u2 (succ u3)} α (forall (i : ι), ι' i) (supᵢ.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasSup.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (f : forall (i : ι), ι' i) => forall (i : ι), p i (f i)) (fun (f : forall (i : ι), ι' i) => Set.unionᵢ.{u1, u2} α ι (fun (i : ι) => s i (f i))))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : ι -> Type.{u3}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max u2 (succ u3)} α (forall (i : ι), ι' i) (iSup.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasSup.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (f : forall (i : ι), ι' i) => forall (i : ι), p i (f i)) (fun (f : forall (i : ι), ι' i) => Set.iUnion.{u1, u2} α ι (fun (i : ι) => s i (f i))))
but is expected to have type
- forall {α : Type.{u1}} {ι : Sort.{u3}} {ι' : ι -> Type.{u2}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max u3 (succ u2)} α (forall (i : ι), ι' i) (supᵢ.{u1, u3} (Filter.{u1} α) (CompleteLattice.toSupSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (f : forall (i : ι), ι' i) => forall (i : ι), p i (f i)) (fun (f : forall (i : ι), ι' i) => Set.unionᵢ.{u1, u3} α ι (fun (i : ι) => s i (f i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_supr Filter.hasBasis_supᵢₓ'. -/
-theorem hasBasis_supᵢ {ι : Sort _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
+ forall {α : Type.{u1}} {ι : Sort.{u3}} {ι' : ι -> Type.{u2}} {l : ι -> (Filter.{u1} α)} {p : forall (i : ι), (ι' i) -> Prop} {s : forall (i : ι), (ι' i) -> (Set.{u1} α)}, (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Filter.HasBasis.{u1, max u3 (succ u2)} α (forall (i : ι), ι' i) (iSup.{u1, u3} (Filter.{u1} α) (CompleteLattice.toSupSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (f : forall (i : ι), ι' i) => forall (i : ι), p i (f i)) (fun (f : forall (i : ι), ι' i) => Set.iUnion.{u1, u3} α ι (fun (i : ι) => s i (f i))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_supr Filter.hasBasis_iSupₓ'. -/
+theorem hasBasis_iSup {ι : Sort _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨆ i, l i).HasBasis (fun f : ∀ i, ι' i => ∀ i, p i (f i)) fun f : ∀ i, ι' i => ⋃ i, s i (f i) :=
hasBasis_iff.mpr fun t => by
simp only [has_basis_iff, (hl _).mem_iff, Classical.skolem, forall_and, Union_subset_iff,
mem_supr]
-#align filter.has_basis_supr Filter.hasBasis_supᵢ
+#align filter.has_basis_supr Filter.hasBasis_iSup
/- warning: filter.has_basis.sup_principal -> Filter.HasBasis.sup_principal is a dubious translation:
lean 3 declaration is
@@ -1188,83 +1188,83 @@ theorem inf_neBot_iff_frequently_right {f g : Filter α} :
exact inf_ne_bot_iff_frequently_left
#align filter.inf_ne_bot_iff_frequently_right Filter.inf_neBot_iff_frequently_right
-/- warning: filter.has_basis.eq_binfi -> Filter.HasBasis.eq_binfᵢ is a dubious translation:
+/- warning: filter.has_basis.eq_binfi -> Filter.HasBasis.eq_biInf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Eq.{succ u1} (Filter.{u1} α) l (infᵢ.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => infᵢ.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (p i) (fun (_x : p i) => Filter.principal.{u1} α (s i)))))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Eq.{succ u1} (Filter.{u1} α) l (iInf.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (p i) (fun (_x : p i) => Filter.principal.{u1} α (s i)))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Eq.{succ u2} (Filter.{u2} α) l (infᵢ.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => infᵢ.{u2, 0} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) (p i) (fun (_x : p i) => Filter.principal.{u2} α (s i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.eq_binfi Filter.HasBasis.eq_binfᵢₓ'. -/
-theorem HasBasis.eq_binfᵢ (h : l.HasBasis p s) : l = ⨅ (i) (_ : p i), 𝓟 (s i) :=
- eq_binfᵢ_of_mem_iff_exists_mem fun t => by simp only [h.mem_iff, mem_principal]
-#align filter.has_basis.eq_binfi Filter.HasBasis.eq_binfᵢ
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Eq.{succ u2} (Filter.{u2} α) l (iInf.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => iInf.{u2, 0} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) (p i) (fun (_x : p i) => Filter.principal.{u2} α (s i)))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.eq_binfi Filter.HasBasis.eq_biInfₓ'. -/
+theorem HasBasis.eq_biInf (h : l.HasBasis p s) : l = ⨅ (i) (_ : p i), 𝓟 (s i) :=
+ eq_biInf_of_mem_iff_exists_mem fun t => by simp only [h.mem_iff, mem_principal]
+#align filter.has_basis.eq_binfi Filter.HasBasis.eq_biInf
-/- warning: filter.has_basis.eq_infi -> Filter.HasBasis.eq_infᵢ is a dubious translation:
+/- warning: filter.has_basis.eq_infi -> Filter.HasBasis.eq_iInf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l (fun (_x : ι) => True) s) -> (Eq.{succ u1} (Filter.{u1} α) l (infᵢ.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l (fun (_x : ι) => True) s) -> (Eq.{succ u1} (Filter.{u1} α) l (iInf.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l (fun (_x : ι) => True) s) -> (Eq.{succ u2} (Filter.{u2} α) l (infᵢ.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => Filter.principal.{u2} α (s i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.eq_infi Filter.HasBasis.eq_infᵢₓ'. -/
-theorem HasBasis.eq_infᵢ (h : l.HasBasis (fun _ => True) s) : l = ⨅ i, 𝓟 (s i) := by
- simpa only [infᵢ_true] using h.eq_binfi
-#align filter.has_basis.eq_infi Filter.HasBasis.eq_infᵢ
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l (fun (_x : ι) => True) s) -> (Eq.{succ u2} (Filter.{u2} α) l (iInf.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => Filter.principal.{u2} α (s i))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.eq_infi Filter.HasBasis.eq_iInfₓ'. -/
+theorem HasBasis.eq_iInf (h : l.HasBasis (fun _ => True) s) : l = ⨅ i, 𝓟 (s i) := by
+ simpa only [iInf_true] using h.eq_binfi
+#align filter.has_basis.eq_infi Filter.HasBasis.eq_iInf
-/- warning: filter.has_basis_infi_principal -> Filter.hasBasis_infᵢ_principal is a dubious translation:
+/- warning: filter.has_basis_infi_principal -> Filter.hasBasis_iInf_principal is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {s : ι -> (Set.{u1} α)}, (Directed.{u1, u2} (Set.{u1} α) ι (GE.ge.{u1} (Set.{u1} α) (Set.hasLe.{u1} α)) s) -> (forall [_inst_1 : Nonempty.{u2} ι], Filter.HasBasis.{u1, u2} α ι (infᵢ.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (_x : ι) => True) s)
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {s : ι -> (Set.{u1} α)}, (Directed.{u1, u2} (Set.{u1} α) ι (GE.ge.{u1} (Set.{u1} α) (Set.hasLe.{u1} α)) s) -> (forall [_inst_1 : Nonempty.{u2} ι], Filter.HasBasis.{u1, u2} α ι (iInf.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (_x : ι) => True) s)
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {s : ι -> (Set.{u2} α)}, (Directed.{u2, u1} (Set.{u2} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9263 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9265 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9263 x._@.Mathlib.Order.Filter.Bases._hyg.9265) s) -> (forall [_inst_1 : Nonempty.{u1} ι], Filter.HasBasis.{u2, u1} α ι (infᵢ.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => Filter.principal.{u2} α (s i))) (fun (_x : ι) => True) s)
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_principal Filter.hasBasis_infᵢ_principalₓ'. -/
-theorem hasBasis_infᵢ_principal {s : ι → Set α} (h : Directed (· ≥ ·) s) [Nonempty ι] :
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {s : ι -> (Set.{u2} α)}, (Directed.{u2, u1} (Set.{u2} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9263 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9265 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9263 x._@.Mathlib.Order.Filter.Bases._hyg.9265) s) -> (forall [_inst_1 : Nonempty.{u1} ι], Filter.HasBasis.{u2, u1} α ι (iInf.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => Filter.principal.{u2} α (s i))) (fun (_x : ι) => True) s)
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_principal Filter.hasBasis_iInf_principalₓ'. -/
+theorem hasBasis_iInf_principal {s : ι → Set α} (h : Directed (· ≥ ·) s) [Nonempty ι] :
(⨅ i, 𝓟 (s i)).HasBasis (fun _ => True) s :=
⟨by
refine' fun t =>
(mem_infi_of_directed (h.mono_comp _ _) t).trans <| by
simp only [exists_prop, true_and_iff, mem_principal]
exact fun _ _ => principal_mono.2⟩
-#align filter.has_basis_infi_principal Filter.hasBasis_infᵢ_principal
+#align filter.has_basis_infi_principal Filter.hasBasis_iInf_principal
-/- warning: filter.has_basis_infi_principal_finite -> Filter.hasBasis_infᵢ_principal_finite is a dubious translation:
+/- warning: filter.has_basis_infi_principal_finite -> Filter.hasBasis_iInf_principal_finite is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Filter.HasBasis.{u1, succ u2} α (Set.{u2} ι) (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (t : Set.{u2} ι) => Set.Finite.{u2} ι t) (fun (t : Set.{u2} ι) => Set.interᵢ.{u1, succ u2} α ι (fun (i : ι) => Set.interᵢ.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) => s i)))
+ forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Filter.HasBasis.{u1, succ u2} α (Set.{u2} ι) (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (t : Set.{u2} ι) => Set.Finite.{u2} ι t) (fun (t : Set.{u2} ι) => Set.iInter.{u1, succ u2} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) i t) => s i)))
but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Filter.HasBasis.{u1, succ u2} α (Set.{u2} ι) (infᵢ.{u1, succ u2} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (t : Set.{u2} ι) => Set.Finite.{u2} ι t) (fun (t : Set.{u2} ι) => Set.interᵢ.{u1, succ u2} α ι (fun (i : ι) => Set.interᵢ.{u1, 0} α (Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) i t) (fun (H : Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) i t) => s i)))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_principal_finite Filter.hasBasis_infᵢ_principal_finiteₓ'. -/
+ forall {α : Type.{u1}} {ι : Type.{u2}} (s : ι -> (Set.{u1} α)), Filter.HasBasis.{u1, succ u2} α (Set.{u2} ι) (iInf.{u1, succ u2} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (t : Set.{u2} ι) => Set.Finite.{u2} ι t) (fun (t : Set.{u2} ι) => Set.iInter.{u1, succ u2} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) i t) (fun (H : Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) i t) => s i)))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_principal_finite Filter.hasBasis_iInf_principal_finiteₓ'. -/
/-- If `s : ι → set α` is an indexed family of sets, then finite intersections of `s i` form a basis
of `⨅ i, 𝓟 (s i)`. -/
-theorem hasBasis_infᵢ_principal_finite {ι : Type _} (s : ι → Set α) :
+theorem hasBasis_iInf_principal_finite {ι : Type _} (s : ι → Set α) :
(⨅ i, 𝓟 (s i)).HasBasis (fun t : Set ι => t.Finite) fun t => ⋂ i ∈ t, s i :=
by
refine' ⟨fun U => (mem_infi_finite _).trans _⟩
simp only [infi_principal_finset, mem_Union, mem_principal, exists_prop, exists_finite_iff_finset,
- Finset.set_binterᵢ_coe]
-#align filter.has_basis_infi_principal_finite Filter.hasBasis_infᵢ_principal_finite
+ Finset.set_biInter_coe]
+#align filter.has_basis_infi_principal_finite Filter.hasBasis_iInf_principal_finite
-/- warning: filter.has_basis_binfi_principal -> Filter.hasBasis_binfᵢ_principal is a dubious translation:
+/- warning: filter.has_basis_binfi_principal -> Filter.hasBasis_biInf_principal is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {s : β -> (Set.{u1} α)} {S : Set.{u2} β}, (DirectedOn.{u2} β (Order.Preimage.{succ u2, succ u1} β (Set.{u1} α) s (GE.ge.{u1} (Set.{u1} α) (Set.hasLe.{u1} α))) S) -> (Set.Nonempty.{u2} β S) -> (Filter.HasBasis.{u1, succ u2} α β (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) β (fun (i : β) => infᵢ.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) => Filter.principal.{u1} α (s i)))) (fun (i : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) s)
+ forall {α : Type.{u1}} {β : Type.{u2}} {s : β -> (Set.{u1} α)} {S : Set.{u2} β}, (DirectedOn.{u2} β (Order.Preimage.{succ u2, succ u1} β (Set.{u1} α) s (GE.ge.{u1} (Set.{u1} α) (Set.hasLe.{u1} α))) S) -> (Set.Nonempty.{u2} β S) -> (Filter.HasBasis.{u1, succ u2} α β (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) β (fun (i : β) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) => Filter.principal.{u1} α (s i)))) (fun (i : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) s)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {s : β -> (Set.{u2} α)} {S : Set.{u1} β}, (DirectedOn.{u1} β (Order.Preimage.{succ u1, succ u2} β (Set.{u2} α) s (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9496 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9498 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9496 x._@.Mathlib.Order.Filter.Bases._hyg.9498)) S) -> (Set.Nonempty.{u1} β S) -> (Filter.HasBasis.{u2, succ u1} α β (infᵢ.{u2, succ u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) β (fun (i : β) => infᵢ.{u2, 0} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) (fun (H : Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) => Filter.principal.{u2} α (s i)))) (fun (i : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) s)
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_principal Filter.hasBasis_binfᵢ_principalₓ'. -/
-theorem hasBasis_binfᵢ_principal {s : β → Set α} {S : Set β} (h : DirectedOn (s ⁻¹'o (· ≥ ·)) S)
+ forall {α : Type.{u2}} {β : Type.{u1}} {s : β -> (Set.{u2} α)} {S : Set.{u1} β}, (DirectedOn.{u1} β (Order.Preimage.{succ u1, succ u2} β (Set.{u2} α) s (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9496 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9498 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9496 x._@.Mathlib.Order.Filter.Bases._hyg.9498)) S) -> (Set.Nonempty.{u1} β S) -> (Filter.HasBasis.{u2, succ u1} α β (iInf.{u2, succ u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) β (fun (i : β) => iInf.{u2, 0} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) (fun (H : Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) => Filter.principal.{u2} α (s i)))) (fun (i : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) s)
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_principal Filter.hasBasis_biInf_principalₓ'. -/
+theorem hasBasis_biInf_principal {s : β → Set α} {S : Set β} (h : DirectedOn (s ⁻¹'o (· ≥ ·)) S)
(ne : S.Nonempty) : (⨅ i ∈ S, 𝓟 (s i)).HasBasis (fun i => i ∈ S) s :=
⟨by
refine' fun t => (mem_binfi_of_directed _ Ne).trans <| by simp only [mem_principal]
rw [directedOn_iff_directed, ← directed_comp, (· ∘ ·)] at h⊢
apply h.mono_comp _ _
exact fun _ _ => principal_mono.2⟩
-#align filter.has_basis_binfi_principal Filter.hasBasis_binfᵢ_principal
+#align filter.has_basis_binfi_principal Filter.hasBasis_biInf_principal
-/- warning: filter.has_basis_binfi_principal' -> Filter.hasBasis_binfᵢ_principal' is a dubious translation:
+/- warning: filter.has_basis_binfi_principal' -> Filter.hasBasis_biInf_principal' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (forall (i : ι), (p i) -> (forall (j : ι), (p j) -> (Exists.{succ u2} ι (fun (k : ι) => Exists.{0} (p k) (fun (h : p k) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s k) (s i)) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s k) (s j))))))) -> (Exists.{succ u2} ι (fun (i : ι) => p i)) -> (Filter.HasBasis.{u1, succ u2} α ι (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => infᵢ.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (p i) (fun (h : p i) => Filter.principal.{u1} α (s i)))) p s)
+ forall {α : Type.{u1}} {ι : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (forall (i : ι), (p i) -> (forall (j : ι), (p j) -> (Exists.{succ u2} ι (fun (k : ι) => Exists.{0} (p k) (fun (h : p k) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s k) (s i)) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (s k) (s j))))))) -> (Exists.{succ u2} ι (fun (i : ι) => p i)) -> (Filter.HasBasis.{u1, succ u2} α ι (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (p i) (fun (h : p i) => Filter.principal.{u1} α (s i)))) p s)
but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (forall (i : ι), (p i) -> (forall (j : ι), (p j) -> (Exists.{succ u2} ι (fun (k : ι) => And (p k) (And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (s k) (s i)) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (s k) (s j))))))) -> (Exists.{succ u2} ι (fun (i : ι) => p i)) -> (Filter.HasBasis.{u1, succ u2} α ι (infᵢ.{u1, succ u2} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => infᵢ.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (p i) (fun (h : p i) => Filter.principal.{u1} α (s i)))) p s)
-Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_principal' Filter.hasBasis_binfᵢ_principal'ₓ'. -/
-theorem hasBasis_binfᵢ_principal' {ι : Type _} {p : ι → Prop} {s : ι → Set α}
+ forall {α : Type.{u1}} {ι : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (forall (i : ι), (p i) -> (forall (j : ι), (p j) -> (Exists.{succ u2} ι (fun (k : ι) => And (p k) (And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (s k) (s i)) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (s k) (s j))))))) -> (Exists.{succ u2} ι (fun (i : ι) => p i)) -> (Filter.HasBasis.{u1, succ u2} α ι (iInf.{u1, succ u2} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (p i) (fun (h : p i) => Filter.principal.{u1} α (s i)))) p s)
+Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_principal' Filter.hasBasis_biInf_principal'ₓ'. -/
+theorem hasBasis_biInf_principal' {ι : Type _} {p : ι → Prop} {s : ι → Set α}
(h : ∀ i, p i → ∀ j, p j → ∃ (k : _)(h : p k), s k ⊆ s i ∧ s k ⊆ s j) (ne : ∃ i, p i) :
(⨅ (i) (h : p i), 𝓟 (s i)).HasBasis p s :=
- Filter.hasBasis_binfᵢ_principal h Ne
-#align filter.has_basis_binfi_principal' Filter.hasBasis_binfᵢ_principal'
+ Filter.hasBasis_biInf_principal h Ne
+#align filter.has_basis_binfi_principal' Filter.hasBasis_biInf_principal'
/- warning: filter.has_basis.map -> Filter.HasBasis.map is a dubious translation:
lean 3 declaration is
@@ -1314,42 +1314,42 @@ theorem HasBasis.forall_mem_mem (h : HasBasis l p s) {x : α} :
exact ⟨fun h i hi => h (s i) i hi subset.rfl, fun h t i hi ht => ht (h i hi)⟩
#align filter.has_basis.forall_mem_mem Filter.HasBasis.forall_mem_mem
-/- warning: filter.has_basis.binfi_mem -> Filter.HasBasis.binfᵢ_mem is a dubious translation:
+/- warning: filter.has_basis.binfi_mem -> Filter.HasBasis.biInf_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} [_inst_1 : CompleteLattice.{u2} β] {f : (Set.{u1} α) -> β}, (Filter.HasBasis.{u1, u3} α ι l p s) -> (Monotone.{u1, u2} (Set.{u1} α) β (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) (PartialOrder.toPreorder.{u2} β (CompleteSemilatticeInf.toPartialOrder.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1))) f) -> (Eq.{succ u2} β (infᵢ.{u2, succ u1} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) (Set.{u1} α) (fun (t : Set.{u1} α) => infᵢ.{u2, 0} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) => f t))) (infᵢ.{u2, u3} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) ι (fun (i : ι) => infᵢ.{u2, 0} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) (p i) (fun (hi : p i) => f (s i)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {ι : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} [_inst_1 : CompleteLattice.{u2} β] {f : (Set.{u1} α) -> β}, (Filter.HasBasis.{u1, u3} α ι l p s) -> (Monotone.{u1, u2} (Set.{u1} α) β (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) (PartialOrder.toPreorder.{u2} β (CompleteSemilatticeInf.toPartialOrder.{u2} β (CompleteLattice.toCompleteSemilatticeInf.{u2} β _inst_1))) f) -> (Eq.{succ u2} β (iInf.{u2, succ u1} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) (Set.{u1} α) (fun (t : Set.{u1} α) => iInf.{u2, 0} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) => f t))) (iInf.{u2, u3} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) ι (fun (i : ι) => iInf.{u2, 0} β (ConditionallyCompleteLattice.toHasInf.{u2} β (CompleteLattice.toConditionallyCompleteLattice.{u2} β _inst_1)) (p i) (fun (hi : p i) => f (s i)))))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} [_inst_1 : CompleteLattice.{u3} β] {f : (Set.{u2} α) -> β}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Monotone.{u2, u3} (Set.{u2} α) β (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α))))))) (PartialOrder.toPreorder.{u3} β (CompleteSemilatticeInf.toPartialOrder.{u3} β (CompleteLattice.toCompleteSemilatticeInf.{u3} β _inst_1))) f) -> (Eq.{succ u3} β (infᵢ.{u3, succ u2} β (CompleteLattice.toInfSet.{u3} β _inst_1) (Set.{u2} α) (fun (t : Set.{u2} α) => infᵢ.{u3, 0} β (CompleteLattice.toInfSet.{u3} β _inst_1) (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l) (fun (H : Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l) => f t))) (infᵢ.{u3, u1} β (CompleteLattice.toInfSet.{u3} β _inst_1) ι (fun (i : ι) => infᵢ.{u3, 0} β (CompleteLattice.toInfSet.{u3} β _inst_1) (p i) (fun (hi : p i) => f (s i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.binfi_mem Filter.HasBasis.binfᵢ_memₓ'. -/
-protected theorem HasBasis.binfᵢ_mem [CompleteLattice β] {f : Set α → β} (h : HasBasis l p s)
+ forall {α : Type.{u2}} {β : Type.{u3}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)} [_inst_1 : CompleteLattice.{u3} β] {f : (Set.{u2} α) -> β}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Monotone.{u2, u3} (Set.{u2} α) β (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α))))))) (PartialOrder.toPreorder.{u3} β (CompleteSemilatticeInf.toPartialOrder.{u3} β (CompleteLattice.toCompleteSemilatticeInf.{u3} β _inst_1))) f) -> (Eq.{succ u3} β (iInf.{u3, succ u2} β (CompleteLattice.toInfSet.{u3} β _inst_1) (Set.{u2} α) (fun (t : Set.{u2} α) => iInf.{u3, 0} β (CompleteLattice.toInfSet.{u3} β _inst_1) (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l) (fun (H : Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) t l) => f t))) (iInf.{u3, u1} β (CompleteLattice.toInfSet.{u3} β _inst_1) ι (fun (i : ι) => iInf.{u3, 0} β (CompleteLattice.toInfSet.{u3} β _inst_1) (p i) (fun (hi : p i) => f (s i)))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.binfi_mem Filter.HasBasis.biInf_memₓ'. -/
+protected theorem HasBasis.biInf_mem [CompleteLattice β] {f : Set α → β} (h : HasBasis l p s)
(hf : Monotone f) : (⨅ t ∈ l, f t) = ⨅ (i) (hi : p i), f (s i) :=
- le_antisymm (le_infᵢ₂ fun i hi => infᵢ₂_le (s i) (h.mem_of_mem hi)) <|
- le_infᵢ₂ fun t ht =>
+ le_antisymm (le_iInf₂ fun i hi => iInf₂_le (s i) (h.mem_of_mem hi)) <|
+ le_iInf₂ fun t ht =>
let ⟨i, hpi, hi⟩ := h.mem_iff.1 ht
- infᵢ₂_le_of_le i hpi (hf hi)
-#align filter.has_basis.binfi_mem Filter.HasBasis.binfᵢ_mem
+ iInf₂_le_of_le i hpi (hf hi)
+#align filter.has_basis.binfi_mem Filter.HasBasis.biInf_mem
-/- warning: filter.has_basis.bInter_mem -> Filter.HasBasis.binterᵢ_mem is a dubious translation:
+/- warning: filter.has_basis.bInter_mem -> Filter.HasBasis.biInter_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {ι : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {f : (Set.{u1} α) -> (Set.{u2} β)}, (Filter.HasBasis.{u1, u3} α ι l p s) -> (Monotone.{u1, u2} (Set.{u1} α) (Set.{u2} β) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β))))))) f) -> (Eq.{succ u2} (Set.{u2} β) (Set.interᵢ.{u2, succ u1} β (Set.{u1} α) (fun (t : Set.{u1} α) => Set.interᵢ.{u2, 0} β (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) => f t))) (Set.interᵢ.{u2, u3} β ι (fun (i : ι) => Set.interᵢ.{u2, 0} β (p i) (fun (hi : p i) => f (s i)))))
+ forall {α : Type.{u1}} {β : Type.{u2}} {ι : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {f : (Set.{u1} α) -> (Set.{u2} β)}, (Filter.HasBasis.{u1, u3} α ι l p s) -> (Monotone.{u1, u2} (Set.{u1} α) (Set.{u2} β) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β))))))) f) -> (Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u1} β (Set.{u1} α) (fun (t : Set.{u1} α) => Set.iInter.{u2, 0} β (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) t l) => f t))) (Set.iInter.{u2, u3} β ι (fun (i : ι) => Set.iInter.{u2, 0} β (p i) (fun (hi : p i) => f (s i)))))
but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {f : (Set.{u3} α) -> (Set.{u2} β)}, (Filter.HasBasis.{u3, u1} α ι l p s) -> (Monotone.{u3, u2} (Set.{u3} α) (Set.{u2} β) (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.instCompleteBooleanAlgebraSet.{u3} α))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.instCompleteBooleanAlgebraSet.{u2} β))))))) f) -> (Eq.{succ u2} (Set.{u2} β) (Set.interᵢ.{u2, succ u3} β (Set.{u3} α) (fun (t : Set.{u3} α) => Set.interᵢ.{u2, 0} β (Membership.mem.{u3, u3} (Set.{u3} α) (Filter.{u3} α) (instMembershipSetFilter.{u3} α) t l) (fun (H : Membership.mem.{u3, u3} (Set.{u3} α) (Filter.{u3} α) (instMembershipSetFilter.{u3} α) t l) => f t))) (Set.interᵢ.{u2, u1} β ι (fun (i : ι) => Set.interᵢ.{u2, 0} β (p i) (fun (hi : p i) => f (s i)))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.bInter_mem Filter.HasBasis.binterᵢ_memₓ'. -/
-protected theorem HasBasis.binterᵢ_mem {f : Set α → Set β} (h : HasBasis l p s) (hf : Monotone f) :
+ forall {α : Type.{u3}} {β : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {f : (Set.{u3} α) -> (Set.{u2} β)}, (Filter.HasBasis.{u3, u1} α ι l p s) -> (Monotone.{u3, u2} (Set.{u3} α) (Set.{u2} β) (PartialOrder.toPreorder.{u3} (Set.{u3} α) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} α) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} α) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} α) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} α) (Set.instCompleteBooleanAlgebraSet.{u3} α))))))) (PartialOrder.toPreorder.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.instCompleteBooleanAlgebraSet.{u2} β))))))) f) -> (Eq.{succ u2} (Set.{u2} β) (Set.iInter.{u2, succ u3} β (Set.{u3} α) (fun (t : Set.{u3} α) => Set.iInter.{u2, 0} β (Membership.mem.{u3, u3} (Set.{u3} α) (Filter.{u3} α) (instMembershipSetFilter.{u3} α) t l) (fun (H : Membership.mem.{u3, u3} (Set.{u3} α) (Filter.{u3} α) (instMembershipSetFilter.{u3} α) t l) => f t))) (Set.iInter.{u2, u1} β ι (fun (i : ι) => Set.iInter.{u2, 0} β (p i) (fun (hi : p i) => f (s i)))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_memₓ'. -/
+protected theorem HasBasis.biInter_mem {f : Set α → Set β} (h : HasBasis l p s) (hf : Monotone f) :
(⋂ t ∈ l, f t) = ⋂ (i) (hi : p i), f (s i) :=
- h.binfᵢ_mem hf
-#align filter.has_basis.bInter_mem Filter.HasBasis.binterᵢ_mem
+ h.biInf_mem hf
+#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_mem
-/- warning: filter.has_basis.sInter_sets -> Filter.HasBasis.interₛ_sets is a dubious translation:
+/- warning: filter.has_basis.sInter_sets -> Filter.HasBasis.sInter_sets is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Eq.{succ u1} (Set.{u1} α) (Set.interₛ.{u1} α (Filter.sets.{u1} α l)) (Set.interᵢ.{u1, u2} α ι (fun (i : ι) => Set.interᵢ.{u1, 0} α (p i) (fun (hi : p i) => s i))))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Eq.{succ u1} (Set.{u1} α) (Set.sInter.{u1} α (Filter.sets.{u1} α l)) (Set.iInter.{u1, u2} α ι (fun (i : ι) => Set.iInter.{u1, 0} α (p i) (fun (hi : p i) => s i))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Eq.{succ u2} (Set.{u2} α) (Set.interₛ.{u2} α (Filter.sets.{u2} α l)) (Set.interᵢ.{u2, u1} α ι (fun (i : ι) => Set.interᵢ.{u2, 0} α (p i) (fun (hi : p i) => s i))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.sInter_sets Filter.HasBasis.interₛ_setsₓ'. -/
-theorem HasBasis.interₛ_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (hi : p i), s i :=
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Eq.{succ u2} (Set.{u2} α) (Set.sInter.{u2} α (Filter.sets.{u2} α l)) (Set.iInter.{u2, u1} α ι (fun (i : ι) => Set.iInter.{u2, 0} α (p i) (fun (hi : p i) => s i))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_setsₓ'. -/
+theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (hi : p i), s i :=
by
rw [sInter_eq_bInter]
exact h.bInter_mem monotone_id
-#align filter.has_basis.sInter_sets Filter.HasBasis.interₛ_sets
+#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_sets
variable {ι'' : Type _} [Preorder ι''] (l) (s'' : ι'' → Set α)
@@ -1641,22 +1641,22 @@ theorem HasCountableBasis.isCountablyGenerated {f : Filter α} {p : ι → Prop}
/- warning: filter.antitone_seq_of_seq -> Filter.antitone_seq_of_seq is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} (s : Nat -> (Set.{u1} α)), Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (t : Nat -> (Set.{u1} α)) => And (Antitone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) t) (Eq.{succ u1} (Filter.{u1} α) (infᵢ.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (s i))) (infᵢ.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (t i)))))
+ forall {α : Type.{u1}} (s : Nat -> (Set.{u1} α)), Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (t : Nat -> (Set.{u1} α)) => And (Antitone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) t) (Eq.{succ u1} (Filter.{u1} α) (iInf.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (s i))) (iInf.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (t i)))))
but is expected to have type
- forall {α : Type.{u1}} (s : Nat -> (Set.{u1} α)), Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (t : Nat -> (Set.{u1} α)) => And (Antitone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) t) (Eq.{succ u1} (Filter.{u1} α) (infᵢ.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (s i))) (infᵢ.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (t i)))))
+ forall {α : Type.{u1}} (s : Nat -> (Set.{u1} α)), Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (t : Nat -> (Set.{u1} α)) => And (Antitone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) t) (Eq.{succ u1} (Filter.{u1} α) (iInf.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (s i))) (iInf.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (t i)))))
Case conversion may be inaccurate. Consider using '#align filter.antitone_seq_of_seq Filter.antitone_seq_of_seqₓ'. -/
theorem antitone_seq_of_seq (s : ℕ → Set α) :
∃ t : ℕ → Set α, Antitone t ∧ (⨅ i, 𝓟 <| s i) = ⨅ i, 𝓟 (t i) :=
by
use fun n => ⋂ m ≤ n, s m; constructor
· exact fun i j hij => bInter_mono (Iic_subset_Iic.2 hij) fun n hn => subset.refl _
- apply le_antisymm <;> rw [le_infᵢ_iff] <;> intro i
+ apply le_antisymm <;> rw [le_iInf_iff] <;> intro i
· rw [le_principal_iff]
refine' (bInter_mem (finite_le_nat _)).2 fun j hji => _
rw [← le_principal_iff]
- apply infᵢ_le_of_le j _
+ apply iInf_le_of_le j _
exact le_rfl
- · apply infᵢ_le_of_le i _
+ · apply iInf_le_of_le i _
rw [principal_mono]
intro a
simp
@@ -1665,44 +1665,44 @@ theorem antitone_seq_of_seq (s : ℕ → Set α) :
rfl
#align filter.antitone_seq_of_seq Filter.antitone_seq_of_seq
-/- warning: filter.countable_binfi_eq_infi_seq -> Filter.countable_binfᵢ_eq_infᵢ_seq is a dubious translation:
+/- warning: filter.countable_binfi_eq_infi_seq -> Filter.countable_biInf_eq_iInf_seq is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] {B : Set.{u2} ι}, (Set.Countable.{u2} ι B) -> (Set.Nonempty.{u2} ι B) -> (forall (f : ι -> α), Exists.{succ u2} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u1} α (infᵢ.{u1, succ u2} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) ι (fun (t : ι) => infᵢ.{u1, 0} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) => f t))) (infᵢ.{u1, 1} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) Nat (fun (i : Nat) => f (x i)))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] {B : Set.{u2} ι}, (Set.Countable.{u2} ι B) -> (Set.Nonempty.{u2} ι B) -> (forall (f : ι -> α), Exists.{succ u2} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u1} α (iInf.{u1, succ u2} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) ι (fun (t : ι) => iInf.{u1, 0} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) => f t))) (iInf.{u1, 1} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) Nat (fun (i : Nat) => f (x i)))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] {B : Set.{u1} ι}, (Set.Countable.{u1} ι B) -> (Set.Nonempty.{u1} ι B) -> (forall (f : ι -> α), Exists.{succ u1} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u2} α (infᵢ.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (t : ι) => infᵢ.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) => f t))) (infᵢ.{u2, 1} α (CompleteLattice.toInfSet.{u2} α _inst_1) Nat (fun (i : Nat) => f (x i)))))
-Case conversion may be inaccurate. Consider using '#align filter.countable_binfi_eq_infi_seq Filter.countable_binfᵢ_eq_infᵢ_seqₓ'. -/
-theorem countable_binfᵢ_eq_infᵢ_seq [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] {B : Set.{u1} ι}, (Set.Countable.{u1} ι B) -> (Set.Nonempty.{u1} ι B) -> (forall (f : ι -> α), Exists.{succ u1} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u2} α (iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (t : ι) => iInf.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) => f t))) (iInf.{u2, 1} α (CompleteLattice.toInfSet.{u2} α _inst_1) Nat (fun (i : Nat) => f (x i)))))
+Case conversion may be inaccurate. Consider using '#align filter.countable_binfi_eq_infi_seq Filter.countable_biInf_eq_iInf_seqₓ'. -/
+theorem countable_biInf_eq_iInf_seq [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
(Bne : B.Nonempty) (f : ι → α) : ∃ x : ℕ → ι, (⨅ t ∈ B, f t) = ⨅ i, f (x i) :=
let ⟨g, hg⟩ := Bcbl.exists_eq_range Bne
- ⟨g, hg.symm ▸ infᵢ_range⟩
-#align filter.countable_binfi_eq_infi_seq Filter.countable_binfᵢ_eq_infᵢ_seq
+ ⟨g, hg.symm ▸ iInf_range⟩
+#align filter.countable_binfi_eq_infi_seq Filter.countable_biInf_eq_iInf_seq
-/- warning: filter.countable_binfi_eq_infi_seq' -> Filter.countable_binfᵢ_eq_infᵢ_seq' is a dubious translation:
+/- warning: filter.countable_binfi_eq_infi_seq' -> Filter.countable_biInf_eq_iInf_seq' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] {B : Set.{u2} ι}, (Set.Countable.{u2} ι B) -> (forall (f : ι -> α) {i₀ : ι}, (Eq.{succ u1} α (f i₀) (Top.top.{u1} α (CompleteLattice.toHasTop.{u1} α _inst_1))) -> (Exists.{succ u2} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u1} α (infᵢ.{u1, succ u2} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) ι (fun (t : ι) => infᵢ.{u1, 0} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) => f t))) (infᵢ.{u1, 1} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) Nat (fun (i : Nat) => f (x i))))))
+ forall {α : Type.{u1}} {ι : Type.{u2}} [_inst_1 : CompleteLattice.{u1} α] {B : Set.{u2} ι}, (Set.Countable.{u2} ι B) -> (forall (f : ι -> α) {i₀ : ι}, (Eq.{succ u1} α (f i₀) (Top.top.{u1} α (CompleteLattice.toHasTop.{u1} α _inst_1))) -> (Exists.{succ u2} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u1} α (iInf.{u1, succ u2} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) ι (fun (t : ι) => iInf.{u1, 0} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) (Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) (fun (H : Membership.Mem.{u2, u2} ι (Set.{u2} ι) (Set.hasMem.{u2} ι) t B) => f t))) (iInf.{u1, 1} α (ConditionallyCompleteLattice.toHasInf.{u1} α (CompleteLattice.toConditionallyCompleteLattice.{u1} α _inst_1)) Nat (fun (i : Nat) => f (x i))))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] {B : Set.{u1} ι}, (Set.Countable.{u1} ι B) -> (forall (f : ι -> α) {i₀ : ι}, (Eq.{succ u2} α (f i₀) (Top.top.{u2} α (CompleteLattice.toTop.{u2} α _inst_1))) -> (Exists.{succ u1} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u2} α (infᵢ.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (t : ι) => infᵢ.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) => f t))) (infᵢ.{u2, 1} α (CompleteLattice.toInfSet.{u2} α _inst_1) Nat (fun (i : Nat) => f (x i))))))
-Case conversion may be inaccurate. Consider using '#align filter.countable_binfi_eq_infi_seq' Filter.countable_binfᵢ_eq_infᵢ_seq'ₓ'. -/
-theorem countable_binfᵢ_eq_infᵢ_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
+ forall {α : Type.{u2}} {ι : Type.{u1}} [_inst_1 : CompleteLattice.{u2} α] {B : Set.{u1} ι}, (Set.Countable.{u1} ι B) -> (forall (f : ι -> α) {i₀ : ι}, (Eq.{succ u2} α (f i₀) (Top.top.{u2} α (CompleteLattice.toTop.{u2} α _inst_1))) -> (Exists.{succ u1} (Nat -> ι) (fun (x : Nat -> ι) => Eq.{succ u2} α (iInf.{u2, succ u1} α (CompleteLattice.toInfSet.{u2} α _inst_1) ι (fun (t : ι) => iInf.{u2, 0} α (CompleteLattice.toInfSet.{u2} α _inst_1) (Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) (fun (H : Membership.mem.{u1, u1} ι (Set.{u1} ι) (Set.instMembershipSet.{u1} ι) t B) => f t))) (iInf.{u2, 1} α (CompleteLattice.toInfSet.{u2} α _inst_1) Nat (fun (i : Nat) => f (x i))))))
+Case conversion may be inaccurate. Consider using '#align filter.countable_binfi_eq_infi_seq' Filter.countable_biInf_eq_iInf_seq'ₓ'. -/
+theorem countable_biInf_eq_iInf_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
(f : ι → α) {i₀ : ι} (h : f i₀ = ⊤) : ∃ x : ℕ → ι, (⨅ t ∈ B, f t) = ⨅ i, f (x i) :=
by
cases' B.eq_empty_or_nonempty with hB Bnonempty
- · rw [hB, infᵢ_emptyset]
+ · rw [hB, iInf_emptyset]
use fun n => i₀
simp [h]
· exact countable_binfi_eq_infi_seq Bcbl Bnonempty f
-#align filter.countable_binfi_eq_infi_seq' Filter.countable_binfᵢ_eq_infᵢ_seq'
+#align filter.countable_binfi_eq_infi_seq' Filter.countable_biInf_eq_iInf_seq'
-/- warning: filter.countable_binfi_principal_eq_seq_infi -> Filter.countable_binfᵢ_principal_eq_seq_infᵢ is a dubious translation:
+/- warning: filter.countable_binfi_principal_eq_seq_infi -> Filter.countable_biInf_principal_eq_seq_iInf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) (infᵢ.{u1, succ u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Set.{u1} α) (fun (t : Set.{u1} α) => infᵢ.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) t B) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) t B) => Filter.principal.{u1} α t))) (infᵢ.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i)))))
+ forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) (iInf.{u1, succ u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Set.{u1} α) (fun (t : Set.{u1} α) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) t B) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) t B) => Filter.principal.{u1} α t))) (iInf.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i)))))
but is expected to have type
- forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) (infᵢ.{u1, succ u1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Set.{u1} α) (fun (t : Set.{u1} α) => infᵢ.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) t B) (fun (H : Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) t B) => Filter.principal.{u1} α t))) (infᵢ.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i)))))
-Case conversion may be inaccurate. Consider using '#align filter.countable_binfi_principal_eq_seq_infi Filter.countable_binfᵢ_principal_eq_seq_infᵢₓ'. -/
-theorem countable_binfᵢ_principal_eq_seq_infᵢ {B : Set (Set α)} (Bcbl : B.Countable) :
+ forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) (iInf.{u1, succ u1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Set.{u1} α) (fun (t : Set.{u1} α) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) t B) (fun (H : Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) t B) => Filter.principal.{u1} α t))) (iInf.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i)))))
+Case conversion may be inaccurate. Consider using '#align filter.countable_binfi_principal_eq_seq_infi Filter.countable_biInf_principal_eq_seq_iInfₓ'. -/
+theorem countable_biInf_principal_eq_seq_iInf {B : Set (Set α)} (Bcbl : B.Countable) :
∃ x : ℕ → Set α, (⨅ t ∈ B, 𝓟 t) = ⨅ i, 𝓟 (x i) :=
- countable_binfᵢ_eq_infᵢ_seq' Bcbl 𝓟 principal_univ
-#align filter.countable_binfi_principal_eq_seq_infi Filter.countable_binfᵢ_principal_eq_seq_infᵢ
+ countable_biInf_eq_iInf_seq' Bcbl 𝓟 principal_univ
+#align filter.countable_binfi_principal_eq_seq_infi Filter.countable_biInf_principal_eq_seq_iInf
section IsCountablyGenerated
@@ -1747,7 +1747,7 @@ theorem HasBasis.exists_antitone_subbasis {f : Filter α} [h : f.IsCountablyGene
rcases h with ⟨s, hsc, rfl⟩
rw [generate_eq_binfi]
exact countable_binfi_principal_eq_seq_infi hsc
- have : ∀ i, x' i ∈ f := fun i => hx'.symm ▸ (infᵢ_le (fun i => 𝓟 (x' i)) i) (mem_principal_self _)
+ have : ∀ i, x' i ∈ f := fun i => hx'.symm ▸ (iInf_le (fun i => 𝓟 (x' i)) i) (mem_principal_self _)
let x : ℕ → { i : ι' // p i } := fun n =>
Nat.recOn n (hs.index _ <| this 0) fun n xn =>
hs.index _ <| inter_mem (this <| n + 1) (hs.mem_of_mem xn.2)
@@ -1763,9 +1763,9 @@ theorem HasBasis.exists_antitone_subbasis {f : Filter α} [h : f.IsCountablyGene
⟨has_basis_infi_principal (directed_of_sup x_mono), x_mono⟩
convert this
exact
- le_antisymm (le_infᵢ fun i => le_principal_iff.2 <| by cases i <;> apply hs.set_index_mem)
+ le_antisymm (le_iInf fun i => le_principal_iff.2 <| by cases i <;> apply hs.set_index_mem)
(hx'.symm ▸
- le_infᵢ fun i => le_principal_iff.2 <| this.to_has_basis.mem_iff.2 ⟨i, trivial, x_subset i⟩)
+ le_iInf fun i => le_principal_iff.2 <| this.to_has_basis.mem_iff.2 ⟨i, trivial, x_subset i⟩)
#align filter.has_basis.exists_antitone_subbasis Filter.HasBasis.exists_antitone_subbasis
#print Filter.exists_antitone_basis /-
@@ -1855,22 +1855,22 @@ end IsCountablyGenerated
/- warning: filter.is_countably_generated_seq -> Filter.isCountablyGenerated_seq is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Countable.{succ u2} β] (x : β -> (Set.{u1} α)), Filter.IsCountablyGenerated.{u1} α (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) β (fun (i : β) => Filter.principal.{u1} α (x i)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Countable.{succ u2} β] (x : β -> (Set.{u1} α)), Filter.IsCountablyGenerated.{u1} α (iInf.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) β (fun (i : β) => Filter.principal.{u1} α (x i)))
but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Countable.{succ u2} β] (x : β -> (Set.{u1} α)), Filter.IsCountablyGenerated.{u1} α (infᵢ.{u1, succ u2} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) β (fun (i : β) => Filter.principal.{u1} α (x i)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Countable.{succ u2} β] (x : β -> (Set.{u1} α)), Filter.IsCountablyGenerated.{u1} α (iInf.{u1, succ u2} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) β (fun (i : β) => Filter.principal.{u1} α (x i)))
Case conversion may be inaccurate. Consider using '#align filter.is_countably_generated_seq Filter.isCountablyGenerated_seqₓ'. -/
theorem isCountablyGenerated_seq [Countable β] (x : β → Set α) :
IsCountablyGenerated (⨅ i, 𝓟 <| x i) :=
by
use range x, countable_range x
- rw [generate_eq_binfi, infᵢ_range]
+ rw [generate_eq_binfi, iInf_range]
#align filter.is_countably_generated_seq Filter.isCountablyGenerated_seq
/- warning: filter.is_countably_generated_of_seq -> Filter.isCountablyGenerated_of_seq is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α}, (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) f (infᵢ.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i))))) -> (Filter.IsCountablyGenerated.{u1} α f)
+ forall {α : Type.{u1}} {f : Filter.{u1} α}, (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) f (iInf.{u1, 1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i))))) -> (Filter.IsCountablyGenerated.{u1} α f)
but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α}, (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) f (infᵢ.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i))))) -> (Filter.IsCountablyGenerated.{u1} α f)
+ forall {α : Type.{u1}} {f : Filter.{u1} α}, (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (x : Nat -> (Set.{u1} α)) => Eq.{succ u1} (Filter.{u1} α) f (iInf.{u1, 1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) Nat (fun (i : Nat) => Filter.principal.{u1} α (x i))))) -> (Filter.IsCountablyGenerated.{u1} α f)
Case conversion may be inaccurate. Consider using '#align filter.is_countably_generated_of_seq Filter.isCountablyGenerated_of_seqₓ'. -/
theorem isCountablyGenerated_of_seq {f : Filter α} (h : ∃ x : ℕ → Set α, f = ⨅ i, 𝓟 <| x i) :
f.IsCountablyGenerated := by
@@ -1878,16 +1878,16 @@ theorem isCountablyGenerated_of_seq {f : Filter α} (h : ∃ x : ℕ → Set α,
rw [h] <;> apply is_countably_generated_seq
#align filter.is_countably_generated_of_seq Filter.isCountablyGenerated_of_seq
-/- warning: filter.is_countably_generated_binfi_principal -> Filter.isCountablyGenerated_binfᵢ_principal is a dubious translation:
+/- warning: filter.is_countably_generated_binfi_principal -> Filter.isCountablyGenerated_biInf_principal is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Filter.IsCountablyGenerated.{u1} α (infᵢ.{u1, succ u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Set.{u1} α) (fun (s : Set.{u1} α) => infᵢ.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) s B) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) s B) => Filter.principal.{u1} α s))))
+ forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Filter.IsCountablyGenerated.{u1} α (iInf.{u1, succ u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Set.{u1} α) (fun (s : Set.{u1} α) => iInf.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) s B) (fun (H : Membership.Mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.hasMem.{u1} (Set.{u1} α)) s B) => Filter.principal.{u1} α s))))
but is expected to have type
- forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Filter.IsCountablyGenerated.{u1} α (infᵢ.{u1, succ u1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Set.{u1} α) (fun (s : Set.{u1} α) => infᵢ.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) s B) (fun (H : Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) s B) => Filter.principal.{u1} α s))))
-Case conversion may be inaccurate. Consider using '#align filter.is_countably_generated_binfi_principal Filter.isCountablyGenerated_binfᵢ_principalₓ'. -/
-theorem isCountablyGenerated_binfᵢ_principal {B : Set <| Set α} (h : B.Countable) :
+ forall {α : Type.{u1}} {B : Set.{u1} (Set.{u1} α)}, (Set.Countable.{u1} (Set.{u1} α) B) -> (Filter.IsCountablyGenerated.{u1} α (iInf.{u1, succ u1} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Set.{u1} α) (fun (s : Set.{u1} α) => iInf.{u1, 0} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) (Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) s B) (fun (H : Membership.mem.{u1, u1} (Set.{u1} α) (Set.{u1} (Set.{u1} α)) (Set.instMembershipSet.{u1} (Set.{u1} α)) s B) => Filter.principal.{u1} α s))))
+Case conversion may be inaccurate. Consider using '#align filter.is_countably_generated_binfi_principal Filter.isCountablyGenerated_biInf_principalₓ'. -/
+theorem isCountablyGenerated_biInf_principal {B : Set <| Set α} (h : B.Countable) :
IsCountablyGenerated (⨅ s ∈ B, 𝓟 s) :=
- isCountablyGenerated_of_seq (countable_binfᵢ_principal_eq_seq_infᵢ h)
-#align filter.is_countably_generated_binfi_principal Filter.isCountablyGenerated_binfᵢ_principal
+ isCountablyGenerated_of_seq (countable_biInf_principal_eq_seq_iInf h)
+#align filter.is_countably_generated_binfi_principal Filter.isCountablyGenerated_biInf_principal
#print Filter.isCountablyGenerated_iff_exists_antitone_basis /-
theorem isCountablyGenerated_iff_exists_antitone_basis {f : Filter α} :
@@ -1905,7 +1905,7 @@ theorem isCountablyGenerated_iff_exists_antitone_basis {f : Filter α} :
#print Filter.isCountablyGenerated_principal /-
@[instance]
theorem isCountablyGenerated_principal (s : Set α) : IsCountablyGenerated (𝓟 s) :=
- isCountablyGenerated_of_seq ⟨fun _ => s, infᵢ_const.symm⟩
+ isCountablyGenerated_of_seq ⟨fun _ => s, iInf_const.symm⟩
#align filter.is_countably_generated_principal Filter.isCountablyGenerated_principal
-/
@@ -1940,13 +1940,13 @@ theorem isCountablyGenerated_top : IsCountablyGenerated (⊤ : Filter α) :=
@principal_univ α ▸ isCountablyGenerated_principal _
#align filter.is_countably_generated_top Filter.isCountablyGenerated_top
-/- warning: filter.infi.is_countably_generated -> Filter.infᵢ.isCountablyGenerated is a dubious translation:
+/- warning: filter.infi.is_countably_generated -> Filter.iInf.isCountablyGenerated is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} [_inst_1 : Countable.{u2} ι] (f : ι -> (Filter.{u1} α)) [_inst_2 : forall (i : ι), Filter.IsCountablyGenerated.{u1} α (f i)], Filter.IsCountablyGenerated.{u1} α (infᵢ.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => f i))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} [_inst_1 : Countable.{u2} ι] (f : ι -> (Filter.{u1} α)) [_inst_2 : forall (i : ι), Filter.IsCountablyGenerated.{u1} α (f i)], Filter.IsCountablyGenerated.{u1} α (iInf.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => f i))
but is expected to have type
- forall {α : Sort.{u1}} {ι : Type.{u2}} [_inst_1 : Countable.{u1} α] (f : α -> (Filter.{u2} ι)) [_inst_2 : forall (i : α), Filter.IsCountablyGenerated.{u2} ι (f i)], Filter.IsCountablyGenerated.{u2} ι (infᵢ.{u2, u1} (Filter.{u2} ι) (CompleteLattice.toInfSet.{u2} (Filter.{u2} ι) (Filter.instCompleteLatticeFilter.{u2} ι)) α (fun (i : α) => f i))
-Case conversion may be inaccurate. Consider using '#align filter.infi.is_countably_generated Filter.infᵢ.isCountablyGeneratedₓ'. -/
-instance infᵢ.isCountablyGenerated {ι : Sort _} [Countable ι] (f : ι → Filter α)
+ forall {α : Sort.{u1}} {ι : Type.{u2}} [_inst_1 : Countable.{u1} α] (f : α -> (Filter.{u2} ι)) [_inst_2 : forall (i : α), Filter.IsCountablyGenerated.{u2} ι (f i)], Filter.IsCountablyGenerated.{u2} ι (iInf.{u2, u1} (Filter.{u2} ι) (CompleteLattice.toInfSet.{u2} (Filter.{u2} ι) (Filter.instCompleteLatticeFilter.{u2} ι)) α (fun (i : α) => f i))
+Case conversion may be inaccurate. Consider using '#align filter.infi.is_countably_generated Filter.iInf.isCountablyGeneratedₓ'. -/
+instance iInf.isCountablyGenerated {ι : Sort _} [Countable ι] (f : ι → Filter α)
[∀ i, IsCountablyGenerated (f i)] : IsCountablyGenerated (⨅ i, f i) :=
by
choose s hs using fun i => exists_antitone_basis (f i)
@@ -1956,7 +1956,7 @@ instance infᵢ.isCountablyGenerated {ι : Sort _} [Countable ι] (f : ι → Fi
rintro ⟨I, f⟩ ⟨hI, -⟩
lift I to Finset (PLift ι) using hI
exact ⟨⟨I, f⟩, rfl⟩
-#align filter.infi.is_countably_generated Filter.infᵢ.isCountablyGenerated
+#align filter.infi.is_countably_generated Filter.iInf.isCountablyGenerated
end Filter
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -1212,7 +1212,7 @@ theorem HasBasis.eq_infᵢ (h : l.HasBasis (fun _ => True) s) : l = ⨅ i, 𝓟
lean 3 declaration is
forall {α : Type.{u1}} {ι : Sort.{u2}} {s : ι -> (Set.{u1} α)}, (Directed.{u1, u2} (Set.{u1} α) ι (GE.ge.{u1} (Set.{u1} α) (Set.hasLe.{u1} α)) s) -> (forall [_inst_1 : Nonempty.{u2} ι], Filter.HasBasis.{u1, u2} α ι (infᵢ.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (_x : ι) => True) s)
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {s : ι -> (Set.{u2} α)}, (Directed.{u2, u1} (Set.{u2} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9265 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9267 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9265 x._@.Mathlib.Order.Filter.Bases._hyg.9267) s) -> (forall [_inst_1 : Nonempty.{u1} ι], Filter.HasBasis.{u2, u1} α ι (infᵢ.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => Filter.principal.{u2} α (s i))) (fun (_x : ι) => True) s)
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {s : ι -> (Set.{u2} α)}, (Directed.{u2, u1} (Set.{u2} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9263 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9265 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9263 x._@.Mathlib.Order.Filter.Bases._hyg.9265) s) -> (forall [_inst_1 : Nonempty.{u1} ι], Filter.HasBasis.{u2, u1} α ι (infᵢ.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => Filter.principal.{u2} α (s i))) (fun (_x : ι) => True) s)
Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_principal Filter.hasBasis_infᵢ_principalₓ'. -/
theorem hasBasis_infᵢ_principal {s : ι → Set α} (h : Directed (· ≥ ·) s) [Nonempty ι] :
(⨅ i, 𝓟 (s i)).HasBasis (fun _ => True) s :=
@@ -1243,7 +1243,7 @@ theorem hasBasis_infᵢ_principal_finite {ι : Type _} (s : ι → Set α) :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {s : β -> (Set.{u1} α)} {S : Set.{u2} β}, (DirectedOn.{u2} β (Order.Preimage.{succ u2, succ u1} β (Set.{u1} α) s (GE.ge.{u1} (Set.{u1} α) (Set.hasLe.{u1} α))) S) -> (Set.Nonempty.{u2} β S) -> (Filter.HasBasis.{u1, succ u2} α β (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) β (fun (i : β) => infᵢ.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) => Filter.principal.{u1} α (s i)))) (fun (i : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) s)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {s : β -> (Set.{u2} α)} {S : Set.{u1} β}, (DirectedOn.{u1} β (Order.Preimage.{succ u1, succ u2} β (Set.{u2} α) s (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9498 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9500 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9498 x._@.Mathlib.Order.Filter.Bases._hyg.9500)) S) -> (Set.Nonempty.{u1} β S) -> (Filter.HasBasis.{u2, succ u1} α β (infᵢ.{u2, succ u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) β (fun (i : β) => infᵢ.{u2, 0} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) (fun (H : Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) => Filter.principal.{u2} α (s i)))) (fun (i : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) s)
+ forall {α : Type.{u2}} {β : Type.{u1}} {s : β -> (Set.{u2} α)} {S : Set.{u1} β}, (DirectedOn.{u1} β (Order.Preimage.{succ u1, succ u2} β (Set.{u2} α) s (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9496 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9498 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9496 x._@.Mathlib.Order.Filter.Bases._hyg.9498)) S) -> (Set.Nonempty.{u1} β S) -> (Filter.HasBasis.{u2, succ u1} α β (infᵢ.{u2, succ u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) β (fun (i : β) => infᵢ.{u2, 0} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) (fun (H : Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) => Filter.principal.{u2} α (s i)))) (fun (i : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) s)
Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_principal Filter.hasBasis_binfᵢ_principalₓ'. -/
theorem hasBasis_binfᵢ_principal {s : β → Set α} {S : Set β} (h : DirectedOn (s ⁻¹'o (· ≥ ·)) S)
(ne : S.Nonempty) : (⨅ i ∈ S, 𝓟 (s i)).HasBasis (fun i => i ∈ S) s :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/09079525fd01b3dda35e96adaa08d2f943e1648c
@@ -1588,7 +1588,7 @@ namespace Filter
variable {α β γ ι : Type _} {ι' : Sort _}
#print Filter.IsCountablyGenerated /-
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`out] [] -/
/-- `is_countably_generated f` means `f = generate s` for some countable `s`. -/
class IsCountablyGenerated (f : Filter α) : Prop where
out : ∃ s : Set (Set α), s.Countable ∧ f = generate s
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -1574,7 +1574,7 @@ theorem map_sigma_mk_comap {π : α → Type _} {π' : β → Type _} {f : α
map (Sigma.mk a) (comap (g a) l) = comap (Sigma.map f g) (map (Sigma.mk (f a)) l) :=
by
refine' (((basis_sets _).comap _).map _).eq_of_same_basis _
- convert ((basis_sets _).map _).comap _
+ convert((basis_sets _).map _).comap _
ext1 s
apply image_sigma_mk_preimage_sigma_map hf
#align filter.map_sigma_mk_comap Filter.map_sigma_mk_comap
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -630,7 +630,7 @@ theorem HasBasis.comp_surjective (h : l.HasBasis p s) {g : ι' → ι} (hg : Fun
lean 3 declaration is
forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (e : Equiv.{u3, u2} ι' ι), Filter.HasBasis.{u1, u3} α ι' l (Function.comp.{u3, u2, 1} ι' ι Prop p (coeFn.{max 1 (imax u3 u2) (imax u2 u3), imax u3 u2} (Equiv.{u3, u2} ι' ι) (fun (_x : Equiv.{u3, u2} ι' ι) => ι' -> ι) (Equiv.hasCoeToFun.{u3, u2} ι' ι) e)) (Function.comp.{u3, u2, succ u1} ι' ι (Set.{u1} α) s (coeFn.{max 1 (imax u3 u2) (imax u2 u3), imax u3 u2} (Equiv.{u3, u2} ι' ι) (fun (_x : Equiv.{u3, u2} ι' ι) => ι' -> ι) (Equiv.hasCoeToFun.{u3, u2} ι' ι) e)))
but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (forall (e : Equiv.{u1, u2} ι' ι), Filter.HasBasis.{u3, u1} α ι' l (Function.comp.{u1, u2, 1} ι' ι Prop p (FunLike.coe.{max (max 1 u2) u1, u1, u2} (Equiv.{u1, u2} ι' ι) ι' (fun (_x : ι') => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : ι') => ι) _x) (Equiv.instFunLikeEquiv.{u1, u2} ι' ι) e)) (Function.comp.{u1, u2, succ u3} ι' ι (Set.{u3} α) s (FunLike.coe.{max (max 1 u2) u1, u1, u2} (Equiv.{u1, u2} ι' ι) ι' (fun (_x : ι') => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : ι') => ι) _x) (Equiv.instFunLikeEquiv.{u1, u2} ι' ι) e)))
+ forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (forall (e : Equiv.{u1, u2} ι' ι), Filter.HasBasis.{u3, u1} α ι' l (Function.comp.{u1, u2, 1} ι' ι Prop p (FunLike.coe.{max (max 1 u2) u1, u1, u2} (Equiv.{u1, u2} ι' ι) ι' (fun (_x : ι') => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι') => ι) _x) (Equiv.instFunLikeEquiv.{u1, u2} ι' ι) e)) (Function.comp.{u1, u2, succ u3} ι' ι (Set.{u3} α) s (FunLike.coe.{max (max 1 u2) u1, u1, u2} (Equiv.{u1, u2} ι' ι) ι' (fun (_x : ι') => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι') => ι) _x) (Equiv.instFunLikeEquiv.{u1, u2} ι' ι) e)))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.comp_equiv Filter.HasBasis.comp_equivₓ'. -/
theorem HasBasis.comp_equiv (h : l.HasBasis p s) (e : ι' ≃ ι) : l.HasBasis (p ∘ e) (s ∘ e) :=
h.comp_surjective e.Surjective
@@ -784,7 +784,7 @@ theorem hasBasis_infᵢ {ι : Type _} {ι' : ι → Type _} {l : ι → Filter
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : ι -> Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u2, u3} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u2, u3} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u2, u3} ι (fun (i : ι) => ι' i) ii')))
but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5721 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5723 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5721 x._@.Mathlib.Order.Filter.Bases._hyg.5723) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) (infᵢ.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')))
+ forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : ι -> Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : forall (i : ι), (ι' i) -> (Set.{u1} α)) (p : forall (i : ι), (ι' i) -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α (ι' i) (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5723 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5725 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5723 x._@.Mathlib.Order.Filter.Bases._hyg.5725) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) (infᵢ.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => p (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')) (fun (ii' : Sigma.{u3, u2} ι (fun (i : ι) => ι' i)) => s (Sigma.fst.{u3, u2} ι (fun (i : ι) => ι' i) ii') (Sigma.snd.{u3, u2} ι (fun (i : ι) => ι' i) ii')))
Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_of_directed' Filter.hasBasis_infᵢ_of_directed'ₓ'. -/
theorem hasBasis_infᵢ_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
@@ -800,7 +800,7 @@ theorem hasBasis_infᵢ_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonemp
lean 3 declaration is
forall {α : Type.{u1}} {ι : Type.{u2}} {ι' : Type.{u3}} [_inst_1 : Nonempty.{succ u2} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u3} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u2} (Filter.{u1} α) ι (GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α)))) l) -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u2, u3} ι ι') => p (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')) (fun (ii' : Prod.{u2, u3} ι ι') => s (Prod.fst.{u2, u3} ι ι' ii') (Prod.snd.{u2, u3} ι ι' ii')))
but is expected to have type
- forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5898 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5900 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5898 x._@.Mathlib.Order.Filter.Bases._hyg.5900) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (infᵢ.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u3, u2} ι ι') => p (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')) (fun (ii' : Prod.{u3, u2} ι ι') => s (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')))
+ forall {α : Type.{u1}} {ι : Type.{u3}} {ι' : Type.{u2}} [_inst_1 : Nonempty.{succ u3} ι] {l : ι -> (Filter.{u1} α)} (s : ι -> ι' -> (Set.{u1} α)) (p : ι -> ι' -> Prop), (forall (i : ι), Filter.HasBasis.{u1, succ u2} α ι' (l i) (p i) (s i)) -> (Directed.{u1, succ u3} (Filter.{u1} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.5900 : Filter.{u1} α) (x._@.Mathlib.Order.Filter.Bases._hyg.5902 : Filter.{u1} α) => GE.ge.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) x._@.Mathlib.Order.Filter.Bases._hyg.5900 x._@.Mathlib.Order.Filter.Bases._hyg.5902) l) -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (infᵢ.{u1, succ u3} (Filter.{u1} α) (CompleteLattice.toInfSet.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)) ι (fun (i : ι) => l i)) (fun (ii' : Prod.{u3, u2} ι ι') => p (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')) (fun (ii' : Prod.{u3, u2} ι ι') => s (Prod.fst.{u3, u2} ι ι' ii') (Prod.snd.{u3, u2} ι ι' ii')))
Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_of_directed Filter.hasBasis_infᵢ_of_directedₓ'. -/
theorem hasBasis_infᵢ_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ι → ι' → Set α) (p : ι → ι' → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
@@ -1212,7 +1212,7 @@ theorem HasBasis.eq_infᵢ (h : l.HasBasis (fun _ => True) s) : l = ⨅ i, 𝓟
lean 3 declaration is
forall {α : Type.{u1}} {ι : Sort.{u2}} {s : ι -> (Set.{u1} α)}, (Directed.{u1, u2} (Set.{u1} α) ι (GE.ge.{u1} (Set.{u1} α) (Set.hasLe.{u1} α)) s) -> (forall [_inst_1 : Nonempty.{u2} ι], Filter.HasBasis.{u1, u2} α ι (infᵢ.{u1, u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) ι (fun (i : ι) => Filter.principal.{u1} α (s i))) (fun (_x : ι) => True) s)
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {s : ι -> (Set.{u2} α)}, (Directed.{u2, u1} (Set.{u2} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9263 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9265 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9263 x._@.Mathlib.Order.Filter.Bases._hyg.9265) s) -> (forall [_inst_1 : Nonempty.{u1} ι], Filter.HasBasis.{u2, u1} α ι (infᵢ.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => Filter.principal.{u2} α (s i))) (fun (_x : ι) => True) s)
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {s : ι -> (Set.{u2} α)}, (Directed.{u2, u1} (Set.{u2} α) ι (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9265 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9267 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9265 x._@.Mathlib.Order.Filter.Bases._hyg.9267) s) -> (forall [_inst_1 : Nonempty.{u1} ι], Filter.HasBasis.{u2, u1} α ι (infᵢ.{u2, u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) ι (fun (i : ι) => Filter.principal.{u2} α (s i))) (fun (_x : ι) => True) s)
Case conversion may be inaccurate. Consider using '#align filter.has_basis_infi_principal Filter.hasBasis_infᵢ_principalₓ'. -/
theorem hasBasis_infᵢ_principal {s : ι → Set α} (h : Directed (· ≥ ·) s) [Nonempty ι] :
(⨅ i, 𝓟 (s i)).HasBasis (fun _ => True) s :=
@@ -1243,7 +1243,7 @@ theorem hasBasis_infᵢ_principal_finite {ι : Type _} (s : ι → Set α) :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} {s : β -> (Set.{u1} α)} {S : Set.{u2} β}, (DirectedOn.{u2} β (Order.Preimage.{succ u2, succ u1} β (Set.{u1} α) s (GE.ge.{u1} (Set.{u1} α) (Set.hasLe.{u1} α))) S) -> (Set.Nonempty.{u2} β S) -> (Filter.HasBasis.{u1, succ u2} α β (infᵢ.{u1, succ u2} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) β (fun (i : β) => infᵢ.{u1, 0} (Filter.{u1} α) (ConditionallyCompleteLattice.toHasInf.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) (fun (H : Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) => Filter.principal.{u1} α (s i)))) (fun (i : β) => Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i S) s)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {s : β -> (Set.{u2} α)} {S : Set.{u1} β}, (DirectedOn.{u1} β (Order.Preimage.{succ u1, succ u2} β (Set.{u2} α) s (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9496 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9498 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9496 x._@.Mathlib.Order.Filter.Bases._hyg.9498)) S) -> (Set.Nonempty.{u1} β S) -> (Filter.HasBasis.{u2, succ u1} α β (infᵢ.{u2, succ u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) β (fun (i : β) => infᵢ.{u2, 0} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) (fun (H : Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) => Filter.principal.{u2} α (s i)))) (fun (i : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) s)
+ forall {α : Type.{u2}} {β : Type.{u1}} {s : β -> (Set.{u2} α)} {S : Set.{u1} β}, (DirectedOn.{u1} β (Order.Preimage.{succ u1, succ u2} β (Set.{u2} α) s (fun (x._@.Mathlib.Order.Filter.Bases._hyg.9498 : Set.{u2} α) (x._@.Mathlib.Order.Filter.Bases._hyg.9500 : Set.{u2} α) => GE.ge.{u2} (Set.{u2} α) (Set.instLESet.{u2} α) x._@.Mathlib.Order.Filter.Bases._hyg.9498 x._@.Mathlib.Order.Filter.Bases._hyg.9500)) S) -> (Set.Nonempty.{u1} β S) -> (Filter.HasBasis.{u2, succ u1} α β (infᵢ.{u2, succ u1} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) β (fun (i : β) => infᵢ.{u2, 0} (Filter.{u2} α) (CompleteLattice.toInfSet.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)) (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) (fun (H : Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) => Filter.principal.{u2} α (s i)))) (fun (i : β) => Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i S) s)
Case conversion may be inaccurate. Consider using '#align filter.has_basis_binfi_principal Filter.hasBasis_binfᵢ_principalₓ'. -/
theorem hasBasis_binfᵢ_principal {s : β → Set α} {S : Set β} (h : DirectedOn (s ⁻¹'o (· ≥ ·)) S)
(ne : S.Nonempty) : (⨅ i ∈ S, 𝓟 (s i)).HasBasis (fun i => i ∈ S) s :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -580,7 +580,7 @@ theorem HasBasis.eq_bot_iff (hl : l.HasBasis p s) : l = ⊥ ↔ ∃ i, p i ∧ s
hl.neBot_iff.trans <| by simp only [not_exists, not_and, nonempty_iff_ne_empty]
#align filter.has_basis.eq_bot_iff Filter.HasBasis.eq_bot_iff
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (t «expr ⊆ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (t «expr ⊆ » s) -/
#print Filter.generate_neBot_iff /-
theorem generate_neBot_iff {s : Set (Set α)} :
NeBot (generate s) ↔ ∀ (t) (_ : t ⊆ s), t.Finite → (⋂₀ t).Nonempty :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -707,9 +707,9 @@ theorem HasBasis.ext (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s')
/- warning: filter.has_basis.inf' -> Filter.HasBasis.inf' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.HasBasis.{u1, u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max 1 u2 u3} α (PProd.{u2, u3} ι ι') (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l') (fun (i : PProd.{u2, u3} ι ι') => And (p (PProd.fst.{u2, u3} ι ι' i)) (p' (PProd.snd.{u2, u3} ι ι' i))) (fun (i : PProd.{u2, u3} ι ι') => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s (PProd.fst.{u2, u3} ι ι' i)) (s' (PProd.snd.{u2, u3} ι ι' i))))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.HasBasis.{u1, u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max 1 u2 u3} α (PProd.{u2, u3} ι ι') (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l') (fun (i : PProd.{u2, u3} ι ι') => And (p (PProd.fst.{u2, u3} ι ι' i)) (p' (PProd.snd.{u2, u3} ι ι' i))) (fun (i : PProd.{u2, u3} ι ι') => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s (PProd.fst.{u2, u3} ι ι' i)) (s' (PProd.snd.{u2, u3} ι ι' i))))
but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {l' : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u3, u1} α ι' l' p' s') -> (Filter.HasBasis.{u3, max (max 1 u2) u1} α (PProd.{u2, u1} ι ι') (HasInf.inf.{u3} (Filter.{u3} α) (Filter.instHasInfFilter.{u3} α) l l') (fun (i : PProd.{u2, u1} ι ι') => And (p (PProd.fst.{u2, u1} ι ι' i)) (p' (PProd.snd.{u2, u1} ι ι' i))) (fun (i : PProd.{u2, u1} ι ι') => Inter.inter.{u3} (Set.{u3} α) (Set.instInterSet.{u3} α) (s (PProd.fst.{u2, u1} ι ι' i)) (s' (PProd.snd.{u2, u1} ι ι' i))))
+ forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {l' : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u3, u1} α ι' l' p' s') -> (Filter.HasBasis.{u3, max (max 1 u2) u1} α (PProd.{u2, u1} ι ι') (Inf.inf.{u3} (Filter.{u3} α) (Filter.instInfFilter.{u3} α) l l') (fun (i : PProd.{u2, u1} ι ι') => And (p (PProd.fst.{u2, u1} ι ι' i)) (p' (PProd.snd.{u2, u1} ι ι' i))) (fun (i : PProd.{u2, u1} ι ι') => Inter.inter.{u3} (Set.{u3} α) (Set.instInterSet.{u3} α) (s (PProd.fst.{u2, u1} ι ι' i)) (s' (PProd.snd.{u2, u1} ι ι' i))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf' Filter.HasBasis.inf'ₓ'. -/
theorem HasBasis.inf' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊓ l').HasBasis (fun i : PProd ι ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∩ s' i.2 :=
@@ -725,9 +725,9 @@ theorem HasBasis.inf' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
/- warning: filter.has_basis.inf -> Filter.HasBasis.inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u2}} {ι' : Type.{u3}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u2} α ι l p s) -> (Filter.HasBasis.{u1, succ u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l') (fun (i : Prod.{u2, u3} ι ι') => And (p (Prod.fst.{u2, u3} ι ι' i)) (p' (Prod.snd.{u2, u3} ι ι' i))) (fun (i : Prod.{u2, u3} ι ι') => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s (Prod.fst.{u2, u3} ι ι' i)) (s' (Prod.snd.{u2, u3} ι ι' i))))
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u2}} {ι' : Type.{u3}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u2} α ι l p s) -> (Filter.HasBasis.{u1, succ u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l') (fun (i : Prod.{u2, u3} ι ι') => And (p (Prod.fst.{u2, u3} ι ι' i)) (p' (Prod.snd.{u2, u3} ι ι' i))) (fun (i : Prod.{u2, u3} ι ι') => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s (Prod.fst.{u2, u3} ι ι' i)) (s' (Prod.snd.{u2, u3} ι ι' i))))
but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u3}} {ι' : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u3} α ι l p s) -> (Filter.HasBasis.{u1, succ u2} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (HasInf.inf.{u1} (Filter.{u1} α) (Filter.instHasInfFilter.{u1} α) l l') (fun (i : Prod.{u3, u2} ι ι') => And (p (Prod.fst.{u3, u2} ι ι' i)) (p' (Prod.snd.{u3, u2} ι ι' i))) (fun (i : Prod.{u3, u2} ι ι') => Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s (Prod.fst.{u3, u2} ι ι' i)) (s' (Prod.snd.{u3, u2} ι ι' i))))
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u3}} {ι' : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u3} α ι l p s) -> (Filter.HasBasis.{u1, succ u2} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) l l') (fun (i : Prod.{u3, u2} ι ι') => And (p (Prod.fst.{u3, u2} ι ι' i)) (p' (Prod.snd.{u3, u2} ι ι' i))) (fun (i : Prod.{u3, u2} ι ι') => Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (s (Prod.fst.{u3, u2} ι ι' i)) (s' (Prod.snd.{u3, u2} ι ι' i))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf Filter.HasBasis.infₓ'. -/
theorem HasBasis.inf {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p' : ι' → Prop}
{s' : ι' → Set α} (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
@@ -870,9 +870,9 @@ theorem hasBasis_pure (x : α) : (pure x : Filter α).HasBasis (fun i : Unit =>
/- warning: filter.has_basis.sup' -> Filter.HasBasis.sup' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.HasBasis.{u1, u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max 1 u2 u3} α (PProd.{u2, u3} ι ι') (HasSup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') (fun (i : PProd.{u2, u3} ι ι') => And (p (PProd.fst.{u2, u3} ι ι' i)) (p' (PProd.snd.{u2, u3} ι ι' i))) (fun (i : PProd.{u2, u3} ι ι') => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s (PProd.fst.{u2, u3} ι ι' i)) (s' (PProd.snd.{u2, u3} ι ι' i))))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.HasBasis.{u1, u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max 1 u2 u3} α (PProd.{u2, u3} ι ι') (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') (fun (i : PProd.{u2, u3} ι ι') => And (p (PProd.fst.{u2, u3} ι ι' i)) (p' (PProd.snd.{u2, u3} ι ι' i))) (fun (i : PProd.{u2, u3} ι ι') => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s (PProd.fst.{u2, u3} ι ι' i)) (s' (PProd.snd.{u2, u3} ι ι' i))))
but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {l' : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u3, u1} α ι' l' p' s') -> (Filter.HasBasis.{u3, max (max 1 u2) u1} α (PProd.{u2, u1} ι ι') (HasSup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toHasSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (CompleteLattice.toLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α)))) l l') (fun (i : PProd.{u2, u1} ι ι') => And (p (PProd.fst.{u2, u1} ι ι' i)) (p' (PProd.snd.{u2, u1} ι ι' i))) (fun (i : PProd.{u2, u1} ι ι') => Union.union.{u3} (Set.{u3} α) (Set.instUnionSet.{u3} α) (s (PProd.fst.{u2, u1} ι ι' i)) (s' (PProd.snd.{u2, u1} ι ι' i))))
+ forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {l' : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u3, u1} α ι' l' p' s') -> (Filter.HasBasis.{u3, max (max 1 u2) u1} α (PProd.{u2, u1} ι ι') (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (CompleteLattice.toLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α)))) l l') (fun (i : PProd.{u2, u1} ι ι') => And (p (PProd.fst.{u2, u1} ι ι' i)) (p' (PProd.snd.{u2, u1} ι ι' i))) (fun (i : PProd.{u2, u1} ι ι') => Union.union.{u3} (Set.{u3} α) (Set.instUnionSet.{u3} α) (s (PProd.fst.{u2, u1} ι ι' i)) (s' (PProd.snd.{u2, u1} ι ι' i))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.sup' Filter.HasBasis.sup'ₓ'. -/
theorem HasBasis.sup' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊔ l').HasBasis (fun i : PProd ι ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∪ s' i.2 :=
@@ -885,9 +885,9 @@ theorem HasBasis.sup' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
/- warning: filter.has_basis.sup -> Filter.HasBasis.sup is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u2}} {ι' : Type.{u3}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u2} α ι l p s) -> (Filter.HasBasis.{u1, succ u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (HasSup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') (fun (i : Prod.{u2, u3} ι ι') => And (p (Prod.fst.{u2, u3} ι ι' i)) (p' (Prod.snd.{u2, u3} ι ι' i))) (fun (i : Prod.{u2, u3} ι ι') => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s (Prod.fst.{u2, u3} ι ι' i)) (s' (Prod.snd.{u2, u3} ι ι' i))))
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u2}} {ι' : Type.{u3}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u2} α ι l p s) -> (Filter.HasBasis.{u1, succ u3} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u2) (succ u3)} α (Prod.{u2, u3} ι ι') (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') (fun (i : Prod.{u2, u3} ι ι') => And (p (Prod.fst.{u2, u3} ι ι' i)) (p' (Prod.snd.{u2, u3} ι ι' i))) (fun (i : Prod.{u2, u3} ι ι') => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s (Prod.fst.{u2, u3} ι ι' i)) (s' (Prod.snd.{u2, u3} ι ι' i))))
but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u3}} {ι' : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u3} α ι l p s) -> (Filter.HasBasis.{u1, succ u2} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (HasSup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (CompleteLattice.toLattice.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))) l l') (fun (i : Prod.{u3, u2} ι ι') => And (p (Prod.fst.{u3, u2} ι ι' i)) (p' (Prod.snd.{u3, u2} ι ι' i))) (fun (i : Prod.{u3, u2} ι ι') => Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) (s (Prod.fst.{u3, u2} ι ι' i)) (s' (Prod.snd.{u3, u2} ι ι' i))))
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {ι : Type.{u3}} {ι' : Type.{u2}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, succ u3} α ι l p s) -> (Filter.HasBasis.{u1, succ u2} α ι' l' p' s') -> (Filter.HasBasis.{u1, max (succ u3) (succ u2)} α (Prod.{u3, u2} ι ι') (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (CompleteLattice.toLattice.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))) l l') (fun (i : Prod.{u3, u2} ι ι') => And (p (Prod.fst.{u3, u2} ι ι' i)) (p' (Prod.snd.{u3, u2} ι ι' i))) (fun (i : Prod.{u3, u2} ι ι') => Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) (s (Prod.fst.{u3, u2} ι ι' i)) (s' (Prod.snd.{u3, u2} ι ι' i))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.sup Filter.HasBasis.supₓ'. -/
theorem HasBasis.sup {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p' : ι' → Prop}
{s' : ι' → Set α} (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
@@ -912,9 +912,9 @@ theorem hasBasis_supᵢ {ι : Sort _} {ι' : ι → Type _} {l : ι → Filter
/- warning: filter.has_basis.sup_principal -> Filter.HasBasis.sup_principal is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (t : Set.{u1} α), Filter.HasBasis.{u1, u2} α ι (HasSup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l (Filter.principal.{u1} α t)) p (fun (i : ι) => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s i) t))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (t : Set.{u1} α), Filter.HasBasis.{u1, u2} α ι (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l (Filter.principal.{u1} α t)) p (fun (i : ι) => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s i) t))
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (t : Set.{u2} α), Filter.HasBasis.{u2, u1} α ι (HasSup.sup.{u2} (Filter.{u2} α) (SemilatticeSup.toHasSup.{u2} (Filter.{u2} α) (Lattice.toSemilatticeSup.{u2} (Filter.{u2} α) (CompleteLattice.toLattice.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)))) l (Filter.principal.{u2} α t)) p (fun (i : ι) => Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) (s i) t))
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (t : Set.{u2} α), Filter.HasBasis.{u2, u1} α ι (Sup.sup.{u2} (Filter.{u2} α) (SemilatticeSup.toSup.{u2} (Filter.{u2} α) (Lattice.toSemilatticeSup.{u2} (Filter.{u2} α) (CompleteLattice.toLattice.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)))) l (Filter.principal.{u2} α t)) p (fun (i : ι) => Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) (s i) t))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.sup_principal Filter.HasBasis.sup_principalₓ'. -/
theorem HasBasis.sup_principal (hl : l.HasBasis p s) (t : Set α) :
(l ⊔ 𝓟 t).HasBasis p fun i => s i ∪ t :=
@@ -925,9 +925,9 @@ theorem HasBasis.sup_principal (hl : l.HasBasis p s) (t : Set α) :
/- warning: filter.has_basis.sup_pure -> Filter.HasBasis.sup_pure is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (x : α), Filter.HasBasis.{u1, u2} α ι (HasSup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x)) p (fun (i : ι) => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s i) (Singleton.singleton.{u1, u1} α (Set.{u1} α) (Set.hasSingleton.{u1} α) x)))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (x : α), Filter.HasBasis.{u1, u2} α ι (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x)) p (fun (i : ι) => Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) (s i) (Singleton.singleton.{u1, u1} α (Set.{u1} α) (Set.hasSingleton.{u1} α) x)))
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (x : α), Filter.HasBasis.{u2, u1} α ι (HasSup.sup.{u2} (Filter.{u2} α) (SemilatticeSup.toHasSup.{u2} (Filter.{u2} α) (Lattice.toSemilatticeSup.{u2} (Filter.{u2} α) (CompleteLattice.toLattice.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)))) l (Pure.pure.{u2, u2} Filter.{u2} Filter.instPureFilter.{u2} α x)) p (fun (i : ι) => Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) (s i) (Singleton.singleton.{u2, u2} α (Set.{u2} α) (Set.instSingletonSet.{u2} α) x)))
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (x : α), Filter.HasBasis.{u2, u1} α ι (Sup.sup.{u2} (Filter.{u2} α) (SemilatticeSup.toSup.{u2} (Filter.{u2} α) (Lattice.toSemilatticeSup.{u2} (Filter.{u2} α) (CompleteLattice.toLattice.{u2} (Filter.{u2} α) (Filter.instCompleteLatticeFilter.{u2} α)))) l (Pure.pure.{u2, u2} Filter.{u2} Filter.instPureFilter.{u2} α x)) p (fun (i : ι) => Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) (s i) (Singleton.singleton.{u2, u2} α (Set.{u2} α) (Set.instSingletonSet.{u2} α) x)))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.sup_pure Filter.HasBasis.sup_pureₓ'. -/
theorem HasBasis.sup_pure (hl : l.HasBasis p s) (x : α) :
(l ⊔ pure x).HasBasis p fun i => s i ∪ {x} := by
@@ -936,9 +936,9 @@ theorem HasBasis.sup_pure (hl : l.HasBasis p s) (x : α) :
/- warning: filter.has_basis.inf_principal -> Filter.HasBasis.inf_principal is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (s' : Set.{u1} α), Filter.HasBasis.{u1, u2} α ι (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l (Filter.principal.{u1} α s')) p (fun (i : ι) => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) s'))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (s' : Set.{u1} α), Filter.HasBasis.{u1, u2} α ι (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l (Filter.principal.{u1} α s')) p (fun (i : ι) => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) s'))
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (s' : Set.{u2} α), Filter.HasBasis.{u2, u1} α ι (HasInf.inf.{u2} (Filter.{u2} α) (Filter.instHasInfFilter.{u2} α) l (Filter.principal.{u2} α s')) p (fun (i : ι) => Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) s'))
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (s' : Set.{u2} α), Filter.HasBasis.{u2, u1} α ι (Inf.inf.{u2} (Filter.{u2} α) (Filter.instInfFilter.{u2} α) l (Filter.principal.{u2} α s')) p (fun (i : ι) => Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) s'))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf_principal Filter.HasBasis.inf_principalₓ'. -/
theorem HasBasis.inf_principal (hl : l.HasBasis p s) (s' : Set α) :
(l ⊓ 𝓟 s').HasBasis p fun i => s i ∩ s' :=
@@ -948,9 +948,9 @@ theorem HasBasis.inf_principal (hl : l.HasBasis p s) (s' : Set α) :
/- warning: filter.has_basis.principal_inf -> Filter.HasBasis.principal_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (s' : Set.{u1} α), Filter.HasBasis.{u1, u2} α ι (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) (Filter.principal.{u1} α s') l) p (fun (i : ι) => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s' (s i)))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall (s' : Set.{u1} α), Filter.HasBasis.{u1, u2} α ι (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) (Filter.principal.{u1} α s') l) p (fun (i : ι) => Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s' (s i)))
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (s' : Set.{u2} α), Filter.HasBasis.{u2, u1} α ι (HasInf.inf.{u2} (Filter.{u2} α) (Filter.instHasInfFilter.{u2} α) (Filter.principal.{u2} α s') l) p (fun (i : ι) => Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s' (s i)))
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall (s' : Set.{u2} α), Filter.HasBasis.{u2, u1} α ι (Inf.inf.{u2} (Filter.{u2} α) (Filter.instInfFilter.{u2} α) (Filter.principal.{u2} α s') l) p (fun (i : ι) => Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s' (s i)))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.principal_inf Filter.HasBasis.principal_infₓ'. -/
theorem HasBasis.principal_inf (hl : l.HasBasis p s) (s' : Set α) :
(𝓟 s' ⊓ l).HasBasis p fun i => s' ∩ s i := by
@@ -959,9 +959,9 @@ theorem HasBasis.principal_inf (hl : l.HasBasis p s) (s' : Set α) :
/- warning: filter.has_basis.inf_basis_ne_bot_iff -> Filter.HasBasis.inf_basis_neBot_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.HasBasis.{u1, u3} α ι' l' p' s') -> (Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{i' : ι'}}, (p' i') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s' i'))))))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {ι' : Sort.{u3}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Filter.HasBasis.{u1, u3} α ι' l' p' s') -> (Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{i' : ι'}}, (p' i') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) (s' i'))))))
but is expected to have type
- forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {l' : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u3, u1} α ι' l' p' s') -> (Iff (Filter.NeBot.{u3} α (HasInf.inf.{u3} (Filter.{u3} α) (Filter.instHasInfFilter.{u3} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{i' : ι'}}, (p' i') -> (Set.Nonempty.{u3} α (Inter.inter.{u3} (Set.{u3} α) (Set.instInterSet.{u3} α) (s i) (s' i'))))))
+ forall {α : Type.{u3}} {ι : Sort.{u2}} {ι' : Sort.{u1}} {l : Filter.{u3} α} {l' : Filter.{u3} α} {p : ι -> Prop} {s : ι -> (Set.{u3} α)} {p' : ι' -> Prop} {s' : ι' -> (Set.{u3} α)}, (Filter.HasBasis.{u3, u2} α ι l p s) -> (Filter.HasBasis.{u3, u1} α ι' l' p' s') -> (Iff (Filter.NeBot.{u3} α (Inf.inf.{u3} (Filter.{u3} α) (Filter.instInfFilter.{u3} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{i' : ι'}}, (p' i') -> (Set.Nonempty.{u3} α (Inter.inter.{u3} (Set.{u3} α) (Set.instInterSet.{u3} α) (s i) (s' i'))))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf_basis_ne_bot_iff Filter.HasBasis.inf_basis_neBot_iffₓ'. -/
theorem HasBasis.inf_basis_neBot_iff (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
NeBot (l ⊓ l') ↔ ∀ ⦃i⦄ (hi : p i) ⦃i'⦄ (hi' : p' i'), (s i ∩ s' i').Nonempty :=
@@ -970,9 +970,9 @@ theorem HasBasis.inf_basis_neBot_iff (hl : l.HasBasis p s) (hl' : l'.HasBasis p'
/- warning: filter.has_basis.inf_ne_bot_iff -> Filter.HasBasis.inf_neBot_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{s' : Set.{u1} α}}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s' l') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) s')))))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {l' : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{s' : Set.{u1} α}}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s' l') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) s')))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {l' : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Iff (Filter.NeBot.{u2} α (HasInf.inf.{u2} (Filter.{u2} α) (Filter.instHasInfFilter.{u2} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{s' : Set.{u2} α}}, (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) s' l') -> (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) s')))))
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {l' : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (Iff (Filter.NeBot.{u2} α (Inf.inf.{u2} (Filter.{u2} α) (Filter.instInfFilter.{u2} α) l l')) (forall {{i : ι}}, (p i) -> (forall {{s' : Set.{u2} α}}, (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) s' l') -> (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) s')))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf_ne_bot_iff Filter.HasBasis.inf_neBot_iffₓ'. -/
theorem HasBasis.inf_neBot_iff (hl : l.HasBasis p s) :
NeBot (l ⊓ l') ↔ ∀ ⦃i⦄ (hi : p i) ⦃s'⦄ (hs' : s' ∈ l'), (s i ∩ s').Nonempty :=
@@ -981,9 +981,9 @@ theorem HasBasis.inf_neBot_iff (hl : l.HasBasis p s) :
/- warning: filter.has_basis.inf_principal_ne_bot_iff -> Filter.HasBasis.inf_principal_neBot_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {t : Set.{u1} α}, Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l (Filter.principal.{u1} α t))) (forall {{i : ι}}, (p i) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) t))))
+ forall {α : Type.{u1}} {ι : Sort.{u2}} {l : Filter.{u1} α} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Filter.HasBasis.{u1, u2} α ι l p s) -> (forall {t : Set.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l (Filter.principal.{u1} α t))) (forall {{i : ι}}, (p i) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (s i) t))))
but is expected to have type
- forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall {t : Set.{u2} α}, Iff (Filter.NeBot.{u2} α (HasInf.inf.{u2} (Filter.{u2} α) (Filter.instHasInfFilter.{u2} α) l (Filter.principal.{u2} α t))) (forall {{i : ι}}, (p i) -> (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) t))))
+ forall {α : Type.{u2}} {ι : Sort.{u1}} {l : Filter.{u2} α} {p : ι -> Prop} {s : ι -> (Set.{u2} α)}, (Filter.HasBasis.{u2, u1} α ι l p s) -> (forall {t : Set.{u2} α}, Iff (Filter.NeBot.{u2} α (Inf.inf.{u2} (Filter.{u2} α) (Filter.instInfFilter.{u2} α) l (Filter.principal.{u2} α t))) (forall {{i : ι}}, (p i) -> (Set.Nonempty.{u2} α (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (s i) t))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.inf_principal_ne_bot_iff Filter.HasBasis.inf_principal_neBot_iffₓ'. -/
theorem HasBasis.inf_principal_neBot_iff (hl : l.HasBasis p s) {t : Set α} :
NeBot (l ⊓ 𝓟 t) ↔ ∀ ⦃i⦄ (hi : p i), (s i ∩ t).Nonempty :=
@@ -1036,9 +1036,9 @@ theorem Set.PairwiseDisjoint.exists_mem_filter_basis {I : Type _} {l : I → Fil
/- warning: filter.inf_ne_bot_iff -> Filter.inf_neBot_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l')) (forall {{s : Set.{u1} α}}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s l) -> (forall {{s' : Set.{u1} α}}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s' l') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s s'))))
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l l')) (forall {{s : Set.{u1} α}}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s l) -> (forall {{s' : Set.{u1} α}}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s' l') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s s'))))
but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.instHasInfFilter.{u1} α) l l')) (forall {{s : Set.{u1} α}}, (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s l) -> (forall {{s' : Set.{u1} α}}, (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s' l') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s s'))))
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {l' : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) l l')) (forall {{s : Set.{u1} α}}, (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s l) -> (forall {{s' : Set.{u1} α}}, (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s' l') -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s s'))))
Case conversion may be inaccurate. Consider using '#align filter.inf_ne_bot_iff Filter.inf_neBot_iffₓ'. -/
theorem inf_neBot_iff :
NeBot (l ⊓ l') ↔ ∀ ⦃s : Set α⦄ (hs : s ∈ l) ⦃s'⦄ (hs' : s' ∈ l'), (s ∩ s').Nonempty :=
@@ -1047,9 +1047,9 @@ theorem inf_neBot_iff :
/- warning: filter.inf_principal_ne_bot_iff -> Filter.inf_principal_neBot_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {s : Set.{u1} α}, Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l (Filter.principal.{u1} α s))) (forall (U : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) U l) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) U s)))
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {s : Set.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) l (Filter.principal.{u1} α s))) (forall (U : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) U l) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) U s)))
but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {s : Set.{u1} α}, Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.instHasInfFilter.{u1} α) l (Filter.principal.{u1} α s))) (forall (U : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) U l) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) U s)))
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {s : Set.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) l (Filter.principal.{u1} α s))) (forall (U : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) U l) -> (Set.Nonempty.{u1} α (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) U s)))
Case conversion may be inaccurate. Consider using '#align filter.inf_principal_ne_bot_iff Filter.inf_principal_neBot_iffₓ'. -/
theorem inf_principal_neBot_iff {s : Set α} : NeBot (l ⊓ 𝓟 s) ↔ ∀ U ∈ l, (U ∩ s).Nonempty :=
l.basis_sets.inf_principal_neBot_iff
@@ -1057,9 +1057,9 @@ theorem inf_principal_neBot_iff {s : Set α} : NeBot (l ⊓ 𝓟 s) ↔ ∀ U
/- warning: filter.mem_iff_inf_principal_compl -> Filter.mem_iff_inf_principal_compl is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s f) (Eq.{succ u1} (Filter.{u1} α) (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s f) (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))
but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s f) (Eq.{succ u1} (Filter.{u1} α) (HasInf.inf.{u1} (Filter.{u1} α) (Filter.instHasInfFilter.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toBot.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s f) (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toBot.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α))))
Case conversion may be inaccurate. Consider using '#align filter.mem_iff_inf_principal_compl Filter.mem_iff_inf_principal_complₓ'. -/
theorem mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∈ f ↔ f ⊓ 𝓟 (sᶜ) = ⊥ :=
by
@@ -1071,9 +1071,9 @@ theorem mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∈ f ↔ f
/- warning: filter.not_mem_iff_inf_principal_compl -> Filter.not_mem_iff_inf_principal_compl is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Not (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s f)) (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s))))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Not (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s f)) (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s))))
but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Not (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s f)) (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.instHasInfFilter.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s))))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {s : Set.{u1} α}, Iff (Not (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) s f)) (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s))))
Case conversion may be inaccurate. Consider using '#align filter.not_mem_iff_inf_principal_compl Filter.not_mem_iff_inf_principal_complₓ'. -/
theorem not_mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∉ f ↔ NeBot (f ⊓ 𝓟 (sᶜ)) :=
(not_congr mem_iff_inf_principal_compl).trans neBot_iff.symm
@@ -1156,9 +1156,9 @@ theorem HasBasis.disjoint_iff_right (h : l.HasBasis p s) :
/- warning: filter.le_iff_forall_inf_principal_compl -> Filter.le_iff_forall_inf_principal_compl is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) f g) (forall (V : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) V g) -> (Eq.{succ u1} (Filter.{u1} α) (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) V))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α)))))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) f g) (forall (V : Set.{u1} α), (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) V g) -> (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) V))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α)))))
but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) f g) (forall (V : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) V g) -> (Eq.{succ u1} (Filter.{u1} α) (HasInf.inf.{u1} (Filter.{u1} α) (Filter.instHasInfFilter.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) V))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toBot.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) f g) (forall (V : Set.{u1} α), (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) V g) -> (Eq.{succ u1} (Filter.{u1} α) (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f (Filter.principal.{u1} α (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) V))) (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toBot.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))))
Case conversion may be inaccurate. Consider using '#align filter.le_iff_forall_inf_principal_compl Filter.le_iff_forall_inf_principal_complₓ'. -/
theorem le_iff_forall_inf_principal_compl {f g : Filter α} : f ≤ g ↔ ∀ V ∈ g, f ⊓ 𝓟 (Vᶜ) = ⊥ :=
forall₂_congr fun _ _ => mem_iff_inf_principal_compl
@@ -1166,9 +1166,9 @@ theorem le_iff_forall_inf_principal_compl {f g : Filter α} : f ≤ g ↔ ∀ V
/- warning: filter.inf_ne_bot_iff_frequently_left -> Filter.inf_neBot_iff_frequently_left is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) f) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) g))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) f) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) g))
but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.instHasInfFilter.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) f) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) g))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) f) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) g))
Case conversion may be inaccurate. Consider using '#align filter.inf_ne_bot_iff_frequently_left Filter.inf_neBot_iff_frequently_leftₓ'. -/
theorem inf_neBot_iff_frequently_left {f g : Filter α} :
NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ x in f, p x) → ∃ᶠ x in g, p x := by
@@ -1177,9 +1177,9 @@ theorem inf_neBot_iff_frequently_left {f g : Filter α} :
/- warning: filter.inf_ne_bot_iff_frequently_right -> Filter.inf_neBot_iff_frequently_right is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) g) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) f))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) g) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) f))
but is expected to have type
- forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.instHasInfFilter.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) g) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) f))
+ forall {α : Type.{u1}} {f : Filter.{u1} α} {g : Filter.{u1} α}, Iff (Filter.NeBot.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f g)) (forall {p : α -> Prop}, (Filter.Eventually.{u1} α (fun (x : α) => p x) g) -> (Filter.Frequently.{u1} α (fun (x : α) => p x) f))
Case conversion may be inaccurate. Consider using '#align filter.inf_ne_bot_iff_frequently_right Filter.inf_neBot_iff_frequently_rightₓ'. -/
theorem inf_neBot_iff_frequently_right {f g : Filter α} :
NeBot (f ⊓ g) ↔ ∀ {p : α → Prop}, (∀ᶠ x in g, p x) → ∃ᶠ x in f, p x :=
@@ -1791,9 +1791,9 @@ theorem exists_antitone_seq (f : Filter α) [f.IsCountablyGenerated] :
/- warning: filter.inf.is_countably_generated -> Filter.Inf.isCountablyGenerated is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f g)
+ forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.hasInf.{u1} α) f g)
but is expected to have type
- forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (HasInf.inf.{u1} (Filter.{u1} α) (Filter.instHasInfFilter.{u1} α) f g)
+ forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (Inf.inf.{u1} (Filter.{u1} α) (Filter.instInfFilter.{u1} α) f g)
Case conversion may be inaccurate. Consider using '#align filter.inf.is_countably_generated Filter.Inf.isCountablyGeneratedₓ'. -/
instance Inf.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
[IsCountablyGenerated g] : IsCountablyGenerated (f ⊓ g) :=
@@ -1823,9 +1823,9 @@ instance comap.isCountablyGenerated (l : Filter β) [l.IsCountablyGenerated] (f
/- warning: filter.sup.is_countably_generated -> Filter.Sup.isCountablyGenerated is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (HasSup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) f g)
+ forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) f g)
but is expected to have type
- forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (HasSup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (CompleteLattice.toLattice.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))) f g)
+ forall {α : Type.{u1}} (f : Filter.{u1} α) (g : Filter.{u1} α) [_inst_1 : Filter.IsCountablyGenerated.{u1} α f] [_inst_2 : Filter.IsCountablyGenerated.{u1} α g], Filter.IsCountablyGenerated.{u1} α (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (CompleteLattice.toLattice.{u1} (Filter.{u1} α) (Filter.instCompleteLatticeFilter.{u1} α)))) f g)
Case conversion may be inaccurate. Consider using '#align filter.sup.is_countably_generated Filter.Sup.isCountablyGeneratedₓ'. -/
instance Sup.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
[IsCountablyGenerated g] : IsCountablyGenerated (f ⊔ g) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
The main addition is IsTopologicalBasis.inf
(see https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/Inf.20of.20a.20pair.20of.20topologies/near/419989448), and I also reordered things to be in the more typical order (deducing the Pi
version from the iInf
version rather than the converse).
Also a few extra golfs and variations.
Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Christopher Hoskin <christopher.hoskin@gmail.com> Co-authored-by: Christopher Hoskin <christopher.hoskin@overleaf.com>
@@ -432,6 +432,13 @@ theorem HasBasis.comp_equiv (h : l.HasBasis p s) (e : ι' ≃ ι) : l.HasBasis (
h.comp_surjective e.surjective
#align filter.has_basis.comp_equiv Filter.HasBasis.comp_equiv
+theorem HasBasis.to_image_id' (h : l.HasBasis p s) : l.HasBasis (fun t ↦ ∃ i, p i ∧ s i = t) id :=
+ ⟨fun _ ↦ by simp [h.mem_iff]⟩
+
+theorem HasBasis.to_image_id {ι : Type*} {p : ι → Prop} {s : ι → Set α} (h : l.HasBasis p s) :
+ l.HasBasis (· ∈ s '' {i | p i}) id :=
+ h.to_image_id'
+
/-- If `{s i | p i}` is a basis of a filter `l` and each `s i` includes `s j` such that
`p j ∧ q j`, then `{s j | p j ∧ q j}` is a basis of `l`. -/
theorem HasBasis.restrict (h : l.HasBasis p s) {q : ι → Prop}
@@ -850,11 +850,15 @@ structure HasAntitoneBasis (l : Filter α) (s : ι'' → Set α)
protected antitone : Antitone s
#align filter.has_antitone_basis Filter.HasAntitoneBasis
-theorem HasAntitoneBasis.map {l : Filter α} {s : ι'' → Set α} {m : α → β}
- (hf : HasAntitoneBasis l s) : HasAntitoneBasis (map m l) fun n => m '' s n :=
+protected theorem HasAntitoneBasis.map {l : Filter α} {s : ι'' → Set α}
+ (hf : HasAntitoneBasis l s) (m : α → β) : HasAntitoneBasis (map m l) (m '' s ·) :=
⟨HasBasis.map _ hf.toHasBasis, fun _ _ h => image_subset _ <| hf.2 h⟩
#align filter.has_antitone_basis.map Filter.HasAntitoneBasis.map
+protected theorem HasAntitoneBasis.comap {l : Filter α} {s : ι'' → Set α}
+ (hf : HasAntitoneBasis l s) (m : β → α) : HasAntitoneBasis (comap m l) (m ⁻¹' s ·) :=
+ ⟨hf.1.comap _, fun _ _ h ↦ preimage_mono (hf.2 h)⟩
+
lemma HasAntitoneBasis.iInf_principal {ι : Type*} [Preorder ι] [Nonempty ι] [IsDirected ι (· ≤ ·)]
{s : ι → Set α} (hs : Antitone s) : (⨅ i, 𝓟 (s i)).HasAntitoneBasis s :=
⟨hasBasis_iInf_principal hs.directed_ge, hs⟩
@@ -1026,6 +1030,10 @@ theorem HasCountableBasis.isCountablyGenerated {f : Filter α} {p : ι → Prop}
⟨⟨{ t | ∃ i, p i ∧ s i = t }, h.countable.image s, h.toHasBasis.eq_generate⟩⟩
#align filter.has_countable_basis.is_countably_generated Filter.HasCountableBasis.isCountablyGenerated
+theorem HasBasis.isCountablyGenerated [Countable ι] {f : Filter α} {p : ι → Prop} {s : ι → Set α}
+ (h : f.HasBasis p s) : f.IsCountablyGenerated :=
+ HasCountableBasis.isCountablyGenerated ⟨h, to_countable _⟩
+
theorem antitone_seq_of_seq (s : ℕ → Set α) :
∃ t : ℕ → Set α, Antitone t ∧ ⨅ i, 𝓟 (s i) = ⨅ i, 𝓟 (t i) := by
use fun n => ⋂ m ≤ n, s m; constructor
@@ -1128,21 +1136,20 @@ instance Inf.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
instance map.isCountablyGenerated (l : Filter α) [l.IsCountablyGenerated] (f : α → β) :
(map f l).IsCountablyGenerated :=
let ⟨_x, hxl⟩ := l.exists_antitone_basis
- HasCountableBasis.isCountablyGenerated ⟨hxl.map.1, to_countable _⟩
+ (hxl.map _).isCountablyGenerated
#align filter.map.is_countably_generated Filter.map.isCountablyGenerated
instance comap.isCountablyGenerated (l : Filter β) [l.IsCountablyGenerated] (f : α → β) :
(comap f l).IsCountablyGenerated :=
let ⟨_x, hxl⟩ := l.exists_antitone_basis
- HasCountableBasis.isCountablyGenerated ⟨hxl.1.comap _, to_countable _⟩
+ (hxl.comap _).isCountablyGenerated
#align filter.comap.is_countably_generated Filter.comap.isCountablyGenerated
instance Sup.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
[IsCountablyGenerated g] : IsCountablyGenerated (f ⊔ g) := by
rcases f.exists_antitone_basis with ⟨s, hs⟩
rcases g.exists_antitone_basis with ⟨t, ht⟩
- exact
- HasCountableBasis.isCountablyGenerated ⟨hs.1.sup ht.1, Set.to_countable _⟩
+ exact HasCountableBasis.isCountablyGenerated ⟨hs.1.sup ht.1, Set.to_countable _⟩
#align filter.sup.is_countably_generated Filter.Sup.isCountablyGenerated
instance prod.isCountablyGenerated (la : Filter α) (lb : Filter β) [IsCountablyGenerated la]
@@ -1157,7 +1164,7 @@ instance coprod.isCountablyGenerated (la : Filter α) (lb : Filter β) [IsCounta
end IsCountablyGenerated
-theorem isCountablyGenerated_seq [Countable β] (x : β → Set α) :
+theorem isCountablyGenerated_seq [Countable ι'] (x : ι' → Set α) :
IsCountablyGenerated (⨅ i, 𝓟 (x i)) := by
use range x, countable_range x
rw [generate_eq_biInf, iInf_range]
open Classical
(#11199)
We remove all but one open Classical
s, instead preferring to use open scoped Classical
. The only real side-effect this led to is moving a couple declarations to use Exists.choose
instead of Classical.choose
.
The first few commits are explicitly labelled regex replaces for ease of review.
@@ -83,7 +83,8 @@ set_option autoImplicit true
open Set Filter
-open Filter Classical
+open scoped Classical
+open Filter
section sort
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -105,7 +105,7 @@ instance FilterBasis.nonempty_sets (B : FilterBasis α) : Nonempty B.sets :=
B.nonempty.to_subtype
#align filter_basis.nonempty_sets FilterBasis.nonempty_sets
--- porting note: this instance was reducible but it doesn't work the same way in Lean 4
+-- Porting note: this instance was reducible but it doesn't work the same way in Lean 4
/-- If `B` is a filter basis on `α`, and `U` a subset of `α` then we can write `U ∈ B` as
on paper. -/
instance {α : Type*} : Membership (Set α) (FilterBasis α) :=
@@ -126,7 +126,7 @@ def Filter.asBasis (f : Filter α) : FilterBasis α :=
⟨f.sets, ⟨univ, univ_mem⟩, fun {x y} hx hy => ⟨x ∩ y, inter_mem hx hy, subset_rfl⟩⟩
#align filter.as_basis Filter.asBasis
--- porting note: was `protected` in Lean 3 but `protected` didn't work; removed
+-- Porting note: was `protected` in Lean 3 but `protected` didn't work; removed
/-- `is_basis p s` means the image of `s` bounded by `p` is a filter basis. -/
structure Filter.IsBasis (p : ι → Prop) (s : ι → Set α) : Prop where
/-- There exists at least one `i` that satisfies `p`. -/
@@ -226,7 +226,7 @@ theorem filter_eq_generate (h : IsBasis p s) : h.filter = generate { U | ∃ i,
end IsBasis
--- porting note: was `protected` in Lean 3 but `protected` didn't work; removed
+-- Porting note: was `protected` in Lean 3 but `protected` didn't work; removed
/-- We say that a filter `l` has a basis `s : ι → Set α` bounded by `p : ι → Prop`,
if `t ∈ l` if and only if `t` includes `s i` for some `i` such that `p i`. -/
structure HasBasis (l : Filter α) (p : ι → Prop) (s : ι → Set α) : Prop where
@@ -258,7 +258,7 @@ lemma FilterBasis.ofSets_sets (s : Set (Set α)) :
(FilterBasis.ofSets s).sets = sInter '' { t | Set.Finite t ∧ t ⊆ s } :=
rfl
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
/-- Definition of `HasBasis` unfolded with implicit set argument. -/
theorem HasBasis.mem_iff (hl : l.HasBasis p s) : t ∈ l ↔ ∃ i, p i ∧ s i ⊆ t :=
hl.mem_iff' t
@@ -269,7 +269,7 @@ theorem HasBasis.eq_of_same_basis (hl : l.HasBasis p s) (hl' : l'.HasBasis p s)
rw [hl.mem_iff, hl'.mem_iff]
#align filter.has_basis.eq_of_same_basis Filter.HasBasis.eq_of_same_basis
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem hasBasis_iff : l.HasBasis p s ↔ ∀ t, t ∈ l ↔ ∃ i, p i ∧ s i ⊆ t :=
⟨fun ⟨h⟩ => h, fun h => ⟨h⟩⟩
#align filter.has_basis_iff Filter.hasBasis_iffₓ
@@ -376,7 +376,7 @@ theorem HasBasis.frequently_iff (hl : l.HasBasis p s) {q : α → Prop} :
simp only [Filter.Frequently, hl.eventually_iff]; push_neg; rfl
#align filter.has_basis.frequently_iff Filter.HasBasis.frequently_iff
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.exists_iff (hl : l.HasBasis p s) {P : Set α → Prop}
(mono : ∀ ⦃s t⦄, s ⊆ t → P t → P s) : (∃ s ∈ l, P s) ↔ ∃ i, p i ∧ P (s i) :=
⟨fun ⟨_s, hs, hP⟩ =>
@@ -460,18 +460,18 @@ theorem HasBasis.ge_iff (hl' : l'.HasBasis p' s') : l ≤ l' ↔ ∀ i', p' i'
mem_of_superset (h _ hi') hs⟩
#align filter.has_basis.ge_iff Filter.HasBasis.ge_iff
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.le_iff (hl : l.HasBasis p s) : l ≤ l' ↔ ∀ t ∈ l', ∃ i, p i ∧ s i ⊆ t := by
simp only [le_def, hl.mem_iff]
#align filter.has_basis.le_iff Filter.HasBasis.le_iffₓ
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.le_basis_iff (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
l ≤ l' ↔ ∀ i', p' i' → ∃ i, p i ∧ s i ⊆ s' i' := by
simp only [hl'.ge_iff, hl.mem_iff]
#align filter.has_basis.le_basis_iff Filter.HasBasis.le_basis_iffₓ
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.ext (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s')
(h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i) (h' : ∀ i', p' i' → ∃ i, p i ∧ s i ⊆ s' i') :
l = l' := by
@@ -648,14 +648,14 @@ theorem HasBasis.inf_principal_neBot_iff (hl : l.HasBasis p s) {t : Set α} :
(hl.inf_principal t).neBot_iff
#align filter.has_basis.inf_principal_ne_bot_iff Filter.HasBasis.inf_principal_neBot_iff
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.disjoint_iff (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
Disjoint l l' ↔ ∃ i, p i ∧ ∃ i', p' i' ∧ Disjoint (s i) (s' i') :=
not_iff_not.mp <| by simp only [_root_.disjoint_iff, ← Ne.def, ← neBot_iff, inf_eq_inter,
hl.inf_basis_neBot_iff hl', not_exists, not_and, bot_eq_empty, ← nonempty_iff_ne_empty]
#align filter.has_basis.disjoint_iff Filter.HasBasis.disjoint_iffₓ
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem _root_.Disjoint.exists_mem_filter_basis (h : Disjoint l l') (hl : l.HasBasis p s)
(hl' : l'.HasBasis p' s') : ∃ i, p i ∧ ∃ i', p' i' ∧ Disjoint (s i) (s' i') :=
(hl.disjoint_iff hl').1 h
@@ -709,7 +709,7 @@ theorem disjoint_principal_left {f : Filter α} {s : Set α} : Disjoint (𝓟 s)
rw [disjoint_comm, disjoint_principal_right]
#align filter.disjoint_principal_left Filter.disjoint_principal_left
-@[simp 1100] -- porting note: higher priority for linter
+@[simp 1100] -- Porting note: higher priority for linter
theorem disjoint_principal_principal {s t : Set α} : Disjoint (𝓟 s) (𝓟 t) ↔ Disjoint s t := by
rw [← subset_compl_iff_disjoint_left, disjoint_principal_left, mem_principal]
#align filter.disjoint_principal_principal Filter.disjoint_principal_principal
@@ -727,14 +727,14 @@ theorem compl_diagonal_mem_prod {l₁ l₂ : Filter α} : (diagonal α)ᶜ ∈ l
simp only [mem_prod_iff, Filter.disjoint_iff, prod_subset_compl_diagonal_iff_disjoint]
#align filter.compl_diagonal_mem_prod Filter.compl_diagonal_mem_prod
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.disjoint_iff_left (h : l.HasBasis p s) :
Disjoint l l' ↔ ∃ i, p i ∧ (s i)ᶜ ∈ l' := by
simp only [h.disjoint_iff l'.basis_sets, id, ← disjoint_principal_left,
(hasBasis_principal _).disjoint_iff l'.basis_sets, true_and, Unique.exists_iff]
#align filter.has_basis.disjoint_iff_left Filter.HasBasis.disjoint_iff_leftₓ
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.disjoint_iff_right (h : l.HasBasis p s) :
Disjoint l' l ↔ ∃ i, p i ∧ (s i)ᶜ ∈ l' :=
disjoint_comm.trans h.disjoint_iff_left
@@ -865,7 +865,7 @@ section TwoTypes
variable {la : Filter α} {pa : ι → Prop} {sa : ι → Set α} {lb : Filter β} {pb : ι' → Prop}
{sb : ι' → Set β} {f : α → β}
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.tendsto_left_iff (hla : la.HasBasis pa sa) :
Tendsto f la lb ↔ ∀ t ∈ lb, ∃ i, pa i ∧ MapsTo f (sa i) t := by
simp only [Tendsto, (hla.map f).le_iff, image_subset_iff]
@@ -877,13 +877,13 @@ theorem HasBasis.tendsto_right_iff (hlb : lb.HasBasis pb sb) :
simp only [Tendsto, hlb.ge_iff, mem_map', Filter.Eventually]
#align filter.has_basis.tendsto_right_iff Filter.HasBasis.tendsto_right_iff
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.tendsto_iff (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
Tendsto f la lb ↔ ∀ ib, pb ib → ∃ ia, pa ia ∧ ∀ x ∈ sa ia, f x ∈ sb ib := by
simp [hlb.tendsto_right_iff, hla.eventually_iff]
#align filter.has_basis.tendsto_iff Filter.HasBasis.tendsto_iffₓ
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem Tendsto.basis_left (H : Tendsto f la lb) (hla : la.HasBasis pa sa) :
∀ t ∈ lb, ∃ i, pa i ∧ MapsTo f (sa i) t :=
hla.tendsto_left_iff.1 H
@@ -894,7 +894,7 @@ theorem Tendsto.basis_right (H : Tendsto f la lb) (hlb : lb.HasBasis pb sb) :
hlb.tendsto_right_iff.1 H
#align filter.tendsto.basis_right Filter.Tendsto.basis_right
--- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
+-- Porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem Tendsto.basis_both (H : Tendsto f la lb) (hla : la.HasBasis pa sa)
(hlb : lb.HasBasis pb sb) :
∀ ib, pb ib → ∃ ia, pa ia ∧ MapsTo f (sa ia) (sb ib) :=
@@ -1204,7 +1204,7 @@ theorem isCountablyGenerated_top : IsCountablyGenerated (⊤ : Filter α) :=
@principal_univ α ▸ isCountablyGenerated_principal _
#align filter.is_countably_generated_top Filter.isCountablyGenerated_top
--- porting note: without explicit `Sort u` and `Type v`, Lean 4 uses `ι : Prop`
+-- Porting note: without explicit `Sort u` and `Type v`, Lean 4 uses `ι : Prop`
universe u v
instance iInf.isCountablyGenerated {ι : Sort u} {α : Type v} [Countable ι] (f : ι → Filter α)
Start moving parts of >3K lines long Filter.Basic
to new files.
@@ -6,6 +6,7 @@ Authors: Yury Kudryashov, Johannes Hölzl, Mario Carneiro, Patrick Massot
import Mathlib.Data.Prod.PProd
import Mathlib.Data.Set.Countable
import Mathlib.Order.Filter.Prod
+import Mathlib.Order.Filter.Ker
#align_import order.filter.bases from "leanprover-community/mathlib"@"996b0ff959da753a555053a480f36e5f264d4207"
$
with <|
(#9319)
See Zulip thread for the discussion.
@@ -829,7 +829,7 @@ protected theorem HasBasis.biInter_mem {f : Set α → Set β} (h : HasBasis l p
#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_mem
protected theorem HasBasis.ker (h : HasBasis l p s) : l.ker = ⋂ (i) (_ : p i), s i :=
- l.ker_def.trans $ h.biInter_mem monotone_id
+ l.ker_def.trans <| h.biInter_mem monotone_id
#align filter.has_basis.sInter_sets Filter.HasBasis.ker
variable {ι'' : Type*} [Preorder ι''] (l) (s'' : ι'' → Set α)
@@ -165,7 +165,7 @@ namespace FilterBasis
/-- The filter associated to a filter basis. -/
protected def filter (B : FilterBasis α) : Filter α where
sets := { s | ∃ t ∈ B, t ⊆ s }
- univ_sets := B.nonempty.imp <| fun s s_in => ⟨s_in, s.subset_univ⟩
+ univ_sets := B.nonempty.imp fun s s_in => ⟨s_in, s.subset_univ⟩
sets_of_superset := fun ⟨s, s_in, h⟩ hxy => ⟨s, s_in, Set.Subset.trans h hxy⟩
inter_sets := fun ⟨_s, s_in, hs⟩ ⟨_t, t_in, ht⟩ =>
let ⟨u, u_in, u_sub⟩ := B.inter_sets s_in t_in
@@ -274,7 +274,7 @@ theorem hasBasis_iff : l.HasBasis p s ↔ ∀ t, t ∈ l ↔ ∃ i, p i ∧ s i
#align filter.has_basis_iff Filter.hasBasis_iffₓ
theorem HasBasis.ex_mem (h : l.HasBasis p s) : ∃ i, p i :=
- (h.mem_iff.mp univ_mem).imp <| fun _ => And.left
+ (h.mem_iff.mp univ_mem).imp fun _ => And.left
#align filter.has_basis.ex_mem Filter.HasBasis.ex_mem
protected theorem HasBasis.nonempty (h : l.HasBasis p s) : Nonempty ι :=
@@ -755,7 +755,7 @@ theorem inf_neBot_iff_frequently_right {f g : Filter α} :
#align filter.inf_ne_bot_iff_frequently_right Filter.inf_neBot_iff_frequently_right
theorem HasBasis.eq_biInf (h : l.HasBasis p s) : l = ⨅ (i) (_ : p i), 𝓟 (s i) :=
- eq_biInf_of_mem_iff_exists_mem <| fun {_} => by simp only [h.mem_iff, mem_principal, exists_prop]
+ eq_biInf_of_mem_iff_exists_mem fun {_} => by simp only [h.mem_iff, mem_principal, exists_prop]
#align filter.has_basis.eq_binfi Filter.HasBasis.eq_biInf
theorem HasBasis.eq_iInf (h : l.HasBasis (fun _ => True) s) : l = ⨅ i, 𝓟 (s i) := by
cases'
(#9171)
I literally went through and regex'd some uses of cases'
, replacing them with rcases
; this is meant to be a low effort PR as I hope that tools can do this in the future.
rcases
is an easier replacement than cases
, though with better tools we could in future do a second pass converting simple rcases
added here (and existing ones) to cases
.
@@ -1044,7 +1044,7 @@ theorem countable_biInf_eq_iInf_seq [CompleteLattice α] {B : Set ι} (Bcbl : B.
theorem countable_biInf_eq_iInf_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
(f : ι → α) {i₀ : ι} (h : f i₀ = ⊤) : ∃ x : ℕ → ι, ⨅ t ∈ B, f t = ⨅ i, f (x i) := by
- cases' B.eq_empty_or_nonempty with hB Bnonempty
+ rcases B.eq_empty_or_nonempty with hB | Bnonempty
· rw [hB, iInf_emptyset]
use fun _ => i₀
simp [h]
@@ -460,8 +460,8 @@ theorem HasBasis.ge_iff (hl' : l'.HasBasis p' s') : l ≤ l' ↔ ∀ i', p' i'
#align filter.has_basis.ge_iff Filter.HasBasis.ge_iff
-- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
-theorem HasBasis.le_iff (hl : l.HasBasis p s) : l ≤ l' ↔ ∀ t ∈ l', ∃ i, p i ∧ s i ⊆ t :=
- by simp only [le_def, hl.mem_iff]
+theorem HasBasis.le_iff (hl : l.HasBasis p s) : l ≤ l' ↔ ∀ t ∈ l', ∃ i, p i ∧ s i ⊆ t := by
+ simp only [le_def, hl.mem_iff]
#align filter.has_basis.le_iff Filter.HasBasis.le_iffₓ
-- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
@@ -581,8 +581,9 @@ theorem hasBasis_principal (t : Set α) : (𝓟 t).HasBasis (fun _ : Unit => Tru
⟨fun U => by simp⟩
#align filter.has_basis_principal Filter.hasBasis_principal
-theorem hasBasis_pure (x : α) : (pure x : Filter α).HasBasis (fun _ : Unit => True) fun _ => {x} :=
- by simp only [← principal_singleton, hasBasis_principal]
+theorem hasBasis_pure (x : α) :
+ (pure x : Filter α).HasBasis (fun _ : Unit => True) fun _ => {x} := by
+ simp only [← principal_singleton, hasBasis_principal]
#align filter.has_basis_pure Filter.hasBasis_pure
theorem HasBasis.sup' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
@@ -356,6 +356,11 @@ theorem HasBasis.to_hasBasis (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p
hl.mem_iff.2 ⟨i, hi, hss'⟩
#align filter.has_basis.to_has_basis Filter.HasBasis.to_hasBasis
+protected lemma HasBasis.congr (hl : l.HasBasis p s) {p' s'} (hp : ∀ i, p i ↔ p' i)
+ (hs : ∀ i, p i → s i = s' i) : l.HasBasis p' s' :=
+ ⟨fun t ↦ by simp only [hl.mem_iff, ← hp]; exact exists_congr fun i ↦
+ and_congr_right fun hi ↦ hs i hi ▸ Iff.rfl⟩
+
theorem HasBasis.to_subset (hl : l.HasBasis p s) {t : ι → Set α} (h : ∀ i, p i → t i ⊆ s i)
(ht : ∀ i, p i → t i ∈ l) : l.HasBasis p t :=
hl.to_hasBasis' (fun i hi => ⟨i, hi, h i hi⟩) ht
@@ -944,6 +944,10 @@ theorem mem_prod_self_iff {s} : s ∈ la ×ˢ la ↔ ∃ t ∈ la, t ×ˢ t ⊆
la.basis_sets.prod_self.mem_iff
#align filter.mem_prod_self_iff Filter.mem_prod_self_iff
+lemma eventually_prod_self_iff {r : α → α → Prop} :
+ (∀ᶠ x in la ×ˢ la, r x.1 x.2) ↔ ∃ t ∈ la, ∀ x ∈ t, ∀ y ∈ t, r x y :=
+ mem_prod_self_iff.trans <| by simp only [prod_subset_iff, mem_setOf_eq]
+
theorem HasAntitoneBasis.prod {ι : Type*} [LinearOrder ι] {f : Filter α} {g : Filter β}
{s : ι → Set α} {t : ι → Set β} (hf : HasAntitoneBasis f s) (hg : HasAntitoneBasis g t) :
HasAntitoneBasis (f ×ˢ g) fun n => s n ×ˢ t n :=
Filter.hasAntitoneBasis_atTop
;Filter.HasAntitoneBasis.iInf_principal
;ProbabilityTheory.measure_eq_zero_or_one_of_indepSetCat_self
->
ProbabilityTheory.measure_eq_zero_or_one_of_indepSet_self
.MeasureTheory.tendsto_measure_iUnion
;MeasureTheory.tendsto_measure_iInter
;Monotone.directed_le
, Monotone.directed_ge
;Antitone.directed_le
, Antitone.directed_ge
;directed_of_sup
, renamed to directed_of_isDirected_le
;directed_of_inf
, renamed to directed_of_isDirected_ge
;tendsto_nat_cast_atTop_atTop
;Filter.Eventually.nat_cast_atTop
;atTop_hasAntitoneBasis_of_archimedean
;@@ -847,6 +847,10 @@ theorem HasAntitoneBasis.map {l : Filter α} {s : ι'' → Set α} {m : α →
⟨HasBasis.map _ hf.toHasBasis, fun _ _ h => image_subset _ <| hf.2 h⟩
#align filter.has_antitone_basis.map Filter.HasAntitoneBasis.map
+lemma HasAntitoneBasis.iInf_principal {ι : Type*} [Preorder ι] [Nonempty ι] [IsDirected ι (· ≤ ·)]
+ {s : ι → Set α} (hs : Antitone s) : (⨅ i, 𝓟 (s i)).HasAntitoneBasis s :=
+ ⟨hasBasis_iInf_principal hs.directed_ge, hs⟩
+
end SameType
section TwoTypes
@@ -1075,14 +1079,13 @@ theorem HasBasis.exists_antitone_subbasis {f : Filter α} [h : f.IsCountablyGene
let x : ℕ → { i : ι' // p i } := fun n =>
Nat.recOn n (hs.index _ <| this 0) fun n xn =>
hs.index _ <| inter_mem (this <| n + 1) (hs.mem_of_mem xn.2)
- have x_mono : Antitone fun i => s (x i).1 :=
+ have x_anti : Antitone fun i => s (x i).1 :=
antitone_nat_of_succ_le fun i => (hs.set_index_subset _).trans (inter_subset_right _ _)
have x_subset : ∀ i, s (x i).1 ⊆ x' i := by
rintro (_ | i)
exacts [hs.set_index_subset _, (hs.set_index_subset _).trans (inter_subset_left _ _)]
refine' ⟨fun i => (x i).1, fun i => (x i).2, _⟩
- have : (⨅ i, 𝓟 (s (x i).1)).HasAntitoneBasis fun i => s (x i).1 :=
- ⟨hasBasis_iInf_principal (directed_of_sup x_mono), x_mono⟩
+ have : (⨅ i, 𝓟 (s (x i).1)).HasAntitoneBasis fun i => s (x i).1 := .iInf_principal x_anti
convert this
exact
le_antisymm (le_iInf fun i => le_principal_iff.2 <| by cases i <;> apply hs.set_index_mem)
This will improve spaces in the mathlib4 docs.
@@ -59,7 +59,7 @@ and consequences are derived.
* `isCountablyGenerated_iff_exists_antitone_basis` : proves a filter is countably generated if and
only if it admits a basis parametrized by a decreasing sequence of sets indexed by `ℕ`.
-* `tendsto_iff_seq_tendsto ` : an abstract version of "sequentially continuous implies continuous".
+* `tendsto_iff_seq_tendsto` : an abstract version of "sequentially continuous implies continuous".
## Implementation notes
@@ -286,7 +286,7 @@ protected theorem IsBasis.hasBasis (h : IsBasis p s) : HasBasis h.filter p s :=
#align filter.is_basis.has_basis Filter.IsBasis.hasBasis
protected theorem HasBasis.mem_of_superset (hl : l.HasBasis p s) (hi : p i) (ht : s i ⊆ t) :
- t ∈ l :=
+ t ∈ l :=
hl.mem_iff.2 ⟨i, hi, ht⟩
#align filter.has_basis.mem_of_superset Filter.HasBasis.mem_of_superset
In an Alexandrov-discrete space, every set has a smallest neighborhood. We call this neighborhood the exterior of the set. It is completely analogous to the interior, except that all inclusions are reversed.
@@ -822,10 +822,9 @@ protected theorem HasBasis.biInter_mem {f : Set α → Set β} (h : HasBasis l p
h.biInf_mem hf
#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_mem
-theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (_ : p i), s i := by
- rw [sInter_eq_biInter]
- exact h.biInter_mem monotone_id
-#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_sets
+protected theorem HasBasis.ker (h : HasBasis l p s) : l.ker = ⋂ (i) (_ : p i), s i :=
+ l.ker_def.trans $ h.biInter_mem monotone_id
+#align filter.has_basis.sInter_sets Filter.HasBasis.ker
variable {ι'' : Type*} [Preorder ι''] (l) (s'' : ι'' → Set α)
@@ -21,7 +21,7 @@ to `B.filter` if and only if it contains an element of `B`.
Given an indexing type `ι`, a predicate `p : ι → Prop`, and a map `s : ι → Set α`,
the proposition `h : Filter.IsBasis p s` makes sure the range of `s` bounded by `p`
-(ie. `s '' setOf p`) defines a filter basis `h.filter_basis`.
+(ie. `s '' setOf p`) defines a filter basis `h.filterBasis`.
If one already has a filter `l` on `α`, `Filter.HasBasis l p s` (where `p : ι → Prop`
and `s : ι → Set α` as above) means that a set belongs to `l` if and
@@ -54,9 +54,9 @@ and consequences are derived.
`l ≤ l'` in terms of bases.
* `Filter.HasBasis.tendsto_right_iff`, `Filter.HasBasis.tendsto_left_iff`,
- `Filter.HasBasis.tendsto_iff` : restate `tendsto f l l'` in terms of bases.
+ `Filter.HasBasis.tendsto_iff` : restate `Tendsto f l l'` in terms of bases.
-* `is_countably_generated_iff_exists_antitone_basis` : proves a filter is countably generated if and
+* `isCountablyGenerated_iff_exists_antitone_basis` : proves a filter is countably generated if and
only if it admits a basis parametrized by a decreasing sequence of sets indexed by `ℕ`.
* `tendsto_iff_seq_tendsto ` : an abstract version of "sequentially continuous implies continuous".
@@ -112,7 +112,7 @@ instance {α : Type*} : Membership (Set α) (FilterBasis α) :=
@[simp] theorem FilterBasis.mem_sets {s : Set α} {B : FilterBasis α} : s ∈ B.sets ↔ s ∈ B := Iff.rfl
--- For illustration purposes, the filter basis defining (at_top : filter ℕ)
+-- For illustration purposes, the filter basis defining `(atTop : Filter ℕ)`
instance : Inhabited (FilterBasis ℕ) :=
⟨{ sets := range Ici
nonempty := ⟨Ici 0, mem_range_self 0⟩
@@ -163,8 +163,7 @@ end Filter
namespace FilterBasis
/-- The filter associated to a filter basis. -/
-protected def filter (B : FilterBasis α) : Filter α
- where
+protected def filter (B : FilterBasis α) : Filter α where
sets := { s | ∃ t ∈ B, t ⊆ s }
univ_sets := B.nonempty.imp <| fun s s_in => ⟨s_in, s.subset_univ⟩
sets_of_superset := fun ⟨s, s_in, h⟩ hxy => ⟨s, s_in, Set.Subset.trans h hxy⟩
@@ -314,7 +313,7 @@ theorem HasBasis.set_index_subset (h : l.HasBasis p s) (ht : t ∈ l) : s (h.ind
theorem HasBasis.isBasis (h : l.HasBasis p s) : IsBasis p s where
nonempty := h.ex_mem
- inter := fun hi hj => by
+ inter hi hj := by
simpa only [h.mem_iff] using inter_mem (h.mem_of_mem hi) (h.mem_of_mem hj)
#align filter.has_basis.is_basis Filter.HasBasis.isBasis
@@ -342,24 +341,24 @@ protected theorem _root_.FilterBasis.hasBasis (B : FilterBasis α) :
⟨fun _ => B.mem_filter_iff⟩
#align filter_basis.has_basis FilterBasis.hasBasis
-theorem HasBasis.to_has_basis' (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i)
+theorem HasBasis.to_hasBasis' (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i)
(h' : ∀ i', p' i' → s' i' ∈ l) : l.HasBasis p' s' := by
refine' ⟨fun t => ⟨fun ht => _, fun ⟨i', hi', ht⟩ => mem_of_superset (h' i' hi') ht⟩⟩
rcases hl.mem_iff.1 ht with ⟨i, hi, ht⟩
rcases h i hi with ⟨i', hi', hs's⟩
exact ⟨i', hi', hs's.trans ht⟩
-#align filter.has_basis.to_has_basis' Filter.HasBasis.to_has_basis'
+#align filter.has_basis.to_has_basis' Filter.HasBasis.to_hasBasis'
theorem HasBasis.to_hasBasis (hl : l.HasBasis p s) (h : ∀ i, p i → ∃ i', p' i' ∧ s' i' ⊆ s i)
(h' : ∀ i', p' i' → ∃ i, p i ∧ s i ⊆ s' i') : l.HasBasis p' s' :=
- hl.to_has_basis' h fun i' hi' =>
+ hl.to_hasBasis' h fun i' hi' =>
let ⟨i, hi, hss'⟩ := h' i' hi'
hl.mem_iff.2 ⟨i, hi, hss'⟩
#align filter.has_basis.to_has_basis Filter.HasBasis.to_hasBasis
theorem HasBasis.to_subset (hl : l.HasBasis p s) {t : ι → Set α} (h : ∀ i, p i → t i ⊆ s i)
(ht : ∀ i, p i → t i ∈ l) : l.HasBasis p t :=
- hl.to_has_basis' (fun i hi => ⟨i, hi, h i hi⟩) ht
+ hl.to_hasBasis' (fun i hi => ⟨i, hi, h i hi⟩) ht
#align filter.has_basis.to_subset Filter.HasBasis.to_subset
theorem HasBasis.eventually_iff (hl : l.HasBasis p s) {q : α → Prop} :
@@ -552,7 +551,7 @@ theorem hasBasis_biInf_of_directed' {ι : Type*} {ι' : ι → Sort _} {dom : Se
rw [mem_biInf_of_directed h hdom, Sigma.exists]
refine' exists_congr fun i => ⟨_, _⟩
· rintro ⟨hi, hti⟩
- rcases(hl i hi).mem_iff.mp hti with ⟨b, hb, hbt⟩
+ rcases (hl i hi).mem_iff.mp hti with ⟨b, hb, hbt⟩
exact ⟨b, ⟨hi, hb⟩, hbt⟩
· rintro ⟨b, ⟨hi, hb⟩, hibt⟩
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
@@ -567,7 +566,7 @@ theorem hasBasis_biInf_of_directed {ι : Type*} {ι' : Sort _} {dom : Set ι} (h
rw [mem_biInf_of_directed h hdom, Prod.exists]
refine' exists_congr fun i => ⟨_, _⟩
· rintro ⟨hi, hti⟩
- rcases(hl i hi).mem_iff.mp hti with ⟨b, hb, hbt⟩
+ rcases (hl i hi).mem_iff.mp hti with ⟨b, hb, hbt⟩
exact ⟨b, ⟨hi, hb⟩, hbt⟩
· rintro ⟨b, ⟨hi, hb⟩, hibt⟩
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
@@ -1002,7 +1001,7 @@ structure CountableFilterBasis (α : Type*) extends FilterBasis α where
countable : sets.Countable
#align filter.countable_filter_basis Filter.CountableFilterBasis
--- For illustration purposes, the countable filter basis defining `(AtTop : Filter ℕ)`
+-- For illustration purposes, the countable filter basis defining `(atTop : Filter ℕ)`
instance Nat.inhabitedCountableFilterBasis : Inhabited (CountableFilterBasis ℕ) :=
⟨⟨default, countable_range fun n => Ici n⟩⟩
#align filter.nat.inhabited_countable_filter_basis Filter.Nat.inhabitedCountableFilterBasis
Remove the lemmas le_pure_iff_eq_pure
(duplicate of NeBot.le_pure_iff
) and eq_bot_or_pure_of_subsingleton_mem
(duplicate of subsingleton_iff_bot_or_pure
).
This requires moving a few lemmas after their non-duplicate prerequisites.
@@ -1192,12 +1192,6 @@ theorem isCountablyGenerated_top : IsCountablyGenerated (⊤ : Filter α) :=
@principal_univ α ▸ isCountablyGenerated_principal _
#align filter.is_countably_generated_top Filter.isCountablyGenerated_top
-lemma isCountablyGenerated_of_subsingleton_mem {l : Filter α} {s : Set α} (hs : s.Subsingleton)
- (h's : s ∈ l) : IsCountablyGenerated l := by
- rcases eq_bot_or_pure_of_subsingleton_mem hs h's with rfl|⟨x, rfl⟩
- · exact isCountablyGenerated_bot
- · exact isCountablyGenerated_pure x
-
-- porting note: without explicit `Sort u` and `Type v`, Lean 4 uses `ι : Prop`
universe u v
@@ -1192,6 +1192,12 @@ theorem isCountablyGenerated_top : IsCountablyGenerated (⊤ : Filter α) :=
@principal_univ α ▸ isCountablyGenerated_principal _
#align filter.is_countably_generated_top Filter.isCountablyGenerated_top
+lemma isCountablyGenerated_of_subsingleton_mem {l : Filter α} {s : Set α} (hs : s.Subsingleton)
+ (h's : s ∈ l) : IsCountablyGenerated l := by
+ rcases eq_bot_or_pure_of_subsingleton_mem hs h's with rfl|⟨x, rfl⟩
+ · exact isCountablyGenerated_bot
+ · exact isCountablyGenerated_pure x
+
-- porting note: without explicit `Sort u` and `Type v`, Lean 4 uses `ι : Prop`
universe u v
@@ -708,7 +708,7 @@ theorem disjoint_principal_principal {s t : Set α} : Disjoint (𝓟 s) (𝓟 t)
rw [← subset_compl_iff_disjoint_left, disjoint_principal_left, mem_principal]
#align filter.disjoint_principal_principal Filter.disjoint_principal_principal
-alias disjoint_principal_principal ↔ _ _root_.Disjoint.filter_principal
+alias ⟨_, _root_.Disjoint.filter_principal⟩ := disjoint_principal_principal
#align disjoint.filter_principal Disjoint.filter_principal
@[simp]
Autoimplicits are highly controversial and also defeat the performance-improving work in #6474.
The intent of this PR is to make autoImplicit
opt-in on a per-file basis, by disabling it in the lakefile and enabling it again with set_option autoImplicit true
in the few files that rely on it.
That also keeps this PR small, as opposed to attempting to "fix" files to not need it any more.
I claim that many of the uses of autoImplicit
in these files are accidental; situations such as:
variables
are in scope, but pasting the lemma in the wrong sectionHaving set_option autoImplicit false
as the default prevents these types of mistake being made in the 90% of files where autoImplicit
s are not used at all, and causes them to be caught by CI during review.
I think there were various points during the port where we encouraged porters to delete the universes u v
lines; I think having autoparams for universe variables only would cover a lot of the cases we actually use them, while avoiding any real shortcomings.
A Zulip poll (after combining overlapping votes accordingly) was in favor of this change with 5:5:18
as the no:dontcare:yes
vote ratio.
While this PR was being reviewed, a handful of files gained some more likely-accidental autoImplicits. In these places, set_option autoImplicit true
has been placed locally within a section, rather than at the top of the file.
@@ -77,6 +77,8 @@ machinery, e.g., `simp only [true_and]` or `simp only [forall_const]` can help w
`p = fun _ ↦ True`.
-/
+set_option autoImplicit true
+
open Set Filter
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -84,12 +84,12 @@ open Filter Classical
section sort
-variable {α β γ : Type _} {ι ι' : Sort _}
+variable {α β γ : Type*} {ι ι' : Sort*}
/-- A filter basis `B` on a type `α` is a nonempty collection of sets of `α`
such that the intersection of two elements of this collection contains some element
of the collection. -/
-structure FilterBasis (α : Type _) where
+structure FilterBasis (α : Type*) where
/-- Sets of a filter basis. -/
sets : Set (Set α)
/-- The set of filter basis sets is nonempty. -/
@@ -105,7 +105,7 @@ instance FilterBasis.nonempty_sets (B : FilterBasis α) : Nonempty B.sets :=
-- porting note: this instance was reducible but it doesn't work the same way in Lean 4
/-- If `B` is a filter basis on `α`, and `U` a subset of `α` then we can write `U ∈ B` as
on paper. -/
-instance {α : Type _} : Membership (Set α) (FilterBasis α) :=
+instance {α : Type*} : Membership (Set α) (FilterBasis α) :=
⟨fun U B => U ∈ B.sets⟩
@[simp] theorem FilterBasis.mem_sets {s : Set α} {B : FilterBasis α} : s ∈ B.sets ↔ s ∈ B := Iff.rfl
@@ -487,13 +487,13 @@ theorem HasBasis.inf' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
exact mem_inf_of_inter (hl.mem_of_mem hi) (hl'.mem_of_mem hi') H⟩
#align filter.has_basis.inf' Filter.HasBasis.inf'
-theorem HasBasis.inf {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p' : ι' → Prop}
+theorem HasBasis.inf {ι ι' : Type*} {p : ι → Prop} {s : ι → Set α} {p' : ι' → Prop}
{s' : ι' → Set α} (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊓ l').HasBasis (fun i : ι × ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∩ s' i.2 :=
(hl.inf' hl').comp_equiv Equiv.pprodEquivProd.symm
#align filter.has_basis.inf Filter.HasBasis.inf
-theorem hasBasis_iInf' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
+theorem hasBasis_iInf' {ι : Type*} {ι' : ι → Type*} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis (fun If : Set ι × ∀ i, ι' i => If.1.Finite ∧ ∀ i ∈ If.1, p i (If.2 i))
fun If : Set ι × ∀ i, ι' i => ⋂ i ∈ If.1, s i (If.2 i) :=
@@ -509,7 +509,7 @@ theorem hasBasis_iInf' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α
exact (biInter_mem hI₁).mpr fun i hi => mem_iInf_of_mem i <| (hl i).mem_of_mem <| hI₂ _ hi⟩
#align filter.has_basis_infi' Filter.hasBasis_iInf'
-theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
+theorem hasBasis_iInf {ι : Type*} {ι' : ι → Type*} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis
(fun If : Σ I : Set ι, ∀ i : I, ι' i => If.1.Finite ∧ ∀ i : If.1, p i (If.2 i)) fun If =>
@@ -523,7 +523,7 @@ theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α}
exact iInter_mem.2 fun i => mem_iInf_of_mem ↑i <| (hl i).mem_of_mem <| hf _
#align filter.has_basis_infi Filter.hasBasis_iInf
-theorem hasBasis_iInf_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty ι] {l : ι → Filter α}
+theorem hasBasis_iInf_of_directed' {ι : Type*} {ι' : ι → Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
(⨅ i, l i).HasBasis (fun ii' : Σi, ι' i => p ii'.1 ii'.2) fun ii' => s ii'.1 ii'.2 := by
@@ -532,7 +532,7 @@ theorem hasBasis_iInf_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty
exact exists_congr fun i => (hl i).mem_iff
#align filter.has_basis_infi_of_directed' Filter.hasBasis_iInf_of_directed'
-theorem hasBasis_iInf_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l : ι → Filter α}
+theorem hasBasis_iInf_of_directed {ι : Type*} {ι' : Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ι → ι' → Set α) (p : ι → ι' → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
(⨅ i, l i).HasBasis (fun ii' : ι × ι' => p ii'.1 ii'.2) fun ii' => s ii'.1 ii'.2 := by
@@ -541,7 +541,7 @@ theorem hasBasis_iInf_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l
exact exists_congr fun i => (hl i).mem_iff
#align filter.has_basis_infi_of_directed Filter.hasBasis_iInf_of_directed
-theorem hasBasis_biInf_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : Set ι}
+theorem hasBasis_biInf_of_directed' {ι : Type*} {ι' : ι → Sort _} {dom : Set ι}
(hdom : dom.Nonempty) {l : ι → Filter α} (s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → 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' : Σi, ι' i => ii'.1 ∈ dom ∧ p ii'.1 ii'.2) fun ii' =>
@@ -556,7 +556,7 @@ theorem hasBasis_biInf_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : S
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
#align filter.has_basis_binfi_of_directed' Filter.hasBasis_biInf_of_directed'
-theorem hasBasis_biInf_of_directed {ι : Type _} {ι' : Sort _} {dom : Set ι} (hdom : dom.Nonempty)
+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' =>
@@ -588,13 +588,13 @@ theorem HasBasis.sup' (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
simp only [and_assoc, and_left_comm]⟩
#align filter.has_basis.sup' Filter.HasBasis.sup'
-theorem HasBasis.sup {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p' : ι' → Prop}
+theorem HasBasis.sup {ι ι' : Type*} {p : ι → Prop} {s : ι → Set α} {p' : ι' → Prop}
{s' : ι' → Set α} (hl : l.HasBasis p s) (hl' : l'.HasBasis p' s') :
(l ⊔ l').HasBasis (fun i : ι × ι' => p i.1 ∧ p' i.2) fun i => s i.1 ∪ s' i.2 :=
(hl.sup' hl').comp_equiv Equiv.pprodEquivProd.symm
#align filter.has_basis.sup Filter.HasBasis.sup
-theorem hasBasis_iSup {ι : Sort _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
+theorem hasBasis_iSup {ι : Sort*} {ι' : ι → Type*} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨆ i, l i).HasBasis (fun f : ∀ i, ι' i => ∀ i, p i (f i)) fun f : ∀ i, ι' i => ⋃ i, s i (f i) :=
hasBasis_iff.mpr fun t => by
@@ -654,7 +654,7 @@ theorem _root_.Disjoint.exists_mem_filter_basis (h : Disjoint l l') (hl : l.HasB
#align disjoint.exists_mem_filter_basis Disjoint.exists_mem_filter_basisₓ
theorem _root_.Pairwise.exists_mem_filter_basis_of_disjoint {I} [Finite I] {l : I → Filter α}
- {ι : I → Sort _} {p : ∀ i, ι i → Prop} {s : ∀ i, ι i → Set α} (hd : Pairwise (Disjoint on l))
+ {ι : I → Sort*} {p : ∀ i, ι i → Prop} {s : ∀ i, ι i → Set α} (hd : Pairwise (Disjoint on l))
(h : ∀ i, (l i).HasBasis (p i) (s i)) :
∃ ind : ∀ i, ι i, (∀ i, p i (ind i)) ∧ Pairwise (Disjoint on fun i => s i (ind i)) := by
rcases hd.exists_mem_filter_of_disjoint with ⟨t, htl, hd⟩
@@ -662,8 +662,8 @@ theorem _root_.Pairwise.exists_mem_filter_basis_of_disjoint {I} [Finite I] {l :
exact ⟨ind, hp, hd.mono fun i j hij => hij.mono (ht _) (ht _)⟩
#align pairwise.exists_mem_filter_basis_of_disjoint Pairwise.exists_mem_filter_basis_of_disjoint
-theorem _root_.Set.PairwiseDisjoint.exists_mem_filter_basis {I : Type _} {l : I → Filter α}
- {ι : I → Sort _} {p : ∀ i, ι i → Prop} {s : ∀ i, ι i → Set α} {S : Set I}
+theorem _root_.Set.PairwiseDisjoint.exists_mem_filter_basis {I : Type*} {l : I → Filter α}
+ {ι : I → Sort*} {p : ∀ i, ι i → Prop} {s : ∀ i, ι i → Set α} {S : Set I}
(hd : S.PairwiseDisjoint l) (hS : S.Finite) (h : ∀ i, (l i).HasBasis (p i) (s i)) :
∃ ind : ∀ i, ι i, (∀ i, p i (ind i)) ∧ S.PairwiseDisjoint fun i => s i (ind i) := by
rcases hd.exists_mem_filter hS with ⟨t, htl, hd⟩
@@ -763,7 +763,7 @@ theorem hasBasis_iInf_principal {s : ι → Set α} (h : Directed (· ≥ ·) s)
/-- If `s : ι → Set α` is an indexed family of sets, then finite intersections of `s i` form a basis
of `⨅ i, 𝓟 (s i)`. -/
-theorem hasBasis_iInf_principal_finite {ι : Type _} (s : ι → Set α) :
+theorem hasBasis_iInf_principal_finite {ι : Type*} (s : ι → Set α) :
(⨅ i, 𝓟 (s i)).HasBasis (fun t : Set ι => t.Finite) fun t => ⋂ i ∈ t, s i := by
refine' ⟨fun U => (mem_iInf_finite _).trans _⟩
simp only [iInf_principal_finset, mem_iUnion, mem_principal, exists_prop,
@@ -779,7 +779,7 @@ theorem hasBasis_biInf_principal {s : β → Set α} {S : Set β} (h : DirectedO
exact fun _ _ => principal_mono.2⟩
#align filter.has_basis_binfi_principal Filter.hasBasis_biInf_principal
-theorem hasBasis_biInf_principal' {ι : Type _} {p : ι → Prop} {s : ι → Set α}
+theorem hasBasis_biInf_principal' {ι : Type*} {p : ι → Prop} {s : ι → Set α}
(h : ∀ i, p i → ∀ j, p j → ∃ k, p k ∧ s k ⊆ s i ∧ s k ⊆ s j) (ne : ∃ i, p i) :
(⨅ (i) (_ : p i), 𝓟 (s i)).HasBasis p s :=
Filter.hasBasis_biInf_principal h ne
@@ -826,7 +826,7 @@ theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (_ :
exact h.biInter_mem monotone_id
#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_sets
-variable {ι'' : Type _} [Preorder ι''] (l) (s'' : ι'' → Set α)
+variable {ι'' : Type*} [Preorder ι''] (l) (s'' : ι'' → Set α)
/-- `IsAntitoneBasis s` means the image of `s` is a filter basis such that `s` is decreasing. -/
structure IsAntitoneBasis extends IsBasis (fun _ => True) s'' : Prop where
@@ -895,7 +895,7 @@ theorem HasBasis.prod_pprod (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb)
(hla.comap Prod.fst).inf' (hlb.comap Prod.snd)
#align filter.has_basis.prod_pprod Filter.HasBasis.prod_pprod
-theorem HasBasis.prod {ι ι' : Type _} {pa : ι → Prop} {sa : ι → Set α} {pb : ι' → Prop}
+theorem HasBasis.prod {ι ι' : Type*} {pa : ι → Prop} {sa : ι → Set α} {pb : ι' → Prop}
{sb : ι' → Set β} (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
(la ×ˢ lb).HasBasis (fun i : ι × ι' => pa i.1 ∧ pb i.2) fun i => sa i.1 ×ˢ sb i.2 :=
(hla.comap Prod.fst).inf (hlb.comap Prod.snd)
@@ -913,7 +913,7 @@ theorem HasBasis.prod_same_index {p : ι → Prop} {sb : ι → Set β} (hla : l
exact ⟨⟨i, i⟩, ⟨hi, hi⟩, h⟩
#align filter.has_basis.prod_same_index Filter.HasBasis.prod_same_index
-theorem HasBasis.prod_same_index_mono {ι : Type _} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
+theorem HasBasis.prod_same_index_mono {ι : Type*} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
{sb : ι → Set β} (hla : la.HasBasis p sa) (hlb : lb.HasBasis p sb)
(hsa : MonotoneOn sa { i | p i }) (hsb : MonotoneOn sb { i | p i }) :
(la ×ˢ lb).HasBasis p fun i => sa i ×ˢ sb i :=
@@ -922,7 +922,7 @@ theorem HasBasis.prod_same_index_mono {ι : Type _} [LinearOrder ι] {p : ι →
⟨min i j, this, hsa this hi <| min_le_left _ _, hsb this hj <| min_le_right _ _⟩
#align filter.has_basis.prod_same_index_mono Filter.HasBasis.prod_same_index_mono
-theorem HasBasis.prod_same_index_anti {ι : Type _} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
+theorem HasBasis.prod_same_index_anti {ι : Type*} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
{sb : ι → Set β} (hla : la.HasBasis p sa) (hlb : lb.HasBasis p sb)
(hsa : AntitoneOn sa { i | p i }) (hsb : AntitoneOn sb { i | p i }) :
(la ×ˢ lb).HasBasis p fun i => sa i ×ˢ sb i :=
@@ -940,13 +940,13 @@ theorem mem_prod_self_iff {s} : s ∈ la ×ˢ la ↔ ∃ t ∈ la, t ×ˢ t ⊆
la.basis_sets.prod_self.mem_iff
#align filter.mem_prod_self_iff Filter.mem_prod_self_iff
-theorem HasAntitoneBasis.prod {ι : Type _} [LinearOrder ι] {f : Filter α} {g : Filter β}
+theorem HasAntitoneBasis.prod {ι : Type*} [LinearOrder ι] {f : Filter α} {g : Filter β}
{s : ι → Set α} {t : ι → Set β} (hf : HasAntitoneBasis f s) (hg : HasAntitoneBasis g t) :
HasAntitoneBasis (f ×ˢ g) fun n => s n ×ˢ t n :=
⟨hf.1.prod_same_index_anti hg.1 (hf.2.antitoneOn _) (hg.2.antitoneOn _), hf.2.set_prod hg.2⟩
#align filter.has_antitone_basis.prod Filter.HasAntitoneBasis.prod
-theorem HasBasis.coprod {ι ι' : Type _} {pa : ι → Prop} {sa : ι → Set α} {pb : ι' → Prop}
+theorem HasBasis.coprod {ι ι' : Type*} {pa : ι → Prop} {sa : ι → Set α} {pb : ι' → Prop}
{sb : ι' → Set β} (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
(la.coprod lb).HasBasis (fun i : ι × ι' => pa i.1 ∧ pb i.2) fun i =>
Prod.fst ⁻¹' sa i.1 ∪ Prod.snd ⁻¹' sb i.2 :=
@@ -955,7 +955,7 @@ theorem HasBasis.coprod {ι ι' : Type _} {pa : ι → Prop} {sa : ι → Set α
end TwoTypes
-theorem map_sigma_mk_comap {π : α → Type _} {π' : β → Type _} {f : α → β}
+theorem map_sigma_mk_comap {π : α → Type*} {π' : β → Type*} {f : α → β}
(hf : Function.Injective f) (g : ∀ a, π a → π' (f a)) (a : α) (l : Filter (π' (f a))) :
map (Sigma.mk a) (comap (g a) l) = comap (Sigma.map f g) (map (Sigma.mk (f a)) l) := by
refine' (((basis_sets _).comap _).map _).eq_of_same_basis _
@@ -969,7 +969,7 @@ end sort
namespace Filter
-variable {α β γ ι : Type _} {ι' : Sort _}
+variable {α β γ ι : Type*} {ι' : Sort*}
/-- `IsCountablyGenerated f` means `f = generate s` for some countable `s`. -/
class IsCountablyGenerated (f : Filter α) : Prop where
@@ -995,7 +995,7 @@ structure HasCountableBasis (l : Filter α) (p : ι → Prop) (s : ι → Set α
/-- A countable filter basis `B` on a type `α` is a nonempty countable collection of sets of `α`
such that the intersection of two elements of this collection contains some element
of the collection. -/
-structure CountableFilterBasis (α : Type _) extends FilterBasis α where
+structure CountableFilterBasis (α : Type*) extends FilterBasis α where
/-- The set of sets of the filter basis is countable. -/
countable : sets.Countable
#align filter.countable_filter_basis Filter.CountableFilterBasis
@@ -2,16 +2,13 @@
Copyright (c) 2020 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov, Johannes Hölzl, Mario Carneiro, Patrick Massot
-
-! This file was ported from Lean 3 source module order.filter.bases
-! leanprover-community/mathlib commit 996b0ff959da753a555053a480f36e5f264d4207
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.Prod.PProd
import Mathlib.Data.Set.Countable
import Mathlib.Order.Filter.Prod
+#align_import order.filter.bases from "leanprover-community/mathlib"@"996b0ff959da753a555053a480f36e5f264d4207"
+
/-!
# Filter bases
@@ -812,7 +812,7 @@ theorem HasBasis.forall_mem_mem (h : HasBasis l p s) {x : α} :
#align filter.has_basis.forall_mem_mem Filter.HasBasis.forall_mem_mem
protected theorem HasBasis.biInf_mem [CompleteLattice β] {f : Set α → β} (h : HasBasis l p s)
- (hf : Monotone f) : (⨅ t ∈ l, f t) = ⨅ (i) (_ : p i), f (s i) :=
+ (hf : Monotone f) : ⨅ t ∈ l, f t = ⨅ (i) (_ : p i), f (s i) :=
le_antisymm (le_iInf₂ fun i hi => iInf₂_le (s i) (h.mem_of_mem hi)) <|
le_iInf₂ fun _t ht =>
let ⟨i, hpi, hi⟩ := h.mem_iff.1 ht
@@ -820,7 +820,7 @@ protected theorem HasBasis.biInf_mem [CompleteLattice β] {f : Set α → β} (h
#align filter.has_basis.binfi_mem Filter.HasBasis.biInf_mem
protected theorem HasBasis.biInter_mem {f : Set α → Set β} (h : HasBasis l p s) (hf : Monotone f) :
- (⋂ t ∈ l, f t) = ⋂ (i) (_ : p i), f (s i) :=
+ ⋂ t ∈ l, f t = ⋂ (i) (_ : p i), f (s i) :=
h.biInf_mem hf
#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_mem
@@ -1014,7 +1014,7 @@ theorem HasCountableBasis.isCountablyGenerated {f : Filter α} {p : ι → Prop}
#align filter.has_countable_basis.is_countably_generated Filter.HasCountableBasis.isCountablyGenerated
theorem antitone_seq_of_seq (s : ℕ → Set α) :
- ∃ t : ℕ → Set α, Antitone t ∧ (⨅ i, 𝓟 <| s i) = ⨅ i, 𝓟 (t i) := by
+ ∃ t : ℕ → Set α, Antitone t ∧ ⨅ i, 𝓟 (s i) = ⨅ i, 𝓟 (t i) := by
use fun n => ⋂ m ≤ n, s m; constructor
· exact fun i j hij => biInter_mono (Iic_subset_Iic.2 hij) fun n _ => Subset.rfl
apply le_antisymm <;> rw [le_iInf_iff] <;> intro i
@@ -1026,13 +1026,13 @@ theorem antitone_seq_of_seq (s : ℕ → Set α) :
#align filter.antitone_seq_of_seq Filter.antitone_seq_of_seq
theorem countable_biInf_eq_iInf_seq [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
- (Bne : B.Nonempty) (f : ι → α) : ∃ x : ℕ → ι, (⨅ t ∈ B, f t) = ⨅ i, f (x i) :=
+ (Bne : B.Nonempty) (f : ι → α) : ∃ x : ℕ → ι, ⨅ t ∈ B, f t = ⨅ i, f (x i) :=
let ⟨g, hg⟩ := Bcbl.exists_eq_range Bne
⟨g, hg.symm ▸ iInf_range⟩
#align filter.countable_binfi_eq_infi_seq Filter.countable_biInf_eq_iInf_seq
theorem countable_biInf_eq_iInf_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
- (f : ι → α) {i₀ : ι} (h : f i₀ = ⊤) : ∃ x : ℕ → ι, (⨅ t ∈ B, f t) = ⨅ i, f (x i) := by
+ (f : ι → α) {i₀ : ι} (h : f i₀ = ⊤) : ∃ x : ℕ → ι, ⨅ t ∈ B, f t = ⨅ i, f (x i) := by
cases' B.eq_empty_or_nonempty with hB Bnonempty
· rw [hB, iInf_emptyset]
use fun _ => i₀
@@ -1041,7 +1041,7 @@ theorem countable_biInf_eq_iInf_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B
#align filter.countable_binfi_eq_infi_seq' Filter.countable_biInf_eq_iInf_seq'
theorem countable_biInf_principal_eq_seq_iInf {B : Set (Set α)} (Bcbl : B.Countable) :
- ∃ x : ℕ → Set α, (⨅ t ∈ B, 𝓟 t) = ⨅ i, 𝓟 (x i) :=
+ ∃ x : ℕ → Set α, ⨅ t ∈ B, 𝓟 t = ⨅ i, 𝓟 (x i) :=
countable_biInf_eq_iInf_seq' Bcbl 𝓟 principal_univ
#align filter.countable_binfi_principal_eq_seq_infi Filter.countable_biInf_principal_eq_seq_iInf
@@ -1146,12 +1146,12 @@ instance coprod.isCountablyGenerated (la : Filter α) (lb : Filter β) [IsCounta
end IsCountablyGenerated
theorem isCountablyGenerated_seq [Countable β] (x : β → Set α) :
- IsCountablyGenerated (⨅ i, 𝓟 <| x i) := by
+ IsCountablyGenerated (⨅ i, 𝓟 (x i)) := by
use range x, countable_range x
rw [generate_eq_biInf, iInf_range]
#align filter.is_countably_generated_seq Filter.isCountablyGenerated_seq
-theorem isCountablyGenerated_of_seq {f : Filter α} (h : ∃ x : ℕ → Set α, f = ⨅ i, 𝓟 <| x i) :
+theorem isCountablyGenerated_of_seq {f : Filter α} (h : ∃ x : ℕ → Set α, f = ⨅ i, 𝓟 (x i)) :
f.IsCountablyGenerated := by
rcases h with ⟨x, rfl⟩
apply isCountablyGenerated_seq
@@ -683,14 +683,14 @@ theorem inf_principal_neBot_iff {s : Set α} : NeBot (l ⊓ 𝓟 s) ↔ ∀ U
l.basis_sets.inf_principal_neBot_iff
#align filter.inf_principal_ne_bot_iff Filter.inf_principal_neBot_iff
-theorem mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∈ f ↔ f ⊓ 𝓟 (sᶜ) = ⊥ := by
+theorem mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∈ f ↔ f ⊓ 𝓟 sᶜ = ⊥ := by
refine' not_iff_not.1 ((inf_principal_neBot_iff.trans _).symm.trans neBot_iff)
exact
⟨fun h hs => by simpa [Set.not_nonempty_empty] using h s hs, fun hs t ht =>
inter_compl_nonempty_iff.2 fun hts => hs <| mem_of_superset ht hts⟩
#align filter.mem_iff_inf_principal_compl Filter.mem_iff_inf_principal_compl
-theorem not_mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∉ f ↔ NeBot (f ⊓ 𝓟 (sᶜ)) :=
+theorem not_mem_iff_inf_principal_compl {f : Filter α} {s : Set α} : s ∉ f ↔ NeBot (f ⊓ 𝓟 sᶜ) :=
(not_congr mem_iff_inf_principal_compl).trans neBot_iff.symm
#align filter.not_mem_iff_inf_principal_compl Filter.not_mem_iff_inf_principal_compl
@@ -718,24 +718,24 @@ theorem disjoint_pure_pure {x y : α} : Disjoint (pure x : Filter α) (pure y)
#align filter.disjoint_pure_pure Filter.disjoint_pure_pure
@[simp]
-theorem compl_diagonal_mem_prod {l₁ l₂ : Filter α} : diagonal αᶜ ∈ l₁ ×ˢ l₂ ↔ Disjoint l₁ l₂ := by
+theorem compl_diagonal_mem_prod {l₁ l₂ : Filter α} : (diagonal α)ᶜ ∈ l₁ ×ˢ l₂ ↔ Disjoint l₁ l₂ := by
simp only [mem_prod_iff, Filter.disjoint_iff, prod_subset_compl_diagonal_iff_disjoint]
#align filter.compl_diagonal_mem_prod Filter.compl_diagonal_mem_prod
-- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.disjoint_iff_left (h : l.HasBasis p s) :
- Disjoint l l' ↔ ∃ i, p i ∧ s iᶜ ∈ l' := by
+ Disjoint l l' ↔ ∃ i, p i ∧ (s i)ᶜ ∈ l' := by
simp only [h.disjoint_iff l'.basis_sets, id, ← disjoint_principal_left,
(hasBasis_principal _).disjoint_iff l'.basis_sets, true_and, Unique.exists_iff]
#align filter.has_basis.disjoint_iff_left Filter.HasBasis.disjoint_iff_leftₓ
-- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
theorem HasBasis.disjoint_iff_right (h : l.HasBasis p s) :
- Disjoint l' l ↔ ∃ i, p i ∧ s iᶜ ∈ l' :=
+ Disjoint l' l ↔ ∃ i, p i ∧ (s i)ᶜ ∈ l' :=
disjoint_comm.trans h.disjoint_iff_left
#align filter.has_basis.disjoint_iff_right Filter.HasBasis.disjoint_iff_rightₓ
-theorem le_iff_forall_inf_principal_compl {f g : Filter α} : f ≤ g ↔ ∀ V ∈ g, f ⊓ 𝓟 (Vᶜ) = ⊥ :=
+theorem le_iff_forall_inf_principal_compl {f g : Filter α} : f ≤ g ↔ ∀ V ∈ g, f ⊓ 𝓟 Vᶜ = ⊥ :=
forall₂_congr fun _ _ => mem_iff_inf_principal_compl
#align filter.le_iff_forall_inf_principal_compl Filter.le_iff_forall_inf_principal_compl
@@ -73,11 +73,11 @@ As with `Set.iUnion`/`biUnion`/`Set.sUnion`, there are three different approache
* `Filter.HasBasis l p s`, `p : ι → Prop`, `s : ι → Set α`.
We use the latter one because, e.g., `𝓝 x` in an `EMetricSpace` or in a `MetricSpace` has a basis
-of this form. The other two can be emulated using `s = id` or `p = λ _, True`.
+of this form. The other two can be emulated using `s = id` or `p = fun _ ↦ True`.
With this approach sometimes one needs to `simp` the statement provided by the `Filter.HasBasis`
machinery, e.g., `simp only [true_and]` or `simp only [forall_const]` can help with the case
-`p = λ _, True`.
+`p = fun _ ↦ True`.
-/
@@ -750,7 +750,7 @@ theorem inf_neBot_iff_frequently_right {f g : Filter α} :
exact inf_neBot_iff_frequently_left
#align filter.inf_ne_bot_iff_frequently_right Filter.inf_neBot_iff_frequently_right
-theorem HasBasis.eq_biInf (h : l.HasBasis p s) : l = ⨅ (i) (_hi : p i), 𝓟 (s i) :=
+theorem HasBasis.eq_biInf (h : l.HasBasis p s) : l = ⨅ (i) (_ : p i), 𝓟 (s i) :=
eq_biInf_of_mem_iff_exists_mem <| fun {_} => by simp only [h.mem_iff, mem_principal, exists_prop]
#align filter.has_basis.eq_binfi Filter.HasBasis.eq_biInf
@@ -784,7 +784,7 @@ theorem hasBasis_biInf_principal {s : β → Set α} {S : Set β} (h : DirectedO
theorem hasBasis_biInf_principal' {ι : Type _} {p : ι → Prop} {s : ι → Set α}
(h : ∀ i, p i → ∀ j, p j → ∃ k, p k ∧ s k ⊆ s i ∧ s k ⊆ s j) (ne : ∃ i, p i) :
- (⨅ (i) (_h : p i), 𝓟 (s i)).HasBasis p s :=
+ (⨅ (i) (_ : p i), 𝓟 (s i)).HasBasis p s :=
Filter.hasBasis_biInf_principal h ne
#align filter.has_basis_binfi_principal' Filter.hasBasis_biInf_principal'
@@ -812,7 +812,7 @@ theorem HasBasis.forall_mem_mem (h : HasBasis l p s) {x : α} :
#align filter.has_basis.forall_mem_mem Filter.HasBasis.forall_mem_mem
protected theorem HasBasis.biInf_mem [CompleteLattice β] {f : Set α → β} (h : HasBasis l p s)
- (hf : Monotone f) : (⨅ t ∈ l, f t) = ⨅ (i) (_hi : p i), f (s i) :=
+ (hf : Monotone f) : (⨅ t ∈ l, f t) = ⨅ (i) (_ : p i), f (s i) :=
le_antisymm (le_iInf₂ fun i hi => iInf₂_le (s i) (h.mem_of_mem hi)) <|
le_iInf₂ fun _t ht =>
let ⟨i, hpi, hi⟩ := h.mem_iff.1 ht
@@ -820,11 +820,11 @@ protected theorem HasBasis.biInf_mem [CompleteLattice β] {f : Set α → β} (h
#align filter.has_basis.binfi_mem Filter.HasBasis.biInf_mem
protected theorem HasBasis.biInter_mem {f : Set α → Set β} (h : HasBasis l p s) (hf : Monotone f) :
- (⋂ t ∈ l, f t) = ⋂ (i) (_hi : p i), f (s i) :=
+ (⋂ t ∈ l, f t) = ⋂ (i) (_ : p i), f (s i) :=
h.biInf_mem hf
#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_mem
-theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (_hi : p i), s i := by
+theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (_ : p i), s i := by
rw [sInter_eq_biInter]
exact h.biInter_mem monotone_id
#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_sets
SProd
to implement overloaded notation · ×ˢ ·
(#4200)
Currently, the following notations are changed from · ×ˢ ·
because Lean 4 can't deal with ambiguous notations.
| Definition | Notation |
| :
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com>
@@ -50,7 +50,7 @@ and consequences are derived.
* `Filter.HasBasis.inf`, `Filter.HasBasis.inf_principal`, `Filter.HasBasis.prod`,
`Filter.HasBasis.prod_self`, `Filter.HasBasis.map`, `Filter.HasBasis.comap` : combinators to
- construct filters of `l ⊓ l'`, `l ⊓ 𝓟 t`, `l ×ᶠ l'`, `l ×ᶠ l`, `l.map f`, `l.comap f`
+ construct filters of `l ⊓ l'`, `l ⊓ 𝓟 t`, `l ×ˢ l'`, `l ×ˢ l`, `l.map f`, `l.comap f`
respectively;
* `Filter.HasBasis.le_iff`, `Filter.HasBasis.ge_iff`, `Filter.HasBasis.le_basis_iff` : restate
@@ -718,7 +718,7 @@ theorem disjoint_pure_pure {x y : α} : Disjoint (pure x : Filter α) (pure y)
#align filter.disjoint_pure_pure Filter.disjoint_pure_pure
@[simp]
-theorem compl_diagonal_mem_prod {l₁ l₂ : Filter α} : diagonal αᶜ ∈ l₁ ×ᶠ l₂ ↔ Disjoint l₁ l₂ := by
+theorem compl_diagonal_mem_prod {l₁ l₂ : Filter α} : diagonal αᶜ ∈ l₁ ×ˢ l₂ ↔ Disjoint l₁ l₂ := by
simp only [mem_prod_iff, Filter.disjoint_iff, prod_subset_compl_diagonal_iff_disjoint]
#align filter.compl_diagonal_mem_prod Filter.compl_diagonal_mem_prod
@@ -894,19 +894,19 @@ theorem Tendsto.basis_both (H : Tendsto f la lb) (hla : la.HasBasis pa sa)
#align filter.tendsto.basis_both Filter.Tendsto.basis_bothₓ
theorem HasBasis.prod_pprod (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
- (la ×ᶠ lb).HasBasis (fun i : PProd ι ι' => pa i.1 ∧ pb i.2) fun i => sa i.1 ×ˢ sb i.2 :=
+ (la ×ˢ lb).HasBasis (fun i : PProd ι ι' => pa i.1 ∧ pb i.2) fun i => sa i.1 ×ˢ sb i.2 :=
(hla.comap Prod.fst).inf' (hlb.comap Prod.snd)
#align filter.has_basis.prod_pprod Filter.HasBasis.prod_pprod
theorem HasBasis.prod {ι ι' : Type _} {pa : ι → Prop} {sa : ι → Set α} {pb : ι' → Prop}
{sb : ι' → Set β} (hla : la.HasBasis pa sa) (hlb : lb.HasBasis pb sb) :
- (la ×ᶠ lb).HasBasis (fun i : ι × ι' => pa i.1 ∧ pb i.2) fun i => sa i.1 ×ˢ sb i.2 :=
+ (la ×ˢ lb).HasBasis (fun i : ι × ι' => pa i.1 ∧ pb i.2) fun i => sa i.1 ×ˢ sb i.2 :=
(hla.comap Prod.fst).inf (hlb.comap Prod.snd)
#align filter.has_basis.prod Filter.HasBasis.prod
theorem HasBasis.prod_same_index {p : ι → Prop} {sb : ι → Set β} (hla : la.HasBasis p sa)
(hlb : lb.HasBasis p sb) (h_dir : ∀ {i j}, p i → p j → ∃ k, p k ∧ sa k ⊆ sa i ∧ sb k ⊆ sb j) :
- (la ×ᶠ lb).HasBasis p fun i => sa i ×ˢ sb i := by
+ (la ×ˢ lb).HasBasis p fun i => sa i ×ˢ sb i := by
simp only [hasBasis_iff, (hla.prod_pprod hlb).mem_iff]
refine' fun t => ⟨_, _⟩
· rintro ⟨⟨i, j⟩, ⟨hi, hj⟩, hsub : sa i ×ˢ sb j ⊆ t⟩
@@ -919,7 +919,7 @@ theorem HasBasis.prod_same_index {p : ι → Prop} {sb : ι → Set β} (hla : l
theorem HasBasis.prod_same_index_mono {ι : Type _} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
{sb : ι → Set β} (hla : la.HasBasis p sa) (hlb : lb.HasBasis p sb)
(hsa : MonotoneOn sa { i | p i }) (hsb : MonotoneOn sb { i | p i }) :
- (la ×ᶠ lb).HasBasis p fun i => sa i ×ˢ sb i :=
+ (la ×ˢ lb).HasBasis p fun i => sa i ×ˢ sb i :=
hla.prod_same_index hlb fun {i j} hi hj =>
have : p (min i j) := min_rec' _ hi hj
⟨min i j, this, hsa this hi <| min_le_left _ _, hsb this hj <| min_le_right _ _⟩
@@ -928,24 +928,24 @@ theorem HasBasis.prod_same_index_mono {ι : Type _} [LinearOrder ι] {p : ι →
theorem HasBasis.prod_same_index_anti {ι : Type _} [LinearOrder ι] {p : ι → Prop} {sa : ι → Set α}
{sb : ι → Set β} (hla : la.HasBasis p sa) (hlb : lb.HasBasis p sb)
(hsa : AntitoneOn sa { i | p i }) (hsb : AntitoneOn sb { i | p i }) :
- (la ×ᶠ lb).HasBasis p fun i => sa i ×ˢ sb i :=
+ (la ×ˢ lb).HasBasis p fun i => sa i ×ˢ sb i :=
@HasBasis.prod_same_index_mono _ _ _ _ ιᵒᵈ _ _ _ _ hla hlb hsa.dual_left hsb.dual_left
#align filter.has_basis.prod_same_index_anti Filter.HasBasis.prod_same_index_anti
theorem HasBasis.prod_self (hl : la.HasBasis pa sa) :
- (la ×ᶠ la).HasBasis pa fun i => sa i ×ˢ sa i :=
+ (la ×ˢ la).HasBasis pa fun i => sa i ×ˢ sa i :=
hl.prod_same_index hl fun {i j} hi hj => by
simpa only [exists_prop, subset_inter_iff] using
hl.mem_iff.1 (inter_mem (hl.mem_of_mem hi) (hl.mem_of_mem hj))
#align filter.has_basis.prod_self Filter.HasBasis.prod_self
-theorem mem_prod_self_iff {s} : s ∈ la ×ᶠ la ↔ ∃ t ∈ la, t ×ˢ t ⊆ s :=
+theorem mem_prod_self_iff {s} : s ∈ la ×ˢ la ↔ ∃ t ∈ la, t ×ˢ t ⊆ s :=
la.basis_sets.prod_self.mem_iff
#align filter.mem_prod_self_iff Filter.mem_prod_self_iff
theorem HasAntitoneBasis.prod {ι : Type _} [LinearOrder ι] {f : Filter α} {g : Filter β}
{s : ι → Set α} {t : ι → Set β} (hf : HasAntitoneBasis f s) (hg : HasAntitoneBasis g t) :
- HasAntitoneBasis (f ×ᶠ g) fun n => s n ×ˢ t n :=
+ HasAntitoneBasis (f ×ˢ g) fun n => s n ×ˢ t n :=
⟨hf.1.prod_same_index_anti hg.1 (hf.2.antitoneOn _) (hg.2.antitoneOn _), hf.2.set_prod hg.2⟩
#align filter.has_antitone_basis.prod Filter.HasAntitoneBasis.prod
@@ -1134,7 +1134,7 @@ instance Sup.isCountablyGenerated (f g : Filter α) [IsCountablyGenerated f]
#align filter.sup.is_countably_generated Filter.Sup.isCountablyGenerated
instance prod.isCountablyGenerated (la : Filter α) (lb : Filter β) [IsCountablyGenerated la]
- [IsCountablyGenerated lb] : IsCountablyGenerated (la ×ᶠ lb) :=
+ [IsCountablyGenerated lb] : IsCountablyGenerated (la ×ˢ lb) :=
Filter.Inf.isCountablyGenerated _ _
#align filter.prod.is_countably_generated Filter.prod.isCountablyGenerated
fix-comments.py
on all files.@@ -22,12 +22,12 @@ an element of `B` belongs to `B`.
A filter basis `B` can be used to construct `B.filter : Filter α` such that a set belongs
to `B.filter` if and only if it contains an element of `B`.
-Given an indexing type `ι`, a predicate `p : ι → Prop`, and a map `s : ι → set α`,
+Given an indexing type `ι`, a predicate `p : ι → Prop`, and a map `s : ι → Set α`,
the proposition `h : Filter.IsBasis p s` makes sure the range of `s` bounded by `p`
-(ie. `s '' set_of p`) defines a filter basis `h.filter_basis`.
+(ie. `s '' setOf p`) defines a filter basis `h.filter_basis`.
If one already has a filter `l` on `α`, `Filter.HasBasis l p s` (where `p : ι → Prop`
-and `s : ι → set α` as above) means that a set belongs to `l` if and
+and `s : ι → Set α` as above) means that a set belongs to `l` if and
only if it contains some `s i` with `p i`. It implies `h : Filter.IsBasis p s`, and
`l = h.filterBasis.filter`. The point of this definition is that checking statements
involving elements of `l` often reduces to checking them on the basis elements.
@@ -68,16 +68,16 @@ and consequences are derived.
As with `Set.iUnion`/`biUnion`/`Set.sUnion`, there are three different approaches to filter bases:
-* `Filter.HasBasis l s`, `s : set (set α)`;
-* `Filter.HasBasis l s`, `s : ι → set α`;
-* `Filter.HasBasis l p s`, `p : ι → Prop`, `s : ι → set α`.
+* `Filter.HasBasis l s`, `s : Set (Set α)`;
+* `Filter.HasBasis l s`, `s : ι → Set α`;
+* `Filter.HasBasis l p s`, `p : ι → Prop`, `s : ι → Set α`.
-We use the latter one because, e.g., `𝓝 x` in an `emetric_space` or in a `metric_space` has a basis
-of this form. The other two can be emulated using `s = id` or `p = λ _, true`.
+We use the latter one because, e.g., `𝓝 x` in an `EMetricSpace` or in a `MetricSpace` has a basis
+of this form. The other two can be emulated using `s = id` or `p = λ _, True`.
With this approach sometimes one needs to `simp` the statement provided by the `Filter.HasBasis`
machinery, e.g., `simp only [true_and]` or `simp only [forall_const]` can help with the case
-`p = λ _, true`.
+`p = λ _, True`.
-/
@@ -228,7 +228,7 @@ theorem filter_eq_generate (h : IsBasis p s) : h.filter = generate { U | ∃ i,
end IsBasis
-- porting note: was `protected` in Lean 3 but `protected` didn't work; removed
-/-- We say that a filter `l` has a basis `s : ι → set α` bounded by `p : ι → Prop`,
+/-- We say that a filter `l` has a basis `s : ι → Set α` bounded by `p : ι → Prop`,
if `t ∈ l` if and only if `t` includes `s i` for some `i` such that `p i`. -/
structure HasBasis (l : Filter α) (p : ι → Prop) (s : ι → Set α) : Prop where
/-- A set `t` belongs to a filter `l` iff it includes an element of the basis. -/
@@ -296,7 +296,7 @@ theorem HasBasis.mem_of_mem (hl : l.HasBasis p s) (hi : p i) : s i ∈ l :=
hl.mem_of_superset hi Subset.rfl
#align filter.has_basis.mem_of_mem Filter.HasBasis.mem_of_mem
-/-- Index of a basis set such that `s i ⊆ t` as an element of `subtype p`. -/
+/-- Index of a basis set such that `s i ⊆ t` as an element of `Subtype p`. -/
noncomputable def HasBasis.index (h : l.HasBasis p s) (t : Set α) (ht : t ∈ l) : { i : ι // p i } :=
⟨(h.mem_iff.1 ht).choose, (h.mem_iff.1 ht).choose_spec.1⟩
#align filter.has_basis.index Filter.HasBasis.index
@@ -986,7 +986,7 @@ structure IsCountableBasis (p : ι → Prop) (s : ι → Set α) extends IsBasis
countable : (setOf p).Countable
#align filter.is_countable_basis Filter.IsCountableBasis
-/-- We say that a filter `l` has a countable basis `s : ι → set α` bounded by `p : ι → Prop`,
+/-- We say that a filter `l` has a countable basis `s : ι → Set α` bounded by `p : ι → Prop`,
if `t ∈ l` if and only if `t` includes `s i` for some `i` such that `p i`, and the set
defined by `p` is countable. -/
structure HasCountableBasis (l : Filter α) (p : ι → Prop) (s : ι → Set α)
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -66,7 +66,7 @@ and consequences are derived.
## Implementation notes
-As with `Set.unionᵢ`/`bunionᵢ`/`Set.unionₛ`, there are three different approaches to filter bases:
+As with `Set.iUnion`/`biUnion`/`Set.sUnion`, there are three different approaches to filter bases:
* `Filter.HasBasis l s`, `s : set (set α)`;
* `Filter.HasBasis l s`, `s : ι → set α`;
@@ -182,7 +182,7 @@ theorem mem_filter_of_mem (B : FilterBasis α) {U : Set α} : U ∈ B → U ∈
⟨U, U_in, Subset.refl _⟩
#align filter_basis.mem_filter_of_mem FilterBasis.mem_filter_of_mem
-theorem eq_infᵢ_principal (B : FilterBasis α) : B.filter = ⨅ s : B.sets, 𝓟 s := by
+theorem eq_iInf_principal (B : FilterBasis α) : B.filter = ⨅ s : B.sets, 𝓟 s := by
have : Directed (· ≥ ·) fun s : B.sets => 𝓟 (s : Set α) := by
rintro ⟨U, U_in⟩ ⟨V, V_in⟩
rcases B.inter_sets U_in V_in with ⟨W, W_in, W_sub⟩
@@ -190,8 +190,8 @@ theorem eq_infᵢ_principal (B : FilterBasis α) : B.filter = ⨅ s : B.sets,
simp only [ge_iff_le, le_principal_iff, mem_principal, Subtype.coe_mk]
exact subset_inter_iff.mp W_sub
ext U
- simp [mem_filter_iff, mem_infᵢ_of_directed this]
-#align filter_basis.eq_infi_principal FilterBasis.eq_infᵢ_principal
+ simp [mem_filter_iff, mem_iInf_of_directed this]
+#align filter_basis.eq_infi_principal FilterBasis.eq_iInf_principal
protected theorem generate (B : FilterBasis α) : generate B.sets = B.filter := by
apply le_antisymm
@@ -247,16 +247,16 @@ theorem hasBasis_generate (s : Set (Set α)) :
/-- The smallest filter basis containing a given collection of sets. -/
def FilterBasis.ofSets (s : Set (Set α)) : FilterBasis α where
- sets := interₛ '' { t | Set.Finite t ∧ t ⊆ s }
- nonempty := ⟨univ, ∅, ⟨⟨finite_empty, empty_subset s⟩, interₛ_empty⟩⟩
+ sets := sInter '' { t | Set.Finite t ∧ t ⊆ s }
+ nonempty := ⟨univ, ∅, ⟨⟨finite_empty, empty_subset s⟩, sInter_empty⟩⟩
inter_sets := by
rintro _ _ ⟨a, ⟨fina, suba⟩, rfl⟩ ⟨b, ⟨finb, subb⟩, rfl⟩
exact ⟨⋂₀ (a ∪ b), mem_image_of_mem _ ⟨fina.union finb, union_subset suba subb⟩,
- (interₛ_union _ _).subset⟩
+ (sInter_union _ _).subset⟩
#align filter.filter_basis.of_sets Filter.FilterBasis.ofSets
lemma FilterBasis.ofSets_sets (s : Set (Set α)) :
- (FilterBasis.ofSets s).sets = interₛ '' { t | Set.Finite t ∧ t ⊆ s } :=
+ (FilterBasis.ofSets s).sets = sInter '' { t | Set.Finite t ∧ t ⊆ s } :=
rfl
-- porting note: use `∃ i, p i ∧ _` instead of `∃ i (hi : p i), _`.
@@ -329,7 +329,7 @@ theorem HasBasis.eq_generate (h : l.HasBasis p s) : l = generate { U | ∃ i, p
#align filter.has_basis.eq_generate Filter.HasBasis.eq_generate
theorem generate_eq_generate_inter (s : Set (Set α)) :
- generate s = generate (interₛ '' { t | Set.Finite t ∧ t ⊆ s }) := by
+ generate s = generate (sInter '' { t | Set.Finite t ∧ t ⊆ s }) := by
rw [← FilterBasis.ofSets_sets, FilterBasis.generate, ← (hasBasis_generate s).filter_eq]; rfl
#align filter.generate_eq_generate_inter Filter.generate_eq_generate_inter
@@ -496,83 +496,83 @@ theorem HasBasis.inf {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p'
(hl.inf' hl').comp_equiv Equiv.pprodEquivProd.symm
#align filter.has_basis.inf Filter.HasBasis.inf
-theorem hasBasis_infᵢ' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
+theorem hasBasis_iInf' {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis (fun If : Set ι × ∀ i, ι' i => If.1.Finite ∧ ∀ i ∈ If.1, p i (If.2 i))
fun If : Set ι × ∀ i, ι' i => ⋂ i ∈ If.1, s i (If.2 i) :=
⟨by
intro t
constructor
- · simp only [mem_infᵢ', (hl _).mem_iff]
+ · simp only [mem_iInf', (hl _).mem_iff]
rintro ⟨I, hI, V, hV, -, rfl, -⟩
choose u hu using hV
- exact ⟨⟨I, u⟩, ⟨hI, fun i _ => (hu i).1⟩, interᵢ₂_mono fun i _ => (hu i).2⟩
+ exact ⟨⟨I, u⟩, ⟨hI, fun i _ => (hu i).1⟩, iInter₂_mono fun i _ => (hu i).2⟩
· rintro ⟨⟨I, f⟩, ⟨hI₁, hI₂⟩, hsub⟩
refine' mem_of_superset _ hsub
- exact (binterᵢ_mem hI₁).mpr fun i hi => mem_infᵢ_of_mem i <| (hl i).mem_of_mem <| hI₂ _ hi⟩
-#align filter.has_basis_infi' Filter.hasBasis_infᵢ'
+ exact (biInter_mem hI₁).mpr fun i hi => mem_iInf_of_mem i <| (hl i).mem_of_mem <| hI₂ _ hi⟩
+#align filter.has_basis_infi' Filter.hasBasis_iInf'
-theorem hasBasis_infᵢ {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
+theorem hasBasis_iInf {ι : Type _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨅ i, l i).HasBasis
(fun If : Σ I : Set ι, ∀ i : I, ι' i => If.1.Finite ∧ ∀ i : If.1, p i (If.2 i)) fun If =>
⋂ i : If.1, s i (If.2 i) := by
refine' ⟨fun t => ⟨fun ht => _, _⟩⟩
- · rcases (hasBasis_infᵢ' hl).mem_iff.mp ht with ⟨⟨I, f⟩, ⟨hI, hf⟩, hsub⟩
- exact ⟨⟨I, fun i => f i⟩, ⟨hI, Subtype.forall.mpr hf⟩, trans (interᵢ_subtype _ _) hsub⟩
+ · rcases (hasBasis_iInf' hl).mem_iff.mp ht with ⟨⟨I, f⟩, ⟨hI, hf⟩, hsub⟩
+ exact ⟨⟨I, fun i => f i⟩, ⟨hI, Subtype.forall.mpr hf⟩, trans (iInter_subtype _ _) hsub⟩
· rintro ⟨⟨I, f⟩, ⟨hI, hf⟩, hsub⟩
refine' mem_of_superset _ hsub
cases hI.nonempty_fintype
- exact interᵢ_mem.2 fun i => mem_infᵢ_of_mem ↑i <| (hl i).mem_of_mem <| hf _
-#align filter.has_basis_infi Filter.hasBasis_infᵢ
+ exact iInter_mem.2 fun i => mem_iInf_of_mem ↑i <| (hl i).mem_of_mem <| hf _
+#align filter.has_basis_infi Filter.hasBasis_iInf
-theorem hasBasis_infᵢ_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty ι] {l : ι → Filter α}
+theorem hasBasis_iInf_of_directed' {ι : Type _} {ι' : ι → Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
(⨅ i, l i).HasBasis (fun ii' : Σi, ι' i => p ii'.1 ii'.2) fun ii' => s ii'.1 ii'.2 := by
refine' ⟨fun t => _⟩
- rw [mem_infᵢ_of_directed h, Sigma.exists]
+ rw [mem_iInf_of_directed h, Sigma.exists]
exact exists_congr fun i => (hl i).mem_iff
-#align filter.has_basis_infi_of_directed' Filter.hasBasis_infᵢ_of_directed'
+#align filter.has_basis_infi_of_directed' Filter.hasBasis_iInf_of_directed'
-theorem hasBasis_infᵢ_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l : ι → Filter α}
+theorem hasBasis_iInf_of_directed {ι : Type _} {ι' : Sort _} [Nonempty ι] {l : ι → Filter α}
(s : ι → ι' → Set α) (p : ι → ι' → Prop) (hl : ∀ i, (l i).HasBasis (p i) (s i))
(h : Directed (· ≥ ·) l) :
(⨅ i, l i).HasBasis (fun ii' : ι × ι' => p ii'.1 ii'.2) fun ii' => s ii'.1 ii'.2 := by
refine' ⟨fun t => _⟩
- rw [mem_infᵢ_of_directed h, Prod.exists]
+ rw [mem_iInf_of_directed h, Prod.exists]
exact exists_congr fun i => (hl i).mem_iff
-#align filter.has_basis_infi_of_directed Filter.hasBasis_infᵢ_of_directed
+#align filter.has_basis_infi_of_directed Filter.hasBasis_iInf_of_directed
-theorem hasBasis_binfᵢ_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : Set ι}
+theorem hasBasis_biInf_of_directed' {ι : Type _} {ι' : ι → Sort _} {dom : Set ι}
(hdom : dom.Nonempty) {l : ι → Filter α} (s : ∀ i, ι' i → Set α) (p : ∀ i, ι' i → 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' : Σi, ι' i => ii'.1 ∈ dom ∧ p ii'.1 ii'.2) fun ii' =>
s ii'.1 ii'.2 := by
refine' ⟨fun t => _⟩
- rw [mem_binfᵢ_of_directed h hdom, Sigma.exists]
+ rw [mem_biInf_of_directed h hdom, Sigma.exists]
refine' exists_congr fun i => ⟨_, _⟩
· rintro ⟨hi, hti⟩
rcases(hl i hi).mem_iff.mp hti with ⟨b, hb, hbt⟩
exact ⟨b, ⟨hi, hb⟩, hbt⟩
· rintro ⟨b, ⟨hi, hb⟩, hibt⟩
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
-#align filter.has_basis_binfi_of_directed' Filter.hasBasis_binfᵢ_of_directed'
+#align filter.has_basis_binfi_of_directed' Filter.hasBasis_biInf_of_directed'
-theorem hasBasis_binfᵢ_of_directed {ι : Type _} {ι' : Sort _} {dom : Set ι} (hdom : dom.Nonempty)
+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 := by
refine' ⟨fun t => _⟩
- rw [mem_binfᵢ_of_directed h hdom, Prod.exists]
+ rw [mem_biInf_of_directed h hdom, Prod.exists]
refine' exists_congr fun i => ⟨_, _⟩
· rintro ⟨hi, hti⟩
rcases(hl i hi).mem_iff.mp hti with ⟨b, hb, hbt⟩
exact ⟨b, ⟨hi, hb⟩, hbt⟩
· rintro ⟨b, ⟨hi, hb⟩, hibt⟩
exact ⟨hi, (hl i hi).mem_iff.mpr ⟨b, hb, hibt⟩⟩
-#align filter.has_basis_binfi_of_directed Filter.hasBasis_binfᵢ_of_directed
+#align filter.has_basis_binfi_of_directed Filter.hasBasis_biInf_of_directed
theorem hasBasis_principal (t : Set α) : (𝓟 t).HasBasis (fun _ : Unit => True) fun _ => t :=
⟨fun U => by simp⟩
@@ -597,13 +597,13 @@ theorem HasBasis.sup {ι ι' : Type _} {p : ι → Prop} {s : ι → Set α} {p'
(hl.sup' hl').comp_equiv Equiv.pprodEquivProd.symm
#align filter.has_basis.sup Filter.HasBasis.sup
-theorem hasBasis_supᵢ {ι : Sort _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
+theorem hasBasis_iSup {ι : Sort _} {ι' : ι → Type _} {l : ι → Filter α} {p : ∀ i, ι' i → Prop}
{s : ∀ i, ι' i → Set α} (hl : ∀ i, (l i).HasBasis (p i) (s i)) :
(⨆ i, l i).HasBasis (fun f : ∀ i, ι' i => ∀ i, p i (f i)) fun f : ∀ i, ι' i => ⋃ i, s i (f i) :=
hasBasis_iff.mpr fun t => by
- simp only [hasBasis_iff, (hl _).mem_iff, Classical.skolem, forall_and, unionᵢ_subset_iff,
- mem_supᵢ]
-#align filter.has_basis_supr Filter.hasBasis_supᵢ
+ simp only [hasBasis_iff, (hl _).mem_iff, Classical.skolem, forall_and, iUnion_subset_iff,
+ mem_iSup]
+#align filter.has_basis_supr Filter.hasBasis_iSup
theorem HasBasis.sup_principal (hl : l.HasBasis p s) (t : Set α) :
(l ⊔ 𝓟 t).HasBasis p fun i => s i ∪ t :=
@@ -750,43 +750,43 @@ theorem inf_neBot_iff_frequently_right {f g : Filter α} :
exact inf_neBot_iff_frequently_left
#align filter.inf_ne_bot_iff_frequently_right Filter.inf_neBot_iff_frequently_right
-theorem HasBasis.eq_binfᵢ (h : l.HasBasis p s) : l = ⨅ (i) (_hi : p i), 𝓟 (s i) :=
- eq_binfᵢ_of_mem_iff_exists_mem <| fun {_} => by simp only [h.mem_iff, mem_principal, exists_prop]
-#align filter.has_basis.eq_binfi Filter.HasBasis.eq_binfᵢ
+theorem HasBasis.eq_biInf (h : l.HasBasis p s) : l = ⨅ (i) (_hi : p i), 𝓟 (s i) :=
+ eq_biInf_of_mem_iff_exists_mem <| fun {_} => by simp only [h.mem_iff, mem_principal, exists_prop]
+#align filter.has_basis.eq_binfi Filter.HasBasis.eq_biInf
-theorem HasBasis.eq_infᵢ (h : l.HasBasis (fun _ => True) s) : l = ⨅ i, 𝓟 (s i) := by
- simpa only [infᵢ_true] using h.eq_binfᵢ
-#align filter.has_basis.eq_infi Filter.HasBasis.eq_infᵢ
+theorem HasBasis.eq_iInf (h : l.HasBasis (fun _ => True) s) : l = ⨅ i, 𝓟 (s i) := by
+ simpa only [iInf_true] using h.eq_biInf
+#align filter.has_basis.eq_infi Filter.HasBasis.eq_iInf
-theorem hasBasis_infᵢ_principal {s : ι → Set α} (h : Directed (· ≥ ·) s) [Nonempty ι] :
+theorem hasBasis_iInf_principal {s : ι → Set α} (h : Directed (· ≥ ·) s) [Nonempty ι] :
(⨅ i, 𝓟 (s i)).HasBasis (fun _ => True) s :=
⟨fun t => by
- simpa only [true_and] using mem_infᵢ_of_directed (h.mono_comp monotone_principal.dual) t⟩
-#align filter.has_basis_infi_principal Filter.hasBasis_infᵢ_principal
+ simpa only [true_and] using mem_iInf_of_directed (h.mono_comp monotone_principal.dual) t⟩
+#align filter.has_basis_infi_principal Filter.hasBasis_iInf_principal
/-- If `s : ι → Set α` is an indexed family of sets, then finite intersections of `s i` form a basis
of `⨅ i, 𝓟 (s i)`. -/
-theorem hasBasis_infᵢ_principal_finite {ι : Type _} (s : ι → Set α) :
+theorem hasBasis_iInf_principal_finite {ι : Type _} (s : ι → Set α) :
(⨅ i, 𝓟 (s i)).HasBasis (fun t : Set ι => t.Finite) fun t => ⋂ i ∈ t, s i := by
- refine' ⟨fun U => (mem_infᵢ_finite _).trans _⟩
- simp only [infᵢ_principal_finset, mem_unionᵢ, mem_principal, exists_prop,
- exists_finite_iff_finset, Finset.set_binterᵢ_coe]
-#align filter.has_basis_infi_principal_finite Filter.hasBasis_infᵢ_principal_finite
+ refine' ⟨fun U => (mem_iInf_finite _).trans _⟩
+ simp only [iInf_principal_finset, mem_iUnion, mem_principal, exists_prop,
+ exists_finite_iff_finset, Finset.set_biInter_coe]
+#align filter.has_basis_infi_principal_finite Filter.hasBasis_iInf_principal_finite
-theorem hasBasis_binfᵢ_principal {s : β → Set α} {S : Set β} (h : DirectedOn (s ⁻¹'o (· ≥ ·)) S)
+theorem hasBasis_biInf_principal {s : β → Set α} {S : Set β} (h : DirectedOn (s ⁻¹'o (· ≥ ·)) S)
(ne : S.Nonempty) : (⨅ i ∈ S, 𝓟 (s i)).HasBasis (fun i => i ∈ S) s :=
⟨fun t => by
- refine' mem_binfᵢ_of_directed _ ne
+ refine' mem_biInf_of_directed _ ne
rw [directedOn_iff_directed, ← directed_comp] at h ⊢
refine' h.mono_comp _
exact fun _ _ => principal_mono.2⟩
-#align filter.has_basis_binfi_principal Filter.hasBasis_binfᵢ_principal
+#align filter.has_basis_binfi_principal Filter.hasBasis_biInf_principal
-theorem hasBasis_binfᵢ_principal' {ι : Type _} {p : ι → Prop} {s : ι → Set α}
+theorem hasBasis_biInf_principal' {ι : Type _} {p : ι → Prop} {s : ι → Set α}
(h : ∀ i, p i → ∀ j, p j → ∃ k, p k ∧ s k ⊆ s i ∧ s k ⊆ s j) (ne : ∃ i, p i) :
(⨅ (i) (_h : p i), 𝓟 (s i)).HasBasis p s :=
- Filter.hasBasis_binfᵢ_principal h ne
-#align filter.has_basis_binfi_principal' Filter.hasBasis_binfᵢ_principal'
+ Filter.hasBasis_biInf_principal h ne
+#align filter.has_basis_binfi_principal' Filter.hasBasis_biInf_principal'
theorem HasBasis.map (f : α → β) (hl : l.HasBasis p s) : (l.map f).HasBasis p fun i => f '' s i :=
⟨fun t => by simp only [mem_map, image_subset_iff, hl.mem_iff, preimage]⟩
@@ -811,23 +811,23 @@ theorem HasBasis.forall_mem_mem (h : HasBasis l p s) {x : α} :
exact ⟨fun h i hi => h (s i) i hi Subset.rfl, fun h t i hi ht => ht (h i hi)⟩
#align filter.has_basis.forall_mem_mem Filter.HasBasis.forall_mem_mem
-protected theorem HasBasis.binfᵢ_mem [CompleteLattice β] {f : Set α → β} (h : HasBasis l p s)
+protected theorem HasBasis.biInf_mem [CompleteLattice β] {f : Set α → β} (h : HasBasis l p s)
(hf : Monotone f) : (⨅ t ∈ l, f t) = ⨅ (i) (_hi : p i), f (s i) :=
- le_antisymm (le_infᵢ₂ fun i hi => infᵢ₂_le (s i) (h.mem_of_mem hi)) <|
- le_infᵢ₂ fun _t ht =>
+ le_antisymm (le_iInf₂ fun i hi => iInf₂_le (s i) (h.mem_of_mem hi)) <|
+ le_iInf₂ fun _t ht =>
let ⟨i, hpi, hi⟩ := h.mem_iff.1 ht
- infᵢ₂_le_of_le i hpi (hf hi)
-#align filter.has_basis.binfi_mem Filter.HasBasis.binfᵢ_mem
+ iInf₂_le_of_le i hpi (hf hi)
+#align filter.has_basis.binfi_mem Filter.HasBasis.biInf_mem
-protected theorem HasBasis.binterᵢ_mem {f : Set α → Set β} (h : HasBasis l p s) (hf : Monotone f) :
+protected theorem HasBasis.biInter_mem {f : Set α → Set β} (h : HasBasis l p s) (hf : Monotone f) :
(⋂ t ∈ l, f t) = ⋂ (i) (_hi : p i), f (s i) :=
- h.binfᵢ_mem hf
-#align filter.has_basis.bInter_mem Filter.HasBasis.binterᵢ_mem
+ h.biInf_mem hf
+#align filter.has_basis.bInter_mem Filter.HasBasis.biInter_mem
-theorem HasBasis.interₛ_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (_hi : p i), s i := by
- rw [interₛ_eq_binterᵢ]
- exact h.binterᵢ_mem monotone_id
-#align filter.has_basis.sInter_sets Filter.HasBasis.interₛ_sets
+theorem HasBasis.sInter_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (_hi : p i), s i := by
+ rw [sInter_eq_biInter]
+ exact h.biInter_mem monotone_id
+#align filter.has_basis.sInter_sets Filter.HasBasis.sInter_sets
variable {ι'' : Type _} [Preorder ι''] (l) (s'' : ι'' → Set α)
@@ -1016,34 +1016,34 @@ theorem HasCountableBasis.isCountablyGenerated {f : Filter α} {p : ι → Prop}
theorem antitone_seq_of_seq (s : ℕ → Set α) :
∃ t : ℕ → Set α, Antitone t ∧ (⨅ i, 𝓟 <| s i) = ⨅ i, 𝓟 (t i) := by
use fun n => ⋂ m ≤ n, s m; constructor
- · exact fun i j hij => binterᵢ_mono (Iic_subset_Iic.2 hij) fun n _ => Subset.rfl
- apply le_antisymm <;> rw [le_infᵢ_iff] <;> intro i
+ · exact fun i j hij => biInter_mono (Iic_subset_Iic.2 hij) fun n _ => Subset.rfl
+ apply le_antisymm <;> rw [le_iInf_iff] <;> intro i
· rw [le_principal_iff]
- refine' (binterᵢ_mem (finite_le_nat _)).2 fun j _ => _
- exact mem_infᵢ_of_mem j (mem_principal_self _)
- · refine infᵢ_le_of_le i (principal_mono.2 <| interᵢ₂_subset i ?_)
+ refine' (biInter_mem (finite_le_nat _)).2 fun j _ => _
+ exact mem_iInf_of_mem j (mem_principal_self _)
+ · refine iInf_le_of_le i (principal_mono.2 <| iInter₂_subset i ?_)
rfl
#align filter.antitone_seq_of_seq Filter.antitone_seq_of_seq
-theorem countable_binfᵢ_eq_infᵢ_seq [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
+theorem countable_biInf_eq_iInf_seq [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
(Bne : B.Nonempty) (f : ι → α) : ∃ x : ℕ → ι, (⨅ t ∈ B, f t) = ⨅ i, f (x i) :=
let ⟨g, hg⟩ := Bcbl.exists_eq_range Bne
- ⟨g, hg.symm ▸ infᵢ_range⟩
-#align filter.countable_binfi_eq_infi_seq Filter.countable_binfᵢ_eq_infᵢ_seq
+ ⟨g, hg.symm ▸ iInf_range⟩
+#align filter.countable_binfi_eq_infi_seq Filter.countable_biInf_eq_iInf_seq
-theorem countable_binfᵢ_eq_infᵢ_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
+theorem countable_biInf_eq_iInf_seq' [CompleteLattice α] {B : Set ι} (Bcbl : B.Countable)
(f : ι → α) {i₀ : ι} (h : f i₀ = ⊤) : ∃ x : ℕ → ι, (⨅ t ∈ B, f t) = ⨅ i, f (x i) := by
cases' B.eq_empty_or_nonempty with hB Bnonempty
- · rw [hB, infᵢ_emptyset]
+ · rw [hB, iInf_emptyset]
use fun _ => i₀
simp [h]
- · exact countable_binfᵢ_eq_infᵢ_seq Bcbl Bnonempty f
-#align filter.countable_binfi_eq_infi_seq' Filter.countable_binfᵢ_eq_infᵢ_seq'
+ · exact countable_biInf_eq_iInf_seq Bcbl Bnonempty f
+#align filter.countable_binfi_eq_infi_seq' Filter.countable_biInf_eq_iInf_seq'
-theorem countable_binfᵢ_principal_eq_seq_infᵢ {B : Set (Set α)} (Bcbl : B.Countable) :
+theorem countable_biInf_principal_eq_seq_iInf {B : Set (Set α)} (Bcbl : B.Countable) :
∃ x : ℕ → Set α, (⨅ t ∈ B, 𝓟 t) = ⨅ i, 𝓟 (x i) :=
- countable_binfᵢ_eq_infᵢ_seq' Bcbl 𝓟 principal_univ
-#align filter.countable_binfi_principal_eq_seq_infi Filter.countable_binfᵢ_principal_eq_seq_infᵢ
+ countable_biInf_eq_iInf_seq' Bcbl 𝓟 principal_univ
+#align filter.countable_binfi_principal_eq_seq_infi Filter.countable_biInf_principal_eq_seq_iInf
section IsCountablyGenerated
@@ -1072,9 +1072,9 @@ theorem HasBasis.exists_antitone_subbasis {f : Filter α} [h : f.IsCountablyGene
∃ x : ℕ → ι', (∀ i, p (x i)) ∧ f.HasAntitoneBasis fun i => s (x i) := by
obtain ⟨x', hx'⟩ : ∃ x : ℕ → Set α, f = ⨅ i, 𝓟 (x i) := by
rcases h with ⟨s, hsc, rfl⟩
- rw [generate_eq_binfᵢ]
- exact countable_binfᵢ_principal_eq_seq_infᵢ hsc
- have : ∀ i, x' i ∈ f := fun i => hx'.symm ▸ (infᵢ_le (fun i => 𝓟 (x' i)) i) (mem_principal_self _)
+ rw [generate_eq_biInf]
+ exact countable_biInf_principal_eq_seq_iInf hsc
+ have : ∀ i, x' i ∈ f := fun i => hx'.symm ▸ (iInf_le (fun i => 𝓟 (x' i)) i) (mem_principal_self _)
let x : ℕ → { i : ι' // p i } := fun n =>
Nat.recOn n (hs.index _ <| this 0) fun n xn =>
hs.index _ <| inter_mem (this <| n + 1) (hs.mem_of_mem xn.2)
@@ -1085,12 +1085,12 @@ theorem HasBasis.exists_antitone_subbasis {f : Filter α} [h : f.IsCountablyGene
exacts [hs.set_index_subset _, (hs.set_index_subset _).trans (inter_subset_left _ _)]
refine' ⟨fun i => (x i).1, fun i => (x i).2, _⟩
have : (⨅ i, 𝓟 (s (x i).1)).HasAntitoneBasis fun i => s (x i).1 :=
- ⟨hasBasis_infᵢ_principal (directed_of_sup x_mono), x_mono⟩
+ ⟨hasBasis_iInf_principal (directed_of_sup x_mono), x_mono⟩
convert this
exact
- le_antisymm (le_infᵢ fun i => le_principal_iff.2 <| by cases i <;> apply hs.set_index_mem)
+ le_antisymm (le_iInf fun i => le_principal_iff.2 <| by cases i <;> apply hs.set_index_mem)
(hx'.symm ▸
- le_infᵢ fun i => le_principal_iff.2 <| this.1.mem_iff.2 ⟨i, trivial, x_subset i⟩)
+ le_iInf fun i => le_principal_iff.2 <| this.1.mem_iff.2 ⟨i, trivial, x_subset i⟩)
#align filter.has_basis.exists_antitone_subbasis Filter.HasBasis.exists_antitone_subbasis
/-- A countably generated filter admits a basis formed by an antitone sequence of sets. -/
@@ -1148,7 +1148,7 @@ end IsCountablyGenerated
theorem isCountablyGenerated_seq [Countable β] (x : β → Set α) :
IsCountablyGenerated (⨅ i, 𝓟 <| x i) := by
use range x, countable_range x
- rw [generate_eq_binfᵢ, infᵢ_range]
+ rw [generate_eq_biInf, iInf_range]
#align filter.is_countably_generated_seq Filter.isCountablyGenerated_seq
theorem isCountablyGenerated_of_seq {f : Filter α} (h : ∃ x : ℕ → Set α, f = ⨅ i, 𝓟 <| x i) :
@@ -1157,10 +1157,10 @@ theorem isCountablyGenerated_of_seq {f : Filter α} (h : ∃ x : ℕ → Set α,
apply isCountablyGenerated_seq
#align filter.is_countably_generated_of_seq Filter.isCountablyGenerated_of_seq
-theorem isCountablyGenerated_binfᵢ_principal {B : Set (Set α)} (h : B.Countable) :
+theorem isCountablyGenerated_biInf_principal {B : Set (Set α)} (h : B.Countable) :
IsCountablyGenerated (⨅ s ∈ B, 𝓟 s) :=
- isCountablyGenerated_of_seq (countable_binfᵢ_principal_eq_seq_infᵢ h)
-#align filter.is_countably_generated_binfi_principal Filter.isCountablyGenerated_binfᵢ_principal
+ isCountablyGenerated_of_seq (countable_biInf_principal_eq_seq_iInf h)
+#align filter.is_countably_generated_binfi_principal Filter.isCountablyGenerated_biInf_principal
theorem isCountablyGenerated_iff_exists_antitone_basis {f : Filter α} :
IsCountablyGenerated f ↔ ∃ x : ℕ → Set α, f.HasAntitoneBasis x := by
@@ -1168,13 +1168,13 @@ theorem isCountablyGenerated_iff_exists_antitone_basis {f : Filter α} :
· intro h
exact f.exists_antitone_basis
· rintro ⟨x, h⟩
- rw [h.1.eq_infᵢ]
+ rw [h.1.eq_iInf]
exact isCountablyGenerated_seq x
#align filter.is_countably_generated_iff_exists_antitone_basis Filter.isCountablyGenerated_iff_exists_antitone_basis
@[instance]
theorem isCountablyGenerated_principal (s : Set α) : IsCountablyGenerated (𝓟 s) :=
- isCountablyGenerated_of_seq ⟨fun _ => s, infᵢ_const.symm⟩
+ isCountablyGenerated_of_seq ⟨fun _ => s, iInf_const.symm⟩
#align filter.is_countably_generated_principal Filter.isCountablyGenerated_principal
@[instance]
@@ -1196,15 +1196,15 @@ theorem isCountablyGenerated_top : IsCountablyGenerated (⊤ : Filter α) :=
-- porting note: without explicit `Sort u` and `Type v`, Lean 4 uses `ι : Prop`
universe u v
-instance infᵢ.isCountablyGenerated {ι : Sort u} {α : Type v} [Countable ι] (f : ι → Filter α)
+instance iInf.isCountablyGenerated {ι : Sort u} {α : Type v} [Countable ι] (f : ι → Filter α)
[∀ i, IsCountablyGenerated (f i)] : IsCountablyGenerated (⨅ i, f i) := by
choose s hs using fun i => exists_antitone_basis (f i)
- rw [← PLift.down_surjective.infᵢ_comp]
- refine' HasCountableBasis.isCountablyGenerated ⟨hasBasis_infᵢ fun n => (hs _).1, _⟩
+ rw [← PLift.down_surjective.iInf_comp]
+ refine' HasCountableBasis.isCountablyGenerated ⟨hasBasis_iInf fun n => (hs _).1, _⟩
refine' (countable_range <| Sigma.map ((↑) : Finset (PLift ι) → Set (PLift ι)) fun _ => id).mono _
rintro ⟨I, f⟩ ⟨hI, -⟩
lift I to Finset (PLift ι) using hI
exact ⟨⟨I, f⟩, rfl⟩
-#align filter.infi.is_countably_generated Filter.infᵢ.isCountablyGenerated
+#align filter.infi.is_countably_generated Filter.iInf.isCountablyGenerated
end Filter
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -183,8 +183,7 @@ theorem mem_filter_of_mem (B : FilterBasis α) {U : Set α} : U ∈ B → U ∈
#align filter_basis.mem_filter_of_mem FilterBasis.mem_filter_of_mem
theorem eq_infᵢ_principal (B : FilterBasis α) : B.filter = ⨅ s : B.sets, 𝓟 s := by
- have : Directed (· ≥ ·) fun s : B.sets => 𝓟 (s : Set α) :=
- by
+ have : Directed (· ≥ ·) fun s : B.sets => 𝓟 (s : Set α) := by
rintro ⟨U, U_in⟩ ⟨V, V_in⟩
rcases B.inter_sets U_in V_in with ⟨W, W_in, W_sub⟩
use ⟨W, W_in⟩
Apparently we have CI scripts that assume those fall on a single line. The command line used to fix the aligns was:
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^#align ([^[:space:]]+)\n *([^[:space:]]+)$/#align \1 \2/' {} \;
Co-authored-by: Moritz Firsching <firsching@google.com>
@@ -1012,8 +1012,7 @@ instance Nat.inhabitedCountableFilterBasis : Inhabited (CountableFilterBasis ℕ
theorem HasCountableBasis.isCountablyGenerated {f : Filter α} {p : ι → Prop} {s : ι → Set α}
(h : f.HasCountableBasis p s) : f.IsCountablyGenerated :=
⟨⟨{ t | ∃ i, p i ∧ s i = t }, h.countable.image s, h.toHasBasis.eq_generate⟩⟩
-#align filter.has_countable_basis.is_countably_generated
- Filter.HasCountableBasis.isCountablyGenerated
+#align filter.has_countable_basis.is_countably_generated Filter.HasCountableBasis.isCountablyGenerated
theorem antitone_seq_of_seq (s : ℕ → Set α) :
∃ t : ℕ → Set α, Antitone t ∧ (⨅ i, 𝓟 <| s i) = ⨅ i, 𝓟 (t i) := by
@@ -1172,8 +1171,7 @@ theorem isCountablyGenerated_iff_exists_antitone_basis {f : Filter α} :
· rintro ⟨x, h⟩
rw [h.1.eq_infᵢ]
exact isCountablyGenerated_seq x
-#align filter.is_countably_generated_iff_exists_antitone_basis
- Filter.isCountablyGenerated_iff_exists_antitone_basis
+#align filter.is_countably_generated_iff_exists_antitone_basis Filter.isCountablyGenerated_iff_exists_antitone_basis
@[instance]
theorem isCountablyGenerated_principal (s : Set α) : IsCountablyGenerated (𝓟 s) :=
congr!
and improvement to convert
(#2566)
This introduces a tactic congr!
that is an analogue to mathlib 3's congr'
. It is a more insistent version of congr
that makes use of more congruence lemmas (including user congruence lemmas), propext
, funext
, and Subsingleton
instances. It also has a feature to lift reflexive relations to equalities. Along with funext
, the tactic does intros
, allowing congr!
to get access to function bodies; the introduced variables can be named using rename_i
if needed.
This also modifies convert
to use congr!
rather than congr
, which makes it work more like the mathlib3 version of the tactic.
@@ -964,7 +964,6 @@ theorem map_sigma_mk_comap {π : α → Type _} {π' : β → Type _} {f : α
map (Sigma.mk a) (comap (g a) l) = comap (Sigma.map f g) (map (Sigma.mk (f a)) l) := by
refine' (((basis_sets _).comap _).map _).eq_of_same_basis _
convert ((basis_sets l).map (Sigma.mk (f a))).comap (Sigma.map f g)
- ext1 s
apply image_sigmaMk_preimage_sigmaMap hf
#align filter.map_sigma_mk_comap Filter.map_sigma_mk_comap
@@ -820,14 +820,14 @@ protected theorem HasBasis.binfᵢ_mem [CompleteLattice β] {f : Set α → β}
infᵢ₂_le_of_le i hpi (hf hi)
#align filter.has_basis.binfi_mem Filter.HasBasis.binfᵢ_mem
-protected theorem HasBasis.bInter_mem {f : Set α → Set β} (h : HasBasis l p s) (hf : Monotone f) :
+protected theorem HasBasis.binterᵢ_mem {f : Set α → Set β} (h : HasBasis l p s) (hf : Monotone f) :
(⋂ t ∈ l, f t) = ⋂ (i) (_hi : p i), f (s i) :=
h.binfᵢ_mem hf
-#align filter.has_basis.bInter_mem Filter.HasBasis.bInter_mem
+#align filter.has_basis.bInter_mem Filter.HasBasis.binterᵢ_mem
theorem HasBasis.interₛ_sets (h : HasBasis l p s) : ⋂₀ l.sets = ⋂ (i) (_hi : p i), s i := by
rw [interₛ_eq_binterᵢ]
- exact h.bInter_mem monotone_id
+ exact h.binterᵢ_mem monotone_id
#align filter.has_basis.sInter_sets Filter.HasBasis.interₛ_sets
variable {ι'' : Type _} [Preorder ι''] (l) (s'' : ι'' → Set α)
Set.diagonal
(#1438)
This is a partial forward-port of leanprover-community/mathlib#18111
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov, Johannes Hölzl, Mario Carneiro, Patrick Massot
! This file was ported from Lean 3 source module order.filter.bases
-! leanprover-community/mathlib commit d6fad0e5bf2d6f48da9175d25c3dc5706b3834ce
+! leanprover-community/mathlib commit 996b0ff959da753a555053a480f36e5f264d4207
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -419,13 +419,13 @@ theorem hasBasis_self {l : Filter α} {P : Set α → Prop} :
⟨fun h => h.1, fun h => ⟨h, fun ⟨t, hl, _, hts⟩ => mem_of_superset hl hts⟩⟩
#align filter.has_basis_self Filter.hasBasis_self
-theorem HasBasis.comp_of_surjective (h : l.HasBasis p s) {g : ι' → ι} (hg : Function.Surjective g) :
+theorem HasBasis.comp_surjective (h : l.HasBasis p s) {g : ι' → ι} (hg : Function.Surjective g) :
l.HasBasis (p ∘ g) (s ∘ g) :=
⟨fun _ => h.mem_iff.trans hg.exists⟩
-#align filter.has_basis.comp_of_surjective Filter.HasBasis.comp_of_surjective
+#align filter.has_basis.comp_surjective Filter.HasBasis.comp_surjective
theorem HasBasis.comp_equiv (h : l.HasBasis p s) (e : ι' ≃ ι) : l.HasBasis (p ∘ e) (s ∘ e) :=
- h.comp_of_surjective e.surjective
+ h.comp_surjective e.surjective
#align filter.has_basis.comp_equiv Filter.HasBasis.comp_equiv
/-- If `{s i | p i}` is a basis of a filter `l` and each `s i` includes `s j` such that
The unported dependencies are