Documentation

Mathlib.Data.Multiset.AddSub

Sum and difference of multisets #

This file defines the following operations on multisets:

Notation (defined later) #

Additive monoid #

def Multiset.add {α : Type u_1} (s₁ s₂ : Multiset α) :

The sum of two multisets is the lift of the list append operation. This adds the multiplicities of each element, i.e. count a (s + t) = count a s + count a t.

Equations
Instances For
    instance Multiset.instAdd {α : Type u_1} :
    Equations
    @[simp]
    theorem Multiset.coe_add {α : Type u_1} (s t : List α) :
    s + t = ↑(s ++ t)
    @[simp]
    theorem Multiset.singleton_add {α : Type u_1} (a : α) (s : Multiset α) :
    {a} + s = a ::ₘ s
    theorem Multiset.add_le_add_iff_left {α : Type u_1} {s t u : Multiset α} :
    s + t s + u t u
    theorem Multiset.add_le_add_iff_right {α : Type u_1} {s t u : Multiset α} :
    s + u t + u s t
    theorem Multiset.le_of_add_le_add_left {α : Type u_1} {s t u : Multiset α} :
    s + t s + ut u

    Alias of the forward direction of Multiset.add_le_add_iff_left.

    theorem Multiset.add_le_add_left {α : Type u_1} {s t u : Multiset α} :
    t us + t s + u

    Alias of the reverse direction of Multiset.add_le_add_iff_left.

    theorem Multiset.le_of_add_le_add_right {α : Type u_1} {s t u : Multiset α} :
    s + u t + us t

    Alias of the forward direction of Multiset.add_le_add_iff_right.

    theorem Multiset.add_le_add_right {α : Type u_1} {s t u : Multiset α} :
    s ts + u t + u

    Alias of the reverse direction of Multiset.add_le_add_iff_right.

    theorem Multiset.add_comm {α : Type u_1} (s t : Multiset α) :
    s + t = t + s
    theorem Multiset.add_assoc {α : Type u_1} (s t u : Multiset α) :
    s + t + u = s + (t + u)
    @[simp]
    theorem Multiset.zero_add {α : Type u_1} (s : Multiset α) :
    0 + s = s
    @[simp]
    theorem Multiset.add_zero {α : Type u_1} (s : Multiset α) :
    s + 0 = s
    theorem Multiset.le_add_right {α : Type u_1} (s t : Multiset α) :
    s s + t
    theorem Multiset.le_add_left {α : Type u_1} (s t : Multiset α) :
    s t + s
    theorem Multiset.subset_add_left {α : Type u_1} {s t : Multiset α} :
    s s + t
    theorem Multiset.subset_add_right {α : Type u_1} {s t : Multiset α} :
    s t + s
    theorem Multiset.le_iff_exists_add {α : Type u_1} {s t : Multiset α} :
    s t ∃ (u : Multiset α), t = s + u
    @[simp]
    theorem Multiset.cons_add {α : Type u_1} (a : α) (s t : Multiset α) :
    a ::ₘ s + t = a ::ₘ (s + t)
    @[simp]
    theorem Multiset.add_cons {α : Type u_1} (a : α) (s t : Multiset α) :
    s + a ::ₘ t = a ::ₘ (s + t)
    @[simp]
    theorem Multiset.mem_add {α : Type u_1} {a : α} {s t : Multiset α} :
    a s + t a s a t
    @[simp]
    theorem Multiset.countP_add {α : Type u_1} (p : αProp) [DecidablePred p] (s t : Multiset α) :
    countP p (s + t) = countP p s + countP p t
    @[simp]
    theorem Multiset.count_add {α : Type u_1} [DecidableEq α] (a : α) (s t : Multiset α) :
    count a (s + t) = count a s + count a t
    theorem Multiset.add_left_inj {α : Type u_1} {s t u : Multiset α} :
    s + u = t + u s = t
    theorem Multiset.add_right_inj {α : Type u_1} {s t u : Multiset α} :
    s + t = s + u t = u
    @[simp]
    theorem Multiset.card_add {α : Type u_1} (s t : Multiset α) :
    (s + t).card = s.card + t.card

    Erasing one copy of an element #

    def Multiset.erase {α : Type u_1} [DecidableEq α] (s : Multiset α) (a : α) :

    erase s a is the multiset that subtracts 1 from the multiplicity of a.

    Equations
    Instances For
      @[simp]
      theorem Multiset.coe_erase {α : Type u_1} [DecidableEq α] (l : List α) (a : α) :
      (↑l).erase a = (l.erase a)
      @[simp]
      theorem Multiset.erase_zero {α : Type u_1} [DecidableEq α] (a : α) :
      erase 0 a = 0
      @[simp]
      theorem Multiset.erase_cons_head {α : Type u_1} [DecidableEq α] (a : α) (s : Multiset α) :
      (a ::ₘ s).erase a = s
      @[simp]
      theorem Multiset.erase_cons_tail {α : Type u_1} [DecidableEq α] {a b : α} (s : Multiset α) (h : b a) :
      (b ::ₘ s).erase a = b ::ₘ s.erase a
      @[simp]
      theorem Multiset.erase_singleton {α : Type u_1} [DecidableEq α] (a : α) :
      {a}.erase a = 0
      @[simp]
      theorem Multiset.erase_of_not_mem {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      ass.erase a = s
      @[simp]
      theorem Multiset.cons_erase {α : Type u_1} [DecidableEq α] {s : Multiset α} {a : α} :
      a sa ::ₘ s.erase a = s
      theorem Multiset.erase_cons_tail_of_mem {α : Type u_1} [DecidableEq α] {s : Multiset α} {a b : α} (h : a s) :
      (b ::ₘ s).erase a = b ::ₘ s.erase a
      theorem Multiset.le_cons_erase {α : Type u_1} [DecidableEq α] (s : Multiset α) (a : α) :
      s a ::ₘ s.erase a
      theorem Multiset.add_singleton_eq_iff {α : Type u_1} [DecidableEq α] {s t : Multiset α} {a : α} :
      s + {a} = t a t s = t.erase a
      theorem Multiset.erase_add_left_pos {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} (t : Multiset α) :
      a s(s + t).erase a = s.erase a + t
      theorem Multiset.erase_add_right_pos {α : Type u_1} [DecidableEq α] {t : Multiset α} {a : α} (s : Multiset α) (h : a t) :
      (s + t).erase a = s + t.erase a
      theorem Multiset.erase_add_right_neg {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} (t : Multiset α) :
      as(s + t).erase a = s + t.erase a
      theorem Multiset.erase_add_left_neg {α : Type u_1} [DecidableEq α] {t : Multiset α} {a : α} (s : Multiset α) (h : at) :
      (s + t).erase a = s.erase a + t
      theorem Multiset.erase_le {α : Type u_1} [DecidableEq α] (a : α) (s : Multiset α) :
      s.erase a s
      @[simp]
      theorem Multiset.erase_lt {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      s.erase a < s a s
      theorem Multiset.erase_subset {α : Type u_1} [DecidableEq α] (a : α) (s : Multiset α) :
      s.erase a s
      theorem Multiset.mem_erase_of_ne {α : Type u_1} [DecidableEq α] {a b : α} {s : Multiset α} (ab : a b) :
      a s.erase b a s
      theorem Multiset.mem_of_mem_erase {α : Type u_1} [DecidableEq α] {a b : α} {s : Multiset α} :
      a s.erase ba s
      theorem Multiset.erase_comm {α : Type u_1} [DecidableEq α] (s : Multiset α) (a b : α) :
      (s.erase a).erase b = (s.erase b).erase a
      theorem Multiset.erase_le_erase {α : Type u_1} [DecidableEq α] {s t : Multiset α} (a : α) (h : s t) :
      s.erase a t.erase a
      theorem Multiset.erase_le_iff_le_cons {α : Type u_1} [DecidableEq α] {s t : Multiset α} {a : α} :
      s.erase a t s a ::ₘ t
      @[simp]
      theorem Multiset.card_erase_of_mem {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      a s(s.erase a).card = s.card.pred
      @[simp]
      theorem Multiset.card_erase_add_one {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      a s(s.erase a).card + 1 = s.card
      theorem Multiset.card_erase_lt_of_mem {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      a s(s.erase a).card < s.card
      theorem Multiset.card_erase_le {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      (s.erase a).card s.card
      theorem Multiset.card_erase_eq_ite {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      @[simp]
      theorem Multiset.count_erase_self {α : Type u_1} [DecidableEq α] (a : α) (s : Multiset α) :
      count a (s.erase a) = count a s - 1
      @[simp]
      theorem Multiset.count_erase_of_ne {α : Type u_1} [DecidableEq α] {a b : α} (ab : a b) (s : Multiset α) :
      count a (s.erase b) = count a s

      Subtraction #

      def Multiset.sub {α : Type u_1} [DecidableEq α] (s t : Multiset α) :

      s - t is the multiset such that count a (s - t) = count a s - count a t for all a. (note that it is truncated subtraction, so count a (s - t) = 0 if count a s ≤ count a t).

      Equations
      Instances For
        instance Multiset.instSub {α : Type u_1} [DecidableEq α] :
        Equations
        @[simp]
        theorem Multiset.coe_sub {α : Type u_1} [DecidableEq α] (s t : List α) :
        s - t = (s.diff t)
        @[simp]
        theorem Multiset.sub_zero {α : Type u_1} [DecidableEq α] (s : Multiset α) :
        s - 0 = s

        This is a special case of tsub_zero, which should be used instead of this. This is needed to prove OrderedSub (Multiset α).

        @[simp]
        theorem Multiset.sub_cons {α : Type u_1} [DecidableEq α] (a : α) (s t : Multiset α) :
        s - a ::ₘ t = s.erase a - t
        theorem Multiset.zero_sub {α : Type u_1} [DecidableEq α] (t : Multiset α) :
        0 - t = 0
        @[simp]
        theorem Multiset.countP_sub {α : Type u_1} [DecidableEq α] {s t : Multiset α} :
        t s∀ (p : αProp) [inst : DecidablePred p], countP p (s - t) = countP p s - countP p t
        @[simp]
        theorem Multiset.count_sub {α : Type u_1} [DecidableEq α] (a : α) (s t : Multiset α) :
        count a (s - t) = count a s - count a t
        theorem Multiset.sub_le_iff_le_add {α : Type u_1} [DecidableEq α] {s t u : Multiset α} :
        s - t u s u + t

        This is a special case of tsub_le_iff_right, which should be used instead of this. This is needed to prove OrderedSub (Multiset α).

        theorem Multiset.sub_le_iff_le_add' {α : Type u_1} [DecidableEq α] {s t u : Multiset α} :
        s - t u s t + u

        This is a special case of tsub_le_iff_left, which should be used instead of this.

        theorem Multiset.sub_le_self {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
        s - t s
        theorem Multiset.add_sub_assoc {α : Type u_1} [DecidableEq α] {s t u : Multiset α} (hut : u t) :
        s + t - u = s + (t - u)
        theorem Multiset.add_sub_cancel {α : Type u_1} [DecidableEq α] {s t : Multiset α} (hts : t s) :
        s - t + t = s
        theorem Multiset.sub_add_cancel {α : Type u_1} [DecidableEq α] {s t : Multiset α} (hts : t s) :
        s - t + t = s
        theorem Multiset.sub_add_eq_sub_sub {α : Type u_1} [DecidableEq α] {s t u : Multiset α} :
        s - (t + u) = s - t - u
        theorem Multiset.le_sub_add {α : Type u_1} [DecidableEq α] {s t : Multiset α} :
        s s - t + t
        theorem Multiset.le_add_sub {α : Type u_1} [DecidableEq α] {s t : Multiset α} :
        s t + (s - t)
        theorem Multiset.sub_le_sub_right {α : Type u_1} [DecidableEq α] {s t u : Multiset α} (hst : s t) :
        s - u t - u
        theorem Multiset.add_sub_cancel_right {α : Type u_1} [DecidableEq α] {s t : Multiset α} :
        s + t - t = s
        theorem Multiset.eq_sub_of_add_eq {α : Type u_1} [DecidableEq α] {s t u : Multiset α} (hstu : s + t = u) :
        s = u - t
        theorem Multiset.cons_sub_of_le {α : Type u_1} [DecidableEq α] (a : α) {s t : Multiset α} (h : t s) :
        a ::ₘ s - t = a ::ₘ (s - t)
        @[simp]
        theorem Multiset.card_sub {α : Type u_1} [DecidableEq α] {s t : Multiset α} (h : t s) :
        (s - t).card = s.card - t.card
        @[simp]
        theorem Multiset.sub_singleton {α : Type u_1} [DecidableEq α] (a : α) (s : Multiset α) :
        s - {a} = s.erase a
        theorem Multiset.mem_sub {α : Type u_1} [DecidableEq α] {a : α} {s t : Multiset α} :
        a s - t count a t < count a s

        Lift a relation to Multisets #

        theorem Multiset.Rel.add {α : Type u_1} {β : Type v} {r : αβProp} {s : Multiset α} {t : Multiset β} {u : Multiset α} {v : Multiset β} (hst : Rel r s t) (huv : Rel r u v) :
        Rel r (s + u) (t + v)
        theorem Multiset.rel_add_left {α : Type u_1} {β : Type v} {r : αβProp} {as₀ as₁ : Multiset α} {bs : Multiset β} :
        Rel r (as₀ + as₁) bs ∃ (bs₀ : Multiset β) (bs₁ : Multiset β), Rel r as₀ bs₀ Rel r as₁ bs₁ bs = bs₀ + bs₁
        theorem Multiset.rel_add_right {α : Type u_1} {β : Type v} {r : αβProp} {as : Multiset α} {bs₀ bs₁ : Multiset β} :
        Rel r as (bs₀ + bs₁) ∃ (as₀ : Multiset α) (as₁ : Multiset α), Rel r as₀ bs₀ Rel r as₁ bs₁ as = as₀ + as₁
        @[simp]
        theorem Multiset.nodup_singleton {α : Type u_1} (a : α) :
        theorem Multiset.not_nodup_pair {α : Type u_1} (a : α) :
        theorem Multiset.Nodup.erase {α : Type u_1} [DecidableEq α] (a : α) {l : Multiset α} :
        l.Nodup(l.erase a).Nodup
        theorem Multiset.mem_sub_of_nodup {α : Type u_1} [DecidableEq α] {a : α} {s t : Multiset α} (d : s.Nodup) :
        a s - t a s at