tree ← #.exp.reduce tree                    ⍝ Reduce expression tree.

[reduce]  simplifies  an  expression  tree by looking for patterns and replacing
them  with  simpler equivalents according to a set of _rules_ For example, (x+0)
may be reduced to just (x), for any expression x.

[rules] is a vector of trees, whose principal operator is '=' and whose left and
right subtrees are "find" and "replace" patterns, respectively. For example, the
"factoring" rule: (i*x)+(j*x) = (i+j)*x, produces the tree:

           =
       ┌───┴───┐
       +       *
     ┌─┴─┐   ┌─┴┐
     *   *   +  x
    ┌┴┐ ┌┴┐ ┌┴┐
    i x j x i j

For example, the rules from the →#.math← definition vector are:

      load math
      #.exp.(2 show¨rules)
    =        =      =      =       =       =         =         =         =         =        =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =          =        =      =      =       =       =       =          =           =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =            =          =      =      =          =            =            =            =            =              =              =              =          =          =            =            =            =              =              =              =              =              =                =        =      =        =              =             =           =                  =                      =                            =            =              =              =               =
  ┌─┴─┐    ┌─┴┐   ┌─┴┐   ┌─┴┐    ┌─┴┐    ┌─┴─┐    ┌──┴─┐   ┌───┴─┐     ┌─┴┐     ┌──┴┐     ┌─┴─┐        ┌─┴─┐        ┌─┴─┐        ┌─┴─┐        ┌─┴───┐      ┌─┴───┐    ┌───┴───┐    ┌───┴───┐    ┌───┴───┐      ┌─┴───┐      ┌─┴───┐      ┌─┴───┐      ┌─┴───┐      ┌─┴─┐        ┌─┴─┐      ┌───┴───┐    ┌───┴───┐    ┌───┴───┐    ┌───┴───┐    ┌───┴───┐    ┌───┴───┐    ┌─┴─┐    ┌─┴┐   ┌─┴┐   ┌─┴┐    ┌─┴┐    ┌─┴┐    ┌─┴┐      ┌──┴┐      ┌───┴───┐    ┌───┴───┐    ┌───┴───┐    ┌───┴───┐    ┌───┴───┐    ┌───┴───┐      ┌─┴───┐      ┌─┴───┐      ┌─┴─┐      ┌───┴─┐      ┌───┴─┐      ┌───┴───┐    ┌───┴───┐    ┌───┴───┐    ┌───┴─┐        ┌─┴─┐        ┌─┴─┐        ┌─┴─┐        ┌─┴─┐        ┌─┴───┐      ┌─┴───┐    ┌─┴┐   ┌─┴┐   ┌─┴─┐      ┌─┴─┐      ┌───┴─┐      ┌───┴─┐        ┌─┴─┐        ┌─┴─┐        ┌───┴─┐        ┌───┴─┐        ┌───┴─┐      ┌─┴─┐      ┌─┴───┐    ┌───┴───┐      ┌─┴───┐    ┌───┴───┐      ┌───┴─┐        ┌───┴───┐      ┌───┴─┐        ┌───┴───┐      ┌───┴───┐        ┌───┴──┐   ┌─┴┐   ┌─┴┐     ┌─┴───┐        ┌─┴───┐       ┌─┴┐        ┌─┴─────┐          ┌─┴─────┐              ┌─┴───────────┐              ┌─┴───┐      ┌─┴───┐        ┌─┴───┐        ┌─┴────┐        ┌─┴─────┐
  +   +    +  x   -  x   -  -    -  0    +   -    +    -   -     -     -  -     -   x     +   +        -   -        -   +        +   -        +     -      -     -    -       -    -       -    -       +      +     +      -     +      +     -      -     -      +   -        -   -      -       -    -       +    -       -    +       +    +       -    +       +    *   *    *  0   *  x   /  0    *  -    /  1    *  -      *   -      *       *    *       /    /       /    /       *    *       *    /       /      /     /      /     *      /   /      *     *      *     *      /       /    /       /    *       /    /     *        *   *        /   *        *   *        /   /        /     /      *     /    ∧  1   ∧  x   *   ∧      *   ∧      *     ∧      /     ∧        /   ∧        ∧   ∧        /     ∧        *     ∧        /     ∧      +   *      +     *    +       *      -     *    -       *      +     *        +       *      -     *        -       *      *       *        /    tan   ∆  0   ∆  1     ∆     +        ∆     -       ∆  -        ∆       +          ∆       -              ∆             +              ∆     /      ∆     *        ∆     *        ∆      *        ∆       /
 ┌┴┐ ┌┴┐  ┌┴┐    ┌┴┐    ┌┴┐ └┐  ┌┴┐    ┌─┴┐ ┌┴┐  ┌┴┐  ┌┴┐  └─┐  ┌┴┐  ┌─┴┐ └─┐   └┐      ┌─┴┐ ┌┴─┐    ┌─┴┐ ┌┴─┐    ┌─┴┐ ┌┴─┐    ┌─┴┐ ┌┴─┐    ┌─┴┐  ┌─┴┐   ┌─┴┐  ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐   ┌─┴┐  ┌─┴┐   ┌─┴┐  ┌─┴┐   ┌─┴┐  ┌─┴┐   ┌─┴┐  ┌─┴┐   ┌─┴┐ ┌┴─┐    ┌─┴┐ ┌┴─┐   ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴┐ ┌┴┐  ┌┴┐    ┌┴┐    ┌┴┐    ┌─┴┐ └┐  ┌┴┐    ┌─┴┐ └─┐   ┌┴┐  └─┐   ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐   ┌─┴┐  ┌─┴┐   ┌─┴┐  ┌─┴┐   ┌─┴┐ ┌┴─┐   ┌┴─┐  ┌┴─┐   ┌┴─┐  ┌┴─┐   ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐   ┌─┴┐  ┌┴─┐  ┌┴─┐    ┌─┴┐ ┌┴─┐    ┌─┴┐ ┌┴─┐    ┌─┴┐ ┌┴─┐    ┌─┴┐ ┌┴─┐    ┌─┴┐  ┌─┴┐   ┌─┴┐  ┌─┴┐  ┌┴┐    ┌┴┐    ┌┴┐ ┌┴┐   ┌─┴┐ ┌┴─┐   ┌┴─┐  ┌┴─┐   ┌┴─┐  ┌┴─┐    ┌─┴┐ ┌┴─┐    ┌─┴┐ ┌┴─┐    ┌─┴─┐  ┌┴─┐    ┌─┴─┐  ┌┴─┐    ┌─┴─┐  ┌┴─┐   ┌┴┐ ┌┴┐   ┌─┴┐  ┌─┴┐  ┌┴─┐   ┌─┴┐   ┌─┴┐  ┌─┴┐  ┌┴─┐   ┌─┴┐   ┌─┴─┐  ┌┴─┐    ┌─┴─┐   ┌─┴┐   ┌─┴─┐  ┌┴─┐    ┌─┴─┐   ┌─┴┐  ┌──┴──┐ ┌──┴──┐  ┌──┴──┐ └┐   ┌┴┐    ┌┴┐     ┌─┴┐  ┌─┴─┐    ┌─┴┐  ┌─┴─┐   ┌─┴┐ └─┐    ┌─┴┐    ┌─┴─┐      ┌─┴┐    ┌─┴─────┐      ┌─┴┐      ┌─────┴──────┐     ┌─┴┐  ┌─┴┐  ┌──┴┐  ┌─┴──┐  ┌──┴┐  ┌─┴──┐  ┌──┴┐ ┌───┴──┐  ┌──┴┐    ┌─┴───┐
 i x x i  x 0    x 0    0 x  x  x x    -  y y x  x -  x y    -  y x  -  y   +    -      +  j x  +    -  j x  +    +  j x  -    -  j x  -    -  j  +  x   -  j  -  x  i  +   -  x  i  -   +  x  i  -   -  x   +  y  +  i   +  y  -  i   -  y  +  i   -  y  -  i   -  y i  -    -  y i  +   x  +   -  i  x  -   -  i  x  -   +  i  x  +   +  i  x  -   +  i  x  -   -  i  x i i x  0 x    1 x    0 x    ¯1 x  x  x x    -  y   *   x -    *   i  *   *  x  i  /   *  x  i  *   /  x  i  /   /  x  i  /   /  x  i  /   *  x   /  j  /  x   *  j  /  x   /  j x  *   x  *  i  *   x  /  i  /   x  *   /  i  x  /   *  i  x  /   *  i  x  /  i  /    *  y i  *    *  y i  /    /  y i  /    /  y i  *    /  y  /  i   /  y  *  i  x 0    x 1    x x x 2   ∧  x x  +   x  ∧  x  +   x  ∧  x  -    ∧  x x  -    ∧  q x  *    ∧   ∧  x  -    ∧   ∧  p  +    ∧   ∧  p  -   p p 2 p   *  q  +  q  p  *   +  p   *  q  -  q  p  *   -  p   *   *  p  +    *   *   +  r   *   *  p  -    *   *   -  r  cos sin sin cos  sin cos  x   i a    a a     +  a  ∆   ∆    -  a  ∆   ∆   -  a   ∆    *  a    *   *      /  a    /       /      ∧  a      *            *     ln a  ∆  p  exp a  ∆  exp  sin a  ∆  cos  cos a -    sin  tan a    *     ∧
                                       └┐          └┐       ┌┴┐      └┐    ┌┴┐   └┐    ┌┴┐     ┌┴┐  ┌┴┐     ┌┴┐  ┌┴┐     ┌┴┐  ┌┴┐     ┌┴┐  ┌┴┐   ┌┴┐    ┌┴┐   ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐    ┌┴┐   ┌┴┐    ┌┴┐   ┌┴┐    ┌┴┐   ┌┴┐    ┌┴┐   ┌┴┐    ┌┴┐     ┌┴┐  ┌┴┐     ┌┴┐    ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐                                                  └┐    ┌┴┐    └┐  ┌┴┐    ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐    ┌┴┐   ┌┴┐    ┌┴┐   ┌┴┐    ┌┴┐     ┌┴┐    ┌┴┐   ┌┴┐    ┌┴┐   ┌┴┐    ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐ ┌┴┐      ┌┴┐   ┌┴┐  ┌┴┐     ┌┴┐  ┌┴┐     ┌┴┐  ┌┴┐     ┌┴┐  ┌┴┐     ┌┴┐  ┌┴┐   ┌┴┐    ┌┴┐   ┌┴┐                           ┌┴┐     ┌┴┐    ┌┴┐   ┌┴┐    ┌┴┐   ┌┴┐  ┌┴┐     ┌┴┐  ┌┴┐     ┌┴┐  ┌┴┐ ┌┴┐   ┌┴┐  ┌┴┐ ┌┴┐   ┌┴┐  ┌┴┐ ┌┴┐   ┌┴┐           ┌┴┐   ┌┴┐      ┌┴┐ ┌┴┐    ┌┴┐   ┌┴┐      ┌┴┐ ┌┴┐    ┌┴┐ ┌┴┐   ┌┴┐  ┌┴┐ ┌┴┐ ┌┴┐    ┌┴┐ ┌┴┐   ┌┴┐  ┌┴┐ ┌┴┐ ┌┴┐    └┐  └┐  └┐  └┐   └┐  └┐                     ┌┴┐   ┌┴┐ ┌┴┐  ┌┴┐   ┌┴┐ ┌┴┐  └┐    ┌┴┐  ┌┴┐    ┌─┴┐ ┌┴─┐   ┌┴┐    ┌─┴┐  ┌───┴─┐   ┌┴┐      ┌─┴─┐       ┌──┴─┐   └┐   ┌┴┐    └┐    ┌┴┐ └┐   └┐    ┌┴┐ └┐   └┐    └─┐  └┐   └┐     ┌─┴┐ ┌──┴┐
                                        x           y       x y       x    x y    x    x i     i j  x i     i j  x i     i j  x i     i j  i x   i j    i x   i j      x j i j      x j i j      j x i j    x i   x y    x i   x y    x i   x y    x i   x y    i x     x y  i x     x y    y i x y      y i x y      i y x y      y i x y      y i x y      i y x y                                                   x    x y     y  x y    j x i j      j x i j      j x i j      j x i j      x j i j      x j i j    i x   i j    i x   i j    x i     i j    i y   x y    i y   x y    i y x y      i y x y      y i x y      y i   x y  i x     x y  i x     x y  i x     y x  i x     x y  x i   x y    x i   x y                           x p     p 1    x p   p 1    x p   1 p  x p     p 1  x p     p q  x p x q   p q  p q p r   q r  p q p r   q r           p q   p 1      q p q 1    p q   p 1      q p 1 q    p q p r   q r  p r q r p q    p q p r   q r  q r q r p q     q   p   p   q    x   x                     p q   p a q a  p q   p a q a   p    p a  p q    ∆  q p  ∆   p q    ∆  q  *     ∧   p q      *   ∧       *    ∧    p   p a     p    p a  p    p    p a  p    p      ∆   p    p     ∆  1 cos 2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ┌┴┐     ┌┴┐        ┌┴┐   ┌┴─┐  ┌┴┐         ┌─┴┐ ┌┴─┐   ┌─┴─┐ ┌┴┐                                                   ┌┴┐            ┌┴┐   └┐
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      p a     q a        p a   p  ∆  q 2         ∆  q p  -   ∆  ln p q                                                   p a            p a    p
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ┌┴┐            ┌┴┐     ┌┴┐ ┌┴┐ └┐
Within  the trees, variables i, j, k stand for (and match) literal numbers 0, 2,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 q a            p a     q 1 q a  p
¯3.4,  ···; ¯i, ¯j, ¯k match any _negative_ literal numbers ¯2, ¯4.5, ···; x, y,
z stand for arbitrary expressions, not including literal numbers; and p, q, r, s
and t stand for any values. See →Expression_simplification←.

