```Expression Simplification
-------------------------
Expressions may be simplified using reduction rules.

For  example:

The Roman numeral I.I.I.I may be simplified to I.V, using the reductions rule:

I.I.I.I = I.V

or, leading zeros may be removed from a balanced ternary number →bta← using:

0.¯1 = ¯1               ⍝ remove leading 0.
0. 0 =  0
0. 1 =  1

In the above example, we can use a _pattern variable_ to parameterize the values
¯1, 0, 1 and so avoid having to write three equations:

i :: ¯1 0 1             ⍝ i matches ¯1, 0 or 1

0.i = i                 ⍝ remove leading 0.

The set of Roman numerals might be declared:

n :: I V X L C D M      ⍝ single digit numerals.

so that compression of numerals may be defined as:

/n = n          ⍝ compress single digit
/(p∘n) = (/p).n     ⍝ compress multiple digits.

Note that more than one pattern variable may be declared at once:

i j k :: 0 1            ⍝ i, j and k each match 0 or 1.

An  empty set of values means that there is no restriction and the pattern vari-
ables match any expression:

p q r ::                ⍝ p, q and r match any expression.

Some  sets are infinite (or just inconveniently large) and so can't be specified
by enumerating their items. For these we have special primitive types:

←   negative numbers,
→   positive numbers,
⍺   lower case letters a..z,
∊   non-simple expression.

Examples:

i j :: ← 0 →        ⍝ i and j match any literal number.
k   :: ←            ⍝ k matches negative numbers.
l   :: →            ⍝ l matches positive numbers.
m   :: 0 →          ⍝ m matches non-negative numbers.
n   :: I V X        ⍝ n matches values I, V or X.
y z :: ∊            ⍝ y and z match non-simple expressions.
x   :: ∊ x y z      ⍝ x matches expressions and vars x, y and z.
a b :: ⍺            ⍝ a and b match lower case letters a-z.
p q ::              ⍝ p and q match any values.