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