# Documentation

Mathlib.Order.Filter.Basic

# Theory of filters on sets #

## Main definitions #

• Filter : filters on a set;
• Filter.Principal : specific filters;
• map, comap : operations on filters;
• Filter.Tendsto : limit with respect to filters;
• Filter.Eventually : f.eventually p means {x | p x} ∈ f∈ f;
• Filter.Frequently : f.frequently p means {x | ¬p x} ∉ f¬p x} ∉ f∉ f;
• filter_upwards [h₁, ..., hₙ] : takes a list of proofs hᵢ : sᵢ ∈ f∈ f, and replaces a goal s ∈ f∈ f with ∀ x, x ∈ s₁ → ... → x ∈ sₙ → x ∈ s∀ x, x ∈ s₁ → ... → x ∈ sₙ → x ∈ s∈ s₁ → ... → x ∈ sₙ → x ∈ s→ ... → x ∈ sₙ → x ∈ s→ x ∈ sₙ → x ∈ s∈ sₙ → x ∈ s→ x ∈ s∈ s;
• Filter.NeBot f : a utility class stating that f is a non-trivial filter.

Filters on a type X are sets of sets of X satisfying three conditions. They are mostly used to abstract two related kinds of ideas:

• limits, including finite or infinite limits of sequences, finite or infinite limits of functions at a point or at infinity, etc...
• things happening eventually, including things happening for large enough n : ℕ, or near enough a point x, or for close enough pairs of points, or things happening almost everywhere in the sense of measure theory. Dually, filters can also express the idea of things happening often: for arbitrarily large n, or at a point in any neighborhood of given a point etc...

In this file, we define the type Filter X of filters on X, and endow it with a complete lattice structure. This structure is lifted from the lattice structure on Set (Set X) using the Galois insertion which maps a filter to its elements in one direction, and an arbitrary set of sets to the smallest filter containing it in the other direction. We also prove Filter is a monadic functor, with a push-forward operation Filter.map and a pull-back operation Filter.comap that form a Galois connections for the order on filters.

The examples of filters appearing in the description of the two motivating ideas are:

• (Filter.atTop : Filter ℕ) : made of sets of ℕ containing {n | n ≥ N}≥ N} for some N
• 𝓝 x : made of neighborhoods of x in a topological space (defined in topology.basic)
• 𝓤 X : made of entourages of a uniform space (those space are generalizations of metric spaces defined in topology.uniform_space.basic)
• μ.ae : made of sets whose complement has zero measure with respect to μ (defined in measure_theory.measure_space)

The general notion of limit of a map with respect to filters on the source and target types is Filter.Tendsto. It is defined in terms of the order and the push-forward operation. The predicate "happening eventually" is Filter.Eventually, and "happening often" is Filter.Frequently, whose definitions are immediate after Filter is defined (but they come rather late in this file in order to immediately relate them to the lattice structure).

For instance, anticipating on Topology.Basic, the statement: "if a sequence u converges to some x and u n belongs to a set M for n large enough then x is in the closure of M" is formalized as: Tendsto u atTop (𝓝 x) → (∀ᶠ n in atTop, u n ∈ M) → x ∈ closure M→ (∀ᶠ n in atTop, u n ∈ M) → x ∈ closure M∀ᶠ n in atTop, u n ∈ M) → x ∈ closure M∈ M) → x ∈ closure M→ x ∈ closure M∈ closure M, which is a special case of mem_closure_of_tendsto from Topology.Basic.

## Notations #

• ∀ᶠ x in f, p x∀ᶠ x in f, p x : f.Eventually p;
• ∃ᶠ x in f, p x∃ᶠ x in f, p x : f.Frequently p;
• f =ᶠ[l] g : ∀ᶠ x in l, f x = g x∀ᶠ x in l, f x = g x;
• f ≤ᶠ[l] g≤ᶠ[l] g : ∀ᶠ x in l, f x ≤ g x∀ᶠ x in l, f x ≤ g x≤ g x;
• 𝓟 s : Filter.Principal s, localized in Filter.

## References #

• [N. Bourbaki, General Topology][bourbaki1966]

Important note: Bourbaki requires that a filter on X cannot contain all sets of X, which we do not require. This gives Filter X better formal properties, in particular a bottom element ⊥⊥ for its lattice structure, at the cost of including the assumption [NeBot f] in a number of lemmas and definitions.

structure Filter (α : Type u_1) :
Type u_1
• The set of sets that belong to the filter.

sets : Set (Set α)
• The set Set.univ belongs to any filter.

univ_sets : Set.univ sets
• If a set belongs to a filter, then its superset belongs to the filter as well.

sets_of_superset : ∀ {x y : Set α}, x setsx yy sets
• If two sets belong to a filter, then their intersection belongs to the filter as well.

inter_sets : ∀ {x y : Set α}, x setsy setsx y sets

A filter F on a type α is a collection of sets of α which contains the whole α, is upwards-closed, and is stable under intersection. We do not forbid this collection to be all sets of α.

Instances For
instance instMembershipSetFilter {α : Type u_1} :
Membership (Set α) ()

If F is a filter on α, and U a subset of α then we can write U ∈ F∈ F as on paper.

Equations
• instMembershipSetFilter = { mem := fun U F => U F.sets }
@[simp]
theorem Filter.mem_mk {α : Type u} {s : Set α} {t : Set (Set α)} {h₁ : Set.univ t} {h₂ : ∀ {x y : Set α}, x tx yy t} {h₃ : ∀ {x y : Set α}, x ty tx y t} :
s { sets := t, univ_sets := h₁, sets_of_superset := h₂, inter_sets := h₃ } s t
@[simp]
theorem Filter.mem_sets {α : Type u} {f : } {s : Set α} :
s f.sets s f
instance Filter.inhabitedMem {α : Type u} {f : } :
Inhabited { s // s f }
Equations
• Filter.inhabitedMem = { default := { val := Set.univ, property := (_ : Set.univ f.sets) } }
theorem Filter.filter_eq {α : Type u} {f : } {g : } :
f.sets = g.setsf = g
theorem Filter.filter_eq_iff {α : Type u} {f : } {g : } :
f = g f.sets = g.sets
theorem Filter.ext_iff {α : Type u} {f : } {g : } :
f = g ∀ (s : Set α), s f s g
theorem Filter.ext {α : Type u} {f : } {g : } :
(∀ (s : Set α), s f s g) → f = g
theorem Filter.coext {α : Type u} {f : } {g : } (h : ∀ (s : Set α), s f s g) :
f = g

An extensionality lemma that is useful for filters with good lemmas about sᶜ ∈ f∈ f (e.g., Filter.comap, Filter.coprod, Filter.Coprod, Filter.cofinite).

@[simp]
theorem Filter.univ_mem {α : Type u} {f : } :
Set.univ f
theorem Filter.mem_of_superset {α : Type u} {f : } {x : Set α} {y : Set α} (hx : x f) (hxy : x y) :
y f
theorem Filter.inter_mem {α : Type u} {f : } {s : Set α} {t : Set α} (hs : s f) (ht : t f) :
s t f
@[simp]
theorem Filter.inter_mem_iff {α : Type u} {f : } {s : Set α} {t : Set α} :
s t f s f t f
theorem Filter.diff_mem {α : Type u} {f : } {s : Set α} {t : Set α} (hs : s f) (ht : t f) :
s \ t f
theorem Filter.univ_mem' {α : Type u} {f : } {s : Set α} (h : ∀ (a : α), a s) :
s f
theorem Filter.mp_mem {α : Type u} {f : } {s : Set α} {t : Set α} (hs : s f) (h : { x | x sx t } f) :
t f
theorem Filter.congr_sets {α : Type u} {f : } {s : Set α} {t : Set α} (h : { x | x s x t } f) :
s f t f
@[simp]
theorem Filter.binterᵢ_mem {α : Type u} {f : } {β : Type v} {s : βSet α} {is : Set β} (hf : ) :
(Set.interᵢ fun i => Set.interᵢ fun h => s i) f ∀ (i : β), i iss i f
@[simp]
theorem Filter.binterᵢ_finset_mem {α : Type u} {f : } {β : Type v} {s : βSet α} (is : ) :
(Set.interᵢ fun i => Set.interᵢ fun h => s i) f ∀ (i : β), i iss i f
theorem Finset.interᵢ_mem_sets {α : Type u} {f : } {β : Type v} {s : βSet α} (is : ) :
(Set.interᵢ fun i => Set.interᵢ fun h => s i) f ∀ (i : β), i iss i f

Alias of Filter.binterᵢ_finset_mem.

@[simp]
theorem Filter.interₛ_mem {α : Type u} {f : } {s : Set (Set α)} (hfin : ) :
⋂₀ s f ∀ (U : Set α), U sU f
@[simp]
theorem Filter.interᵢ_mem {α : Type u} {f : } {β : Type v} {s : βSet α} [inst : ] :
(Set.interᵢ fun i => s i) f ∀ (i : β), s i f
theorem Filter.exists_mem_subset_iff {α : Type u} {f : } {s : Set α} :
(t, t f t s) s f
theorem Filter.monotone_mem {α : Type u} {f : } :
Monotone fun s => s f
theorem Filter.exists_mem_and_iff {α : Type u} {f : } {P : Set αProp} {Q : Set αProp} (hP : ) (hQ : ) :
((u, u f P u) u, u f Q u) u, u f P u Q u
theorem Filter.forall_in_swap {α : Type u} {f : } {β : Type u_1} {p : Set αβProp} :
((a : Set α) → a f(b : β) → p a b) (b : β) → (a : Set α) → a fp a b

filter_upwards [h₁, ⋯, hₙ]⋯, hₙ] replaces a goal of the form s ∈ f∈ f and terms h₁ : t₁ ∈ f, ⋯, hₙ : tₙ ∈ f∈ f, ⋯, hₙ : tₙ ∈ f⋯, hₙ : tₙ ∈ f∈ f with ∀ x, x ∈ t₁ → ⋯ → x ∈ tₙ → x ∈ s∀ x, x ∈ t₁ → ⋯ → x ∈ tₙ → x ∈ s∈ t₁ → ⋯ → x ∈ tₙ → x ∈ s→ ⋯ → x ∈ tₙ → x ∈ s⋯ → x ∈ tₙ → x ∈ s→ x ∈ tₙ → x ∈ s∈ tₙ → x ∈ s→ x ∈ s∈ s. The list is an optional parameter, [] being its default value.

filter_upwards [h₁, ⋯, hₙ] with a₁ a₂ ⋯ aₖ⋯, hₙ] with a₁ a₂ ⋯ aₖ⋯ aₖ is a short form for { filter_upwards [h₁, ⋯, hₙ], intros a₁ a₂ ⋯ aₖ }⋯, hₙ], intros a₁ a₂ ⋯ aₖ }⋯ aₖ }.

