[package] [Java implementation] [Execution output]


Interval


// A closed interval, [a .. b], representing the set of values, x, where a <= x <= b.

class Interval<T>: interval(T: a, T: b);

// Arithmetic identities / implementation

                                interval(a, b).contains(x) = (a <= x and x <= b);

                                  stream << interval(a, b) = stream << "[" << a << " .. " << b << "]";

                          interval(a, b) == interval(c, d) = (a == c and b == d);

                           interval(a, b) + interval(c, d) = interval(a + c, b + d);

                                           -interval(a, b) = interval(-b, -a);

                           interval(a, b) * interval(c, d) = interval(min(min(a * c, a * d), min(b * c, b * d)),
                                                                      max(max(a * c, a * d), max(b * c, b * d)));

                                           /interval(a, b) = if interval(a, b).contains(additive_identity)
                                                                then interval(min_value, max_value)
                                                                else interval(/b, /a);

                                         additive_identity = interval(additive_identity, additive_identity);

                                   multiplicative_identity = interval(multiplicative_identity, multiplicative_identity);