### From WeBWorK

# NAME

`Context("InequalitySetBuilder")`

, `Context("InequalitySetBuilder-Only")`

- Provides
contexts that allow sets to be specified using set-builder notation and inequalities.

# DESCRIPTION

Implements contexts that provides for sets described using set-builder
notation with inequalities. (This actually is a special way of
creating Intervals, Sets, and Unions, and they can be used together
with standard interval notation.) There are two such contexts:
`Context("InequalitySetBuilder")`

, in which both intervals and sets
formed by inequalities are defined, and
`Context("InequalitySetBuilder-Only")`

, which allows only set-builder
notation (not intervals or point sets).

# USAGE

loadMacros("contextInequalitySetBuilder.pl"); Context("InequalitySetBuilder"); $S1 = Compute("{ x : 1 < x <= 4 }"); $S2 = SetBuilder("(1,4]"); # force interval to be set in set-builder notation Context("InequalitySetBuilder-Only"); $S1 = Compute("{ x : 1 < x <= 4 }"); $S2 = SetBuilder("(1,4]"); # generates an error $S3 = Compute("{ x : x < -2 or x > 2 }"); # forms the Union (-inf,-2) U (2,inf) $S4 = Compute("{ x : x > 2 and x <= 4 }"); # forms the Interval (2,4] $S5 = Compute("{ x : x = 1 }"); # forms the Set {1} $S6 = Compute("{ x : x != 1 }"); # forms the Union (-inf,1) U (1,inf)

The `InequalitySetBuilder`

contexts accept the flags for the
Inequalities contexts from the `contextInequalities.pl`

file (see its
documentation for details).

Set-builder and interval notation both can coexist side by side, but
you may wish to convert from one to the other. Use `SetBuilder()`

to
convert from an Interval, Set or Union to an Inequality, and use
`Interval()`

to convert from an Inequality object to one in interval
notation. For example:

$I0 = Compute("(1,2]"); # the interval (1,2] $I1 = SetBuilder($I1); # the set { x : 1 < x <= 2 } $I0 = Compute("{ x : 1 < x <= 2 }"); # the set { x : 1 < x <= 2 } $I1 = Interval($I0); # the interval (1,2]

Note that sets and intervals can be compared and combined
regardless of the format, so `$I0 == $I1`

is true in either example
above.

Since SetBuilder objects are actually Interval objects in disguise, the variable used to create them doesn't matter. That is,

$I0 = Compute("{ x : 1 < x <= 2 }"); $I1 = Compute("{ y : 1 < y <= 2 }");

would both produce the same interval, so `$I0 == $I1`

would be true in
this case. If you need to distinguish between these two, use

$I0 == $I1 && $I0->{varName} eq $I1->{varName}

instead.

Note that the "such that" symbol is "`:`

" since the vertical line is
already in use for absolute values. If you wish to use "`|`

" rather
than "`:`

", you can do that, but must then use `abs()`

to obtain
absolute values. To enable the vertical line as "such that", use

InequalitySetBuilder::UseVerticalSuchThat();

prior to setting the context to one of the set-builder contexts. This
will disable "`:`

" and enable "`|`

" as such-that rather than absolute-value.