setproduct: Cartesian Product of Sets

Description Usage Arguments Details Value See Also Examples

View source: R/operation_setproduct.R

Description

Returns the cartesian product of objects inheriting from class Set.

Usage

1
2
3
4
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 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()

set6 documentation built on Oct. 18, 2021, 5:06 p.m.