packages feed

egison-4.1.3: lib/math/normalize.egi

--
--
-- Term Rewriting
--
--

def mathNormalize $x :=
  if isInteger x
    then x
    else if containFunction 'rtu x
          then rewriteRuleForRtu (symbolNormalize x)
          else symbolNormalize x

--
-- rtu (include i and w)
--
def rewriteRuleForRtu := mapPolys rewriteRuleForRtuPoly
  where
    rewriteRuleForRtuPoly := mapPolys rewriteRuleForRtuPoly'
    rewriteRuleForRtuPoly' poly :=
      match poly as mathExpr with
        | $a * #rtu $n ^ #1 * $mr + (loop $i (2, #(n - 1))
                                       (#a * #(rtu n) ^ #i * #mr + ...)
                                       $pr) ->
          rewriteRuleForRtuPoly' (pr +' (-1) *' a *' mr)
        | _ -> poly