Zulip Chat Archive

Stream: Is there code for X?

Topic: ultrafilter is principal if it contains a finite set


Kyle Miller (Dec 27 2021 at 08:07):

Does this already exist somewhere? and if not, what would be a nice way to prove it?

lemma ultrafilter.eq_principal_of_finite_mem (f : ultrafilter α) (s : set α) (h : s.finite) (h' : s  f) :
   x, (f : filter α) = principal {x} :=
begin
  sorry
end

Kevin Buzzard (Dec 27 2021 at 08:14):

In an ultrafilter, for every subset s of alpha, either s is in or its complement is in. That sounds useful. Is the pullback of an ultrafilter along an injection an ultrafilter again?

Kevin Buzzard (Dec 27 2021 at 08:15):

Maybe you don't want to promote s to a type though

Kyle Miller (Dec 27 2021 at 08:16):

The proof I had in mind (but didn't want to write) was to say there exists a minimal finite set in the ultrafilter, and so long as that finite set has cardinality greater than one, there's a minimal-er one.

Kevin Buzzard (Dec 27 2021 at 08:16):

A consequence of the "t is in or t.compl is in" is that for a finite collection of subsets, either one is in or the intersection of the complements is in

Kevin Buzzard (Dec 27 2021 at 08:17):

And now apply with the elements of your s

Mario Carneiro (Dec 27 2021 at 08:26):

You can do it by finset.induction: prove that if s \in f then there exists x such that {x} \in f. If s \cup {a} \in f, then either {a} \in f (and we are done) or s \in f and apply the IH

Kevin Buzzard (Dec 27 2021 at 08:27):

That's nice, and hopefully the right induction principle is there

Mario Carneiro (Dec 27 2021 at 08:27):

actually docs#finite.induction_on is a bit more convenient here

Mario Carneiro (Dec 27 2021 at 08:33):

Actually, you can do this without induction by using docs#ultrafilter.finite_bUnion_mem_iff and docs#set.bUnion_of_singleton

Mario Carneiro (Dec 27 2021 at 08:39):

you could strengthen the theorem to say \exists x \in s, (f : filter α) = principal {x} too

Oliver Nash (Dec 27 2021 at 09:28):

There should also be a route using docs#function.argmin_on I expect Mario's suggestion will be more efficient but function.argmin_on may allow you to express the proof you had in mind more directly.

Oliver Nash (Dec 27 2021 at 09:29):

I guess it would start something like:

import order.filter.ultrafilter

open filter

variables {α : Type*} (f : ultrafilter α)

lemma ultrafilter.eq_principal_of_finite_mem (s : set α) (h : s.finite) (h' : s  f) :
   x  s, (f : filter α) = principal {x} :=
begin
  let F : set (finset α) := { t | (t : set α)  f },
  have hF : F.nonempty := h.to_finset, by simpa only [set.finite.coe_to_finset, set.mem_set_of_eq]⟩,
  let t := function.argmin_on finset.card nat.lt_wf F hF,
  -- etc.
  sorry
end

Last updated: Dec 20 2023 at 11:08 UTC