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. See also: http://en.wikipedia.org/wiki/Computer_algebra_system See also: →reduce← →Differentiation← Back to: →Implementation_Details←