Associative Set Operations

This README describes some initial support for set operations on associative domains. It is expected that the features described here will be included in a future version of the language specification.

Associative Domain Set Operations

The following set functions/operations are supported by associative domains. In the following code examples, A, B, and C are associative domains. For every operator, an op= variant exists. For these op= functions, LHS op= RHS, the LHS argument is modified in-place using the same rules as the normal operator function.

isSubset

proc isSubset(super : domain) : bool;

A.isSubset(B);

This statement will return true if A is a subset of B. A is a subset of B if every index in A is also present in B.

isSuper

proc isSuper(sub : domain) : bool;

A.isSuper(B);

This statement will return true if B is a subset of A.

Union

C = A + B;
C = A | B;

C will be a new associative domain which contains every index in A and every index in B.

The op= variants are:

A |= B;
A += B;

Difference

C = A - B;

C will contain the indices in A that are not also in B.

The op= variant is:

A -= B;

Any indices in both A and B will be removed from A.

Intersection

C = A & B;

C will contain the indices in A that are also in B.

The op= variant is:

A &= B;

Symmetric Difference

C = A ^ B;

C will contain the indices that are unique to A and unique to B. Another way of writing this statement is:

C = (A + B) - (A & B)

The op= variant is:

A ^= B;