R: Cartesian Product of Sets

setproduct {set6} | R Documentation

## Cartesian Product of Sets

### Description

Returns the cartesian product of objects inheriting from class `Set`.

### Usage

    setproduct(..., simplify = FALSE, nest = FALSE)

    ## S3 method for class 'Set'
    x * y

### Arguments

`...` | Sets
`simplify` | logical, if `TRUE` returns the result in its simplest (unwrapped) form, usually a `Set` otherwise a `ProductSet`.
`nest` | logical, if `FALSE` (default) then will treat any ProductSets passed to `...` as unwrapped Sets. See details and examples.
`x, y` | Set

### Details

The cartesian product of multiple sets, the 'n-ary Cartesian product', is often implemented in programming languages as being identical to the cartesian product of two sets applied recursively. However, for sets X, Y, Z,

X × Y × Z != (X × Y) × Z

This is accommodated with the `nest` argument. If `nest == TRUE` then X*Y*Z == (X × Y) × Z, i.e. the cartesian product for two sets is applied recursively. If `nest == FALSE` then X*Y*Z == (X × Y × Z) and the n-ary cartesian product is computed. As it appears the latter (n-ary product) is more common, `nest = FALSE` is the default. The N-ary cartesian product of N sets, X1,...,XN, is defined as

X1 × ... × XN = {(x1,...,xN) : x1 ε X1 and ... and xN ε xN}

where (x1,...,xN) is a tuple.

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

### Value

Either an object of class `ProductSet` or an unwrapped object inheriting from `Set`.

### See Also

Other operators: `powerset()`, `setcomplement()`, `setintersect()`, `setpower()`, `setsymdiff()`, `setunion()`

### Examples

    # difference between nesting
    Set$new(1, 2) * Set$new(2, 3) * Set$new(4, 5)
    setproduct(Set$new(1, 2) * Set$new(2, 3), Set$new(4, 5), nest = FALSE) # same as above
    setproduct(Set$new(1, 2) * Set$new(2, 3), Set$new(4, 5), nest = TRUE)
    unnest_set <- setproduct(Set$new(1, 2) * Set$new(2, 3), Set$new(4, 5), nest = FALSE)
    nest_set <- setproduct(Set$new(1, 2) * Set$new(2, 3), Set$new(4, 5), nest = TRUE)
    # note the difference when using contains
    unnest_set$contains(Tuple$new(1, 3, 5))
    nest_set$contains(Tuple$new(Tuple$new(1, 3), 5))

    # product of two sets
    Set$new(-2:4) * Set$new(2:5)
    setproduct(Set$new(1, 4, "a"), Set$new("a", 6))
    setproduct(Set$new(1, 4, "a"), Set$new("a", 6), simplify = TRUE)

    # product of two intervals
    Interval$new(1, 10) * Interval$new(5, 15)
    Interval$new(1, 2, type = "()") * Interval$new(2, 3, type = "(]")
    Interval$new(1, 5, class = "integer") *
      Interval$new(2, 7, class = "integer")

    # product of mixed set types
    Set$new(1:10) * Interval$new(5, 15)
    Set$new(5, 7) * Tuple$new(6, 8, 7)
    FuzzySet$new(1, 0.1) * Set$new(2)

    # product of FuzzySet
    FuzzySet$new(1, 0.1, 2, 0.5) * Set$new(2:5)

    # product of conditional sets
    ConditionalSet$new(function(x, y) x >= y) *
      ConditionalSet$new(function(x, y) x == y)

    # product of special sets
    PosReals$new() * NegReals$new()

[Package set6 version 0.2.1 Index]