.gitignore
[prop.git] / tools / misc / bugfix3.pcc
blob17d3d32e95c06e58354469a93f86992adbe7b390
1 //
2 //  Testing the rewriting features
3 //
4 #include <iostream.h>
6 datatype EXP = num (int)
7              | add (EXP, EXP)
8              | sub (EXP, EXP)
9              | mul (EXP, EXP)
10              | div (EXP, EXP)
11              ;
13 rewrite class Simplify( EXP ) {};
16 rewrite Simplify {
17    case add (num 0, x):     x;
18    case add (x, num 0):     x; 
19    case sub (x, num 0):     x; 
20    case mul (x, num 0):     num(0); 
21    case mul (num 0, x):     num(0); 
22    case mul (x, num 1):     x;
23    case mul (num 1, x):     x;
24    case mul (x, num 2):     add(x,x);
25    case mul (num 2, x):     add(x,x);
26    case div (x, num 1):     x; 
27    case add (num x, num y): num(x + y);
28    case sub (num x, num y): num(x - y);
29    case mul (num x, num y): num(x * y);
30    case div (num x, num y): num(x / y);
33 datatype NAT = zero
34              | succ (NAT)
35              ;
37 rewrite class Number (NAT, EXP)
38 {  
41 rewrite Number {
42    case zero:
43    case succ(zero): 
44    case succ(succ(X)): 
45    case succ(succ(zero)):
46    case succ(succ(succ(succ(X)))): 
47    case add (num x, num y): num(x + y);
48    case sub (num x, num y): num(x - y);
49    case mul (num x, num y): num(x * y);
50    case div (num x, num y): num(x / y);