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

.

setsymdiff(x, y, simplify = TRUE)
x %-% y

## Arguments

x, y |
Set |

simplify |
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.

## See also

## 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}