(#a/#b)!                       = undefined
#a! if #a < 0                  = undefined
#a!                            = #factorial(a)

-#a                            = #negate(a)
#a * #b                        = #product(a, b)
#a + #b                        = #sum(a, b)
#a - #b                        = #difference(a, b)

0 ^ 0                          = undefined 
#a ^ #b                        = #pow(a, b)

#a / 0                         = undefined 
#a / 1                         = a
#a / #a                        = 1
0 / #a                         = 0
#a / (#b/#c)                   = (a*c) / b
(#a/#b) / #c                   = a / (b*c)
(#a/#b) / (#c/#d)              = (a*d) / (b*c)
#a * (#b/#c)                   = (a*b) / c
(#a/#b) * #c                   = (a*c) / b
(#a/#b) * (#c/#d)              = (a*c) / (b*d)
#a + #b/#c                     = (a*c+b) / c
#a/#b + #c                     = (a+b*c) / b
#a/#b + #c/#d                  = (a*d+b*c) / (b*d)
#a - #b/#c                     = (a*c-b) / c
#a/#b - #c                     = (a-b*c) / b
#a/#b - #c/#d                  = (a*d-b*c) / (b*d)

undefined!                     = undefined
-undefined                     = undefined
@e * undefined                 = undefined
@e / undefined                 = undefined
@e + undefined                 = undefined
@e - undefined                 = undefined
@e ^ undefined                 = undefined
undefined * @e                 = undefined
undefined / @e                 = undefined
undefined + @e                 = undefined
undefined - @e                 = undefined
undefined ^ @e                 = undefined

@e / 0                         = undefined
0 / @e                         = 0
@e ^ 1                         = e
1 * @e                         = e

@e + (@f + @g)                 = e + f + g

@e*#a                          = a*e
@e*#a*@f                       = a*e*f

#a?*x^#b + #c?*y^#d if #b < #d = c*y^d + a*x^b
x^#a?{~1} * x^#b?{~1}          = x^(a+b)
#a?{~1}*x^#b + #c?{~1}*x^#b    = (a+c)*x^b