Returns the symmetric difference of two objects inheriting from class Set.

setsymdiff(x, y, simplify = TRUE)

x %-% y

## Arguments

x, y Set logical, if TRUE (default) returns the result in its simplest form, usually a Set or UnionSet, otherwise a ComplementSet.

## Value

An object inheriting from Set containing the symmetric difference of elements in both x and y.

## Details

The symmetric difference, aka disjunctive union, of two sets, $$X, Y$$, is defined as the set of elements that exist in set $$X$$ or in $$Y$$ but not both, $$\{z : (z \epsilon X \cup z \epsilon Y) \\ \cap \\ \neg(z \epsilon X \cap z \epsilon Y)\}$$

The symmetric difference can also be expressed as the union of two sets minus the intersection. Therefore setsymdiff is written as a thin wrapper over these operations, so for two sets, A,B:
A %-% B = (A | B) - (A & B).

The symmetric difference of fuzzy and crisp sets first coerces fuzzy sets to crisp sets by finding their support.

Other operators: powerset(), setcomplement(), setintersect(), setpower(), setproduct(), setunion()

## Examples

# symmetrical difference compared to union and intersection
Set$new(1, 2, 3) %-% Set$new(3, 4)
#> {1, 2, 4} (Set$new(1, 2, 3) | Set$new(3, 4)) - (Set$new(1, 2, 3) & Set$new(3, 4))
#> {1, 2, 4}
# ConditionalSets demonstrate the internal logic
ConditionalSet$new(function(x) x > 0) %-% ConditionalSet$new(function(y) y == 0)
#> isSubset is currently undefined for conditional sets.#> isSubset is currently undefined for conditional sets.#> {(x > 0 | y == 0) & !(x > 0 & y == 0) : x ∈ V, y ∈ V}