Documentation

Mathlib.Data.Finset.Empty

Empty and nonempty finite sets #

This file defines the empty finite set āˆ… and a predicate for nonempty Finsets.

Main declarations #

Tags #

finite sets, finset

Nonempty #

def Finset.Nonempty {α : Type u_1} (s : Finset α) :

The property s.Nonempty expresses the fact that the finset s is not empty. It should be used in theorem assumptions instead of ∃ x, x ∈ s or s ≠ āˆ… as it gives access to a nice API thanks to the dot notation.

Instances For
    theorem Finset.nonempty_def {α : Type u_1} {s : Finset α} :
    s.Nonempty ↔ ∃ (x : α), x ∈ s
    @[implicit_reducible]
    instance Finset.decidableNonempty {α : Type u_1} {s : Finset α} :
    Decidable s.Nonempty
    @[simp]
    theorem Finset.coe_nonempty {α : Type u_1} {s : Finset α} :
    (↑s).Nonempty ↔ s.Nonempty
    theorem Finset.nonempty_coe_sort {α : Type u_1} {s : Finset α} :
    Nonempty ↄs ↔ s.Nonempty
    theorem Finset.Nonempty.to_set {α : Type u_1} {s : Finset α} :
    s.Nonempty → (↑s).Nonempty

    Alias of the reverse direction of Finset.coe_nonempty.

    theorem Finset.Nonempty.coe_sort {α : Type u_1} {s : Finset α} :
    s.Nonempty → Nonempty ↄs

    Alias of the reverse direction of Finset.nonempty_coe_sort.

    theorem Finset.Nonempty.exists_mem {α : Type u_1} {s : Finset α} (h : s.Nonempty) :
    ∃ (x : α), x ∈ s
    theorem Finset.Nonempty.mono {α : Type u_1} {s t : Finset α} (hst : s āŠ† t) (hs : s.Nonempty) :
    theorem Finset.Nonempty.forall_const {α : Type u_1} {s : Finset α} (h : s.Nonempty) {p : Prop} :
    (āˆ€ x ∈ s, p) ↔ p
    theorem Finset.Nonempty.to_subtype {α : Type u_1} {s : Finset α} :
    s.Nonempty → Nonempty ↄs
    theorem Finset.Nonempty.to_type {α : Type u_1} {s : Finset α} :
    s.Nonempty → Nonempty α

    empty #

    def Finset.empty {α : Type u_1} :
    Finset α

    The empty finset

    Instances For
      @[implicit_reducible]
      instance Finset.instEmptyCollection {α : Type u_1} :
      EmptyCollection (Finset α)
      @[implicit_reducible]
      instance Finset.inhabitedFinset {α : Type u_1} :
      Inhabited (Finset α)
      @[simp]
      theorem Finset.empty_val {α : Type u_1} :
      āˆ….val = 0
      @[simp]
      theorem Finset.notMem_empty {α : Type u_1} (a : α) :
      a āˆ‰ āˆ…
      @[simp]
      theorem Finset.not_nonempty_empty {α : Type u_1} :
      Ā¬āˆ….Nonempty
      @[simp]
      theorem Finset.mk_zero {α : Type u_1} :
      { val := 0, nodup := ⋯ } = āˆ…
      theorem Finset.ne_empty_of_mem {α : Type u_1} {a : α} {s : Finset α} (h : a ∈ s) :
      s ≠ āˆ…
      theorem Finset.Nonempty.ne_empty {α : Type u_1} {s : Finset α} (h : s.Nonempty) :
      s ≠ āˆ…
      @[simp]
      theorem Finset.empty_subset {α : Type u_1} (s : Finset α) :
      āˆ… āŠ† s
      theorem Finset.eq_empty_of_forall_notMem {α : Type u_1} {s : Finset α} (H : āˆ€ (x : α), x āˆ‰ s) :
      s = āˆ…
      theorem Finset.eq_empty_iff_forall_notMem {α : Type u_1} {s : Finset α} :
      s = āˆ… ↔ āˆ€ (x : α), x āˆ‰ s
      @[simp]
      theorem Finset.val_eq_zero {α : Type u_1} {s : Finset α} :
      s.val = 0 ↔ s = āˆ…
      @[simp]
      theorem Finset.subset_empty {α : Type u_1} {s : Finset α} :
      s āŠ† āˆ… ↔ s = āˆ…
      @[simp]
      theorem Finset.not_ssubset_empty {α : Type u_1} (s : Finset α) :
      ¬s āŠ‚ āˆ…
      theorem Finset.nonempty_of_ne_empty {α : Type u_1} {s : Finset α} (h : s ≠ āˆ…) :
      theorem Finset.nonempty_iff_ne_empty {α : Type u_1} {s : Finset α} :
      s.Nonempty ↔ s ≠ āˆ…
      @[simp]
      theorem Finset.not_nonempty_iff_eq_empty {α : Type u_1} {s : Finset α} :
      ¬s.Nonempty ↔ s = āˆ…
      theorem Finset.eq_empty_or_nonempty {α : Type u_1} (s : Finset α) :
      s = āˆ… ∨ s.Nonempty
      @[simp]
      theorem Finset.coe_empty {α : Type u_1} :
      ā†‘āˆ… = āˆ…
      @[simp]
      theorem Finset.coe_eq_empty {α : Type u_1} {s : Finset α} :
      ↑s = āˆ… ↔ s = āˆ…
      @[simp]
      theorem Finset.isEmpty_coe_sort {α : Type u_1} {s : Finset α} :
      IsEmpty ↄs ↔ s = āˆ…
      instance Finset.instIsEmpty {α : Type u_1} :
      IsEmpty ā†„āˆ…
      theorem Finset.eq_empty_of_isEmpty {α : Type u_1} [IsEmpty α] (s : Finset α) :
      s = āˆ…

      A Finset for an empty type is empty.

      @[implicit_reducible]
      instance Finset.instOrderBot {α : Type u_1} :
      @[simp]
      theorem Finset.bot_eq_empty {α : Type u_1} :
      ⊄ = āˆ…
      @[simp]
      theorem Finset.empty_ssubset {α : Type u_1} {s : Finset α} :
      āˆ… āŠ‚ s ↔ s.Nonempty
      theorem Finset.Nonempty.empty_ssubset {α : Type u_1} {s : Finset α} :
      s.Nonempty → āˆ… āŠ‚ s

      Alias of the reverse direction of Finset.empty_ssubset.

      theorem Finset.exists_mem_empty_iff {α : Type u_1} (p : α → Prop) :
      (∃ x ∈ āˆ…, p x) ↔ False
      theorem Finset.forall_mem_empty_iff {α : Type u_1} (p : α → Prop) :
      (āˆ€ x ∈ āˆ…, p x) ↔ True
      def Mathlib.Meta.proveFinsetNonempty {u : Lean.Level} {α : Q(Type u)} (s : Q(Finset «$α»)) :
      Lean.MetaM (Option Q(Ā«$sĀ».Nonempty))

      Attempt to prove that a finset is nonempty using the finsetNonempty aesop rule-set.

      You can add lemmas to the rule-set by tagging them with either:

      • aesop safe apply (rule_sets := [finsetNonempty]) if they are always a good idea to follow or
      • aesop unsafe apply (rule_sets := [finsetNonempty]) if they risk directing the search to a blind alley.

      TODO: should some of the lemmas be aesop safe simp instead?

      Instances For