# 9.53 MultiSetΒΆ

The domain Multiset(R) is similar to Set(R) except that multiplicities (counts of duplications) are maintained and displayed. Use the operation multisetmultisetMultiset to create multisets from lists. All the standard operations from sets are available for multisets. An element with multiplicity greater than one has the multiplicity displayed first, then a colon, and then the element.

Create a multiset of integers.

```
s := multiset [1,2,3,4,5,4,3,2,3,4,5,6,7,4,10]
```

{7,2:5,3:3,1,10,6,4:4,2:2} |

_{Type: Multiset PositiveInteger}

The operation insert! adds an element to a multiset.

```
insert!(3,s)
```

{7,2:5,4:3,1,10,6,4:4,2:2} |

_{Type: Multiset PositiveInteger}

Use remove! to remove an element. If a third argument is present, it specifies how many instances to remove. Otherwise all instances of the element are removed. Display the resulting multiset.

```
remove!(3,s,1); s
```

{7,2:5,3:3,1,10,6,4:4,2:2} |

_{Type: Multiset PositiveInteger}

```
remove!(5,s); s
```

{7,3:3,1,10,6,4:4,2:2} |

_{Type: Multiset PositiveInteger}

The operation count returns the number of copies of a given value.

```
count(5,s)
```

0 |

_{Type: NonNegativeInteger}

A second multiset.

```
t := multiset [2,2,2,-9]
```

{-9,3:2} |

_{Type: Multiset Integer}

The union of two multisets is additive.

```
U := union(s,t)
```

{7,3:3,1,-9,10,6,4:4,5:2} |

_{Type: Multiset Integer}

The intersect operation gives the elements that are in common, with additive multiplicity.

```
I := intersect(s,t)
```

{5:2} |

_{Type: Multiset Integer}

The difference of s and t consists of the elements that s has but t does not. Elements are regarded as indistinguishable, so that if s and t have any element in common, the difference does not contain that element.

```
difference(s,t)
```

{7,3:3,1,10,6,4:4} |

_{Type: Multiset Integer}

The symmetricDifference is the union of difference(s, t) and difference(t, s).

```
S := symmetricDifference(s,t)
```

{7,3:3,1,-9,10,6,4:4} |

_{Type: Multiset Integer}

Check that the union of the symmetricDifference and the intersect equals the union of the elements.

```
(U = union(S,I))@Boolean
```

true |

_{Type: Boolean}

Check some inclusion relations.

```
t1 := multiset [1,2,2,3]; [t1 < t, t1 < s, t < s, t1 <= s]
```

[false,true,false,true] |

_{Type: List Boolean}