Documentation

Mathlib.Data.Multiset.FinsetOps

Preparations for defining operations on Finset. #

The operations here ignore multiplicities, and prepare for defining the corresponding operations on Finset.

finset insert #

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

ndinsert a s is the lift of the list insert operation. This operation does not respect multiplicities, unlike cons, but it is suitable as an insert operation on Finset.

Equations
    Instances For
      @[simp]
      theorem Multiset.coe_ndinsert {α : Type u_1} [DecidableEq α] (a : α) (l : List α) :
      ndinsert a l = (insert a l)
      @[simp]
      theorem Multiset.ndinsert_zero {α : Type u_1} [DecidableEq α] (a : α) :
      @[simp]
      theorem Multiset.ndinsert_of_mem {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      a sndinsert a s = s
      @[simp]
      theorem Multiset.ndinsert_of_notMem {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      asndinsert a s = a ::ₘ s
      @[deprecated Multiset.ndinsert_of_notMem (since := "2025-05-23")]
      theorem Multiset.ndinsert_of_not_mem {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      asndinsert a s = a ::ₘ s

      Alias of Multiset.ndinsert_of_notMem.

      @[simp]
      theorem Multiset.mem_ndinsert {α : Type u_1} [DecidableEq α] {a b : α} {s : Multiset α} :
      a ndinsert b s a = b a s
      @[simp]
      theorem Multiset.le_ndinsert_self {α : Type u_1} [DecidableEq α] (a : α) (s : Multiset α) :
      theorem Multiset.mem_ndinsert_self {α : Type u_1} [DecidableEq α] (a : α) (s : Multiset α) :
      theorem Multiset.mem_ndinsert_of_mem {α : Type u_1} [DecidableEq α] {a b : α} {s : Multiset α} (h : a s) :
      theorem Multiset.length_ndinsert_of_mem {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} (h : a s) :
      theorem Multiset.length_ndinsert_of_notMem {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} (h : as) :
      (ndinsert a s).card = s.card + 1
      @[deprecated Multiset.length_ndinsert_of_notMem (since := "2025-05-23")]
      theorem Multiset.length_ndinsert_of_not_mem {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} (h : as) :
      (ndinsert a s).card = s.card + 1

      Alias of Multiset.length_ndinsert_of_notMem.

      theorem Multiset.dedup_cons {α : Type u_1} [DecidableEq α] {a : α} {s : Multiset α} :
      theorem Multiset.Nodup.ndinsert {α : Type u_1} [DecidableEq α] {s : Multiset α} (a : α) :
      theorem Multiset.ndinsert_le {α : Type u_1} [DecidableEq α] {a : α} {s t : Multiset α} :
      ndinsert a s t s t a t
      theorem Multiset.attach_ndinsert {α : Type u_1} [DecidableEq α] (a : α) (s : Multiset α) :
      (ndinsert a s).attach = ndinsert a, (map (fun (p : { x : α // x s }) => p, ) s.attach)
      @[simp]
      theorem Multiset.disjoint_ndinsert_left {α : Type u_1} [DecidableEq α] {a : α} {s t : Multiset α} :
      Disjoint (ndinsert a s) t at Disjoint s t
      @[simp]
      theorem Multiset.disjoint_ndinsert_right {α : Type u_1} [DecidableEq α] {a : α} {s t : Multiset α} :
      Disjoint s (ndinsert a t) as Disjoint s t

      finset union #

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

      ndunion s t is the lift of the list union operation. This operation does not respect multiplicities, unlike s ∪ t, but it is suitable as a union operation on Finset. (s ∪ t would also work as a union operation on finset, but this is more efficient.)

      Equations
        Instances For
          @[simp]
          theorem Multiset.coe_ndunion {α : Type u_1} [DecidableEq α] (l₁ l₂ : List α) :
          (↑l₁).ndunion l₂ = ↑(l₁ l₂)
          theorem Multiset.zero_ndunion {α : Type u_1} [DecidableEq α] (s : Multiset α) :
          ndunion 0 s = s
          @[simp]
          theorem Multiset.cons_ndunion {α : Type u_1} [DecidableEq α] (s t : Multiset α) (a : α) :
          (a ::ₘ s).ndunion t = ndinsert a (s.ndunion t)
          @[simp]
          theorem Multiset.mem_ndunion {α : Type u_1} [DecidableEq α] {s t : Multiset α} {a : α} :
          a s.ndunion t a s a t
          theorem Multiset.le_ndunion_right {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
          t s.ndunion t
          theorem Multiset.subset_ndunion_right {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
          t s.ndunion t
          theorem Multiset.ndunion_le_add {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
          s.ndunion t s + t
          theorem Multiset.ndunion_le {α : Type u_1} [DecidableEq α] {s t u : Multiset α} :
          s.ndunion t u s u t u
          theorem Multiset.subset_ndunion_left {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
          s s.ndunion t
          theorem Multiset.le_ndunion_left {α : Type u_1} [DecidableEq α] {s : Multiset α} (t : Multiset α) (d : s.Nodup) :
          s s.ndunion t
          theorem Multiset.ndunion_le_union {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
          s.ndunion t s t
          theorem Multiset.Nodup.ndunion {α : Type u_1} [DecidableEq α] (s : Multiset α) {t : Multiset α} :
          t.Nodup(s.ndunion t).Nodup
          @[simp]
          theorem Multiset.ndunion_eq_union {α : Type u_1} [DecidableEq α] {s t : Multiset α} (d : s.Nodup) :
          s.ndunion t = s t
          theorem Multiset.dedup_add {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
          (s + t).dedup = s.ndunion t.dedup
          theorem Multiset.Disjoint.ndunion_eq {α : Type u_1} [DecidableEq α] {s t : Multiset α} (h : Disjoint s t) :
          s.ndunion t = s.dedup + t
          theorem Multiset.Subset.ndunion_eq_right {α : Type u_1} [DecidableEq α] {s t : Multiset α} (h : s t) :
          s.ndunion t = t

          finset inter #

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

          ndinter s t is the lift of the list operation. This operation does not respect multiplicities, unlike s ∩ t, but it is suitable as an intersection operation on Finset. (s ∩ t would also work as an intersection operation on finset, but this is more efficient.)

          Equations
            Instances For
              @[simp]
              theorem Multiset.coe_ndinter {α : Type u_1} [DecidableEq α] (l₁ l₂ : List α) :
              (↑l₁).ndinter l₂ = ↑(l₁ l₂)
              @[simp]
              theorem Multiset.zero_ndinter {α : Type u_1} [DecidableEq α] (s : Multiset α) :
              ndinter 0 s = 0
              @[simp]
              theorem Multiset.cons_ndinter_of_mem {α : Type u_1} [DecidableEq α] {a : α} (s : Multiset α) {t : Multiset α} (h : a t) :
              (a ::ₘ s).ndinter t = a ::ₘ s.ndinter t
              @[simp]
              theorem Multiset.ndinter_cons_of_notMem {α : Type u_1} [DecidableEq α] {a : α} (s : Multiset α) {t : Multiset α} (h : at) :
              (a ::ₘ s).ndinter t = s.ndinter t
              @[deprecated Multiset.ndinter_cons_of_notMem (since := "2025-05-23")]
              theorem Multiset.ndinter_cons_of_not_mem {α : Type u_1} [DecidableEq α] {a : α} (s : Multiset α) {t : Multiset α} (h : at) :
              (a ::ₘ s).ndinter t = s.ndinter t

              Alias of Multiset.ndinter_cons_of_notMem.

              @[simp]
              theorem Multiset.mem_ndinter {α : Type u_1} [DecidableEq α] {s t : Multiset α} {a : α} :
              a s.ndinter t a s a t
              theorem Multiset.Nodup.ndinter {α : Type u_1} [DecidableEq α] {s : Multiset α} (t : Multiset α) :
              s.Nodup(s.ndinter t).Nodup
              theorem Multiset.le_ndinter {α : Type u_1} [DecidableEq α] {s t u : Multiset α} :
              s t.ndinter u s t s u
              theorem Multiset.ndinter_le_left {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
              s.ndinter t s
              theorem Multiset.ndinter_subset_left {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
              s.ndinter t s
              theorem Multiset.ndinter_subset_right {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
              s.ndinter t t
              theorem Multiset.ndinter_le_right {α : Type u_1} [DecidableEq α] {s : Multiset α} (t : Multiset α) (d : s.Nodup) :
              s.ndinter t t
              theorem Multiset.inter_le_ndinter {α : Type u_1} [DecidableEq α] (s t : Multiset α) :
              s t s.ndinter t
              @[simp]
              theorem Multiset.ndinter_eq_inter {α : Type u_1} [DecidableEq α] {s t : Multiset α} (d : s.Nodup) :
              s.ndinter t = s t
              @[simp]
              theorem Multiset.Nodup.inter {α : Type u_1} [DecidableEq α] {s : Multiset α} (t : Multiset α) (d : s.Nodup) :
              (s t).Nodup
              theorem Multiset.Disjoint.ndinter_eq_zero {α : Type u_1} [DecidableEq α] {s t : Multiset α} :
              Disjoint s ts.ndinter t = 0

              Alias of the reverse direction of Multiset.ndinter_eq_zero_iff_disjoint.

              theorem Multiset.Subset.ndinter_eq_left {α : Type u_1} [DecidableEq α] {s t : Multiset α} (h : s t) :
              s.ndinter t = s