Sat Apr 10 16:21:09 EDT 2010

Computer Algebra System (CAS)

From what I gather, a generic "simplify" method is a collection of
hacks, because there is no generic notion of what "simple" actually

Side-stepping that issue, particular transformations are usually
well-defined.  From my own limited experience with static analysis &
abstract interpretation, it seems best to map expressions between
different domains.  From an engineering point of view it is almost
always simpler to split any transformation stap in at least two steps,
and have formal intermediate languages.  For any transformation step:

   * Convert equivalent expressions (L1) to a unique normal form (L2).

   * Express complicated transformations as directed equalities
     (pattern matching functions) on normal forms (L2) to some target
     domain (L3).

   * Optionally, re-embed the target domain (L3) into the original
     (L1) or some other domain.