Zulip Chat Archive

Stream: maths

Topic: generate filter


Kenny Lau (Apr 28 2018 at 04:50):

def generate {α : Type u} (s :set (set α)) : filter α :=
{ sets := { A |  t  s, ⋂₀ t  A },
  univ := , set.empty_subset s, @set.sInter_empty α  set.subset.refl _⟩,
  up   := λ x t, ht1, ht2 y H2, t, ht1, set.subset.trans ht2 H2,
  down := λ x t, ht1, ht2 y u, hu1, hu2, x  y,
      t  u, set.union_subset ht1 hu1, (set.sInter_union t u).symm 
        set.subset_inter
          (set.subset.trans (set.inter_subset_left _ _) ht2)
          (set.subset.trans (set.inter_subset_right _ _) hu2),
    set.inter_subset_left _ _, set.inter_subset_right _ _⟩ }

Kenny Lau (Apr 28 2018 at 04:50):

in mathlib it's done by taking the infimum of the principal filters lol

Kenny Lau (Apr 28 2018 at 04:55):

aha, that's the wrong definition

Reid Barton (Apr 28 2018 at 04:56):

Those mathlib-style definitions are actually quite convenient because you can immediately use them with lemmas like vmap_infi, vmap_principal, etc.

Kenny Lau (Apr 28 2018 at 05:17):

/-- The filter generated by a set of sets. -/
def generate (s :set (set α)) : filter α :=
{ sets  := { A |  t  s, set.finite t  ⋂₀ t  A },
  univ  := , set.empty_subset s, set.finite_empty, @set.sInter_empty α  set.subset.refl _⟩,
  up    := λ x t, ht1, ht2, ht3 y H2, t, ht1, ht2, set.subset.trans ht3 H2,
  inter := λ x t, ht1, ht2, ht3 y u, hu1, hu2, hu3,
    t  u, set.union_subset ht1 hu1, set.finite_union ht2 hu2,
    (set.sInter_union t u).symm  set.subset_inter
      (set.subset.trans (set.inter_subset_left _ _) ht3)
      (set.subset.trans (set.inter_subset_right _ _) hu3) }

/-- The filter generated contains the original sets. -/
theorem generate.subset (s :set (set α)) : s  (generate s).sets :=
λ A HA, {A}, set.singleton_subset_iff.2 HA, set.finite_singleton A,
  (set.sInter_singleton A).symm  set.subset.refl A

/-- The filter generated is the smallest filter containing the original sets. -/
theorem generate.min (s :set (set α)) {f : filter α} (H : s  f.sets) :
  (generate s).sets  f.sets :=
λ A t, ht1, ht2, ht3, (set.finite.induction_on ht2
  (λ A _ HA, have H1 : A = set.univ,
    from set.eq_univ_of_univ_subset $ @set.sInter_empty α  HA,
    H1.symm  f.univ)
  (λ B t _ _ ih A ht1 ht3, f.up (⋂₀ insert B t)
    ((set.sInter_insert B t).symm 
      f.inter B (H $ ht1 $ set.mem_insert _ _)
      (⋂₀ t) (ih _ (set.insert_subset.1 ht1).2 (set.subset.refl _))) _ ht3)) A ht1 ht3

/-- The filter generated by one element. -/
def principal {α : Type u} (s : set α) : filter α :=
generate {s}

Kenny Lau (Apr 28 2018 at 05:18):

that's the right definition

Kenny Lau (Apr 28 2018 at 05:18):

and I learnt how to use set.finite.induction_on :P

Kenny Lau (Apr 28 2018 at 05:19):

@Kevin Buzzard do you think that's enough interface?


Last updated: Dec 20 2023 at 11:08 UTC