As  an  example, the first reduction tree above (i+x=x+i) reverses sums to put a
literal  constant  on  the right. In this way, literals are collected and may be
evaluated: 2+x+3 => x+2+3 => x+5. "Metavariables" a, b, c are used by the deriv-
ative reductions to represent expression variables x, y, z.

Technical note:

The  reduction  rules  in  the  source vector attempt to bring together constant
terms,  so  that they may be evaluated. By convention, constant terms are placed
to the left of '*' and to the right of '+'. For example:

    5+4*x*3+2
    ¯¯     ¯¯
→   4*x*3+5+2
          ¯¯¯
→   4*x*3+7
    ¯¯¯¯¯
→   4*3*x+7
    ¯¯¯
→   12*x+7

[reduce] is an example of a "term rewriting system", a subject on which there is
a large and growing technical literature.  See →Differentiation←  for an example
of the challenges that such systems face.

Examples:

      math script until'→'

    1+x+2                   ⍝ constants collected to the right.
x+3

    (x-y)∧(3-2)             ⍝ x∧1 => x
x-y

    (2*x)+(x*3)             ⍝ * factoring
5*x

    x∧2*x∧3                 ⍝ ∧ factoring
x∧5

    →

See also: →Expression_simplification←
Back to:  →Implementation_Details