filter_upwards [h₁, ⋯, hₙ] using e⋯, hₙ] using e is a short form for { filter_upwards [h1, ⋯, hn], exact e }⋯, hn], exact e }.

Combining both shortcuts is done by writing filter_upwards [h₁, ⋯, hₙ] with a₁ a₂ ⋯ aₖ using e⋯, hₙ] with a₁ a₂ ⋯ aₖ using e⋯ aₖ using e. Note that in this case, the aᵢ terms can be used in e.

Equations
• One or more equations did not get rendered due to their size.
def Filter.principal {α : Type u} (s : Set α) :

The principal filter of s is the collection of all supersets of s.

Equations
• One or more equations did not get rendered due to their size.

The principal filter of s is the collection of all supersets of s.

Equations
@[simp]
theorem Filter.mem_principal {α : Type u} {s : Set α} {t : Set α} :
t s
theorem Filter.mem_principal_self {α : Type u} (s : Set α) :
def Filter.join {α : Type u} (f : Filter ()) :

The join of a filter of filters is defined by the relation s ∈ join f ↔ {t | s ∈ t} ∈ f∈ join f ↔ {t | s ∈ t} ∈ f↔ {t | s ∈ t} ∈ f∈ t} ∈ f∈ f.

Equations
• One or more equations did not get rendered due to their size.
@[simp]
theorem Filter.mem_join {α : Type u} {s : Set α} {f : Filter ()} :
s { t | s t } f
Equations
theorem Filter.le_def {α : Type u} {f : } {g : } :
f g ∀ (x : Set α), x gx f
theorem Filter.not_le {α : Type u} {f : } {g : } :
¬f g s, s g ¬s f
inductive Filter.GenerateSets {α : Type u} (g : Set (Set α)) :
Set αProp

generate_sets g s: s is in the filter closure of g.

Instances For
def Filter.generate {α : Type u} (g : Set (Set α)) :

generate g is the largest filter containing the sets g.

Equations
• One or more equations did not get rendered due to their size.
theorem Filter.le_generate_iff {α : Type u} {s : Set (Set α)} {f : } :
s f.sets
theorem Filter.mem_generate_iff {α : Type u} {s : Set (Set α)} {U : Set α} :
t x, ⋂₀ t U
def Filter.mkOfClosure {α : Type u} (s : Set (Set α)) (hs : ().sets = s) :

mk_of_closure s hs constructs a filter on α whose elements set is exactly s : Set (Set α), provided one gives the assumption hs : (generate s).sets = s.

Equations
• One or more equations did not get rendered due to their size.
theorem Filter.mkOfClosure_sets {α : Type u} {s : Set (Set α)} {hs : ().sets = s} :
def Filter.giGenerate (α : Type u_1) :
GaloisInsertion Filter.generate Filter.sets

Galois insertion from sets of sets into filters.

Equations
• One or more equations did not get rendered due to their size.
instance Filter.instInfFilter {α : Type u} :
Inf ()

The infimum of filters is the filter generated by intersections of elements of the two filters.

Equations
• One or more equations did not get rendered due to their size.
theorem Filter.mem_inf_iff {α : Type u} {f : } {g : } {s : Set α} :
s f g t₁, t₁ f t₂, t₂ g s = t₁ t₂
theorem Filter.mem_inf_of_left {α : Type u} {f : } {g : } {s : Set α} (h : s f) :
s f g
theorem Filter.mem_inf_of_right {α : Type u} {f : } {g : } {s : Set α} (h : s g) :
s f g
theorem Filter.inter_mem_inf {α : Type u} {f : } {g : } {s : Set α} {t : Set α} (hs : s f) (ht : t g) :
s t f g
theorem Filter.mem_inf_of_inter {α : Type u} {f : } {g : } {s : Set α} {t : Set α} {u : Set α} (hs : s f) (ht : t g) (h : s t u) :
u f g
theorem Filter.mem_inf_iff_superset {α : Type u} {f : } {g : } {s : Set α} :
s f g t₁, t₁ f t₂, t₂ g t₁ t₂ s
instance Filter.instTopFilter {α : Type u} :
Top ()
Equations
• One or more equations did not get rendered due to their size.
theorem Filter.mem_top_iff_forall {α : Type u} {s : Set α} :
s ∀ (x : α), x s
@[simp]
theorem Filter.mem_top {α : Type u} {s : Set α} :
s s = Set.univ
Equations
• One or more equations did not get rendered due to their size.
Equations
• Filter.instInhabitedFilter = { default := }
class Filter.NeBot {α : Type u} (f : ) :
• The filter is nontrivial: f ≠ ⊥≠ ⊥⊥ or equivalently, ∅ ∉ f∅ ∉ f∉ f.

ne' : f

A filter is NeBot if it is not equal to ⊥⊥, or equivalently the empty set does not belong to the filter. Bourbaki include this assumption in the definition of a filter but we prefer to have a CompleteLattice structure on Filter _, so we use a typeclass argument in lemmas instead.

Instances
theorem Filter.neBot_iff {α : Type u} {f : } :
theorem Filter.NeBot.ne {α : Type u} {f : } (hf : ) :
@[simp]
theorem Filter.not_neBot {α : Type u} {f : } :
f =
theorem Filter.NeBot.mono {α : Type u} {f : } {g : } (hf : ) (hg : f g) :
theorem Filter.neBot_of_le {α : Type u} {f : } {g : } [hf : ] (hg : f g) :
@[simp]
theorem Filter.sup_neBot {α : Type u} {f : } {g : } :
theorem Filter.bot_sets_eq {α : Type u} :
.sets = Set.univ
theorem Filter.sup_sets_eq {α : Type u} {f : } {g : } :
(f g).sets = f.sets g.sets
theorem Filter.supₛ_sets_eq {α : Type u} {s : Set ()} :
(supₛ s).sets = Set.interᵢ fun f => Set.interᵢ fun h => f.sets
theorem Filter.supᵢ_sets_eq {α : Type u} {ι : Sort x} {f : ι} :
(supᵢ f).sets = Set.interᵢ fun i => (f i).sets
theorem Filter.generate_union {α : Type u} {s : Set (Set α)} {t : Set (Set α)} :
theorem Filter.generate_unionᵢ {α : Type u} {ι : Sort x} {s : ιSet (Set α)} :
Filter.generate (Set.unionᵢ fun i => s i) = i, Filter.generate (s i)
@[simp]
theorem Filter.mem_bot {α : Type u} {s : Set α} :
@[simp]
theorem Filter.mem_sup {α : Type u} {f : } {g : } {s : Set α} :
s f g s f s g
theorem Filter.union_mem_sup {α : Type u} {f : } {g : } {s : Set α} {t : Set α} (hs : s f) (ht : t g) :
s t f g
@[simp]
theorem Filter.mem_supₛ {α : Type u} {x : Set α} {s : Set ()} :
x supₛ s ∀ (f : ), f sx f
@[simp]
theorem Filter.mem_supᵢ {α : Type u} {ι : Sort x} {x : Set α} {f : ι} :
x supᵢ f ∀ (i : ι), x f i
@[simp]
theorem Filter.supᵢ_neBot {α : Type u} {ι : Sort x} {f : ι} :
Filter.NeBot (i, f i) i, Filter.NeBot (f i)
theorem Filter.infᵢ_eq_generate {α : Type u} {ι : Sort x} (s : ι) :
infᵢ s = Filter.generate (Set.unionᵢ fun i => (s i).sets)
theorem Filter.mem_infᵢ_of_mem {α : Type u} {ι : Sort x} {f : ι} (i : ι) {s : Set α} (hs : s f i) :
s i, f i
theorem Filter.mem_infᵢ_of_interᵢ {α : Type u} {ι : Type u_1} {s : ι} {U : Set α} {I : Set ι} (I_fin : ) {V : ISet α} (hV : ∀ (i : I), V i s i) (hU : (Set.interᵢ fun i => V i) U) :
U i, s i
theorem Filter.mem_infᵢ {α : Type u} {ι : Type u_1} {s : ι} {U : Set α} :
(U i, s i) I, V, (∀ (i : I), V i s i) U = Set.interᵢ fun i => V i
theorem Filter.mem_infᵢ' {α : Type u} {ι : Type u_1} {s : ι} {U : Set α} :
(U i, s i) I, V, (∀ (i : ι), V i s i) (∀ (i : ι), ¬i IV i = Set.univ) (U = Set.interᵢ fun i => Set.interᵢ fun h => V i) U = Set.interᵢ fun i => V i
theorem Filter.exists_interᵢ_of_mem_infᵢ {ι : Type u_1} {α : Type u_2} {f : ι} {s : Set α} (hs : s i, f i) :
t, (∀ (i : ι), t i f i) s = Set.interᵢ fun i => t i
theorem Filter.mem_infᵢ_of_finite {ι : Type u_1} [inst : ] {α : Type u_2} {f : ι} (s : Set α) :
(s i, f i) t, (∀ (i : ι), t i f i) s = Set.interᵢ fun i => t i
@[simp]
theorem Filter.le_principal_iff {α : Type u} {s : Set α} {f : } :
s f
theorem Filter.Iic_principal {α : Type u} (s : Set α) :
= { l | s l }
theorem Filter.principal_mono {α : Type u} {s : Set α} {t : Set α} :
s t
theorem Filter.monotone_principal {α : Type u} :
Monotone Filter.principal
@[simp]
theorem Filter.principal_eq_iff_eq {α : Type u} {s : Set α} {t : Set α} :
s = t
@[simp]
theorem Filter.join_principal_eq_supₛ {α : Type u} {s : Set ()} :
@[simp]
theorem Filter.principal_univ {α : Type u} :
@[simp]
theorem Filter.principal_empty {α : Type u} :
theorem Filter.generate_eq_binfᵢ {α : Type u} (S : Set (Set α)) :
= s, h,

### Lattice equations #

