1(* ========================================================================= *) 2(* NORMALIZING ALGEBRAIC EXPRESSIONS *) 3(* Copyright (c) 2006 Joe Hurd, distributed under the GNU GPL version 2 *) 4(* ========================================================================= *) 5 6signature Algebra = 7sig 8 9(* ------------------------------------------------------------------------- *) 10(* A type of algebraic expressions. *) 11(* ------------------------------------------------------------------------- *) 12 13datatype expression = 14 Var of string 15 | Sum of (expression,int) Map.map 16 | Prod of (expression,int) Map.map 17 18val compare : expression * expression -> order 19 20val equal : expression -> expression -> bool 21 22val fromInt : int -> expression 23 24val toInt : expression -> int option 25 26val negate : expression -> expression 27 28val add : expression * expression -> expression 29 30val subtract : expression * expression -> expression 31 32val multiply : expression * expression -> expression 33 34val power : expression * int -> expression 35 36val toString : expression -> string 37 38val pp : ppstream -> expression -> unit 39 40(* ------------------------------------------------------------------------- *) 41(* Normalization with a set of equations. *) 42(* ------------------------------------------------------------------------- *) 43 44val normalize : 45 {equations : (expression * expression) list} -> expression -> expression 46 47end 48