Documentation

Mathlib.Order.Filter.Ultrafilter

Ultrafilters #

An ultrafilter is a minimal (maximal in the set order) proper filter. In this file we define

Filter α is an atomic type: for every filter there exists an ultrafilter that is less than or equal to this filter.

Equations
  • One or more equations did not get rendered due to their size.
structure Ultrafilter (α : Type u_2) extends Filter :
Type u_2
  • sets : Set (Set α)
  • univ_sets : Set.univ ∈ s.sets
  • sets_of_superset : ∀ {x y : Set α}, x ∈ s.sets → x ⊆ y → y ∈ s.sets
  • inter_sets : ∀ {x y : Set α}, x ∈ s.sets → y ∈ s.sets → x ∩ y ∈ s.sets
  • neBot' : Filter.NeBot ↑s

    An ultrafilter is nontrivial.

  • le_of_le : ∀ (g : Filter α), Filter.NeBot g → g ≤ ↑s → ↑s ≤ g

    If g is a nontrivial filter that is less than or equal to an ultrafilter, then it is greater than or equal to the ultrafilter.

An ultrafilter is a minimal (maximal in the set order) proper filter.

Instances For
    Equations
    • Ultrafilter.instCoeTCUltrafilterFilter = { coe := Ultrafilter.toFilter }
    Equations
    • Ultrafilter.instMembershipSetUltrafilter = { mem := fun s f => s ∈ ↑f }
    theorem Ultrafilter.unique {α : Type u} (f : Ultrafilter α) {g : Filter α} (h : g ≤ ↑f) (hne : autoParam (Filter.NeBot g) _auto✝) :
    g = ↑f
    instance Ultrafilter.neBot {α : Type u} (f : Ultrafilter α) :
    Equations
    theorem Ultrafilter.isAtom {α : Type u} (f : Ultrafilter α) :
    IsAtom ↑f
    @[simp]
    theorem Ultrafilter.mem_coe {α : Type u} {f : Ultrafilter α} {s : Set α} :
    s ∈ ↑f ↔ s ∈ f
    theorem Ultrafilter.coe_injective {α : Type u} :
    Function.Injective Ultrafilter.toFilter
    theorem Ultrafilter.eq_of_le {α : Type u} {f : Ultrafilter α} {g : Ultrafilter α} (h : ↑f ≤ ↑g) :
    f = g
    @[simp]
    theorem Ultrafilter.coe_le_coe {α : Type u} {f : Ultrafilter α} {g : Ultrafilter α} :
    ↑f ≤ ↑g ↔ f = g
    @[simp]
    theorem Ultrafilter.coe_inj {α : Type u} {f : Ultrafilter α} {g : Ultrafilter α} :
    ↑f = ↑g ↔ f = g
    theorem Ultrafilter.ext {α : Type u} ⦃f : Ultrafilter α⦄ ⦃g : Ultrafilter α⦄ (h : ∀ (s : Set α), s ∈ f ↔ s ∈ g) :
    f = g
    theorem Ultrafilter.le_of_inf_neBot {α : Type u} (f : Ultrafilter α) {g : Filter α} (hg : Filter.NeBot (↑f ⊓ g)) :
    ↑f ≤ g
    theorem Ultrafilter.le_of_inf_neBot' {α : Type u} (f : Ultrafilter α) {g : Filter α} (hg : Filter.NeBot (g ⊓ ↑f)) :
    ↑f ≤ g
    theorem Ultrafilter.inf_neBot_iff {α : Type u} {f : Ultrafilter α} {g : Filter α} :
    Filter.NeBot (↑f ⊓ g) ↔ ↑f ≤ g
    theorem Ultrafilter.disjoint_iff_not_le {α : Type u} {f : Ultrafilter α} {g : Filter α} :
    Disjoint (↑f) g ↔ ¬↑f ≤ g
    @[simp]
    theorem Ultrafilter.compl_not_mem_iff {α : Type u} {f : Ultrafilter α} {s : Set α} :
    ¬sᶜ ∈ f ↔ s ∈ f
    @[simp]
    theorem Ultrafilter.frequently_iff_eventually {α : Type u} {f : Ultrafilter α} {p : α → Prop} :
    (∃ᶠ (x : α) in ↑f, p x) ↔ ∀ᶠ (x : α) in ↑f, p x
    theorem Filter.Frequently.eventually {α : Type u} {f : Ultrafilter α} {p : α → Prop} :
    (∃ᶠ (x : α) in ↑f, p x) → ∀ᶠ (x : α) in ↑f, p x

    Alias of the forward direction of Ultrafilter.frequently_iff_eventually.

    theorem Ultrafilter.compl_mem_iff_not_mem {α : Type u} {f : Ultrafilter α} {s : Set α} :
    sᶜ ∈ f ↔ ¬s ∈ f
    theorem Ultrafilter.diff_mem_iff {α : Type u} {s : Set α} {t : Set α} (f : Ultrafilter α) :
    s \ t ∈ f ↔ s ∈ f ∧ ¬t ∈ f
    def Ultrafilter.ofComplNotMemIff {α : Type u} (f : Filter α) (h : ∀ (s : Set α), ¬sᶜ ∈ f ↔ s ∈ f) :

    If sᶜ ∉ f ↔ s ∈ f, then f is an ultrafilter. The other implication is given by Ultrafilter.compl_not_mem_iff.

    Equations
    Instances For
      def Ultrafilter.ofAtom {α : Type u} (f : Filter α) (hf : IsAtom f) :

      If f : Filter α is an atom, then it is an ultrafilter.

      Equations
      Instances For
        theorem Ultrafilter.nonempty_of_mem {α : Type u} {f : Ultrafilter α} {s : Set α} (hs : s ∈ f) :
        theorem Ultrafilter.ne_empty_of_mem {α : Type u} {f : Ultrafilter α} {s : Set α} (hs : s ∈ f) :
        @[simp]
        theorem Ultrafilter.empty_not_mem {α : Type u} {f : Ultrafilter α} :
        @[simp]
        theorem Ultrafilter.le_sup_iff {α : Type u} {u : Ultrafilter α} {f : Filter α} {g : Filter α} :
        ↑u ≤ f ⊔ g ↔ ↑u ≤ f ∨ ↑u ≤ g
        @[simp]
        theorem Ultrafilter.union_mem_iff {α : Type u} {f : Ultrafilter α} {s : Set α} {t : Set α} :
        s ∪ t ∈ f ↔ s ∈ f ∨ t ∈ f
        theorem Ultrafilter.mem_or_compl_mem {α : Type u} (f : Ultrafilter α) (s : Set α) :
        s ∈ f ∨ sᶜ ∈ f
        theorem Ultrafilter.em {α : Type u} (f : Ultrafilter α) (p : α → Prop) :
        (∀ᶠ (x : α) in ↑f, p x) ∨ ∀ᶠ (x : α) in ↑f, ¬p x
        theorem Ultrafilter.eventually_or {α : Type u} {f : Ultrafilter α} {p : α → Prop} {q : α → Prop} :
        (∀ᶠ (x : α) in ↑f, p x ∨ q x) ↔ (∀ᶠ (x : α) in ↑f, p x) ∨ ∀ᶠ (x : α) in ↑f, q x
        theorem Ultrafilter.eventually_not {α : Type u} {f : Ultrafilter α} {p : α → Prop} :
        (∀ᶠ (x : α) in ↑f, ¬p x) ↔ ¬∀ᶠ (x : α) in ↑f, p x
        theorem Ultrafilter.eventually_imp {α : Type u} {f : Ultrafilter α} {p : α → Prop} {q : α → Prop} :
        (∀ᶠ (x : α) in ↑f, p x → q x) ↔ (∀ᶠ (x : α) in ↑f, p x) → ∀ᶠ (x : α) in ↑f, q x
        theorem Ultrafilter.finite_sUnion_mem_iff {α : Type u} {f : Ultrafilter α} {s : Set (Set α)} (hs : Set.Finite s) :
        ⋃₀ s ∈ f ↔ ∃ t, t ∈ s ∧ t ∈ f
        theorem Ultrafilter.finite_biUnion_mem_iff {α : Type u} {β : Type v} {f : Ultrafilter α} {is : Set β} {s : β → Set α} (his : Set.Finite is) :
        ⋃ (i : β) (_ : i ∈ is), s i ∈ f ↔ ∃ i, i ∈ is ∧ s i ∈ f
        def Ultrafilter.map {α : Type u} {β : Type v} (m : α → β) (f : Ultrafilter α) :

        Pushforward for ultrafilters.

        Equations
        Instances For
          @[simp]
          theorem Ultrafilter.coe_map {α : Type u} {β : Type v} (m : α → β) (f : Ultrafilter α) :
          ↑(Ultrafilter.map m f) = Filter.map m ↑f
          @[simp]
          theorem Ultrafilter.mem_map {α : Type u} {β : Type v} {m : α → β} {f : Ultrafilter α} {s : Set β} :
          @[simp]
          theorem Ultrafilter.map_id {α : Type u} (f : Ultrafilter α) :
          @[simp]
          theorem Ultrafilter.map_id' {α : Type u} (f : Ultrafilter α) :
          Ultrafilter.map (fun x => x) f = f
          @[simp]
          theorem Ultrafilter.map_map {α : Type u} {β : Type v} {γ : Type u_1} (f : Ultrafilter α) (m : α → β) (n : β → γ) :
          def Ultrafilter.comap {α : Type u} {β : Type v} {m : α → β} (u : Ultrafilter β) (inj : Function.Injective m) (large : Set.range m ∈ u) :

          The pullback of an ultrafilter along an injection whose range is large with respect to the given ultrafilter.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            @[simp]
            theorem Ultrafilter.mem_comap {α : Type u} {β : Type v} {m : α → β} (u : Ultrafilter β) (inj : Function.Injective m) (large : Set.range m ∈ u) {s : Set α} :
            s ∈ Ultrafilter.comap u inj large ↔ m '' s ∈ u
            @[simp]
            theorem Ultrafilter.coe_comap {α : Type u} {β : Type v} {m : α → β} (u : Ultrafilter β) (inj : Function.Injective m) (large : Set.range m ∈ u) :
            ↑(Ultrafilter.comap u inj large) = Filter.comap m ↑u
            @[simp]
            theorem Ultrafilter.comap_id {α : Type u} (f : Ultrafilter α) (h₀ : optParam (Function.Injective id) (_ : Function.Injective id)) (h₁ : optParam (Set.range id ∈ f) (_ : Set.range id ∈ f)) :
            Ultrafilter.comap f h₀ h₁ = f
            @[simp]
            theorem Ultrafilter.comap_comap {α : Type u} {β : Type v} {γ : Type u_1} (f : Ultrafilter γ) {m : α → β} {n : β → γ} (inj₀ : Function.Injective n) (large₀ : Set.range n ∈ f) (inj₁ : Function.Injective m) (large₁ : Set.range m ∈ Ultrafilter.comap f inj₀ large₀) (inj₂ : optParam (Function.Injective (n ∘ m)) (_ : Function.Injective (n ∘ m))) (large₂ : optParam (Set.range (n ∘ m) ∈ f) (_ : Set.range (n ∘ m) ∈ f)) :
            Ultrafilter.comap (Ultrafilter.comap f inj₀ large₀) inj₁ large₁ = Ultrafilter.comap f inj₂ large₂

            The principal ultrafilter associated to a point x.

            Equations
            @[simp]
            theorem Ultrafilter.mem_pure {α : Type u} {a : α} {s : Set α} :
            s ∈ pure a ↔ a ∈ s
            @[simp]
            theorem Ultrafilter.coe_pure {α : Type u} (a : α) :
            ↑(pure a) = pure a
            @[simp]
            theorem Ultrafilter.map_pure {α : Type u} {β : Type v} (m : α → β) (a : α) :
            @[simp]
            theorem Ultrafilter.comap_pure {α : Type u} {β : Type v} {m : α → β} (a : α) (inj : Function.Injective m) (large : Set.range m ∈ pure (m a)) :
            Ultrafilter.comap (pure (m a)) inj large = pure a
            Equations
            • Ultrafilter.instInhabitedUltrafilter = { default := pure default }
            theorem Ultrafilter.eq_pure_of_finite_mem {α : Type u} {f : Ultrafilter α} {s : Set α} (h : Set.Finite s) (h' : s ∈ f) :
            ∃ x, x ∈ s ∧ f = pure x
            theorem Ultrafilter.eq_pure_of_finite {α : Type u} [Finite α] (f : Ultrafilter α) :
            ∃ a, f = pure a
            theorem Ultrafilter.le_cofinite_or_eq_pure {α : Type u} (f : Ultrafilter α) :
            ↑f ≤ Filter.cofinite ∨ ∃ a, f = pure a
            def Ultrafilter.bind {α : Type u} {β : Type v} (f : Ultrafilter α) (m : α → Ultrafilter β) :

            Monadic bind for ultrafilters, coming from the one on filters defined in terms of map and join.

            Equations
            Instances For
              Equations
              theorem Ultrafilter.exists_le {α : Type u} (f : Filter α) [h : Filter.NeBot f] :
              ∃ u, ↑u ≤ f

              The ultrafilter lemma: Any proper filter is contained in an ultrafilter.

              theorem Filter.exists_ultrafilter_le {α : Type u} (f : Filter α) [h : Filter.NeBot f] :
              ∃ u, ↑u ≤ f

              Alias of Ultrafilter.exists_le.


              The ultrafilter lemma: Any proper filter is contained in an ultrafilter.

              noncomputable def Ultrafilter.of {α : Type u} (f : Filter α) [Filter.NeBot f] :

              Construct an ultrafilter extending a given filter. The ultrafilter lemma is the assertion that such a filter exists; we use the axiom of choice to pick one.

              Equations
              Instances For
                theorem Ultrafilter.of_le {α : Type u} (f : Filter α) [Filter.NeBot f] :
                theorem Ultrafilter.of_coe {α : Type u} (f : Ultrafilter α) :
                theorem Ultrafilter.exists_ultrafilter_of_finite_inter_nonempty {α : Type u} (S : Set (Set α)) (cond : ∀ (T : Finset (Set α)), ↑T ⊆ S → Set.Nonempty (⋂₀ ↑T)) :
                ∃ F, S ⊆ F.sets
                theorem Filter.isAtom_pure {α : Type u} {a : α} :
                theorem Filter.NeBot.le_pure_iff {α : Type u} {f : Filter α} {a : α} (hf : Filter.NeBot f) :
                f ≤ pure a ↔ f = pure a
                theorem Filter.NeBot.eq_pure_iff {α : Type u} {f : Filter α} (hf : Filter.NeBot f) {x : α} :
                f = pure x ↔ {x} ∈ f
                theorem Filter.atTop_eq_pure_of_isTop {α : Type u} [LinearOrder α] {x : α} (hx : IsTop x) :
                Filter.atTop = pure x
                theorem Filter.atBot_eq_pure_of_isBot {α : Type u} [LinearOrder α] {x : α} (hx : IsBot x) :
                Filter.atBot = pure x
                @[simp]
                theorem Filter.lt_pure_iff {α : Type u} {f : Filter α} {a : α} :
                f < pure a ↔ f = ⊥
                theorem Filter.le_pure_iff' {α : Type u} {f : Filter α} {a : α} :
                f ≤ pure a ↔ f = ⊥ ∨ f = pure a
                @[simp]
                theorem Filter.Iic_pure {α : Type u} (a : α) :
                Set.Iic (pure a) = {⊥, pure a}
                theorem Filter.mem_iff_ultrafilter {α : Type u} {f : Filter α} {s : Set α} :
                s ∈ f ↔ ∀ (g : Ultrafilter α), ↑g ≤ f → s ∈ g
                theorem Filter.le_iff_ultrafilter {α : Type u} {f₁ : Filter α} {f₂ : Filter α} :
                f₁ ≤ f₂ ↔ ∀ (g : Ultrafilter α), ↑g ≤ f₁ → ↑g ≤ f₂
                theorem Filter.iSup_ultrafilter_le_eq {α : Type u} (f : Filter α) :
                ⨆ (g : Ultrafilter α) (_ : ↑g ≤ f), ↑g = f

                A filter equals the intersection of all the ultrafilters which contain it.

                theorem Filter.tendsto_iff_ultrafilter {α : Type u} {β : Type v} (f : α → β) (l₁ : Filter α) (l₂ : Filter β) :
                Filter.Tendsto f l₁ l₂ ↔ ∀ (g : Ultrafilter α), ↑g ≤ l₁ → Filter.Tendsto f (↑g) l₂

                The tendsto relation can be checked on ultrafilters.

                theorem Filter.exists_ultrafilter_iff {α : Type u} {f : Filter α} :
                (∃ u, ↑u ≤ f) ↔ Filter.NeBot f
                theorem Filter.forall_neBot_le_iff {α : Type u} {g : Filter α} {p : Filter α → Prop} (hp : Monotone p) :
                ((f : Filter α) → Filter.NeBot f → f ≤ g → p f) ↔ (f : Ultrafilter α) → ↑f ≤ g → p ↑f
                noncomputable def Filter.hyperfilter (α : Type u) [Infinite α] :

                The ultrafilter extending the cofinite filter.

                Equations
                Instances For
                  theorem Filter.hyperfilter_le_cofinite {α : Type u} [Infinite α] :
                  ↑(Filter.hyperfilter α) ≤ Filter.cofinite
                  theorem Ultrafilter.comap_inf_principal_neBot_of_image_mem {α : Type u} {β : Type v} {m : α → β} {s : Set α} {g : Ultrafilter β} (h : m '' s ∈ g) :
                  noncomputable def Ultrafilter.ofComapInfPrincipal {α : Type u} {β : Type v} {m : α → β} {s : Set α} {g : Ultrafilter β} (h : m '' s ∈ g) :

                  Ultrafilter extending the inf of a comapped ultrafilter and a principal ultrafilter.

                  Equations
                  Instances For
                    theorem Ultrafilter.ofComapInfPrincipal_mem {α : Type u} {β : Type v} {m : α → β} {s : Set α} {g : Ultrafilter β} (h : m '' s ∈ g) :
                    theorem Ultrafilter.ofComapInfPrincipal_eq_of_map {α : Type u} {β : Type v} {m : α → β} {s : Set α} {g : Ultrafilter β} (h : m '' s ∈ g) :