theorem Filter.empty_mem_iff_bot {α : Type u} {f : } :
theorem Filter.nonempty_of_mem {α : Type u} {f : } [hf : ] {s : Set α} (hs : s f) :
theorem Filter.NeBot.nonempty_of_mem {α : Type u} {f : } (hf : ) {s : Set α} (hs : s f) :
@[simp]
theorem Filter.empty_not_mem {α : Type u} (f : ) [inst : ] :
theorem Filter.nonempty_of_neBot {α : Type u} (f : ) [inst : ] :
theorem Filter.compl_not_mem {α : Type u} {f : } {s : Set α} [inst : ] (h : s f) :
theorem Filter.filter_eq_bot_of_isEmpty {α : Type u} [inst : ] (f : ) :
f =
theorem Filter.disjoint_iff {α : Type u} {f : } {g : } :
Disjoint f g s, s f t, t g Disjoint s t
theorem Filter.disjoint_of_disjoint_of_mem {α : Type u} {f : } {g : } {s : Set α} {t : Set α} (h : Disjoint s t) (hs : s f) (ht : t g) :
theorem Filter.NeBot.not_disjoint {α : Type u} {f : } {s : Set α} {t : Set α} (hf : ) (hs : s f) (ht : t f) :
theorem Filter.inf_eq_bot_iff {α : Type u} {f : } {g : } :
f g = U, U f V, V g U V =
theorem Pairwise.exists_mem_filter_of_disjoint {α : Type u} {ι : Type u_1} [inst : ] {l : ι} (hd : Pairwise (Disjoint on l)) :
s, (∀ (i : ι), s i l i) Pairwise (Disjoint on s)
theorem Set.PairwiseDisjoint.exists_mem_filter {α : Type u} {ι : Type u_1} {l : ι} {t : Set ι} (hd : ) (ht : ) :
s, (∀ (i : ι), s i l i)
instance Filter.unique {α : Type u} [inst : ] :

There is exactly one filter on an empty type.

Equations
• Filter.unique = { toInhabited := { default := }, uniq := (_ : ∀ (f : ), f = ) }
theorem Filter.eq_top_of_neBot {α : Type u} [inst : ] (l : ) [inst : ] :
l =

There are only two filters on a subsingleton: ⊥⊥ and ⊤⊤. If the type is empty, then they are equal.

