]>
Book Contents Previous Section 9.70 SegmentBinding Next Section 9.72 SingleInteger Book Index

## 9.71 Set

The Set domain allows one to represent explicit finite sets of values. These are similar to lists, but duplicate elements are not allowed.

Sets can be created by giving a fixed set of values ...

s := set [x**2-1, y**2-1, z**2-1]

{x 2-1,y 2-1,z 2-1}

Type: Set Polynomial Integer

or by using a collect form, just as for lists. In either case, the set is formed from a finite collection of values.

t := set [x**i - i+1 for i in 2..10 | prime? i]

{x 2-1,x 3-2,x 5-4,x 7-6}

Type: Set Polynomial Integer

The basic operations on sets are intersect intersect Set, union union Set, difference difference Set, and symmetricDifference symmetricDifference Set.

i := intersect(s,t)

{x 2-1}

Type: Set Polynomial Integer
u := union(s,t)

{x 2-1,x 3-2,x 5-4,x 7-6,y 2-1,z 2-1}

Type: Set Polynomial Integer

The set difference(s,t) contains those members of s which are not in t.

difference(s,t)

{y 2-1,z 2-1}

Type: Set Polynomial Integer

The set symmetricDifference(s,t) contains those elements which are in s or t but not in both.

symmetricDifference(s,t)

{x 3-2,x 5-4,x 7-6,y 2-1,z 2-1}

Type: Set Polynomial Integer

Set membership is tested using the member?member?Set operation.

member?(y, s)

false

Type: Boolean
member?((y+1)*(y-1), s)

true

Type: Boolean

The subset?subset?Set function determines whether one set is a subset of another.

subset?(i, s)

true

Type: Boolean
subset?(u, s)

false

Type: Boolean

When the base type is finite, the absolute complement of a set is defined. This finds the set of all multiplicative generators of PrimeField 11---the integers mod 11.

gs := set [g for i in 1..11 | primitive?(g := i::PF 11)]

{2,6,7,8}

Type: Set PrimeField 11

The following values are not generators.

complement gs

{1,3,4,5,9,10,0}

Type: Set PrimeField 11

Often the members of a set are computed individually; in addition, values can be inserted or removed from a set over the course of a computation.

There are two ways to do this:

a := set [i**2 for i in 1..5]

{1,4,9,16,25}

Type: Set PositiveInteger

One is to view a set as a data structure and to apply updating operations.

insert!(32, a)

{1,4,9,16,25,32}

Type: Set PositiveInteger
remove!(25, a)

{1,4,9,16,32}

Type: Set PositiveInteger
a

{1,4,9,16,32}

Type: Set PositiveInteger

The other way is to view a set as a mathematical entity and to create new sets from old.

b := b0 := set [i**2 for i in 1..5]

{1,4,9,16,25}

Type: Set PositiveInteger
b := union(b, {32})

{1,4,9,16,25,32}

Type: Set PositiveInteger
b := difference(b, {25})

{1,4,9,16,32}

Type: Set PositiveInteger
b0

{1,4,9,16,25}

Type: Set PositiveInteger

For more information about lists, see ListXmpPage .

Book Contents Previous Section 9.70 SegmentBinding Next Section 9.72 SingleInteger Book Index