theorem Filter.forall_mem_nonempty_iff_neBot {α : Type u} {f : } :
(∀ (s : Set α), s f)
instance Filter.instNontrivialFilter {α : Type u} [inst : ] :
Equations
theorem Filter.eq_infₛ_of_mem_iff_exists_mem {α : Type u} {S : Set ()} {l : } (h : ∀ {s : Set α}, s l f, f S s f) :
l = infₛ S
theorem Filter.eq_infᵢ_of_mem_iff_exists_mem {α : Type u} {ι : Sort x} {f : ι} {l : } (h : ∀ {s : Set α}, s l i, s f i) :
l = infᵢ f
theorem Filter.eq_binfᵢ_of_mem_iff_exists_mem {α : Type u} {ι : Sort x} {f : ι} {p : ιProp} {l : } (h : ∀ {s : Set α}, s l i, p i s f i) :
l = i, _hi, f i
theorem Filter.infᵢ_sets_eq {α : Type u} {ι : Sort x} {f : ι} (h : Directed (fun x x_1 => x x_1) f) [ne : ] :
(infᵢ f).sets = Set.unionᵢ fun i => (f i).sets
theorem Filter.mem_infᵢ_of_directed {α : Type u} {ι : Sort x} {f : ι} (h : Directed (fun x x_1 => x x_1) f) [inst : ] (s : Set α) :
s infᵢ f i, s f i
theorem Filter.mem_binfᵢ_of_directed {α : Type u} {β : Type v} {f : β} {s : Set β} (h : DirectedOn (f ⁻¹'o fun x x_1 => x x_1) s) (ne : ) {t : Set α} :
(t i, h, f i) i, i s t f i
theorem Filter.binfᵢ_sets_eq {α : Type u} {β : Type v} {f : β} {s : Set β} (h : DirectedOn (f ⁻¹'o fun x x_1 => x x_1) s) (ne : ) :
(i, h, f i).sets = Set.unionᵢ fun i => Set.unionᵢ fun h => (f i).sets
theorem Filter.infᵢ_sets_eq_finite {α : Type u} {ι : Type u_1} (f : ι) :
(i, f i).sets = Set.unionᵢ fun t => (i, h, f i).sets
theorem Filter.infᵢ_sets_eq_finite' {α : Type u} {ι : Sort x} (f : ι) :
(i, f i).sets = Set.unionᵢ fun t => (i, h, f i.down).sets
theorem Filter.mem_infᵢ_finite {α : Type u} {ι : Type u_1} {f : ι} (s : Set α) :
s infᵢ f t, s i, h, f i
theorem Filter.mem_infᵢ_finite' {α : Type u} {ι : Sort x} {f : ι} (s : Set α) :
s infᵢ f t, s i, h, f i.down
@[simp]
theorem Filter.sup_join {α : Type u} {f₁ : Filter ()} {f₂ : Filter ()} :
= Filter.join (f₁ f₂)
@[simp]
theorem Filter.supᵢ_join {α : Type u} {ι : Sort w} {f : ιFilter ()} :
(x, Filter.join (f x)) = Filter.join (x, f x)
Equations
instance Filter.instCoframeFilter {α : Type u} :
Equations
theorem Filter.mem_infᵢ_finset {α : Type u} {β : Type v} {s : } {f : α} {t : Set β} :
(t a, h, f a) p, (∀ (a : α), a sp a f a) t = Set.interᵢ fun a => Set.interᵢ fun h => p a
theorem Filter.infᵢ_neBot_of_directed' {α : Type u} {ι : Sort x} {f : ι} [inst : ] (hd : Directed (fun x x_1 => x x_1) f) :
(∀ (i : ι), Filter.NeBot (f i)) → Filter.NeBot (infᵢ f)

If f : ι → Filter α→ Filter α is directed, ι is not empty, and ∀ i, f i ≠ ⊥∀ i, f i ≠ ⊥≠ ⊥⊥, then infᵢ f ≠ ⊥≠ ⊥⊥. See also infᵢ_neBot_of_directed for a version assuming Nonempty α instead of Nonempty ι.

theorem Filter.infᵢ_neBot_of_directed {α : Type u} {ι : Sort x} {f : ι} [hn : ] (hd : Directed (fun x x_1 => x x_1) f) (hb : ∀ (i : ι), Filter.NeBot (f i)) :

If f : ι → Filter α→ Filter α is directed, α is not empty, and ∀ i, f i ≠ ⊥∀ i, f i ≠ ⊥≠ ⊥⊥, then infᵢ f ≠ ⊥≠ ⊥⊥. See also infᵢ_neBot_of_directed' for a version assuming Nonempty ι instead of Nonempty α.

theorem Filter.infₛ_neBot_of_directed' {α : Type u} {s : Set ()} (hne : ) (hd : DirectedOn (fun x x_1 => x x_1) s) (hbot : ¬ s) :
theorem Filter.infₛ_neBot_of_directed {α : Type u} [inst : ] {s : Set ()} (hd : DirectedOn (fun x x_1 => x x_1) s) (hbot : ¬ s) :
theorem Filter.infᵢ_neBot_iff_of_directed' {α : Type u} {ι : Sort x} {f : ι} [inst : ] (hd : Directed (fun x x_1 => x x_1) f) :
Filter.NeBot (infᵢ f) ∀ (i : ι), Filter.NeBot (f i)
theorem Filter.infᵢ_neBot_iff_of_directed {α : Type u} {ι : Sort x} {f : ι} [inst : ] (hd : Directed (fun x x_1 => x x_1) f) :
Filter.NeBot (infᵢ f) ∀ (i : ι), Filter.NeBot (f i)
theorem Filter.infᵢ_sets_induct {α : Type u} {ι : Sort x} {f : ι} {s : Set α} (hs : s infᵢ f) {p : Set αProp} (uni : p Set.univ) (ins : {i : ι} → {s₁ s₂ : Set α} → s₁ f ip s₂p (s₁ s₂)) :
p s

#### principal equations #

@[simp]
theorem Filter.inf_principal {α : Type u} {s : Set α} {t : Set α} :
@[simp]
theorem Filter.sup_principal {α : Type u} {s : Set α} {t : Set α} :
@[simp]
theorem Filter.supᵢ_principal {α : Type u} {ι : Sort w} {s : ιSet α} :
(x, Filter.principal (s x)) = Filter.principal (Set.unionᵢ fun i => s i)
@[simp]
theorem Filter.principal_eq_bot_iff {α : Type u} {s : Set α} :
s =
@[simp]
theorem Filter.principal_neBot_iff {α : Type u} {s : Set α} :
theorem Set.Nonempty.principal_neBot {α : Type u} {s : Set α} :

Alias of the reverse direction of Filter.principal_neBot_iff.

theorem Filter.isCompl_principal {α : Type u} (s : Set α) :
IsCompl () ()
theorem Filter.mem_inf_principal' {α : Type u} {f : } {s : Set α} {t : Set α} :
s t s f
theorem Filter.mem_inf_principal {α : Type u} {f : } {s : Set α} {t : Set α} :
s { x | x tx s } f
theorem Filter.supᵢ_inf_principal {α : Type u} {ι : Sort x} (f : ι) (s : Set α) :
(i, f i ) = (i, f i)
theorem Filter.inf_principal_eq_bot {α : Type u} {f : } {s : Set α} :
theorem Filter.mem_of_eq_bot {α : Type u} {f : } {s : Set α} (h : f = ) :
s f
theorem Filter.diff_mem_inf_principal_compl {α : Type u} {f : } {s : Set α} (hs : s f) (t : Set α) :
s \ t f
theorem Filter.principal_le_iff {α : Type u} {s : Set α} {f : } :
∀ (V : Set α), V fs V
@[simp]
theorem Filter.infᵢ_principal_finset {α : Type u} {ι : Type w} (s : ) (f : ιSet α) :
(i, h, Filter.principal (f i)) = Filter.principal (Set.interᵢ fun i => Set.interᵢ fun h => f i)
@[simp]
theorem Filter.infᵢ_principal {α : Type u} {ι : Type w} [inst : ] (f : ιSet α) :
(i, Filter.principal (f i)) = Filter.principal (Set.interᵢ fun i => f i)
theorem Filter.infᵢ_principal_finite {α : Type u} {ι : Type w} {s : Set ι} (hs : ) (f : ιSet α) :
(i, h, Filter.principal (f i)) = Filter.principal (Set.interᵢ fun i => Set.interᵢ fun h => f i)
theorem Filter.join_mono {α : Type u} {f₁ : Filter ()} {f₂ : Filter ()} (h : f₁ f₂) :

### Eventually #

def Filter.Eventually {α : Type u} (p : αProp) (f : ) :

f.Eventually p or ∀ᶠ x in f, p x∀ᶠ x in f, p x mean that {x | p x} ∈ f∈ f. E.g., ∀ᶠ x in atTop, p x∀ᶠ x in atTop, p x means that p holds true for sufficiently large x.

Equations
• = ({ x | p x } f)

f.Eventually p or ∀ᶠ x in f, p x∀ᶠ x in f, p x mean that {x | p x} ∈ f∈ f. E.g., ∀ᶠ x in atTop, p x∀ᶠ x in atTop, p x means that p holds true for sufficiently large x.

Equations
• One or more equations did not get rendered due to their size.
theorem Filter.eventually_iff {α : Type u} {f : } {P : αProp} :
Filter.Eventually (fun x => P x) f { x | P x } f
@[simp]
theorem Filter.eventually_mem_set {α : Type u} {s : Set α} {l : } :
Filter.Eventually (fun x => x s) l s l
theorem Filter.ext' {α : Type u} {f₁ : } {f₂ : } (h : ∀ (p : αProp), Filter.Eventually (fun x => p x) f₁ Filter.Eventually (fun x => p x) f₂) :
f₁ = f₂
theorem Filter.Eventually.filter_mono {α : Type u} {f₁ : } {f₂ : } (h : f₁ f₂) {p : αProp} (hp : Filter.Eventually (fun x => p x) f₂) :
Filter.Eventually (fun x => p x) f₁
theorem Filter.eventually_of_mem {α : Type u} {f : } {P : αProp} {U : Set α} (hU : U f) (h : (x : α) → x UP x) :
Filter.Eventually (fun x => P x) f
theorem Filter.Eventually.and {α : Type u} {p : αProp} {q : αProp} {f : } :
Filter.Eventually (fun x => p x q x) f
@[simp]
theorem Filter.eventually_true {α : Type u} (f : ) :
Filter.Eventually (fun _x => True) f
theorem Filter.eventually_of_forall {α : Type u} {p : αProp} {f : } (hp : (x : α) → p x) :
Filter.Eventually (fun x => p x) f
@[simp]
theorem Filter.eventually_false_iff_eq_bot {α : Type u} {f : } :
Filter.Eventually (fun _x => False) f f =
@[simp]
theorem Filter.eventually_const {α : Type u} {f : } [t : ] {p : Prop} :
Filter.Eventually (fun _x => p) f p
theorem Filter.eventually_iff_exists_mem {α : Type u} {p : αProp} {f : } :
Filter.Eventually (fun x => p x) f v, v f ((y : α) → y vp y)
theorem Filter.Eventually.exists_mem {α : Type u} {p : αProp} {f : } (hp : Filter.Eventually (fun x => p x) f) :
v, v f ((y : α) → y vp y)
theorem Filter.Eventually.mp {α : Type u} {p : αProp} {q : αProp} {f : } (hp : Filter.Eventually (fun x => p x) f) (hq : Filter.Eventually (fun x => p xq x) f) :
Filter.Eventually (fun x => q x) f
theorem Filter.Eventually.mono {α : Type u} {p : αProp} {q : αProp} {f : } (hp : Filter.Eventually (fun x => p x) f) (hq : (x : α) → p xq x) :
Filter.Eventually (fun x => q x) f
theorem Filter.forall_eventually_of_eventually_forall {α : Type u} {β : Type v} {f : } {p : αβProp} (h : Filter.Eventually (fun x => (y : β) → p x y) f) (y : β) :
Filter.Eventually (fun x => p x y) f
@[simp]
theorem Filter.eventually_and {α : Type u} {p : αProp} {q : αProp} {f : } :
Filter.Eventually (fun x => p x q x) f Filter.Eventually (fun x => p x) f Filter.Eventually (fun x => q x) f
theorem Filter.Eventually.congr {α : Type u} {f : } {p : αProp} {q : αProp} (h' : Filter.Eventually (fun x => p x) f) (h : Filter.Eventually (fun x => p x q x) f) :
Filter.Eventually (fun x => q x) f
theorem Filter.eventually_congr {α : Type u} {f : } {p : αProp} {q : αProp} (h : Filter.Eventually (fun x => p x q x) f) :
Filter.Eventually (fun x => p x) f Filter.Eventually (fun x => q x) f
@[simp]
theorem Filter.eventually_all {α : Type u} {ι : Type u_1} [inst : ] {l : } {p : ιαProp} :
Filter.Eventually (fun x => (i : ι) → p i x) l ∀ (i : ι), Filter.Eventually (fun x => p i x) l
@[simp]
theorem Filter.eventually_all_finite {α : Type u} {ι : Type u_1} {I : Set ι} (hI : ) {l : } {p : ιαProp} :
Filter.Eventually (fun x => (i : ι) → i Ip i x) l ∀ (i : ι), i IFilter.Eventually (fun x => p i x) l
theorem Set.Finite.eventually_all {α : Type u} {ι : Type u_1} {I : Set ι} (hI : ) {l : } {p : ιαProp} :
Filter.Eventually (fun x => (i : ι) → i Ip i x) l ∀ (i : ι), i IFilter.Eventually (fun x => p i x) l

Alias of Filter.eventually_all_finite.

@[simp]
theorem Filter.eventually_all_finset {α : Type u} {ι : Type u_1} (I : ) {l : } {p : ιαProp} :
Filter.Eventually (fun x => (i : ι) → i Ip i x) l ∀ (i : ι), i IFilter.Eventually (fun x => p i x) l
theorem Finset.eventually_all {α : Type u} {ι : Type u_1} (I : ) {l : } {p : ιαProp} :
Filter.Eventually (fun x => (i : ι) → i Ip i x) l ∀ (i : ι), i IFilter.Eventually (fun x => p i x) l

Alias of Filter.eventually_all_finset.

@[simp]
theorem Filter.eventually_or_distrib_left {α : Type u} {f : } {p : Prop} {q : αProp} :
Filter.Eventually (fun x => p q x) f p Filter.Eventually (fun x => q x) f
@[simp]
theorem Filter.eventually_or_distrib_right {α : Type u} {f : } {p : αProp} {q : Prop} :
Filter.Eventually (fun x => p x q) f Filter.Eventually (fun x => p x) f q
@[simp]
theorem Filter.eventually_imp_distrib_left {α : Type u} {f : } {p : Prop} {q : αProp} :
Filter.Eventually (fun x => pq x) f pFilter.Eventually (fun x => q x) f
@[simp]
theorem Filter.eventually_bot {α : Type u} {p : αProp} :
Filter.Eventually (fun x => p x)
@[simp]
theorem Filter.eventually_top {α : Type u} {p : αProp} :
Filter.Eventually (fun x => p x) (x : α) → p x
@[simp]
theorem Filter.eventually_sup {α : Type u} {p : αProp} {f : } {g : } :
Filter.Eventually (fun x => p x) (f g) Filter.Eventually (fun x => p x) f Filter.Eventually (fun x => p x) g
@[simp]
theorem Filter.eventually_supₛ {α : Type u} {p : αProp} {fs : Set ()} :
Filter.Eventually (fun x => p x) (supₛ fs) ∀ (f : ), f fsFilter.Eventually (fun x => p x) f
@[simp]
theorem Filter.eventually_supᵢ {α : Type u} {ι : Sort x} {p : αProp} {fs : ι} :
Filter.Eventually (fun x => p x) (b, fs b) ∀ (b : ι), Filter.Eventually (fun x => p x) (fs b)
@[simp]
theorem Filter.eventually_principal {α : Type u} {a : Set α} {p : αProp} :
Filter.Eventually (fun x => p x) () (x : α) → x ap x
theorem Filter.eventually_inf {α : Type u} {f : } {g : } {p : αProp} :
Filter.Eventually (fun x => p x) (f g) s, s f t, t g ((x : α) → x s tp x)
theorem Filter.eventually_inf_principal {α : Type u} {f : } {p : αProp} {s : Set α} :
Filter.Eventually (fun x => p x) () Filter.Eventually (fun x => x sp x) f

### Frequently #

def Filter.Frequently {α : Type u} (p : αProp) (f : ) :

f.Frequently p or ∃ᶠ x in f, p x∃ᶠ x in f, p x mean that {x | ¬p x} ∉ f¬p x} ∉ f∉ f. E.g., ∃ᶠ x in atTop, p x∃ᶠ x in atTop, p x means that there exist arbitrarily large x for which p holds true.

Equations

f.Frequently p or ∃ᶠ x in f, p x∃ᶠ x in f, p x mean that {x | ¬p x} ∉ f¬p x} ∉ f∉ f. E.g., ∃ᶠ x in atTop, p x∃ᶠ x in atTop, p x means that there exist arbitrarily large x for which p holds true.

Equations
• One or more equations did not get rendered due to their size.
theorem Filter.Eventually.frequently {α : Type u} {f : } [inst : ] {p : αProp} (h : Filter.Eventually (fun x => p x) f) :
Filter.Frequently (fun x => p x) f
theorem Filter.frequently_of_forall {α : Type u} {f : } [inst : ] {p : αProp} (h : (x : α) → p x) :
Filter.Frequently (fun x => p x) f
theorem Filter.Frequently.mp {α : Type u} {p : αProp} {q : αProp} {f : } (h : Filter.Frequently (fun x => p x) f) (hpq : Filter.Eventually (fun x => p xq x) f) :
Filter.Frequently (fun x => q x) f
theorem Filter.Frequently.filter_mono {α : Type u} {p : αProp} {f : } {g : } (h : Filter.Frequently (fun x => p x) f) (hle : f g) :
Filter.Frequently (fun x => p x) g
theorem Filter.Frequently.mono {α : Type u} {p : αProp} {q : αProp} {f : } (h : Filter.Frequently (fun x => p x) f) (hpq : (x : α) → p xq x) :
Filter.Frequently (fun x => q x) f
theorem Filter.Frequently.and_eventually {α : Type u} {p : αProp} {q : αProp} {f : } (hp : Filter.Frequently (fun x => p x) f) (hq : Filter.Eventually (fun x => q x) f) :
Filter.Frequently (fun x => p x q x) f
theorem Filter.Eventually.and_frequently {α : Type u} {p : αProp} {q : αProp} {f : } (hp : Filter.Eventually (fun x => p x) f) (hq : Filter.Frequently (fun x => q x) f) :
Filter.Frequently (fun x => p x q x) f
theorem Filter.Frequently.exists {α : Type u} {p : αProp} {f : } (hp : Filter.Frequently (fun x => p x) f) :
x, p x
theorem Filter.Eventually.exists {α : Type u} {p : αProp} {f : } [inst : ] (hp : Filter.Eventually (fun x => p x) f) :
x, p x
theorem Filter.frequently_iff_forall_eventually_exists_and {α : Type u} {p : αProp} {f : } :
Filter.Frequently (fun x => p x) f ∀ {q : αProp}, Filter.Eventually (fun x => q x) fx, p x q x
theorem Filter.frequently_iff {α : Type u} {f : } {P : αProp} :
Filter.Frequently (fun x => P x) f ∀ {U : Set α}, U fx, x U P x
@[simp]
theorem Filter.not_eventually {α : Type u} {p : αProp} {f : } :
¬Filter.Eventually (fun x => p x) f Filter.Frequently (fun x => ¬p x) f
@[simp]
theorem Filter.not_frequently {α : Type u} {p : αProp} {f : } :
¬Filter.Frequently (fun x => p x) f Filter.Eventually (fun x => ¬p x) f
@[simp]
theorem Filter.frequently_true_iff_neBot {α : Type u} (f : ) :
Filter.Frequently (fun _x => True) f
@[simp]
theorem Filter.frequently_false {α : Type u} (f : ) :
@[simp]
theorem Filter.frequently_const {α : Type u} {f : } [inst : ] {p : Prop} :
Filter.Frequently (fun _x => p) f p
@[simp]
theorem Filter.frequently_or_distrib {α : Type u} {f : } {p : αProp} {q : αProp} :
Filter.Frequently (fun x => p x q x) f Filter.Frequently (fun x => p x) f Filter.Frequently (fun x => q x) f
theorem Filter.frequently_or_distrib_left {α : Type u} {f : } [inst : ] {p : Prop} {q : αProp} :
Filter.Frequently (fun x => p q x) f p Filter.Frequently (fun x => q x) f
theorem Filter.frequently_or_distrib_right {α : Type u} {f : } [inst : ] {p : αProp} {q : Prop} :
Filter.Frequently (fun x => p x q) f Filter.Frequently (fun x => p x) f q
@[simp]
theorem Filter.frequently_imp_distrib {α : Type u} {f : } {p : αProp} {q : αProp} :
Filter.Frequently (fun x => p xq x) f Filter.Eventually (fun x => p x) fFilter.Frequently (fun x => q x) f
theorem Filter.frequently_imp_distrib_left {α : Type u} {f : } [inst : ] {p : Prop} {q : αProp} :
Filter.Frequently (fun x => pq x) f pFilter.Frequently (fun x => q x) f
theorem Filter.frequently_imp_distrib_right {α : Type u} {f : } [inst : ] {p : αProp} {q : Prop} :
Filter.Frequently (fun x => p xq) f Filter.Eventually (fun x => p x) fq
@[simp]
theorem Filter.eventually_imp_distrib_right {α : Type u} {f : } {p : αProp} {q : Prop} :
Filter.Eventually (fun x => p xq) f Filter.Frequently (fun x => p x) fq
@[simp]
theorem Filter.frequently_and_distrib_left {α : Type u} {f : } {p : Prop} {q : αProp} :
Filter.Frequently (fun x => p q x) f p Filter.Frequently (fun x => q x) f
@[simp]
theorem Filter.frequently_and_distrib_right {α : Type u} {f : } {p : αProp} {q : Prop} :
Filter.Frequently (fun x => p x q) f Filter.Frequently (fun x => p x) f q
@[simp]
theorem Filter.frequently_bot {α : Type u} {p : αProp} :
¬Filter.Frequently (fun x => p x)
@[simp]
theorem Filter.frequently_top {α : Type u} {p : αProp} :
Filter.Frequently (fun x => p x) x, p x
@[simp]
theorem Filter.frequently_principal {α : Type u} {a : Set α} {p : αProp} :
Filter.Frequently (fun x => p x) () x, x a p x
theorem Filter.frequently_sup {α : Type u} {p : αProp} {f : } {g : } :
Filter.Frequently (fun x => p x) (f g) Filter.Frequently (fun x => p x) f Filter.Frequently (fun x => p x) g
@[simp]
theorem Filter.frequently_supₛ {α : Type u} {p : αProp} {fs : Set ()} :
Filter.Frequently (fun x => p x) (supₛ fs) f, f fs Filter.Frequently (fun x => p x) f
@[simp]
theorem Filter.frequently_supᵢ {α : Type u} {β : Type v} {p : αProp} {fs : β} :
Filter.Frequently (fun x => p x) (b, fs b) b, Filter.Frequently (fun x => p x) (fs b)
theorem Filter.Eventually.choice {α : Type u} {β : Type v} {r : αβProp} {l : } [inst : ] (h : Filter.Eventually (fun x => y, r x y) l) :
f, Filter.Eventually (fun x => r x (f x)) l

### Relation “eventually equal” #

def Filter.EventuallyEq {α : Type u} {β : Type v} (l : ) (f : αβ) (g : αβ) :

Two functions f and g are eventually equal along a filter l if the set of x such that f x = g x belongs to l.

Equations

Two functions f and g are eventually equal along a filter l if the set of x such that f x = g x belongs to l.

Equations
• One or more equations did not get rendered due to their size.
theorem Filter.EventuallyEq.eventually {α : Type u} {β : Type v} {l : } {f : αβ} {g : αβ} (h : f =ᶠ[l] g) :
Filter.Eventually (fun x => f x = g x) l
theorem Filter.EventuallyEq.rw {α : Type u} {β : Type v} {l : } {f : αβ} {g : αβ} (h : f =ᶠ[l] g) (p : αβProp) (hf : Filter.Eventually (fun x => p x (f x)) l) :
Filter.Eventually (fun x => p x (g x)) l
theorem Filter.eventuallyEq_set {α : Type u} {s : Set α} {t : Set α} {l : } :
s =ᶠ[l] t Filter.Eventually (fun x => x s x t) l
theorem Filter.Eventually.set_eq {α : Type u} {s : Set α} {t : Set α} {l : } :
Filter.Eventually (fun x => x s x t) ls =ᶠ[l] t

Alias of the reverse direction of Filter.eventuallyEq_set.

theorem Filter.EventuallyEq.mem_iff {α : Type u} {s : Set α} {t : Set α} {l : } :
s =ᶠ[l] tFilter.Eventually (fun x => x s x t) l

Alias of the forward direction of Filter.eventuallyEq_set.

@[simp]
theorem Filter.eventuallyEq_univ {α : Type u} {s : Set α} {l : } :
s =ᶠ[l] Set.univ s l
theorem Filter.EventuallyEq.exists_mem {α : Type u} {β : Type v} {l : } {f : αβ} {g : αβ} (h : f =ᶠ[l] g) :
s, s l Set.EqOn f g s
theorem Filter.eventuallyEq_of_mem {α : Type u} {β : Type v} {l : } {f : αβ} {g : αβ} {s : Set α} (hs : s l) (h : Set.EqOn f g s) :
f =ᶠ[l] g
theorem Filter.eventuallyEq_iff_exists_mem {α : Type u} {β : Type v} {l : } {f : αβ} {g : αβ} :
f =ᶠ[l] g s, s l Set.EqOn f g s
theorem Filter.EventuallyEq.filter_mono {α : Type u} {β : Type v} {l : } {l' : } {f : αβ} {g : αβ} (h₁ : f =ᶠ[l] g) (h₂ : l' l) :
f =ᶠ[l'] g
theorem Filter.EventuallyEq.refl {α : Type u} {β : Type v} (l : ) (f : αβ) :
f =ᶠ[l] f
theorem Filter.EventuallyEq.rfl {α : Type u} {β : Type v} {l : } {f : αβ} :
f =ᶠ[l] f
theorem Filter.EventuallyEq.symm {α : Type u} {β : Type v} {f : αβ} {g : αβ} {l : } (H : f =ᶠ[l] g) :
g =ᶠ[l] f
theorem Filter.EventuallyEq.trans {α : Type u} {β : Type v} {l : } {f : αβ} {g : αβ} {h : αβ} (H₁ : f =ᶠ[l] g) (H₂ : g =ᶠ[l] h) :
f =ᶠ[l] h
theorem Filter.EventuallyEq.prod_mk {α : Type u} {β : Type v} {γ : Type w} {l : } {f : αβ} {f' : αβ} (hf : f =ᶠ[l] f') {g : αγ} {g' : αγ} (hg : g =ᶠ[l] g') :
(fun x => (f x, g x)) =ᶠ[l] fun x => (f' x, g' x)
theorem Filter.EventuallyEq.fun_comp {α : Type u} {β : Type v} {γ : Type w} {f : αβ} {g : αβ} {l : } (H : f =ᶠ[l] g) (h : βγ) :
h f =ᶠ[l] h g
theorem Filter.EventuallyEq.comp₂ {α : Type u} {β : Type v} {γ : Type w} {δ : Type u_1} {f : αβ} {f' : αβ} {g : αγ} {g' : αγ} {l : } (Hf : f =ᶠ[l] f') (h : βγδ) (Hg : g =ᶠ[l] g') :
(fun x => h (f x) (g x)) =ᶠ[l] fun x => h (f' x) (g' x)
theorem Filter.EventuallyEq.add {α : Type u} {β : Type v} [inst : Add β] {f : αβ} {f' : αβ} {g : αβ} {g' : αβ} {l : } (h : f =ᶠ[l] g) (h' : f' =ᶠ[l] g') :
(fun x => f x + f' x) =ᶠ[l] fun x => g x + g' x
theorem Filter.EventuallyEq.mul {α : Type u} {β : Type v} [inst : Mul β] {f : αβ} {f' : αβ} {g : αβ} {g' : αβ} {l : } (h : f =ᶠ[l] g) (h' : f' =ᶠ[l] g') :
(fun x => f x * f' x) =ᶠ[l] fun x => g x * g' x
theorem Filter.EventuallyEq.neg {α : Type u} {β : Type v} [inst : Neg β] {f : αβ} {g : αβ} {l : } (h : f =ᶠ[l] g) :
(fun x => -f x) =ᶠ[l] fun x => -g x
theorem Filter.EventuallyEq.inv {α : Type u} {β : Type v} [inst : Inv β] {f : αβ} {g : αβ} {l : } (h : f =ᶠ[l] g) :
(fun x => (f x)⁻¹) =ᶠ[l] fun x => (g x)⁻¹
theorem Filter.EventuallyEq.sub {α : Type u} {β : Type v} [inst : Sub β] {f : αβ} {f' : αβ} {g : αβ} {g' : αβ} {l : } (h : f =ᶠ[l] g) (h' : f' =ᶠ[l] g') :
(fun x => f x - f' x) =ᶠ[l] fun x => g x - g' x
theorem Filter.EventuallyEq.div {α : Type u} {β : Type v} [inst : Div β] {f : αβ} {f' : αβ} {g : αβ} {g' : αβ} {l : } (h : f =ᶠ[l] g) (h' : f' =ᶠ[l] g') :
(fun x => f x / f' x) =ᶠ[l] fun x => g x / g' x
theorem Filter.EventuallyEq.const_vadd {α : Type u} {β : Type v} {𝕜 : Type u_1} [inst : VAdd 𝕜 β] {l : } {f : αβ} {g : αβ} (h : f =ᶠ[l] g) (c : 𝕜) :
(fun x => c +ᵥ f x) =ᶠ[l] fun x => c +ᵥ g x
theorem Filter.EventuallyEq.const_smul {α : Type u} {β : Type v} {𝕜 : Type u_1} [inst : SMul 𝕜 β] {l : } {f : αβ} {g : αβ} (h : f =ᶠ[l] g) (c : 𝕜) :
(fun x => c f x) =ᶠ[l] fun x => c g x
theorem Filter.EventuallyEq.vadd {α : Type u} {β : Type v} {𝕜 : Type u_1} [inst : VAdd 𝕜 β] {l : } {f : α𝕜} {f' : α𝕜} {g : αβ} {g' : αβ} (hf : f =ᶠ[l] f') (hg : g =ᶠ[l] g') :
(fun x => f x +ᵥ g x) =ᶠ[l] fun x => f' x +ᵥ g' x
theorem Filter.EventuallyEq.smul {α : Type u} {β : Type v} {𝕜 : Type u_1} [inst : SMul 𝕜 β] {l : } {f : α𝕜} {f' : α𝕜} {g : αβ} {g' : αβ} (hf : f =ᶠ[l] f') (hg : g =ᶠ[l] g') :
(fun x => f x g x) =ᶠ[l] fun x => f' x g' x
theorem Filter.EventuallyEq.sup {α : Type u} {β : Type v} [inst : Sup β] {l : } {f : αβ} {f' : αβ} {g : αβ} {g' : αβ} (hf : f =ᶠ[l] f') (hg : g =ᶠ[l] g') :
(fun x => f x g x) =ᶠ[l] fun x => f' x g' x
theorem Filter.EventuallyEq.inf {α : Type u} {β : Type v} [inst : Inf β] {l : } {f : αβ} {f' : αβ} {g : αβ} {g' : αβ} (hf : f =ᶠ[l] f') (hg : g =ᶠ[l] g') :
(fun x => f x g x) =ᶠ[l] fun x => f' x g' x
theorem Filter.EventuallyEq.preimage {α : Type u} {β : Type v} {l : } {f : αβ} {g : αβ} (h : f =ᶠ[l] g) (s : Set β) :
theorem Filter.EventuallyEq.inter {α : Type u} {s : Set α} {t : Set α} {s' : Set α} {t' : Set α} {l : } (h : s =ᶠ[l] t) (h' : s' =ᶠ[l] t') :
s s' =ᶠ[l] t t'
theorem Filter.EventuallyEq.union {α : Type u} {s : Set α} {t : Set α} {s' : Set α} {t' : Set α} {l : } (h : s =ᶠ[l] t) (h' : s' =ᶠ[l] t') :
s s' =ᶠ[l] t t'
theorem Filter.EventuallyEq.compl {α : Type u} {s : Set α} {t : Set α} {l : } (h : s =ᶠ[l] t) :
theorem Filter.EventuallyEq.diff {α : Type u} {s : Set α} {t : Set α} {s' : Set α} {t' : Set α} {l : } (h : s =ᶠ[l] t) (h' : s' =ᶠ[l] t') :
s \ s' =ᶠ[l] t \ t'
theorem Filter.eventuallyEq_empty {α : Type u} {s : Set α} {l : } :
s =ᶠ[l] Filter.Eventually (fun x => ¬x s) l
theorem Filter.inter_eventuallyEq_left {α : Type u} {s : Set α} {t : Set α} {l : } :
s t =ᶠ[l] s Filter.Eventually (fun x => x sx t) l
theorem Filter.inter_eventuallyEq_right {α : Type u} {s : Set α} {t : Set α} {l : } :
s t =ᶠ[l] t Filter.Eventually (fun x => x tx s) l
@[simp]
theorem Filter.eventuallyEq_principal {α : Type u} {β : Type v} {s : Set α} {f : αβ} {g : αβ} :
Set.EqOn f g s
theorem Filter.eventuallyEq_inf_principal_iff {α : Type u} {β : Type v} {F : } {s : Set α} {f : αβ} {g : αβ} :
f =ᶠ[] g Filter.Eventually (fun x => x sf x = g x) F
theorem Filter.EventuallyEq.sub_eq {α : Type u} {β : Type v} [inst : ] {f : αβ} {g : αβ} {l : } (h : f =ᶠ[l] g) :
f - g =ᶠ[l] 0
theorem Filter.eventuallyEq_iff_sub {α : Type u} {β : Type v} [inst : ] {f : αβ} {g : αβ} {l : } :
f =ᶠ[l] g f - g =ᶠ[l] 0
def Filter.EventuallyLE {α : Type u} {β : Type v} [inst : LE β] (l : ) (f : αβ) (g : αβ) :

A function f is eventually less than or equal to a function g at a filter l.

Equations

A function f is eventually less than or equal to a function g at a filter l.

Equations
• One or more equations did not get rendered due to their size.
theorem Filter.EventuallyLE.congr {α : Type u} {β : Type v} [inst : LE β] {l : } {f : αβ} {f' : αβ} {g : αβ} {g' : αβ} (H : f ≤ᶠ[l] g) (hf : f =ᶠ[l] f') (hg : g =ᶠ[l] g') :
f' ≤ᶠ[l] g'
theorem Filter.eventuallyLE_congr {α : Type u} {β : Type v} [inst : LE β] {l : } {f : αβ} {f' : αβ} {g : αβ} {g' : αβ} (hf : f =ᶠ[l] f') (hg : g =ᶠ[l] g') :
f ≤ᶠ[l] g f' ≤ᶠ[l] g'
theorem Filter.EventuallyEq.le {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} (h : f =ᶠ[l] g) :
theorem Filter.EventuallyLE.refl {α : Type u} {β : Type v} [inst : ] (l : ) (f : αβ) :
theorem Filter.EventuallyLE.rfl {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} :
theorem Filter.EventuallyLE.trans {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} {h : αβ} (H₁ : f ≤ᶠ[l] g) (H₂ : g ≤ᶠ[l] h) :
theorem Filter.EventuallyEq.trans_le {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} {h : αβ} (H₁ : f =ᶠ[l] g) (H₂ : g ≤ᶠ[l] h) :
theorem Filter.EventuallyLE.trans_eq {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} {h : αβ} (H₁ : f ≤ᶠ[l] g) (H₂ : g =ᶠ[l] h) :
theorem Filter.EventuallyLE.antisymm {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} (h₁ : f ≤ᶠ[l] g) (h₂ : g ≤ᶠ[l] f) :
f =ᶠ[l] g
theorem Filter.eventuallyLE_antisymm_iff {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} :
f =ᶠ[l] g f ≤ᶠ[l] g g ≤ᶠ[l] f
theorem Filter.EventuallyLE.le_iff_eq {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} (h : f ≤ᶠ[l] g) :
g ≤ᶠ[l] f g =ᶠ[l] f
theorem Filter.Eventually.ne_of_lt {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} (h : Filter.Eventually (fun x => f x < g x) l) :
Filter.Eventually (fun x => f x g x) l
theorem Filter.Eventually.ne_top_of_lt {α : Type u} {β : Type v} [inst : ] [inst : ] {l : } {f : αβ} {g : αβ} (h : Filter.Eventually (fun x => f x < g x) l) :
Filter.Eventually (fun x => f x ) l
theorem Filter.Eventually.lt_top_of_ne {α : Type u} {β : Type v} [inst : ] [inst : ] {l : } {f : αβ} (h : Filter.Eventually (fun x => f x ) l) :
Filter.Eventually (fun x => f x < ) l
theorem Filter.Eventually.lt_top_iff_ne_top {α : Type u} {β : Type v} [inst : ] [inst : ] {l : } {f : αβ} :
Filter.Eventually (fun x => f x < ) l Filter.Eventually (fun x => f x ) l
theorem Filter.EventuallyLE.inter {α : Type u} {s : Set α} {t : Set α} {s' : Set α} {t' : Set α} {l : } (h : s ≤ᶠ[l] t) (h' : s' ≤ᶠ[l] t') :
s s' ≤ᶠ[l] t t'
theorem Filter.EventuallyLE.union {α : Type u} {s : Set α} {t : Set α} {s' : Set α} {t' : Set α} {l : } (h : s ≤ᶠ[l] t) (h' : s' ≤ᶠ[l] t') :
s s' ≤ᶠ[l] t t'
theorem Filter.EventuallyLE.compl {α : Type u} {s : Set α} {t : Set α} {l : } (h : s ≤ᶠ[l] t) :
theorem Filter.EventuallyLE.diff {α : Type u} {s : Set α} {t : Set α} {s' : Set α} {t' : Set α} {l : } (h : s ≤ᶠ[l] t) (h' : t' ≤ᶠ[l] s') :
s \ s' ≤ᶠ[l] t \ t'
theorem Filter.EventuallyLE.mul_le_mul {α : Type u} {β : Type v} [inst : ] [inst : ] [inst : ] [inst : ] {l : } {f₁ : αβ} {f₂ : αβ} {g₁ : αβ} {g₂ : αβ} (hf : f₁ ≤ᶠ[l] f₂) (hg : g₁ ≤ᶠ[l] g₂) (hg₀ : 0 ≤ᶠ[l] g₁) (hf₀ : 0 ≤ᶠ[l] f₂) :
f₁ * g₁ ≤ᶠ[l] f₂ * g₂
theorem Filter.EventuallyLE.add_le_add {α : Type u} {β : Type v} [inst : Add β] [inst : ] [inst : CovariantClass β β (fun x x_1 => x + x_1) fun x x_1 => x x_1] [inst : CovariantClass β β (Function.swap fun x x_1 => x + x_1) fun x x_1 => x x_1] {l : } {f₁ : αβ} {f₂ : αβ} {g₁ : αβ} {g₂ : αβ} (hf : f₁ ≤ᶠ[l] f₂) (hg : g₁ ≤ᶠ[l] g₂) :
f₁ + g₁ ≤ᶠ[l] f₂ + g₂
theorem Filter.EventuallyLE.mul_le_mul' {α : Type u} {β : Type v} [inst : Mul β] [inst : ] [inst : CovariantClass β β (fun x x_1 => x * x_1) fun x x_1 => x x_1] [inst : CovariantClass β β (Function.swap fun x x_1 => x * x_1) fun x x_1 => x x_1] {l : } {f₁ : αβ} {f₂ : αβ} {g₁ : αβ} {g₂ : αβ} (hf : f₁ ≤ᶠ[l] f₂) (hg : g₁ ≤ᶠ[l] g₂) :
f₁ * g₁ ≤ᶠ[l] f₂ * g₂
theorem Filter.EventuallyLE.mul_nonneg {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} (hf : 0 ≤ᶠ[l] f) (hg : 0 ≤ᶠ[l] g) :
0 ≤ᶠ[l] f * g
theorem Filter.eventually_sub_nonneg {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} :
0 ≤ᶠ[l] g - f f ≤ᶠ[l] g
theorem Filter.EventuallyLE.sup {α : Type u} {β : Type v} [inst : ] {l : } {f₁ : αβ} {f₂ : αβ} {g₁ : αβ} {g₂ : αβ} (hf : f₁ ≤ᶠ[l] f₂) (hg : g₁ ≤ᶠ[l] g₂) :
f₁ g₁ ≤ᶠ[l] f₂ g₂
theorem Filter.EventuallyLE.sup_le {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} {h : αβ} (hf : f ≤ᶠ[l] h) (hg : g ≤ᶠ[l] h) :
f g ≤ᶠ[l] h
theorem Filter.EventuallyLE.le_sup_of_le_left {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} {h : αβ} (hf : h ≤ᶠ[l] f) :
h ≤ᶠ[l] f g
theorem Filter.EventuallyLE.le_sup_of_le_right {α : Type u} {β : Type v} [inst : ] {l : } {f : αβ} {g : αβ} {h : αβ} (hg : h ≤ᶠ[l] g) :
h ≤ᶠ[l] f g
theorem Filter.join_le {α : Type u} {f : Filter ()} {l : } (h : Filter.Eventually (fun m => m l) f) :
l

### Push-forwards, pull-backs, and the monad structure #

def Filter.map {α : Type u} {β : Type v} (m : αβ) (f : ) :

The forward map of a filter

Equations
• One or more equations did not get rendered due to their size.
@[simp]
theorem Filter.map_principal {α : Type u} {β : Type v} {s : Set α} {f : αβ} :
@[simp]
theorem Filter.eventually_map {α : Type u} {β : Type v} {f : } {m : αβ} {P : βProp} :
Filter.Eventually (fun b => P b) () Filter.Eventually (fun a => P (m a)) f
@[simp]
theorem Filter.frequently_map {α : Type u} {β : Type v} {f : } {m : αβ} {P : βProp} :
Filter.Frequently (fun b => P b) () Filter.Frequently (fun a => P (m a)) f
@[simp]
theorem Filter.mem_map {α : Type u} {β : Type v} {f : } {m : αβ} {t : Set β} :
t m ⁻¹' t f
theorem Filter.mem_map' {α : Type u} {β : Type v} {f : } {m : αβ} {t : Set β} :
t { x | m x t } f
theorem Filter.image_mem_map {α : Type u} {β : Type v} {f : } {m : αβ} {s : Set α} (hs : s f) :
m '' s
theorem Filter.image_mem_map_iff {α : Type u} {β : Type v} {f : } {m : αβ} {s : Set α} (hf : ) :
m '' s s f
theorem Filter.range_mem_map {α : Type u} {β : Type v} {f : } {m : αβ} :
theorem Filter.mem_map_iff_exists_image {α : Type u} {β : Type v} {f : } {m : αβ} {t : Set β} :
t s, s f m '' s t
@[simp]
theorem Filter.map_id {α : Type u} {f : } :
Filter.map id f = f
@[simp]
theorem Filter.map_id' {α : Type u} {f : } :
Filter.map (fun x => x) f = f
@[simp]
theorem Filter.map_compose {α : Type u} {β : Type v} {γ : Type w} {m : αβ} {m' : βγ} :
= Filter.map (m' m)
@[simp]
theorem Filter.map_map {α : Type u} {β : Type v} {γ : Type w} {f : } {m : αβ} {m' : βγ} :
Filter.map m' () = Filter.map (m' m) f
theorem Filter.map_congr {α : Type u} {β : Type v} {m₁ : αβ} {m₂ : αβ} {f : } (h : m₁ =ᶠ[f] m₂) :
Filter.map m₁ f = Filter.map m₂ f

If functions m₁ and m₂ are eventually equal at a filter f, then they map this filter to the same filter.

def Filter.comap {α : Type u} {β : Type v} (m : αβ) (f : ) :

The inverse map of a filter. A set s belongs to Filter.comap m f if either of the following equivalent conditions hold.

1. There exists a set t ∈ f∈ f such that m ⁻¹' t ⊆ s⁻¹' t ⊆ s⊆ s. This is used as a definition.
2. The set {y | ∀ x, m x = y → x ∈ s}∀ x, m x = y → x ∈ s}→ x ∈ s}∈ s} belongs to f, see Filter.mem_comap'.
3. The set (m '' sᶜ)ᶜ belongs to f, see Filter.mem_comap_iff_compl and Filter.compl_mem_comap.
Equations
• One or more equations did not get rendered due to their size.
theorem Filter.mem_comap' {α : Type u} {β : Type v} {f : αβ} {l : } {s : Set α} :
s { y | ∀ ⦃x : α⦄, f x = yx s } l
theorem Filter.mem_comap_prod_mk {α : Type u} {β : Type v} {x : α} {s : Set β} {F : Filter (α × β)} :
s Filter.comap () F { p | p.fst = xp.snd s } F

RHS form is used, e.g., in the definition of UniformSpace.

@[simp]
theorem Filter.eventually_comap {α : Type u} {β : Type v} {f : αβ} {l : } {p : αProp} :
Filter.Eventually (fun a => p a) () Filter.Eventually (fun b => (a : α) → f a = bp a) l
@[simp]
theorem Filter.frequently_comap {α : Type u} {β : Type v} {f : αβ} {l : } {p : αProp} :
Filter.Frequently (fun a => p a) () Filter.Frequently (fun b => a, f a = b p a) l
theorem Filter.mem_comap_iff_compl {α : Type u} {β : Type v} {f : αβ} {l : } {s : Set α} :
s (f '' s) l
theorem Filter.compl_mem_comap {α : Type u} {β : Type v} {f : αβ} {l : } {s : Set α} :
s (f '' s) l
def Filter.bind {α : Type u} {β : Type v} (f : ) (m : α) :

The monadic bind operation on filter is defined the usual way in terms of map and join.

Unfortunately, this bind does not result in the expected applicative. See Filter.seq for the applicative instance.

Equations
def Filter.seq {α : Type u} {β : Type v} (f : Filter (αβ)) (g : ) :

The applicative sequentiation operation. This is not induced by the bind operation.

Equations
• One or more equations did not get rendered due to their size.

pure x is the set of sets that contain x. It is equal to 𝓟 {x} but with this definition we have s ∈ pure a∈ pure a defeq a ∈ s∈ s.

Equations
• One or more equations did not get rendered due to their size.
Equations
theorem Filter.pure_sets {α : Type u} (a : α) :
(pure a).sets = { s | a s }
@[simp]
theorem Filter.mem_pure {α : Type u} {a : α} {s : Set α} :
s pure a a s
@[simp]
theorem Filter.eventually_pure {α : Type u} {a : α} {p : αProp} :
Filter.Eventually (fun x => p x) (pure a) p a
@[simp]
theorem Filter.principal_singleton {α : Type u} (a : α) :
= pure a
@[simp]
theorem Filter.map_pure {α : Type u} {β : Type v} (f : αβ) (a : α) :
Filter.map f (pure a) = pure (f a)
@[simp]
theorem Filter.join_pure {α : Type u} (f : ) :
@[simp]
theorem Filter.pure_bind {α : Type u} {β : Type v} (a : α) (m : α) :
Filter.bind (pure a) m = m a

### Filter as a Monad#

In this section we define Filter.monad, a Monad structure on Filters. This definition is not an instance because its Seq projection is not equal to the Filter.seq function we use in the Applicative instance on Filter.

Equations
Equations
@[simp]
theorem Filter.map_def {α : Type u_1} {β : Type u_1} (m : αβ) (f : ) :
m <\$> f =
@[simp]
theorem Filter.bind_def {α : Type u_1} {β : Type u_1} (f : ) (m : α) :
f >>= m =

#### map and comap equations #

@[simp]
theorem Filter.mem_comap {α : Type u} {β : Type v} {g : } {m : αβ} {s : Set α} :
s t, t g m ⁻¹' t s
theorem Filter.preimage_mem_comap {α : Type u} {β : Type v} {g : } {m : αβ} {t : Set β} (ht : t g) :
m ⁻¹' t
theorem Filter.Eventually.comap {α : Type u} {β : Type v} {g : } {p : βProp} (hf : Filter.Eventually (fun b => p b) g) (f : αβ) :
Filter.Eventually (fun a => p (f a)) ()
theorem Filter.comap_id {α : Type u} {f : } :
theorem Filter.comap_id' {α : Type u} {f : } :
Filter.comap (fun x => x) f = f
theorem Filter.comap_const_of_not_mem {α : Type u} {β : Type v} {g : } {t : Set β} {x : β} (ht : t g) (hx : ¬x t) :
Filter.comap (fun x => x) g =
theorem Filter.comap_const_of_mem {α : Type u} {β : Type v} {g : } {x : β} (h : ∀ (t : Set β), t gx t) :
Filter.comap (fun x => x) g =
theorem Filter.map_const {α : Type u} {β : Type v} {f : } [inst : ] {c : β} :
Filter.map (fun x => c) f = pure c
theorem Filter.comap_comap {α : Type u} {β : Type v} {γ : Type w} {f : } {m : γβ} {n : βα} :

The variables in the following lemmas are used as in this diagram:

    φ
α → β
θ ↓   ↓ ψ
γ → δ
ρ
→ β
θ ↓   ↓ ψ
γ → δ
ρ
↓   ↓ ψ
γ → δ
ρ
↓ ψ
γ → δ
ρ
→ δ
ρ
`
theorem Filter.map_comm {α : Type u} {β : Type v} {γ : Type w} {δ : Type u_1} {φ : αβ} {θ : αγ} {ψ : βδ} {ρ : γδ} (H : ψ φ = ρ θ) (F : ) :
Filter.map ψ () = Filter.map ρ ()
theorem Filter.comap_comm {α : Type u} {β : Type v} {γ : Type w} {δ : Type u_1} {φ : αβ} {θ : αγ} {ψ : βδ} {ρ : γδ} (H : ψ φ = ρ θ) (G : ) :
theorem Function.Semiconj.filter_map {α : Type u} {β : Type v} {f : αβ} {ga : αα} {gb : ββ} (h : Function.Semiconj f ga gb) :
theorem Function.Commute.filter_map {α : Type u} {f : αα} {g : αα} (h : ) :
theorem Function.Semiconj.filter_comap {α : Type u} {β : Type v} {f : αβ} {ga : αα} {gb : ββ} (h : Function.Semiconj f ga gb) :
theorem Function.Commute.filter_comap {α : Type u} {f : αα} {g : αα} (h : ) :
@[simp]
theorem Filter.comap_principal {α : Type u} {β : Type v} {m : αβ} {t : Set β} :
@[simp]
theorem Filter.comap_pure {α : Type u} {β : Type v} {m : αβ} {b : β} :
theorem Filter.map_le_iff_le_comap {α : Type u} {β : Type v} {f : } {g : } {m : αβ} :
g f
theorem Filter.gc_map_comap {α : Type u} {β : Type v} (m : αβ) :
theorem Filter.map_mono {α : Type u} {β : Type v} {m : αβ} :
theorem Filter.comap_mono {α : Type u} {β : Type v} {m : αβ} :
@[simp]
theorem Filter.map_bot {α : Type u} {β : Type v} {m : αβ} :
@[simp]
theorem Filter.map_sup {α : Type u} {β : Type v} {f₁ : } {f₂ : } {m : αβ} :
Filter.map m (f₁ f₂) = Filter.map m f₁ Filter.map m f₂
@[simp]
theorem Filter.map_supᵢ {α : Type u} {β : Type v} {ι : Sort x} {m : αβ} {f : ι} :
Filter.map m (i, f i) = i, Filter.map m (f i)
@[simp]
theorem Filter.map_top {α : Type u} {β : Type v} (f : αβ) :
@[simp]
theorem Filter.comap_top {α : Type u} {β : Type v} {m : αβ} :
@[simp]
theorem Filter.comap_inf {α : Type u} {β : Type v} {g₁ : } {g₂ : } {m : αβ} :
Filter.comap m (g₁ g₂) = Filter.comap m g₁ Filter.comap m g₂
@[simp]
theorem Filter.comap_infᵢ {α : Type u} {β : Type v} {ι : Sort x} {m : αβ} {f : ι} :
Filter.comap m (i, f i) = i, Filter.comap m (f i)
theorem Filter.le_comap_top {α : Type u} {β : Type v} (f : αβ) (l : ) :
l
theorem Filter.map_comap_le {α : Type u} {β : Type v} {g : } {m : αβ} :
theorem Filter.le_comap_map {α : Type u} {β : Type v} {f : } {m : αβ} :
@[simp]
theorem Filter.comap_bot {α : Type u} {β : Type v} {m : αβ} :
theorem Filter.neBot_of_comap {α : Type u} {β : Type v} {g : } {m : αβ} (h : Filter.NeBot ()) :
theorem Filter.comap_inf_principal_range {α : Type u} {β : Type v} {g : } {m : αβ} :
theorem Filter.disjoint_comap {α : Type u} {β : Type v} {g₁ : } {g₂ : } {m : αβ} (h : Disjoint g₁ g₂) :
theorem Filter.comap_supᵢ {α : Type u} {β : Type v} {ι : Sort u_1} {f : ι} {m : αβ} :
Filter.comap m (supᵢ f) = i, Filter.comap m (f i)
theorem Filter.comap_supₛ {α : Type u} {β : Type v} {s : Set ()} {m : αβ} :
Filter.comap m (supₛ s) = f, h,
theorem Filter.comap_sup {α : Type u} {β : Type v} {g₁ : } {g₂ : } {m : αβ} :
Filter.comap m (g₁ g₂) = Filter.comap m g₁ Filter.comap m g₂
theorem Filter.map_comap {α : Type u} {β : Type v} (f : ) (m : αβ) :
theorem Filter.map_comap_of_mem {α : Type u} {β : Type v} {f : } {m : αβ} (hf : f) :
Filter.map m () = f
instance Filter.canLift {α : Type u} {β : Type v} (c : βα) (p : αProp) [inst : CanLift α β c p] :
CanLift () () () fun f => Filter.Eventually (fun x => p x) f
Equations
theorem Filter.comap_le_comap_iff {α : Type u} {β : Type v} {f : } {g : } {m : αβ} (hf : f) :
f g
theorem Filter.map_comap_of_surjective {α : Type u} {β : Type v} {f : αβ} (hf : ) (l : ) :
Filter.map f () = l
theorem Function.Surjective.filter_map_top {α : Type u} {β : Type v} {f : αβ} (hf : ) :
theorem Filter.subtype_coe_map_comap {α : Type u} (s : Set α) (f : ) :
Filter.map Subtype.val (Filter.comap Subtype.val f) =
theorem Filter.image_mem_of_mem_comap {α : Type u} {β : Type v} {f : } {c : βα} (h : f) {W : Set β} (W_in : W ) :
c '' W f
theorem Filter.image_coe_mem_of_mem_comap {α : Type u} {f : } {U : Set α} (h : U f) {W : Set U} (W_in : W Filter.comap Subtype.val f) :
Subtype.val '' W f
theorem Filter.comap_map {α : Type u} {β : Type v} {f : } {m : αβ} (h : ) :
theorem Filter.mem_comap_iff {α : Type u} {β : Type v} {f : } {m : αβ} (inj : ) (large : f) {S : Set α} :
S m '' S f
theorem Filter.map_le_map_iff_of_injOn {α : Type u} {β : Type v} {l₁ : } {l₂ : } {f : αβ} {s : Set α} (h₁ : s l₁) (h₂ : s l₂) (hinj : ) :
Filter.map f l₁ Filter.map f l₂ l₁ l₂
theorem Filter.map_le_map_iff {α : Type u} {β : Type v} {f : } {g : } {m : αβ} (hm : ) :
f g
theorem Filter.map_eq_map_iff_of_injOn {α : Type u} {β : Type v} {f : } {g : } {m : αβ} {s : Set α} (hsf : s f) (hsg : s g) (hm : ) :
= f = g
theorem Filter.map_inj {α : Type u} {β : Type v} {f : } {g : } {m : αβ} (hm : ) :
= f = g
theorem Filter.map_injective {α : Type u} {β : Type v} {m : αβ} (hm : ) :
theorem Filter.comap_neBot_iff {α : Type u} {β : Type v} {f : } {m : αβ} :
Filter.NeBot () ∀ (t : Set β), t fa, m a t
theorem Filter.comap_neBot {α : Type u} {β : Type v} {f : } {m : αβ} (hm : ∀ (t : Set β), t fa, m a t) :
theorem Filter.comap_neBot_iff_frequently {α : Type u} {β : Type v} {f : } {m : αβ} :
theorem Filter.comap_neBot_iff_compl_range {α : Type u} {β : Type v} {f : } {m : αβ} :
theorem Filter.comap_eq_bot_iff_compl_range {α : Type u} {β : Type v} {f : } {m : αβ} :
theorem Filter.comap_surjective_eq_bot {α : Type u} {β : Type v} {f : } {m : αβ} (hm : ) :
theorem Filter.disjoint_comap_iff {α : Type u} {β : Type v} {g₁ : } {g₂ : } {m : αβ} (h : ) :
Disjoint (Filter.comap m g₁) (Filter.comap m g₂) Disjoint g₁ g₂
theorem Filter.NeBot.comap_of_range_mem {α : Type u} {β : Type v} {f : } {m : αβ} :
fFilter.NeBot ()
@[simp]
theorem Filter.comap_fst_neBot_iff {α : Type u} {β : Type v} {f : } :
theorem Filter.comap_fst_neBot {α : Type u} {β : Type v} [inst : ] {f : } [inst : ] :
@[simp]
theorem Filter.comap_snd_neBot_iff {α : Type u} {β : Type v} {f : } :
theorem Filter.comap_snd_neBot {α : Type u} {β : Type v} [inst : ] {f : } [inst : ] :
theorem Filter.comap_eval_neBot_iff' {ι : Type u_1} {α : ιType u_2} {i : ι} {f : Filter (α i)} :
(∀ (j : ι), Nonempty (α j))
@[simp]
theorem Filter.comap_eval_neBot_iff {ι : Type u_1} {α : ιType u_2} [inst : ∀ (j : ι), Nonempty (α j)] {i : ι} {f : Filter (α i)} :
theorem Filter.comap_eval_neBot {ι : Type u_1} {α : ιType u_2} [inst : ∀ (j : ι), Nonempty (α j)] (i : ι) (f : Filter (α i)) [inst : ] :
theorem Filter.comap_inf_principal_neBot_of_image_mem {α : Type u} {β : Type v} {f : } {m : αβ} (hf : ) {s : Set α} (hs : m '' s f) :
theorem Filter.comap_coe_neBot_of_le_principal {γ : Type w} {s : Set γ} {l : } [h : ] (h' : ) :
Filter.NeBot (Filter.comap Subtype.val l)
theorem Filter.NeBot.comap_of_surj {α : Type u} {β : Type v} {f : } {m : αβ} (hf : ) (hm : ) :
theorem Filter.NeBot.comap_of_image_mem {α : Type u} {β : Type v} {f : } {m : αβ} (hf : ) {s : Set α} (hs : m '' s f) :
@[simp]
theorem Filter.map_eq_bot_iff {α : Type u} {β : Type v} {f : } {m : αβ} :
theorem Filter.map_neBot_iff {α : Type u} {β : Type v} (f : αβ) {F : } :
theorem Filter.NeBot.map {α : Type u} {β : Type v} {f : } (hf : ) (m : αβ) :
theorem Filter.NeBot.of_map {α : Type u} {β : Type v} {f : } {m : αβ} :
Filter.NeBot ()
instance Filter.map_neBot {α : Type u} {β : Type v} {f : } {m : αβ} [hf : ] :
Equations
theorem Filter.interₛ_comap_sets {α : Type u} {β : Type v} (f : αβ) (F : ) :
⋂₀ ().sets = Set.interᵢ fun U => Set.interᵢ fun h => f ⁻¹' U
theorem Filter.map_infᵢ_le {α : Type u} {β : Type v} {ι : Sort x} {f : ι} {m : αβ} :
Filter.map m (infᵢ f) i, Filter.map m (f i)
theorem Filter.map_infᵢ_eq {α : Type u} {β : Type v} {ι : Sort x} {f : ι} {m : αβ} (hf : Directed (fun x x_1 => x x_1) f) [inst : ] :
Filter.map m (infᵢ f) = i, Filter.map m (f i)
theorem Filter.map_binfᵢ_eq {α : Type u} {β : Type v} {ι : Type w} {f : ι} {m : αβ} {p : ιProp} (h : DirectedOn (f ⁻¹'o fun x x_1 => x x_1) { x | p x }) (ne : i, p i) :
Filter.map m (i, _h, f i) = i, _h, Filter.map m (f i)
theorem Filter.map_inf_le {α : Type u} {β : Type v} {f : } {g : } {m : αβ} :