src/HOL/Tools/Qelim/generated_cooper.ML
changeset 23689 0410269099dc
parent 23466 886655a150f6
child 23714 49b08f25db29
     1.1 --- a/src/HOL/Tools/Qelim/generated_cooper.ML	Tue Jul 10 09:23:14 2007 +0200
     1.2 +++ b/src/HOL/Tools/Qelim/generated_cooper.ML	Tue Jul 10 09:23:15 2007 +0200
     1.3 @@ -1,1693 +1,2244 @@
     1.4 -structure GeneratedCooper =
     1.5 +(*  Title:      HOL/Tools/Presburger/generated_cooper.ML
     1.6 +    ID:         $Id$
     1.7 +
     1.8 +This file is generated from HOL/ex/Reflected_Presburger.thy.  DO NOT EDIT.
     1.9 +*)
    1.10 +
    1.11 +structure GeneratedCooper = 
    1.12  struct
    1.13 -nonfix oo;
    1.14 -fun nat i = if i < 0 then 0 else i;
    1.15  
    1.16 -val one_def0 : int = (0 + 1);
    1.17 +structure Product_Type = 
    1.18 +struct
    1.19  
    1.20 -datatype num = C of int | Bound of int | CX of int * num | Neg of num
    1.21 -  | Add of num * num | Sub of num * num | Mul of int * num;
    1.22 +fun fst (y, b) = y;
    1.23  
    1.24 -fun snd (a, b) = b;
    1.25 +fun snd (a, y) = y;
    1.26  
    1.27 -fun negateSnd x = (fn (q, r) => (q, ~ r)) x;
    1.28 +end; (*struct Product_Type*)
    1.29  
    1.30 -fun minus_def2 z w = (z + ~ w);
    1.31 +structure Integer = 
    1.32 +struct
    1.33 +
    1.34 +datatype bit = B0 | B1;
    1.35 +
    1.36 +fun suc n = (IntInf.+ (n, (1 : IntInf.int)));
    1.37 +
    1.38 +val zero_nat : IntInf.int = (0 : IntInf.int);
    1.39 +
    1.40 +fun nat k = (if IntInf.< (k, (0 : IntInf.int)) then zero_nat else k);
    1.41  
    1.42  fun adjust b =
    1.43 -  (fn (q, r) =>
    1.44 -    (if (0 <= minus_def2 r b) then (((2 * q) + 1), minus_def2 r b)
    1.45 -      else ((2 * q), r)));
    1.46 +  (fn a as (q, r) =>
    1.47 +    (if IntInf.<= ((0 : IntInf.int), IntInf.- (r, b))
    1.48 +      then (IntInf.+ (IntInf.* ((2 : IntInf.int), q), (1 : IntInf.int)),
    1.49 +             IntInf.- (r, b))
    1.50 +      else (IntInf.* ((2 : IntInf.int), q), r)));
    1.51  
    1.52  fun negDivAlg a b =
    1.53 -    (if ((0 <= (a + b)) orelse (b <= 0)) then (~1, (a + b))
    1.54 -      else adjust b (negDivAlg a (2 * b)));
    1.55 +  (if IntInf.<= ((0 : IntInf.int), IntInf.+ (a, b)) orelse
    1.56 +        IntInf.<= (b, (0 : IntInf.int))
    1.57 +    then ((~1 : IntInf.int), IntInf.+ (a, b))
    1.58 +    else adjust b (negDivAlg a (IntInf.* ((2 : IntInf.int), b))));
    1.59 +
    1.60 +val negateSnd : IntInf.int * IntInf.int -> IntInf.int * IntInf.int =
    1.61 +  (fn a as (q, r) => (q, IntInf.~ r));
    1.62  
    1.63  fun posDivAlg a b =
    1.64 -    (if ((a < b) orelse (b <= 0)) then (0, a)
    1.65 -      else adjust b (posDivAlg a (2 * b)));
    1.66 +  (if IntInf.< (a, b) orelse IntInf.<= (b, (0 : IntInf.int))
    1.67 +    then ((0 : IntInf.int), a)
    1.68 +    else adjust b (posDivAlg a (IntInf.* ((2 : IntInf.int), b))));
    1.69  
    1.70 -fun divAlg x =
    1.71 -  (fn (a, b) =>
    1.72 -    (if (0 <= a)
    1.73 -      then (if (0 <= b) then posDivAlg a b
    1.74 -             else (if (a = 0) then (0, 0)
    1.75 -                    else negateSnd (negDivAlg (~ a) (~ b))))
    1.76 -      else (if (0 < b) then negDivAlg a b
    1.77 -             else negateSnd (posDivAlg (~ a) (~ b)))))
    1.78 -    x;
    1.79 +val divAlg : IntInf.int * IntInf.int -> IntInf.int * IntInf.int =
    1.80 +  (fn a as (aa, b) =>
    1.81 +    (if IntInf.<= ((0 : IntInf.int), aa)
    1.82 +      then (if IntInf.<= ((0 : IntInf.int), b) then posDivAlg aa b
    1.83 +             else (if ((aa : IntInf.int) = (0 : IntInf.int))
    1.84 +                    then ((0 : IntInf.int), (0 : IntInf.int))
    1.85 +                    else negateSnd (negDivAlg (IntInf.~ aa) (IntInf.~ b))))
    1.86 +      else (if IntInf.< ((0 : IntInf.int), b) then negDivAlg aa b
    1.87 +             else negateSnd (posDivAlg (IntInf.~ aa) (IntInf.~ b)))));
    1.88  
    1.89 -fun mod_def1 a b = snd (divAlg (a, b));
    1.90 +fun abs_int i = (if IntInf.< (i, (0 : IntInf.int)) then IntInf.~ i else i);
    1.91  
    1.92 -fun dvd m n = (mod_def1 n m = 0);
    1.93 +fun div_int a b = Product_Type.fst (divAlg (a, b));
    1.94  
    1.95 -fun abs i = (if (i < 0) then ~ i else i);
    1.96 +fun mod_int a b = Product_Type.snd (divAlg (a, b));
    1.97  
    1.98 -fun less_def3 m n = ((m) < (n));
    1.99 +fun dvd_int m n = (((mod_int n m) : IntInf.int) = (0 : IntInf.int));
   1.100  
   1.101 -fun less_eq_def3 m n = Bool.not (less_def3 n m);
   1.102 +fun eq_bit B0 B0 = true
   1.103 +  | eq_bit B1 B1 = true
   1.104 +  | eq_bit B0 B1 = false
   1.105 +  | eq_bit B1 B0 = false;
   1.106  
   1.107 -fun numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (c2, Bound n2), r2)) =
   1.108 -    (if (n1 = n2)
   1.109 -      then let val c = (c1 + c2)
   1.110 -           in (if (c = 0) then numadd (r1, r2)
   1.111 -                else Add (Mul (c, Bound n1), numadd (r1, r2)))
   1.112 +fun int_aux i n =
   1.113 +  (if ((n : IntInf.int) = (0 : IntInf.int)) then i
   1.114 +    else int_aux (IntInf.+ (i, (1 : IntInf.int)))
   1.115 +           (IntInf.- (n, (1 : IntInf.int))));
   1.116 +
   1.117 +end; (*struct Integer*)
   1.118 +
   1.119 +structure Nat = 
   1.120 +struct
   1.121 +
   1.122 +fun div_nat m k = (Product_Type.fst (Integer.divAlg (m, k)));
   1.123 +
   1.124 +fun mod_nat m k = (Product_Type.snd (Integer.divAlg (m, k)));
   1.125 +
   1.126 +end; (*struct Nat*)
   1.127 +
   1.128 +structure GCD = 
   1.129 +struct
   1.130 +
   1.131 +fun gcd (m, n) =
   1.132 +  (if ((n : IntInf.int) = Integer.zero_nat) then m
   1.133 +    else gcd (n, Nat.mod_nat m n));
   1.134 +
   1.135 +val lcm : IntInf.int * IntInf.int -> IntInf.int =
   1.136 +  (fn a as (m, n) => Nat.div_nat (IntInf.* (m, n)) (gcd (m, n)));
   1.137 +
   1.138 +val ilcm : IntInf.int -> IntInf.int -> IntInf.int =
   1.139 +  (fn i => fn j =>
   1.140 +    Integer.int_aux (0 : IntInf.int)
   1.141 +      (lcm (Integer.nat (Integer.abs_int i), Integer.nat (Integer.abs_int j))));
   1.142 +
   1.143 +end; (*struct GCD*)
   1.144 +
   1.145 +structure HOL = 
   1.146 +struct
   1.147 +
   1.148 +type 'a eq = {eq : 'a -> 'a -> bool};
   1.149 +fun eq (A_:'a eq) = #eq A_;
   1.150 +
   1.151 +end; (*struct HOL*)
   1.152 +
   1.153 +structure List = 
   1.154 +struct
   1.155 +
   1.156 +fun map f (x :: xs) = f x :: map f xs
   1.157 +  | map f [] = [];
   1.158 +
   1.159 +fun foldr f (x :: xs) a = f x (foldr f xs a)
   1.160 +  | foldr f [] y = y;
   1.161 +
   1.162 +fun append (x :: xs) ys = x :: append xs ys
   1.163 +  | append [] y = y;
   1.164 +
   1.165 +fun memberl A_ x (y :: ys) = HOL.eq A_ x y orelse memberl A_ x ys
   1.166 +  | memberl A_ x [] = false;
   1.167 +
   1.168 +fun remdups A_ (x :: xs) =
   1.169 +  (if memberl A_ x xs then remdups A_ xs else x :: remdups A_ xs)
   1.170 +  | remdups A_ [] = [];
   1.171 +
   1.172 +fun allpairs f (x :: xs) ys = append (map (f x) ys) (allpairs f xs ys)
   1.173 +  | allpairs f [] ys = [];
   1.174 +
   1.175 +fun size_list (a :: lista) =
   1.176 +  (IntInf.+ ((size_list lista), (Integer.suc Integer.zero_nat)))
   1.177 +  | size_list [] = Integer.zero_nat;
   1.178 +
   1.179 +end; (*struct List*)
   1.180 +
   1.181 +structure Reflected_Presburger = 
   1.182 +struct
   1.183 +
   1.184 +datatype num = C of IntInf.int | Bound of IntInf.int | Cx of IntInf.int * num |
   1.185 +  Neg of num | Add of num * num | Sub of num * num | Mul of IntInf.int * num;
   1.186 +
   1.187 +datatype fm = T | F | Lt of num | Le of num | Gt of num | Ge of num | Eq of num
   1.188 +  | NEq of num | Dvd of IntInf.int * num | NDvd of IntInf.int * num | Nota of fm
   1.189 +  | And of fm * fm | Or of fm * fm | Impa of fm * fm | Iffa of fm * fm | E of fm
   1.190 +  | A of fm | Closed of IntInf.int | NClosed of IntInf.int;
   1.191 +
   1.192 +fun disjuncts (NClosed aq) = [NClosed aq]
   1.193 +  | disjuncts (Closed ap) = [Closed ap]
   1.194 +  | disjuncts (A ao) = [A ao]
   1.195 +  | disjuncts (E an) = [E an]
   1.196 +  | disjuncts (Iffa (al, am)) = [Iffa (al, am)]
   1.197 +  | disjuncts (Impa (aj, ak)) = [Impa (aj, ak)]
   1.198 +  | disjuncts (And (af, ag)) = [And (af, ag)]
   1.199 +  | disjuncts (Nota ae) = [Nota ae]
   1.200 +  | disjuncts (NDvd (ac, ad)) = [NDvd (ac, ad)]
   1.201 +  | disjuncts (Dvd (aa, ab)) = [Dvd (aa, ab)]
   1.202 +  | disjuncts (NEq z) = [NEq z]
   1.203 +  | disjuncts (Eq y) = [Eq y]
   1.204 +  | disjuncts (Ge x) = [Ge x]
   1.205 +  | disjuncts (Gt w) = [Gt w]
   1.206 +  | disjuncts (Le v) = [Le v]
   1.207 +  | disjuncts (Lt u) = [Lt u]
   1.208 +  | disjuncts T = [T]
   1.209 +  | disjuncts F = []
   1.210 +  | disjuncts (Or (p, q)) = List.append (disjuncts p) (disjuncts q);
   1.211 +
   1.212 +fun eq_num (C int) (C int') = ((int : IntInf.int) = int')
   1.213 +  | eq_num (Bound nat) (Bound nat') = ((nat : IntInf.int) = nat')
   1.214 +  | eq_num (Cx (int, num)) (Cx (int', num')) =
   1.215 +    ((int : IntInf.int) = int') andalso eq_num num num'
   1.216 +  | eq_num (Neg num) (Neg num') = eq_num num num'
   1.217 +  | eq_num (Add (num1, num2)) (Add (num1', num2')) =
   1.218 +    eq_num num1 num1' andalso eq_num num2 num2'
   1.219 +  | eq_num (Sub (num1, num2)) (Sub (num1', num2')) =
   1.220 +    eq_num num1 num1' andalso eq_num num2 num2'
   1.221 +  | eq_num (Mul (int, num)) (Mul (int', num')) =
   1.222 +    ((int : IntInf.int) = int') andalso eq_num num num'
   1.223 +  | eq_num (C a) (Bound b) = false
   1.224 +  | eq_num (C a) (Cx (b, c)) = false
   1.225 +  | eq_num (C a) (Neg b) = false
   1.226 +  | eq_num (C a) (Add (b, c)) = false
   1.227 +  | eq_num (C a) (Sub (b, c)) = false
   1.228 +  | eq_num (C a) (Mul (b, c)) = false
   1.229 +  | eq_num (Bound a) (Cx (b, c)) = false
   1.230 +  | eq_num (Bound a) (Neg b) = false
   1.231 +  | eq_num (Bound a) (Add (b, c)) = false
   1.232 +  | eq_num (Bound a) (Sub (b, c)) = false
   1.233 +  | eq_num (Bound a) (Mul (b, c)) = false
   1.234 +  | eq_num (Cx (a, b)) (Neg c) = false
   1.235 +  | eq_num (Cx (a, b)) (Add (c, d)) = false
   1.236 +  | eq_num (Cx (a, b)) (Sub (c, d)) = false
   1.237 +  | eq_num (Cx (a, b)) (Mul (c, d)) = false
   1.238 +  | eq_num (Neg a) (Add (b, c)) = false
   1.239 +  | eq_num (Neg a) (Sub (b, c)) = false
   1.240 +  | eq_num (Neg a) (Mul (b, c)) = false
   1.241 +  | eq_num (Add (a, b)) (Sub (c, d)) = false
   1.242 +  | eq_num (Add (a, b)) (Mul (c, d)) = false
   1.243 +  | eq_num (Sub (a, b)) (Mul (c, d)) = false
   1.244 +  | eq_num (Bound b) (C a) = false
   1.245 +  | eq_num (Cx (b, c)) (C a) = false
   1.246 +  | eq_num (Neg b) (C a) = false
   1.247 +  | eq_num (Add (b, c)) (C a) = false
   1.248 +  | eq_num (Sub (b, c)) (C a) = false
   1.249 +  | eq_num (Mul (b, c)) (C a) = false
   1.250 +  | eq_num (Cx (b, c)) (Bound a) = false
   1.251 +  | eq_num (Neg b) (Bound a) = false
   1.252 +  | eq_num (Add (b, c)) (Bound a) = false
   1.253 +  | eq_num (Sub (b, c)) (Bound a) = false
   1.254 +  | eq_num (Mul (b, c)) (Bound a) = false
   1.255 +  | eq_num (Neg c) (Cx (a, b)) = false
   1.256 +  | eq_num (Add (c, d)) (Cx (a, b)) = false
   1.257 +  | eq_num (Sub (c, d)) (Cx (a, b)) = false
   1.258 +  | eq_num (Mul (c, d)) (Cx (a, b)) = false
   1.259 +  | eq_num (Add (b, c)) (Neg a) = false
   1.260 +  | eq_num (Sub (b, c)) (Neg a) = false
   1.261 +  | eq_num (Mul (b, c)) (Neg a) = false
   1.262 +  | eq_num (Sub (c, d)) (Add (a, b)) = false
   1.263 +  | eq_num (Mul (c, d)) (Add (a, b)) = false
   1.264 +  | eq_num (Mul (c, d)) (Sub (a, b)) = false;
   1.265 +
   1.266 +fun eq_fm T T = true
   1.267 +  | eq_fm F F = true
   1.268 +  | eq_fm (Lt num) (Lt num') = eq_num num num'
   1.269 +  | eq_fm (Le num) (Le num') = eq_num num num'
   1.270 +  | eq_fm (Gt num) (Gt num') = eq_num num num'
   1.271 +  | eq_fm (Ge num) (Ge num') = eq_num num num'
   1.272 +  | eq_fm (Eq num) (Eq num') = eq_num num num'
   1.273 +  | eq_fm (NEq num) (NEq num') = eq_num num num'
   1.274 +  | eq_fm (Dvd (int, num)) (Dvd (int', num')) =
   1.275 +    ((int : IntInf.int) = int') andalso eq_num num num'
   1.276 +  | eq_fm (NDvd (int, num)) (NDvd (int', num')) =
   1.277 +    ((int : IntInf.int) = int') andalso eq_num num num'
   1.278 +  | eq_fm (Nota fm) (Nota fm') = eq_fm fm fm'
   1.279 +  | eq_fm (And (fm1, fm2)) (And (fm1', fm2')) =
   1.280 +    eq_fm fm1 fm1' andalso eq_fm fm2 fm2'
   1.281 +  | eq_fm (Or (fm1, fm2)) (Or (fm1', fm2')) =
   1.282 +    eq_fm fm1 fm1' andalso eq_fm fm2 fm2'
   1.283 +  | eq_fm (Impa (fm1, fm2)) (Impa (fm1', fm2')) =
   1.284 +    eq_fm fm1 fm1' andalso eq_fm fm2 fm2'
   1.285 +  | eq_fm (Iffa (fm1, fm2)) (Iffa (fm1', fm2')) =
   1.286 +    eq_fm fm1 fm1' andalso eq_fm fm2 fm2'
   1.287 +  | eq_fm (E fm) (E fm') = eq_fm fm fm'
   1.288 +  | eq_fm (A fm) (A fm') = eq_fm fm fm'
   1.289 +  | eq_fm (Closed nat) (Closed nat') = ((nat : IntInf.int) = nat')
   1.290 +  | eq_fm (NClosed nat) (NClosed nat') = ((nat : IntInf.int) = nat')
   1.291 +  | eq_fm T F = false
   1.292 +  | eq_fm T (Lt a) = false
   1.293 +  | eq_fm T (Le a) = false
   1.294 +  | eq_fm T (Gt a) = false
   1.295 +  | eq_fm T (Ge a) = false
   1.296 +  | eq_fm T (Eq a) = false
   1.297 +  | eq_fm T (NEq a) = false
   1.298 +  | eq_fm T (Dvd (a, b)) = false
   1.299 +  | eq_fm T (NDvd (a, b)) = false
   1.300 +  | eq_fm T (Nota a) = false
   1.301 +  | eq_fm T (And (a, b)) = false
   1.302 +  | eq_fm T (Or (a, b)) = false
   1.303 +  | eq_fm T (Impa (a, b)) = false
   1.304 +  | eq_fm T (Iffa (a, b)) = false
   1.305 +  | eq_fm T (E a) = false
   1.306 +  | eq_fm T (A a) = false
   1.307 +  | eq_fm T (Closed a) = false
   1.308 +  | eq_fm T (NClosed a) = false
   1.309 +  | eq_fm F (Lt a) = false
   1.310 +  | eq_fm F (Le a) = false
   1.311 +  | eq_fm F (Gt a) = false
   1.312 +  | eq_fm F (Ge a) = false
   1.313 +  | eq_fm F (Eq a) = false
   1.314 +  | eq_fm F (NEq a) = false
   1.315 +  | eq_fm F (Dvd (a, b)) = false
   1.316 +  | eq_fm F (NDvd (a, b)) = false
   1.317 +  | eq_fm F (Nota a) = false
   1.318 +  | eq_fm F (And (a, b)) = false
   1.319 +  | eq_fm F (Or (a, b)) = false
   1.320 +  | eq_fm F (Impa (a, b)) = false
   1.321 +  | eq_fm F (Iffa (a, b)) = false
   1.322 +  | eq_fm F (E a) = false
   1.323 +  | eq_fm F (A a) = false
   1.324 +  | eq_fm F (Closed a) = false
   1.325 +  | eq_fm F (NClosed a) = false
   1.326 +  | eq_fm (Lt a) (Le b) = false
   1.327 +  | eq_fm (Lt a) (Gt b) = false
   1.328 +  | eq_fm (Lt a) (Ge b) = false
   1.329 +  | eq_fm (Lt a) (Eq b) = false
   1.330 +  | eq_fm (Lt a) (NEq b) = false
   1.331 +  | eq_fm (Lt a) (Dvd (b, c)) = false
   1.332 +  | eq_fm (Lt a) (NDvd (b, c)) = false
   1.333 +  | eq_fm (Lt a) (Nota b) = false
   1.334 +  | eq_fm (Lt a) (And (b, c)) = false
   1.335 +  | eq_fm (Lt a) (Or (b, c)) = false
   1.336 +  | eq_fm (Lt a) (Impa (b, c)) = false
   1.337 +  | eq_fm (Lt a) (Iffa (b, c)) = false
   1.338 +  | eq_fm (Lt a) (E b) = false
   1.339 +  | eq_fm (Lt a) (A b) = false
   1.340 +  | eq_fm (Lt a) (Closed b) = false
   1.341 +  | eq_fm (Lt a) (NClosed b) = false
   1.342 +  | eq_fm (Le a) (Gt b) = false
   1.343 +  | eq_fm (Le a) (Ge b) = false
   1.344 +  | eq_fm (Le a) (Eq b) = false
   1.345 +  | eq_fm (Le a) (NEq b) = false
   1.346 +  | eq_fm (Le a) (Dvd (b, c)) = false
   1.347 +  | eq_fm (Le a) (NDvd (b, c)) = false
   1.348 +  | eq_fm (Le a) (Nota b) = false
   1.349 +  | eq_fm (Le a) (And (b, c)) = false
   1.350 +  | eq_fm (Le a) (Or (b, c)) = false
   1.351 +  | eq_fm (Le a) (Impa (b, c)) = false
   1.352 +  | eq_fm (Le a) (Iffa (b, c)) = false
   1.353 +  | eq_fm (Le a) (E b) = false
   1.354 +  | eq_fm (Le a) (A b) = false
   1.355 +  | eq_fm (Le a) (Closed b) = false
   1.356 +  | eq_fm (Le a) (NClosed b) = false
   1.357 +  | eq_fm (Gt a) (Ge b) = false
   1.358 +  | eq_fm (Gt a) (Eq b) = false
   1.359 +  | eq_fm (Gt a) (NEq b) = false
   1.360 +  | eq_fm (Gt a) (Dvd (b, c)) = false
   1.361 +  | eq_fm (Gt a) (NDvd (b, c)) = false
   1.362 +  | eq_fm (Gt a) (Nota b) = false
   1.363 +  | eq_fm (Gt a) (And (b, c)) = false
   1.364 +  | eq_fm (Gt a) (Or (b, c)) = false
   1.365 +  | eq_fm (Gt a) (Impa (b, c)) = false
   1.366 +  | eq_fm (Gt a) (Iffa (b, c)) = false
   1.367 +  | eq_fm (Gt a) (E b) = false
   1.368 +  | eq_fm (Gt a) (A b) = false
   1.369 +  | eq_fm (Gt a) (Closed b) = false
   1.370 +  | eq_fm (Gt a) (NClosed b) = false
   1.371 +  | eq_fm (Ge a) (Eq b) = false
   1.372 +  | eq_fm (Ge a) (NEq b) = false
   1.373 +  | eq_fm (Ge a) (Dvd (b, c)) = false
   1.374 +  | eq_fm (Ge a) (NDvd (b, c)) = false
   1.375 +  | eq_fm (Ge a) (Nota b) = false
   1.376 +  | eq_fm (Ge a) (And (b, c)) = false
   1.377 +  | eq_fm (Ge a) (Or (b, c)) = false
   1.378 +  | eq_fm (Ge a) (Impa (b, c)) = false
   1.379 +  | eq_fm (Ge a) (Iffa (b, c)) = false
   1.380 +  | eq_fm (Ge a) (E b) = false
   1.381 +  | eq_fm (Ge a) (A b) = false
   1.382 +  | eq_fm (Ge a) (Closed b) = false
   1.383 +  | eq_fm (Ge a) (NClosed b) = false
   1.384 +  | eq_fm (Eq a) (NEq b) = false
   1.385 +  | eq_fm (Eq a) (Dvd (b, c)) = false
   1.386 +  | eq_fm (Eq a) (NDvd (b, c)) = false
   1.387 +  | eq_fm (Eq a) (Nota b) = false
   1.388 +  | eq_fm (Eq a) (And (b, c)) = false
   1.389 +  | eq_fm (Eq a) (Or (b, c)) = false
   1.390 +  | eq_fm (Eq a) (Impa (b, c)) = false
   1.391 +  | eq_fm (Eq a) (Iffa (b, c)) = false
   1.392 +  | eq_fm (Eq a) (E b) = false
   1.393 +  | eq_fm (Eq a) (A b) = false
   1.394 +  | eq_fm (Eq a) (Closed b) = false
   1.395 +  | eq_fm (Eq a) (NClosed b) = false
   1.396 +  | eq_fm (NEq a) (Dvd (b, c)) = false
   1.397 +  | eq_fm (NEq a) (NDvd (b, c)) = false
   1.398 +  | eq_fm (NEq a) (Nota b) = false
   1.399 +  | eq_fm (NEq a) (And (b, c)) = false
   1.400 +  | eq_fm (NEq a) (Or (b, c)) = false
   1.401 +  | eq_fm (NEq a) (Impa (b, c)) = false
   1.402 +  | eq_fm (NEq a) (Iffa (b, c)) = false
   1.403 +  | eq_fm (NEq a) (E b) = false
   1.404 +  | eq_fm (NEq a) (A b) = false
   1.405 +  | eq_fm (NEq a) (Closed b) = false
   1.406 +  | eq_fm (NEq a) (NClosed b) = false
   1.407 +  | eq_fm (Dvd (a, b)) (NDvd (c, d)) = false
   1.408 +  | eq_fm (Dvd (a, b)) (Nota c) = false
   1.409 +  | eq_fm (Dvd (a, b)) (And (c, d)) = false
   1.410 +  | eq_fm (Dvd (a, b)) (Or (c, d)) = false
   1.411 +  | eq_fm (Dvd (a, b)) (Impa (c, d)) = false
   1.412 +  | eq_fm (Dvd (a, b)) (Iffa (c, d)) = false
   1.413 +  | eq_fm (Dvd (a, b)) (E c) = false
   1.414 +  | eq_fm (Dvd (a, b)) (A c) = false
   1.415 +  | eq_fm (Dvd (a, b)) (Closed c) = false
   1.416 +  | eq_fm (Dvd (a, b)) (NClosed c) = false
   1.417 +  | eq_fm (NDvd (a, b)) (Nota c) = false
   1.418 +  | eq_fm (NDvd (a, b)) (And (c, d)) = false
   1.419 +  | eq_fm (NDvd (a, b)) (Or (c, d)) = false
   1.420 +  | eq_fm (NDvd (a, b)) (Impa (c, d)) = false
   1.421 +  | eq_fm (NDvd (a, b)) (Iffa (c, d)) = false
   1.422 +  | eq_fm (NDvd (a, b)) (E c) = false
   1.423 +  | eq_fm (NDvd (a, b)) (A c) = false
   1.424 +  | eq_fm (NDvd (a, b)) (Closed c) = false
   1.425 +  | eq_fm (NDvd (a, b)) (NClosed c) = false
   1.426 +  | eq_fm (Nota a) (And (b, c)) = false
   1.427 +  | eq_fm (Nota a) (Or (b, c)) = false
   1.428 +  | eq_fm (Nota a) (Impa (b, c)) = false
   1.429 +  | eq_fm (Nota a) (Iffa (b, c)) = false
   1.430 +  | eq_fm (Nota a) (E b) = false
   1.431 +  | eq_fm (Nota a) (A b) = false
   1.432 +  | eq_fm (Nota a) (Closed b) = false
   1.433 +  | eq_fm (Nota a) (NClosed b) = false
   1.434 +  | eq_fm (And (a, b)) (Or (c, d)) = false
   1.435 +  | eq_fm (And (a, b)) (Impa (c, d)) = false
   1.436 +  | eq_fm (And (a, b)) (Iffa (c, d)) = false
   1.437 +  | eq_fm (And (a, b)) (E c) = false
   1.438 +  | eq_fm (And (a, b)) (A c) = false
   1.439 +  | eq_fm (And (a, b)) (Closed c) = false
   1.440 +  | eq_fm (And (a, b)) (NClosed c) = false
   1.441 +  | eq_fm (Or (a, b)) (Impa (c, d)) = false
   1.442 +  | eq_fm (Or (a, b)) (Iffa (c, d)) = false
   1.443 +  | eq_fm (Or (a, b)) (E c) = false
   1.444 +  | eq_fm (Or (a, b)) (A c) = false
   1.445 +  | eq_fm (Or (a, b)) (Closed c) = false
   1.446 +  | eq_fm (Or (a, b)) (NClosed c) = false
   1.447 +  | eq_fm (Impa (a, b)) (Iffa (c, d)) = false
   1.448 +  | eq_fm (Impa (a, b)) (E c) = false
   1.449 +  | eq_fm (Impa (a, b)) (A c) = false
   1.450 +  | eq_fm (Impa (a, b)) (Closed c) = false
   1.451 +  | eq_fm (Impa (a, b)) (NClosed c) = false
   1.452 +  | eq_fm (Iffa (a, b)) (E c) = false
   1.453 +  | eq_fm (Iffa (a, b)) (A c) = false
   1.454 +  | eq_fm (Iffa (a, b)) (Closed c) = false
   1.455 +  | eq_fm (Iffa (a, b)) (NClosed c) = false
   1.456 +  | eq_fm (E a) (A b) = false
   1.457 +  | eq_fm (E a) (Closed b) = false
   1.458 +  | eq_fm (E a) (NClosed b) = false
   1.459 +  | eq_fm (A a) (Closed b) = false
   1.460 +  | eq_fm (A a) (NClosed b) = false
   1.461 +  | eq_fm (Closed a) (NClosed b) = false
   1.462 +  | eq_fm F T = false
   1.463 +  | eq_fm (Lt a) T = false
   1.464 +  | eq_fm (Le a) T = false
   1.465 +  | eq_fm (Gt a) T = false
   1.466 +  | eq_fm (Ge a) T = false
   1.467 +  | eq_fm (Eq a) T = false
   1.468 +  | eq_fm (NEq a) T = false
   1.469 +  | eq_fm (Dvd (a, b)) T = false
   1.470 +  | eq_fm (NDvd (a, b)) T = false
   1.471 +  | eq_fm (Nota a) T = false
   1.472 +  | eq_fm (And (a, b)) T = false
   1.473 +  | eq_fm (Or (a, b)) T = false
   1.474 +  | eq_fm (Impa (a, b)) T = false
   1.475 +  | eq_fm (Iffa (a, b)) T = false
   1.476 +  | eq_fm (E a) T = false
   1.477 +  | eq_fm (A a) T = false
   1.478 +  | eq_fm (Closed a) T = false
   1.479 +  | eq_fm (NClosed a) T = false
   1.480 +  | eq_fm (Lt a) F = false
   1.481 +  | eq_fm (Le a) F = false
   1.482 +  | eq_fm (Gt a) F = false
   1.483 +  | eq_fm (Ge a) F = false
   1.484 +  | eq_fm (Eq a) F = false
   1.485 +  | eq_fm (NEq a) F = false
   1.486 +  | eq_fm (Dvd (a, b)) F = false
   1.487 +  | eq_fm (NDvd (a, b)) F = false
   1.488 +  | eq_fm (Nota a) F = false
   1.489 +  | eq_fm (And (a, b)) F = false
   1.490 +  | eq_fm (Or (a, b)) F = false
   1.491 +  | eq_fm (Impa (a, b)) F = false
   1.492 +  | eq_fm (Iffa (a, b)) F = false
   1.493 +  | eq_fm (E a) F = false
   1.494 +  | eq_fm (A a) F = false
   1.495 +  | eq_fm (Closed a) F = false
   1.496 +  | eq_fm (NClosed a) F = false
   1.497 +  | eq_fm (Le b) (Lt a) = false
   1.498 +  | eq_fm (Gt b) (Lt a) = false
   1.499 +  | eq_fm (Ge b) (Lt a) = false
   1.500 +  | eq_fm (Eq b) (Lt a) = false
   1.501 +  | eq_fm (NEq b) (Lt a) = false
   1.502 +  | eq_fm (Dvd (b, c)) (Lt a) = false
   1.503 +  | eq_fm (NDvd (b, c)) (Lt a) = false
   1.504 +  | eq_fm (Nota b) (Lt a) = false
   1.505 +  | eq_fm (And (b, c)) (Lt a) = false
   1.506 +  | eq_fm (Or (b, c)) (Lt a) = false
   1.507 +  | eq_fm (Impa (b, c)) (Lt a) = false
   1.508 +  | eq_fm (Iffa (b, c)) (Lt a) = false
   1.509 +  | eq_fm (E b) (Lt a) = false
   1.510 +  | eq_fm (A b) (Lt a) = false
   1.511 +  | eq_fm (Closed b) (Lt a) = false
   1.512 +  | eq_fm (NClosed b) (Lt a) = false
   1.513 +  | eq_fm (Gt b) (Le a) = false
   1.514 +  | eq_fm (Ge b) (Le a) = false
   1.515 +  | eq_fm (Eq b) (Le a) = false
   1.516 +  | eq_fm (NEq b) (Le a) = false
   1.517 +  | eq_fm (Dvd (b, c)) (Le a) = false
   1.518 +  | eq_fm (NDvd (b, c)) (Le a) = false
   1.519 +  | eq_fm (Nota b) (Le a) = false
   1.520 +  | eq_fm (And (b, c)) (Le a) = false
   1.521 +  | eq_fm (Or (b, c)) (Le a) = false
   1.522 +  | eq_fm (Impa (b, c)) (Le a) = false
   1.523 +  | eq_fm (Iffa (b, c)) (Le a) = false
   1.524 +  | eq_fm (E b) (Le a) = false
   1.525 +  | eq_fm (A b) (Le a) = false
   1.526 +  | eq_fm (Closed b) (Le a) = false
   1.527 +  | eq_fm (NClosed b) (Le a) = false
   1.528 +  | eq_fm (Ge b) (Gt a) = false
   1.529 +  | eq_fm (Eq b) (Gt a) = false
   1.530 +  | eq_fm (NEq b) (Gt a) = false
   1.531 +  | eq_fm (Dvd (b, c)) (Gt a) = false
   1.532 +  | eq_fm (NDvd (b, c)) (Gt a) = false
   1.533 +  | eq_fm (Nota b) (Gt a) = false
   1.534 +  | eq_fm (And (b, c)) (Gt a) = false
   1.535 +  | eq_fm (Or (b, c)) (Gt a) = false
   1.536 +  | eq_fm (Impa (b, c)) (Gt a) = false
   1.537 +  | eq_fm (Iffa (b, c)) (Gt a) = false
   1.538 +  | eq_fm (E b) (Gt a) = false
   1.539 +  | eq_fm (A b) (Gt a) = false
   1.540 +  | eq_fm (Closed b) (Gt a) = false
   1.541 +  | eq_fm (NClosed b) (Gt a) = false
   1.542 +  | eq_fm (Eq b) (Ge a) = false
   1.543 +  | eq_fm (NEq b) (Ge a) = false
   1.544 +  | eq_fm (Dvd (b, c)) (Ge a) = false
   1.545 +  | eq_fm (NDvd (b, c)) (Ge a) = false
   1.546 +  | eq_fm (Nota b) (Ge a) = false
   1.547 +  | eq_fm (And (b, c)) (Ge a) = false
   1.548 +  | eq_fm (Or (b, c)) (Ge a) = false
   1.549 +  | eq_fm (Impa (b, c)) (Ge a) = false
   1.550 +  | eq_fm (Iffa (b, c)) (Ge a) = false
   1.551 +  | eq_fm (E b) (Ge a) = false
   1.552 +  | eq_fm (A b) (Ge a) = false
   1.553 +  | eq_fm (Closed b) (Ge a) = false
   1.554 +  | eq_fm (NClosed b) (Ge a) = false
   1.555 +  | eq_fm (NEq b) (Eq a) = false
   1.556 +  | eq_fm (Dvd (b, c)) (Eq a) = false
   1.557 +  | eq_fm (NDvd (b, c)) (Eq a) = false
   1.558 +  | eq_fm (Nota b) (Eq a) = false
   1.559 +  | eq_fm (And (b, c)) (Eq a) = false
   1.560 +  | eq_fm (Or (b, c)) (Eq a) = false
   1.561 +  | eq_fm (Impa (b, c)) (Eq a) = false
   1.562 +  | eq_fm (Iffa (b, c)) (Eq a) = false
   1.563 +  | eq_fm (E b) (Eq a) = false
   1.564 +  | eq_fm (A b) (Eq a) = false
   1.565 +  | eq_fm (Closed b) (Eq a) = false
   1.566 +  | eq_fm (NClosed b) (Eq a) = false
   1.567 +  | eq_fm (Dvd (b, c)) (NEq a) = false
   1.568 +  | eq_fm (NDvd (b, c)) (NEq a) = false
   1.569 +  | eq_fm (Nota b) (NEq a) = false
   1.570 +  | eq_fm (And (b, c)) (NEq a) = false
   1.571 +  | eq_fm (Or (b, c)) (NEq a) = false
   1.572 +  | eq_fm (Impa (b, c)) (NEq a) = false
   1.573 +  | eq_fm (Iffa (b, c)) (NEq a) = false
   1.574 +  | eq_fm (E b) (NEq a) = false
   1.575 +  | eq_fm (A b) (NEq a) = false
   1.576 +  | eq_fm (Closed b) (NEq a) = false
   1.577 +  | eq_fm (NClosed b) (NEq a) = false
   1.578 +  | eq_fm (NDvd (c, d)) (Dvd (a, b)) = false
   1.579 +  | eq_fm (Nota c) (Dvd (a, b)) = false
   1.580 +  | eq_fm (And (c, d)) (Dvd (a, b)) = false
   1.581 +  | eq_fm (Or (c, d)) (Dvd (a, b)) = false
   1.582 +  | eq_fm (Impa (c, d)) (Dvd (a, b)) = false
   1.583 +  | eq_fm (Iffa (c, d)) (Dvd (a, b)) = false
   1.584 +  | eq_fm (E c) (Dvd (a, b)) = false
   1.585 +  | eq_fm (A c) (Dvd (a, b)) = false
   1.586 +  | eq_fm (Closed c) (Dvd (a, b)) = false
   1.587 +  | eq_fm (NClosed c) (Dvd (a, b)) = false
   1.588 +  | eq_fm (Nota c) (NDvd (a, b)) = false
   1.589 +  | eq_fm (And (c, d)) (NDvd (a, b)) = false
   1.590 +  | eq_fm (Or (c, d)) (NDvd (a, b)) = false
   1.591 +  | eq_fm (Impa (c, d)) (NDvd (a, b)) = false
   1.592 +  | eq_fm (Iffa (c, d)) (NDvd (a, b)) = false
   1.593 +  | eq_fm (E c) (NDvd (a, b)) = false
   1.594 +  | eq_fm (A c) (NDvd (a, b)) = false
   1.595 +  | eq_fm (Closed c) (NDvd (a, b)) = false
   1.596 +  | eq_fm (NClosed c) (NDvd (a, b)) = false
   1.597 +  | eq_fm (And (b, c)) (Nota a) = false
   1.598 +  | eq_fm (Or (b, c)) (Nota a) = false
   1.599 +  | eq_fm (Impa (b, c)) (Nota a) = false
   1.600 +  | eq_fm (Iffa (b, c)) (Nota a) = false
   1.601 +  | eq_fm (E b) (Nota a) = false
   1.602 +  | eq_fm (A b) (Nota a) = false
   1.603 +  | eq_fm (Closed b) (Nota a) = false
   1.604 +  | eq_fm (NClosed b) (Nota a) = false
   1.605 +  | eq_fm (Or (c, d)) (And (a, b)) = false
   1.606 +  | eq_fm (Impa (c, d)) (And (a, b)) = false
   1.607 +  | eq_fm (Iffa (c, d)) (And (a, b)) = false
   1.608 +  | eq_fm (E c) (And (a, b)) = false
   1.609 +  | eq_fm (A c) (And (a, b)) = false
   1.610 +  | eq_fm (Closed c) (And (a, b)) = false
   1.611 +  | eq_fm (NClosed c) (And (a, b)) = false
   1.612 +  | eq_fm (Impa (c, d)) (Or (a, b)) = false
   1.613 +  | eq_fm (Iffa (c, d)) (Or (a, b)) = false
   1.614 +  | eq_fm (E c) (Or (a, b)) = false
   1.615 +  | eq_fm (A c) (Or (a, b)) = false
   1.616 +  | eq_fm (Closed c) (Or (a, b)) = false
   1.617 +  | eq_fm (NClosed c) (Or (a, b)) = false
   1.618 +  | eq_fm (Iffa (c, d)) (Impa (a, b)) = false
   1.619 +  | eq_fm (E c) (Impa (a, b)) = false
   1.620 +  | eq_fm (A c) (Impa (a, b)) = false
   1.621 +  | eq_fm (Closed c) (Impa (a, b)) = false
   1.622 +  | eq_fm (NClosed c) (Impa (a, b)) = false
   1.623 +  | eq_fm (E c) (Iffa (a, b)) = false
   1.624 +  | eq_fm (A c) (Iffa (a, b)) = false
   1.625 +  | eq_fm (Closed c) (Iffa (a, b)) = false
   1.626 +  | eq_fm (NClosed c) (Iffa (a, b)) = false
   1.627 +  | eq_fm (A b) (E a) = false
   1.628 +  | eq_fm (Closed b) (E a) = false
   1.629 +  | eq_fm (NClosed b) (E a) = false
   1.630 +  | eq_fm (Closed b) (A a) = false
   1.631 +  | eq_fm (NClosed b) (A a) = false
   1.632 +  | eq_fm (NClosed b) (Closed a) = false;
   1.633 +
   1.634 +fun djf f p q =
   1.635 +  (if eq_fm q T then T
   1.636 +    else (if eq_fm q F then f p
   1.637 +           else (case f p of T => T | F => q | Lt num => Or (f p, q)
   1.638 +                   | Le num => Or (f p, q) | Gt num => Or (f p, q)
   1.639 +                   | Ge num => Or (f p, q) | Eq num => Or (f p, q)
   1.640 +                   | NEq num => Or (f p, q) | Dvd (int, num) => Or (f p, q)
   1.641 +                   | NDvd (int, num) => Or (f p, q) | Nota fm => Or (f p, q)
   1.642 +                   | And (fm1, fm2) => Or (f p, q)
   1.643 +                   | Or (fm1, fm2) => Or (f p, q)
   1.644 +                   | Impa (fm1, fm2) => Or (f p, q)
   1.645 +                   | Iffa (fm1, fm2) => Or (f p, q) | E fm => Or (f p, q)
   1.646 +                   | A fm => Or (f p, q) | Closed nat => Or (f p, q)
   1.647 +                   | NClosed nat => Or (f p, q))));
   1.648 +
   1.649 +fun evaldjf f ps = List.foldr (djf f) ps F;
   1.650 +
   1.651 +fun dj f p = evaldjf f (disjuncts p);
   1.652 +
   1.653 +fun zsplit0 (Mul (i, a)) =
   1.654 +  let
   1.655 +    val (i', a') = zsplit0 a;
   1.656 +  in
   1.657 +    (IntInf.* (i, i'), Mul (i, a'))
   1.658 +  end
   1.659 +  | zsplit0 (Sub (a, b)) =
   1.660 +    let
   1.661 +      val (ia, a') = zsplit0 a;
   1.662 +      val (ib, b') = zsplit0 b;
   1.663 +    in
   1.664 +      (IntInf.- (ia, ib), Sub (a', b'))
   1.665 +    end
   1.666 +  | zsplit0 (Add (a, b)) =
   1.667 +    let
   1.668 +      val (ia, a') = zsplit0 a;
   1.669 +      val (ib, b') = zsplit0 b;
   1.670 +    in
   1.671 +      (IntInf.+ (ia, ib), Add (a', b'))
   1.672 +    end
   1.673 +  | zsplit0 (Neg a) =
   1.674 +    let
   1.675 +      val (i', a') = zsplit0 a;
   1.676 +    in
   1.677 +      (IntInf.~ i', Neg a')
   1.678 +    end
   1.679 +  | zsplit0 (Cx (i, a)) =
   1.680 +    let
   1.681 +      val (i', aa) = zsplit0 a;
   1.682 +    in
   1.683 +      (IntInf.+ (i, i'), aa)
   1.684 +    end
   1.685 +  | zsplit0 (Bound n) =
   1.686 +    (if ((n : IntInf.int) = Integer.zero_nat)
   1.687 +      then ((1 : IntInf.int), C (0 : IntInf.int))
   1.688 +      else ((0 : IntInf.int), Bound n))
   1.689 +  | zsplit0 (C c) = ((0 : IntInf.int), C c);
   1.690 +
   1.691 +fun zlfm (NClosed ar) = NClosed ar
   1.692 +  | zlfm (Closed aq) = Closed aq
   1.693 +  | zlfm (A ap) = A ap
   1.694 +  | zlfm (E ao) = E ao
   1.695 +  | zlfm (Nota (A cj)) = Nota (A cj)
   1.696 +  | zlfm (Nota (E ci)) = Nota (E ci)
   1.697 +  | zlfm F = F
   1.698 +  | zlfm T = T
   1.699 +  | zlfm (Nota (NClosed p)) = Closed p
   1.700 +  | zlfm (Nota (Closed p)) = NClosed p
   1.701 +  | zlfm (Nota (NDvd (i, a))) = zlfm (Dvd (i, a))
   1.702 +  | zlfm (Nota (Dvd (i, a))) = zlfm (NDvd (i, a))
   1.703 +  | zlfm (Nota (NEq a)) = zlfm (Eq a)
   1.704 +  | zlfm (Nota (Eq a)) = zlfm (NEq a)
   1.705 +  | zlfm (Nota (Ge a)) = zlfm (Lt a)
   1.706 +  | zlfm (Nota (Gt a)) = zlfm (Le a)
   1.707 +  | zlfm (Nota (Le a)) = zlfm (Gt a)
   1.708 +  | zlfm (Nota (Lt a)) = zlfm (Ge a)
   1.709 +  | zlfm (Nota F) = T
   1.710 +  | zlfm (Nota T) = F
   1.711 +  | zlfm (Nota (Nota p)) = zlfm p
   1.712 +  | zlfm (Nota (Iffa (p, q))) =
   1.713 +    Or (And (zlfm p, zlfm (Nota q)), And (zlfm (Nota p), zlfm q))
   1.714 +  | zlfm (Nota (Impa (p, q))) = And (zlfm p, zlfm (Nota q))
   1.715 +  | zlfm (Nota (Or (p, q))) = And (zlfm (Nota p), zlfm (Nota q))
   1.716 +  | zlfm (Nota (And (p, q))) = Or (zlfm (Nota p), zlfm (Nota q))
   1.717 +  | zlfm (NDvd (i, a)) =
   1.718 +    (if ((i : IntInf.int) = (0 : IntInf.int)) then zlfm (NEq a)
   1.719 +      else let
   1.720 +             val (c, r) = zsplit0 a;
   1.721 +           in
   1.722 +             (if ((c : IntInf.int) = (0 : IntInf.int))
   1.723 +               then NDvd (Integer.abs_int i, r)
   1.724 +               else (if IntInf.< ((0 : IntInf.int), c)
   1.725 +                      then NDvd (Integer.abs_int i, Cx (c, r))
   1.726 +                      else NDvd (Integer.abs_int i, Cx (IntInf.~ c, Neg r))))
   1.727 +           end)
   1.728 +  | zlfm (Dvd (i, a)) =
   1.729 +    (if ((i : IntInf.int) = (0 : IntInf.int)) then zlfm (Eq a)
   1.730 +      else let
   1.731 +             val (c, r) = zsplit0 a;
   1.732 +           in
   1.733 +             (if ((c : IntInf.int) = (0 : IntInf.int))
   1.734 +               then Dvd (Integer.abs_int i, r)
   1.735 +               else (if IntInf.< ((0 : IntInf.int), c)
   1.736 +                      then Dvd (Integer.abs_int i, Cx (c, r))
   1.737 +                      else Dvd (Integer.abs_int i, Cx (IntInf.~ c, Neg r))))
   1.738 +           end)
   1.739 +  | zlfm (NEq a) =
   1.740 +    let
   1.741 +      val (c, r) = zsplit0 a;
   1.742 +    in
   1.743 +      (if ((c : IntInf.int) = (0 : IntInf.int)) then NEq r
   1.744 +        else (if IntInf.< ((0 : IntInf.int), c) then NEq (Cx (c, r))
   1.745 +               else NEq (Cx (IntInf.~ c, Neg r))))
   1.746 +    end
   1.747 +  | zlfm (Eq a) =
   1.748 +    let
   1.749 +      val (c, r) = zsplit0 a;
   1.750 +    in
   1.751 +      (if ((c : IntInf.int) = (0 : IntInf.int)) then Eq r
   1.752 +        else (if IntInf.< ((0 : IntInf.int), c) then Eq (Cx (c, r))
   1.753 +               else Eq (Cx (IntInf.~ c, Neg r))))
   1.754 +    end
   1.755 +  | zlfm (Ge a) =
   1.756 +    let
   1.757 +      val (c, r) = zsplit0 a;
   1.758 +    in
   1.759 +      (if ((c : IntInf.int) = (0 : IntInf.int)) then Ge r
   1.760 +        else (if IntInf.< ((0 : IntInf.int), c) then Ge (Cx (c, r))
   1.761 +               else Le (Cx (IntInf.~ c, Neg r))))
   1.762 +    end
   1.763 +  | zlfm (Gt a) =
   1.764 +    let
   1.765 +      val (c, r) = zsplit0 a;
   1.766 +    in
   1.767 +      (if ((c : IntInf.int) = (0 : IntInf.int)) then Gt r
   1.768 +        else (if IntInf.< ((0 : IntInf.int), c) then Gt (Cx (c, r))
   1.769 +               else Lt (Cx (IntInf.~ c, Neg r))))
   1.770 +    end
   1.771 +  | zlfm (Le a) =
   1.772 +    let
   1.773 +      val (c, r) = zsplit0 a;
   1.774 +    in
   1.775 +      (if ((c : IntInf.int) = (0 : IntInf.int)) then Le r
   1.776 +        else (if IntInf.< ((0 : IntInf.int), c) then Le (Cx (c, r))
   1.777 +               else Ge (Cx (IntInf.~ c, Neg r))))
   1.778 +    end
   1.779 +  | zlfm (Lt a) =
   1.780 +    let
   1.781 +      val (c, r) = zsplit0 a;
   1.782 +    in
   1.783 +      (if ((c : IntInf.int) = (0 : IntInf.int)) then Lt r
   1.784 +        else (if IntInf.< ((0 : IntInf.int), c) then Lt (Cx (c, r))
   1.785 +               else Gt (Cx (IntInf.~ c, Neg r))))
   1.786 +    end
   1.787 +  | zlfm (Iffa (p, q)) =
   1.788 +    Or (And (zlfm p, zlfm q), And (zlfm (Nota p), zlfm (Nota q)))
   1.789 +  | zlfm (Impa (p, q)) = Or (zlfm (Nota p), zlfm q)
   1.790 +  | zlfm (Or (p, q)) = Or (zlfm p, zlfm q)
   1.791 +  | zlfm (And (p, q)) = And (zlfm p, zlfm q);
   1.792 +
   1.793 +fun zeta (NClosed aq) = (1 : IntInf.int)
   1.794 +  | zeta (Closed ap) = (1 : IntInf.int)
   1.795 +  | zeta (A ao) = (1 : IntInf.int)
   1.796 +  | zeta (E an) = (1 : IntInf.int)
   1.797 +  | zeta (Iffa (al, am)) = (1 : IntInf.int)
   1.798 +  | zeta (Impa (aj, ak)) = (1 : IntInf.int)
   1.799 +  | zeta (Nota ae) = (1 : IntInf.int)
   1.800 +  | zeta (NDvd (ac, Mul (hv, hw))) = (1 : IntInf.int)
   1.801 +  | zeta (NDvd (ac, Sub (ht, hu))) = (1 : IntInf.int)
   1.802 +  | zeta (NDvd (ac, Add (hr, hs))) = (1 : IntInf.int)
   1.803 +  | zeta (NDvd (ac, Neg hq)) = (1 : IntInf.int)
   1.804 +  | zeta (NDvd (ac, Bound hn)) = (1 : IntInf.int)
   1.805 +  | zeta (NDvd (ac, C hm)) = (1 : IntInf.int)
   1.806 +  | zeta (Dvd (aa, Mul (gz, ha))) = (1 : IntInf.int)
   1.807 +  | zeta (Dvd (aa, Sub (gx, gy))) = (1 : IntInf.int)
   1.808 +  | zeta (Dvd (aa, Add (gv, gw))) = (1 : IntInf.int)
   1.809 +  | zeta (Dvd (aa, Neg gu)) = (1 : IntInf.int)
   1.810 +  | zeta (Dvd (aa, Bound gr)) = (1 : IntInf.int)
   1.811 +  | zeta (Dvd (aa, C gq)) = (1 : IntInf.int)
   1.812 +  | zeta (NEq (Mul (gd, ge))) = (1 : IntInf.int)
   1.813 +  | zeta (NEq (Sub (gb, gc))) = (1 : IntInf.int)
   1.814 +  | zeta (NEq (Add (fz, ga))) = (1 : IntInf.int)
   1.815 +  | zeta (NEq (Neg fy)) = (1 : IntInf.int)
   1.816 +  | zeta (NEq (Bound fv)) = (1 : IntInf.int)
   1.817 +  | zeta (NEq (C fu)) = (1 : IntInf.int)
   1.818 +  | zeta (Eq (Mul (fh, fi))) = (1 : IntInf.int)
   1.819 +  | zeta (Eq (Sub (ff, fg))) = (1 : IntInf.int)
   1.820 +  | zeta (Eq (Add (fd, fe))) = (1 : IntInf.int)
   1.821 +  | zeta (Eq (Neg fc)) = (1 : IntInf.int)
   1.822 +  | zeta (Eq (Bound ez)) = (1 : IntInf.int)
   1.823 +  | zeta (Eq (C ey)) = (1 : IntInf.int)
   1.824 +  | zeta (Ge (Mul (el, em))) = (1 : IntInf.int)
   1.825 +  | zeta (Ge (Sub (ej, ek))) = (1 : IntInf.int)
   1.826 +  | zeta (Ge (Add (eh, ei))) = (1 : IntInf.int)
   1.827 +  | zeta (Ge (Neg eg)) = (1 : IntInf.int)
   1.828 +  | zeta (Ge (Bound ed)) = (1 : IntInf.int)
   1.829 +  | zeta (Ge (C ec)) = (1 : IntInf.int)
   1.830 +  | zeta (Gt (Mul (dp, dq))) = (1 : IntInf.int)
   1.831 +  | zeta (Gt (Sub (dn, doa))) = (1 : IntInf.int)
   1.832 +  | zeta (Gt (Add (dl, dm))) = (1 : IntInf.int)
   1.833 +  | zeta (Gt (Neg dk)) = (1 : IntInf.int)
   1.834 +  | zeta (Gt (Bound dh)) = (1 : IntInf.int)
   1.835 +  | zeta (Gt (C dg)) = (1 : IntInf.int)
   1.836 +  | zeta (Le (Mul (ct, cu))) = (1 : IntInf.int)
   1.837 +  | zeta (Le (Sub (cr, cs))) = (1 : IntInf.int)
   1.838 +  | zeta (Le (Add (cp, cq))) = (1 : IntInf.int)
   1.839 +  | zeta (Le (Neg co)) = (1 : IntInf.int)
   1.840 +  | zeta (Le (Bound cl)) = (1 : IntInf.int)
   1.841 +  | zeta (Le (C ck)) = (1 : IntInf.int)
   1.842 +  | zeta (Lt (Mul (bx, by))) = (1 : IntInf.int)
   1.843 +  | zeta (Lt (Sub (bv, bw))) = (1 : IntInf.int)
   1.844 +  | zeta (Lt (Add (bt, bu))) = (1 : IntInf.int)
   1.845 +  | zeta (Lt (Neg bs)) = (1 : IntInf.int)
   1.846 +  | zeta (Lt (Bound bp)) = (1 : IntInf.int)
   1.847 +  | zeta (Lt (C bo)) = (1 : IntInf.int)
   1.848 +  | zeta F = (1 : IntInf.int)
   1.849 +  | zeta T = (1 : IntInf.int)
   1.850 +  | zeta (NDvd (i, Cx (y, e))) = y
   1.851 +  | zeta (Dvd (i, Cx (y, e))) = y
   1.852 +  | zeta (Ge (Cx (y, e))) = y
   1.853 +  | zeta (Gt (Cx (y, e))) = y
   1.854 +  | zeta (Le (Cx (y, e))) = y
   1.855 +  | zeta (Lt (Cx (y, e))) = y
   1.856 +  | zeta (NEq (Cx (y, e))) = y
   1.857 +  | zeta (Eq (Cx (y, e))) = y
   1.858 +  | zeta (Or (p, q)) = GCD.ilcm (zeta p) (zeta q)
   1.859 +  | zeta (And (p, q)) = GCD.ilcm (zeta p) (zeta q);
   1.860 +
   1.861 +fun a_beta (NClosed aq) = (fn k => NClosed aq)
   1.862 +  | a_beta (Closed ap) = (fn k => Closed ap)
   1.863 +  | a_beta (A ao) = (fn k => A ao)
   1.864 +  | a_beta (E an) = (fn k => E an)
   1.865 +  | a_beta (Iffa (al, am)) = (fn k => Iffa (al, am))
   1.866 +  | a_beta (Impa (aj, ak)) = (fn k => Impa (aj, ak))
   1.867 +  | a_beta (Nota ae) = (fn k => Nota ae)
   1.868 +  | a_beta (NDvd (ac, Mul (hv, hw))) = (fn k => NDvd (ac, Mul (hv, hw)))
   1.869 +  | a_beta (NDvd (ac, Sub (ht, hu))) = (fn k => NDvd (ac, Sub (ht, hu)))
   1.870 +  | a_beta (NDvd (ac, Add (hr, hs))) = (fn k => NDvd (ac, Add (hr, hs)))
   1.871 +  | a_beta (NDvd (ac, Neg hq)) = (fn k => NDvd (ac, Neg hq))
   1.872 +  | a_beta (NDvd (ac, Bound hn)) = (fn k => NDvd (ac, Bound hn))
   1.873 +  | a_beta (NDvd (ac, C hm)) = (fn k => NDvd (ac, C hm))
   1.874 +  | a_beta (Dvd (aa, Mul (gz, ha))) = (fn k => Dvd (aa, Mul (gz, ha)))
   1.875 +  | a_beta (Dvd (aa, Sub (gx, gy))) = (fn k => Dvd (aa, Sub (gx, gy)))
   1.876 +  | a_beta (Dvd (aa, Add (gv, gw))) = (fn k => Dvd (aa, Add (gv, gw)))
   1.877 +  | a_beta (Dvd (aa, Neg gu)) = (fn k => Dvd (aa, Neg gu))
   1.878 +  | a_beta (Dvd (aa, Bound gr)) = (fn k => Dvd (aa, Bound gr))
   1.879 +  | a_beta (Dvd (aa, C gq)) = (fn k => Dvd (aa, C gq))
   1.880 +  | a_beta (NEq (Mul (gd, ge))) = (fn k => NEq (Mul (gd, ge)))
   1.881 +  | a_beta (NEq (Sub (gb, gc))) = (fn k => NEq (Sub (gb, gc)))
   1.882 +  | a_beta (NEq (Add (fz, ga))) = (fn k => NEq (Add (fz, ga)))
   1.883 +  | a_beta (NEq (Neg fy)) = (fn k => NEq (Neg fy))
   1.884 +  | a_beta (NEq (Bound fv)) = (fn k => NEq (Bound fv))
   1.885 +  | a_beta (NEq (C fu)) = (fn k => NEq (C fu))
   1.886 +  | a_beta (Eq (Mul (fh, fi))) = (fn k => Eq (Mul (fh, fi)))
   1.887 +  | a_beta (Eq (Sub (ff, fg))) = (fn k => Eq (Sub (ff, fg)))
   1.888 +  | a_beta (Eq (Add (fd, fe))) = (fn k => Eq (Add (fd, fe)))
   1.889 +  | a_beta (Eq (Neg fc)) = (fn k => Eq (Neg fc))
   1.890 +  | a_beta (Eq (Bound ez)) = (fn k => Eq (Bound ez))
   1.891 +  | a_beta (Eq (C ey)) = (fn k => Eq (C ey))
   1.892 +  | a_beta (Ge (Mul (el, em))) = (fn k => Ge (Mul (el, em)))
   1.893 +  | a_beta (Ge (Sub (ej, ek))) = (fn k => Ge (Sub (ej, ek)))
   1.894 +  | a_beta (Ge (Add (eh, ei))) = (fn k => Ge (Add (eh, ei)))
   1.895 +  | a_beta (Ge (Neg eg)) = (fn k => Ge (Neg eg))
   1.896 +  | a_beta (Ge (Bound ed)) = (fn k => Ge (Bound ed))
   1.897 +  | a_beta (Ge (C ec)) = (fn k => Ge (C ec))
   1.898 +  | a_beta (Gt (Mul (dp, dq))) = (fn k => Gt (Mul (dp, dq)))
   1.899 +  | a_beta (Gt (Sub (dn, doa))) = (fn k => Gt (Sub (dn, doa)))
   1.900 +  | a_beta (Gt (Add (dl, dm))) = (fn k => Gt (Add (dl, dm)))
   1.901 +  | a_beta (Gt (Neg dk)) = (fn k => Gt (Neg dk))
   1.902 +  | a_beta (Gt (Bound dh)) = (fn k => Gt (Bound dh))
   1.903 +  | a_beta (Gt (C dg)) = (fn k => Gt (C dg))
   1.904 +  | a_beta (Le (Mul (ct, cu))) = (fn k => Le (Mul (ct, cu)))
   1.905 +  | a_beta (Le (Sub (cr, cs))) = (fn k => Le (Sub (cr, cs)))
   1.906 +  | a_beta (Le (Add (cp, cq))) = (fn k => Le (Add (cp, cq)))
   1.907 +  | a_beta (Le (Neg co)) = (fn k => Le (Neg co))
   1.908 +  | a_beta (Le (Bound cl)) = (fn k => Le (Bound cl))
   1.909 +  | a_beta (Le (C ck)) = (fn k => Le (C ck))
   1.910 +  | a_beta (Lt (Mul (bx, by))) = (fn k => Lt (Mul (bx, by)))
   1.911 +  | a_beta (Lt (Sub (bv, bw))) = (fn k => Lt (Sub (bv, bw)))
   1.912 +  | a_beta (Lt (Add (bt, bu))) = (fn k => Lt (Add (bt, bu)))
   1.913 +  | a_beta (Lt (Neg bs)) = (fn k => Lt (Neg bs))
   1.914 +  | a_beta (Lt (Bound bp)) = (fn k => Lt (Bound bp))
   1.915 +  | a_beta (Lt (C bo)) = (fn k => Lt (C bo))
   1.916 +  | a_beta F = (fn k => F)
   1.917 +  | a_beta T = (fn k => T)
   1.918 +  | a_beta (NDvd (i, Cx (c, e))) =
   1.919 +    (fn k =>
   1.920 +      NDvd (IntInf.* (Integer.div_int k c, i),
   1.921 +             Cx ((1 : IntInf.int), Mul (Integer.div_int k c, e))))
   1.922 +  | a_beta (Dvd (i, Cx (c, e))) =
   1.923 +    (fn k =>
   1.924 +      Dvd (IntInf.* (Integer.div_int k c, i),
   1.925 +            Cx ((1 : IntInf.int), Mul (Integer.div_int k c, e))))
   1.926 +  | a_beta (Ge (Cx (c, e))) =
   1.927 +    (fn k => Ge (Cx ((1 : IntInf.int), Mul (Integer.div_int k c, e))))
   1.928 +  | a_beta (Gt (Cx (c, e))) =
   1.929 +    (fn k => Gt (Cx ((1 : IntInf.int), Mul (Integer.div_int k c, e))))
   1.930 +  | a_beta (Le (Cx (c, e))) =
   1.931 +    (fn k => Le (Cx ((1 : IntInf.int), Mul (Integer.div_int k c, e))))
   1.932 +  | a_beta (Lt (Cx (c, e))) =
   1.933 +    (fn k => Lt (Cx ((1 : IntInf.int), Mul (Integer.div_int k c, e))))
   1.934 +  | a_beta (NEq (Cx (c, e))) =
   1.935 +    (fn k => NEq (Cx ((1 : IntInf.int), Mul (Integer.div_int k c, e))))
   1.936 +  | a_beta (Eq (Cx (c, e))) =
   1.937 +    (fn k => Eq (Cx ((1 : IntInf.int), Mul (Integer.div_int k c, e))))
   1.938 +  | a_beta (Or (p, q)) = (fn k => Or (a_beta p k, a_beta q k))
   1.939 +  | a_beta (And (p, q)) = (fn k => And (a_beta p k, a_beta q k));
   1.940 +
   1.941 +fun delta (NClosed aq) = (1 : IntInf.int)
   1.942 +  | delta (Closed ap) = (1 : IntInf.int)
   1.943 +  | delta (A ao) = (1 : IntInf.int)
   1.944 +  | delta (E an) = (1 : IntInf.int)
   1.945 +  | delta (Iffa (al, am)) = (1 : IntInf.int)
   1.946 +  | delta (Impa (aj, ak)) = (1 : IntInf.int)
   1.947 +  | delta (Nota ae) = (1 : IntInf.int)
   1.948 +  | delta (NDvd (ac, Mul (ct, cu))) = (1 : IntInf.int)
   1.949 +  | delta (NDvd (ac, Sub (cr, cs))) = (1 : IntInf.int)
   1.950 +  | delta (NDvd (ac, Add (cp, cq))) = (1 : IntInf.int)
   1.951 +  | delta (NDvd (ac, Neg co)) = (1 : IntInf.int)
   1.952 +  | delta (NDvd (ac, Bound cl)) = (1 : IntInf.int)
   1.953 +  | delta (NDvd (ac, C ck)) = (1 : IntInf.int)
   1.954 +  | delta (Dvd (aa, Mul (bx, by))) = (1 : IntInf.int)
   1.955 +  | delta (Dvd (aa, Sub (bv, bw))) = (1 : IntInf.int)
   1.956 +  | delta (Dvd (aa, Add (bt, bu))) = (1 : IntInf.int)
   1.957 +  | delta (Dvd (aa, Neg bs)) = (1 : IntInf.int)
   1.958 +  | delta (Dvd (aa, Bound bp)) = (1 : IntInf.int)
   1.959 +  | delta (Dvd (aa, C bo)) = (1 : IntInf.int)
   1.960 +  | delta (NEq z) = (1 : IntInf.int)
   1.961 +  | delta (Eq y) = (1 : IntInf.int)
   1.962 +  | delta (Ge x) = (1 : IntInf.int)
   1.963 +  | delta (Gt w) = (1 : IntInf.int)
   1.964 +  | delta (Le v) = (1 : IntInf.int)
   1.965 +  | delta (Lt u) = (1 : IntInf.int)
   1.966 +  | delta F = (1 : IntInf.int)
   1.967 +  | delta T = (1 : IntInf.int)
   1.968 +  | delta (NDvd (y, Cx (c, e))) = y
   1.969 +  | delta (Dvd (y, Cx (c, e))) = y
   1.970 +  | delta (Or (p, q)) = GCD.ilcm (delta p) (delta q)
   1.971 +  | delta (And (p, q)) = GCD.ilcm (delta p) (delta q);
   1.972 +
   1.973 +fun beta (NClosed aq) = []
   1.974 +  | beta (Closed ap) = []
   1.975 +  | beta (A ao) = []
   1.976 +  | beta (E an) = []
   1.977 +  | beta (Iffa (al, am)) = []
   1.978 +  | beta (Impa (aj, ak)) = []
   1.979 +  | beta (Nota ae) = []
   1.980 +  | beta (NDvd (ac, ad)) = []
   1.981 +  | beta (Dvd (aa, ab)) = []
   1.982 +  | beta (NEq (Mul (gd, ge))) = []
   1.983 +  | beta (NEq (Sub (gb, gc))) = []
   1.984 +  | beta (NEq (Add (fz, ga))) = []
   1.985 +  | beta (NEq (Neg fy)) = []
   1.986 +  | beta (NEq (Bound fv)) = []
   1.987 +  | beta (NEq (C fu)) = []
   1.988 +  | beta (Eq (Mul (fh, fi))) = []
   1.989 +  | beta (Eq (Sub (ff, fg))) = []
   1.990 +  | beta (Eq (Add (fd, fe))) = []
   1.991 +  | beta (Eq (Neg fc)) = []
   1.992 +  | beta (Eq (Bound ez)) = []
   1.993 +  | beta (Eq (C ey)) = []
   1.994 +  | beta (Ge (Mul (el, em))) = []
   1.995 +  | beta (Ge (Sub (ej, ek))) = []
   1.996 +  | beta (Ge (Add (eh, ei))) = []
   1.997 +  | beta (Ge (Neg eg)) = []
   1.998 +  | beta (Ge (Bound ed)) = []
   1.999 +  | beta (Ge (C ec)) = []
  1.1000 +  | beta (Gt (Mul (dp, dq))) = []
  1.1001 +  | beta (Gt (Sub (dn, doa))) = []
  1.1002 +  | beta (Gt (Add (dl, dm))) = []
  1.1003 +  | beta (Gt (Neg dk)) = []
  1.1004 +  | beta (Gt (Bound dh)) = []
  1.1005 +  | beta (Gt (C dg)) = []
  1.1006 +  | beta (Le (Mul (ct, cu))) = []
  1.1007 +  | beta (Le (Sub (cr, cs))) = []
  1.1008 +  | beta (Le (Add (cp, cq))) = []
  1.1009 +  | beta (Le (Neg co)) = []
  1.1010 +  | beta (Le (Bound cl)) = []
  1.1011 +  | beta (Le (C ck)) = []
  1.1012 +  | beta (Lt (Mul (bx, by))) = []
  1.1013 +  | beta (Lt (Sub (bv, bw))) = []
  1.1014 +  | beta (Lt (Add (bt, bu))) = []
  1.1015 +  | beta (Lt (Neg bs)) = []
  1.1016 +  | beta (Lt (Bound bp)) = []
  1.1017 +  | beta (Lt (C bo)) = []
  1.1018 +  | beta F = []
  1.1019 +  | beta T = []
  1.1020 +  | beta (Ge (Cx (c, e))) = [Sub (C (~1 : IntInf.int), e)]
  1.1021 +  | beta (Gt (Cx (c, e))) = [Neg e]
  1.1022 +  | beta (Le (Cx (c, e))) = []
  1.1023 +  | beta (Lt (Cx (c, e))) = []
  1.1024 +  | beta (NEq (Cx (c, e))) = [Neg e]
  1.1025 +  | beta (Eq (Cx (c, e))) = [Sub (C (~1 : IntInf.int), e)]
  1.1026 +  | beta (Or (p, q)) = List.append (beta p) (beta q)
  1.1027 +  | beta (And (p, q)) = List.append (beta p) (beta q);
  1.1028 +
  1.1029 +fun alpha (NClosed aq) = []
  1.1030 +  | alpha (Closed ap) = []
  1.1031 +  | alpha (A ao) = []
  1.1032 +  | alpha (E an) = []
  1.1033 +  | alpha (Iffa (al, am)) = []
  1.1034 +  | alpha (Impa (aj, ak)) = []
  1.1035 +  | alpha (Nota ae) = []
  1.1036 +  | alpha (NDvd (ac, ad)) = []
  1.1037 +  | alpha (Dvd (aa, ab)) = []
  1.1038 +  | alpha (NEq (Mul (gd, ge))) = []
  1.1039 +  | alpha (NEq (Sub (gb, gc))) = []
  1.1040 +  | alpha (NEq (Add (fz, ga))) = []
  1.1041 +  | alpha (NEq (Neg fy)) = []
  1.1042 +  | alpha (NEq (Bound fv)) = []
  1.1043 +  | alpha (NEq (C fu)) = []
  1.1044 +  | alpha (Eq (Mul (fh, fi))) = []
  1.1045 +  | alpha (Eq (Sub (ff, fg))) = []
  1.1046 +  | alpha (Eq (Add (fd, fe))) = []
  1.1047 +  | alpha (Eq (Neg fc)) = []
  1.1048 +  | alpha (Eq (Bound ez)) = []
  1.1049 +  | alpha (Eq (C ey)) = []
  1.1050 +  | alpha (Ge (Mul (el, em))) = []
  1.1051 +  | alpha (Ge (Sub (ej, ek))) = []
  1.1052 +  | alpha (Ge (Add (eh, ei))) = []
  1.1053 +  | alpha (Ge (Neg eg)) = []
  1.1054 +  | alpha (Ge (Bound ed)) = []
  1.1055 +  | alpha (Ge (C ec)) = []
  1.1056 +  | alpha (Gt (Mul (dp, dq))) = []
  1.1057 +  | alpha (Gt (Sub (dn, doa))) = []
  1.1058 +  | alpha (Gt (Add (dl, dm))) = []
  1.1059 +  | alpha (Gt (Neg dk)) = []
  1.1060 +  | alpha (Gt (Bound dh)) = []
  1.1061 +  | alpha (Gt (C dg)) = []
  1.1062 +  | alpha (Le (Mul (ct, cu))) = []
  1.1063 +  | alpha (Le (Sub (cr, cs))) = []
  1.1064 +  | alpha (Le (Add (cp, cq))) = []
  1.1065 +  | alpha (Le (Neg co)) = []
  1.1066 +  | alpha (Le (Bound cl)) = []
  1.1067 +  | alpha (Le (C ck)) = []
  1.1068 +  | alpha (Lt (Mul (bx, by))) = []
  1.1069 +  | alpha (Lt (Sub (bv, bw))) = []
  1.1070 +  | alpha (Lt (Add (bt, bu))) = []
  1.1071 +  | alpha (Lt (Neg bs)) = []
  1.1072 +  | alpha (Lt (Bound bp)) = []
  1.1073 +  | alpha (Lt (C bo)) = []
  1.1074 +  | alpha F = []
  1.1075 +  | alpha T = []
  1.1076 +  | alpha (Ge (Cx (c, e))) = []
  1.1077 +  | alpha (Gt (Cx (c, e))) = []
  1.1078 +  | alpha (Le (Cx (c, e))) = [Add (C (~1 : IntInf.int), e)]
  1.1079 +  | alpha (Lt (Cx (c, e))) = [e]
  1.1080 +  | alpha (NEq (Cx (c, e))) = [e]
  1.1081 +  | alpha (Eq (Cx (c, e))) = [Add (C (~1 : IntInf.int), e)]
  1.1082 +  | alpha (Or (p, q)) = List.append (alpha p) (alpha q)
  1.1083 +  | alpha (And (p, q)) = List.append (alpha p) (alpha q);
  1.1084 +
  1.1085 +fun numadd (Mul (ar, asa), Mul (aza, azb)) = Add (Mul (ar, asa), Mul (aza, azb))
  1.1086 +  | numadd (Mul (ar, asa), Sub (ayy, ayz)) = Add (Mul (ar, asa), Sub (ayy, ayz))
  1.1087 +  | numadd (Mul (ar, asa), Add (Mul (azw, Mul (bas, bat)), ayx)) =
  1.1088 +    Add (Mul (ar, asa), Add (Mul (azw, Mul (bas, bat)), ayx))
  1.1089 +  | numadd (Mul (ar, asa), Add (Mul (azw, Sub (baq, bar)), ayx)) =
  1.1090 +    Add (Mul (ar, asa), Add (Mul (azw, Sub (baq, bar)), ayx))
  1.1091 +  | numadd (Mul (ar, asa), Add (Mul (azw, Add (bao, bap)), ayx)) =
  1.1092 +    Add (Mul (ar, asa), Add (Mul (azw, Add (bao, bap)), ayx))
  1.1093 +  | numadd (Mul (ar, asa), Add (Mul (azw, Neg ban), ayx)) =
  1.1094 +    Add (Mul (ar, asa), Add (Mul (azw, Neg ban), ayx))
  1.1095 +  | numadd (Mul (ar, asa), Add (Mul (azw, Cx (bal, bam)), ayx)) =
  1.1096 +    Add (Mul (ar, asa), Add (Mul (azw, Cx (bal, bam)), ayx))
  1.1097 +  | numadd (Mul (ar, asa), Add (Mul (azw, C baj), ayx)) =
  1.1098 +    Add (Mul (ar, asa), Add (Mul (azw, C baj), ayx))
  1.1099 +  | numadd (Mul (ar, asa), Add (Sub (azu, azv), ayx)) =
  1.1100 +    Add (Mul (ar, asa), Add (Sub (azu, azv), ayx))
  1.1101 +  | numadd (Mul (ar, asa), Add (Add (azs, azt), ayx)) =
  1.1102 +    Add (Mul (ar, asa), Add (Add (azs, azt), ayx))
  1.1103 +  | numadd (Mul (ar, asa), Add (Neg azr, ayx)) =
  1.1104 +    Add (Mul (ar, asa), Add (Neg azr, ayx))
  1.1105 +  | numadd (Mul (ar, asa), Add (Cx (azp, azq), ayx)) =
  1.1106 +    Add (Mul (ar, asa), Add (Cx (azp, azq), ayx))
  1.1107 +  | numadd (Mul (ar, asa), Add (Bound azo, ayx)) =
  1.1108 +    Add (Mul (ar, asa), Add (Bound azo, ayx))
  1.1109 +  | numadd (Mul (ar, asa), Add (C azn, ayx)) =
  1.1110 +    Add (Mul (ar, asa), Add (C azn, ayx))
  1.1111 +  | numadd (Mul (ar, asa), Neg ayv) = Add (Mul (ar, asa), Neg ayv)
  1.1112 +  | numadd (Mul (ar, asa), Cx (ayt, ayu)) = Add (Mul (ar, asa), Cx (ayt, ayu))
  1.1113 +  | numadd (Mul (ar, asa), Bound ays) = Add (Mul (ar, asa), Bound ays)
  1.1114 +  | numadd (Mul (ar, asa), C ayr) = Add (Mul (ar, asa), C ayr)
  1.1115 +  | numadd (Sub (ap, aq), Mul (awm, awn)) = Add (Sub (ap, aq), Mul (awm, awn))
  1.1116 +  | numadd (Sub (ap, aq), Sub (awk, awl)) = Add (Sub (ap, aq), Sub (awk, awl))
  1.1117 +  | numadd (Sub (ap, aq), Add (Mul (axi, Mul (aye, ayf)), awj)) =
  1.1118 +    Add (Sub (ap, aq), Add (Mul (axi, Mul (aye, ayf)), awj))
  1.1119 +  | numadd (Sub (ap, aq), Add (Mul (axi, Sub (ayc, ayd)), awj)) =
  1.1120 +    Add (Sub (ap, aq), Add (Mul (axi, Sub (ayc, ayd)), awj))
  1.1121 +  | numadd (Sub (ap, aq), Add (Mul (axi, Add (aya, ayb)), awj)) =
  1.1122 +    Add (Sub (ap, aq), Add (Mul (axi, Add (aya, ayb)), awj))
  1.1123 +  | numadd (Sub (ap, aq), Add (Mul (axi, Neg axz), awj)) =
  1.1124 +    Add (Sub (ap, aq), Add (Mul (axi, Neg axz), awj))
  1.1125 +  | numadd (Sub (ap, aq), Add (Mul (axi, Cx (axx, axy)), awj)) =
  1.1126 +    Add (Sub (ap, aq), Add (Mul (axi, Cx (axx, axy)), awj))
  1.1127 +  | numadd (Sub (ap, aq), Add (Mul (axi, C axv), awj)) =
  1.1128 +    Add (Sub (ap, aq), Add (Mul (axi, C axv), awj))
  1.1129 +  | numadd (Sub (ap, aq), Add (Sub (axg, axh), awj)) =
  1.1130 +    Add (Sub (ap, aq), Add (Sub (axg, axh), awj))
  1.1131 +  | numadd (Sub (ap, aq), Add (Add (axe, axf), awj)) =
  1.1132 +    Add (Sub (ap, aq), Add (Add (axe, axf), awj))
  1.1133 +  | numadd (Sub (ap, aq), Add (Neg axd, awj)) =
  1.1134 +    Add (Sub (ap, aq), Add (Neg axd, awj))
  1.1135 +  | numadd (Sub (ap, aq), Add (Cx (axb, axc), awj)) =
  1.1136 +    Add (Sub (ap, aq), Add (Cx (axb, axc), awj))
  1.1137 +  | numadd (Sub (ap, aq), Add (Bound axa, awj)) =
  1.1138 +    Add (Sub (ap, aq), Add (Bound axa, awj))
  1.1139 +  | numadd (Sub (ap, aq), Add (C awz, awj)) =
  1.1140 +    Add (Sub (ap, aq), Add (C awz, awj))
  1.1141 +  | numadd (Sub (ap, aq), Neg awh) = Add (Sub (ap, aq), Neg awh)
  1.1142 +  | numadd (Sub (ap, aq), Cx (awf, awg)) = Add (Sub (ap, aq), Cx (awf, awg))
  1.1143 +  | numadd (Sub (ap, aq), Bound awe) = Add (Sub (ap, aq), Bound awe)
  1.1144 +  | numadd (Sub (ap, aq), C awd) = Add (Sub (ap, aq), C awd)
  1.1145 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Mul (aty, atz)) =
  1.1146 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Mul (aty, atz))
  1.1147 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Sub (atw, atx)) =
  1.1148 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Sub (atw, atx))
  1.1149 +  | numadd
  1.1150 +    (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, Mul (avq, avr)), atv)) =
  1.1151 +    Add (Add (Mul (mc, Mul (acp, acq)), ao),
  1.1152 +          Add (Mul (auu, Mul (avq, avr)), atv))
  1.1153 +  | numadd
  1.1154 +    (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, Sub (avo, avp)), atv)) =
  1.1155 +    Add (Add (Mul (mc, Mul (acp, acq)), ao),
  1.1156 +          Add (Mul (auu, Sub (avo, avp)), atv))
  1.1157 +  | numadd
  1.1158 +    (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, Add (avm, avn)), atv)) =
  1.1159 +    Add (Add (Mul (mc, Mul (acp, acq)), ao),
  1.1160 +          Add (Mul (auu, Add (avm, avn)), atv))
  1.1161 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, Neg avl), atv)) =
  1.1162 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, Neg avl), atv))
  1.1163 +  | numadd
  1.1164 +    (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, Cx (avj, avk)), atv)) =
  1.1165 +    Add (Add (Mul (mc, Mul (acp, acq)), ao),
  1.1166 +          Add (Mul (auu, Cx (avj, avk)), atv))
  1.1167 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, C avh), atv)) =
  1.1168 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, C avh), atv))
  1.1169 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Sub (aus, aut), atv)) =
  1.1170 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Sub (aus, aut), atv))
  1.1171 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Add (auq, aur), atv)) =
  1.1172 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Add (auq, aur), atv))
  1.1173 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Neg aup, atv)) =
  1.1174 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Neg aup, atv))
  1.1175 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Cx (aun, auo), atv)) =
  1.1176 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Cx (aun, auo), atv))
  1.1177 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Bound aum, atv)) =
  1.1178 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Bound aum, atv))
  1.1179 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (C aul, atv)) =
  1.1180 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (C aul, atv))
  1.1181 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Neg att) =
  1.1182 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Neg att)
  1.1183 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Cx (atr, ats)) =
  1.1184 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Cx (atr, ats))
  1.1185 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Bound atq) =
  1.1186 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), Bound atq)
  1.1187 +  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), C atp) =
  1.1188 +    Add (Add (Mul (mc, Mul (acp, acq)), ao), C atp)
  1.1189 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Mul (ark, arl)) =
  1.1190 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Mul (ark, arl))
  1.1191 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Sub (ari, arj)) =
  1.1192 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Sub (ari, arj))
  1.1193 +  | numadd
  1.1194 +    (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, Mul (atc, atd)), arh)) =
  1.1195 +    Add (Add (Mul (mc, Sub (acn, aco)), ao),
  1.1196 +          Add (Mul (asg, Mul (atc, atd)), arh))
  1.1197 +  | numadd
  1.1198 +    (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, Sub (ata, atb)), arh)) =
  1.1199 +    Add (Add (Mul (mc, Sub (acn, aco)), ao),
  1.1200 +          Add (Mul (asg, Sub (ata, atb)), arh))
  1.1201 +  | numadd
  1.1202 +    (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, Add (asy, asz)), arh)) =
  1.1203 +    Add (Add (Mul (mc, Sub (acn, aco)), ao),
  1.1204 +          Add (Mul (asg, Add (asy, asz)), arh))
  1.1205 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, Neg asx), arh)) =
  1.1206 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, Neg asx), arh))
  1.1207 +  | numadd
  1.1208 +    (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, Cx (asv, asw)), arh)) =
  1.1209 +    Add (Add (Mul (mc, Sub (acn, aco)), ao),
  1.1210 +          Add (Mul (asg, Cx (asv, asw)), arh))
  1.1211 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, C ast), arh)) =
  1.1212 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, C ast), arh))
  1.1213 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Sub (ase, asf), arh)) =
  1.1214 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Sub (ase, asf), arh))
  1.1215 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Add (asc, asd), arh)) =
  1.1216 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Add (asc, asd), arh))
  1.1217 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Neg asb, arh)) =
  1.1218 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Neg asb, arh))
  1.1219 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Cx (arz, asa), arh)) =
  1.1220 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Cx (arz, asa), arh))
  1.1221 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Bound ary, arh)) =
  1.1222 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Bound ary, arh))
  1.1223 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (C arx, arh)) =
  1.1224 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (C arx, arh))
  1.1225 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Neg arf) =
  1.1226 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Neg arf)
  1.1227 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Cx (ard, are)) =
  1.1228 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Cx (ard, are))
  1.1229 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Bound arc) =
  1.1230 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), Bound arc)
  1.1231 +  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), C arb) =
  1.1232 +    Add (Add (Mul (mc, Sub (acn, aco)), ao), C arb)
  1.1233 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Mul (aow, aox)) =
  1.1234 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Mul (aow, aox))
  1.1235 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Sub (aou, aov)) =
  1.1236 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Sub (aou, aov))
  1.1237 +  | numadd
  1.1238 +    (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, Mul (aqo, aqp)), aot)) =
  1.1239 +    Add (Add (Mul (mc, Add (acl, acm)), ao),
  1.1240 +          Add (Mul (aps, Mul (aqo, aqp)), aot))
  1.1241 +  | numadd
  1.1242 +    (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, Sub (aqm, aqn)), aot)) =
  1.1243 +    Add (Add (Mul (mc, Add (acl, acm)), ao),
  1.1244 +          Add (Mul (aps, Sub (aqm, aqn)), aot))
  1.1245 +  | numadd
  1.1246 +    (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, Add (aqk, aql)), aot)) =
  1.1247 +    Add (Add (Mul (mc, Add (acl, acm)), ao),
  1.1248 +          Add (Mul (aps, Add (aqk, aql)), aot))
  1.1249 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, Neg aqj), aot)) =
  1.1250 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, Neg aqj), aot))
  1.1251 +  | numadd
  1.1252 +    (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, Cx (aqh, aqi)), aot)) =
  1.1253 +    Add (Add (Mul (mc, Add (acl, acm)), ao),
  1.1254 +          Add (Mul (aps, Cx (aqh, aqi)), aot))
  1.1255 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, C aqf), aot)) =
  1.1256 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, C aqf), aot))
  1.1257 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Sub (apq, apr), aot)) =
  1.1258 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Sub (apq, apr), aot))
  1.1259 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Add (apo, app), aot)) =
  1.1260 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Add (apo, app), aot))
  1.1261 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Neg apn, aot)) =
  1.1262 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Neg apn, aot))
  1.1263 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Cx (apl, apm), aot)) =
  1.1264 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Cx (apl, apm), aot))
  1.1265 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Bound apk, aot)) =
  1.1266 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Bound apk, aot))
  1.1267 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (C apj, aot)) =
  1.1268 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (C apj, aot))
  1.1269 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Neg aor) =
  1.1270 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Neg aor)
  1.1271 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Cx (aop, aoq)) =
  1.1272 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Cx (aop, aoq))
  1.1273 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Bound aoo) =
  1.1274 +    Add (Add (Mul (mc, Add (acl, acm)), ao), Bound aoo)
  1.1275 +  | numadd (Add (Mul (mc, Add (acl, acm)), ao), C aon) =
  1.1276 +    Add (Add (Mul (mc, Add (acl, acm)), ao), C aon)
  1.1277 +  | numadd (Add (Mul (mc, Neg ack), ao), Mul (ami, amj)) =
  1.1278 +    Add (Add (Mul (mc, Neg ack), ao), Mul (ami, amj))
  1.1279 +  | numadd (Add (Mul (mc, Neg ack), ao), Sub (amg, amh)) =
  1.1280 +    Add (Add (Mul (mc, Neg ack), ao), Sub (amg, amh))
  1.1281 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Mul (aoa, aob)), amf)) =
  1.1282 +    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Mul (aoa, aob)), amf))
  1.1283 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Sub (any, anz)), amf)) =
  1.1284 +    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Sub (any, anz)), amf))
  1.1285 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Add (anw, anx)), amf)) =
  1.1286 +    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Add (anw, anx)), amf))
  1.1287 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Neg anv), amf)) =
  1.1288 +    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Neg anv), amf))
  1.1289 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Cx (ant, anu)), amf)) =
  1.1290 +    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Cx (ant, anu)), amf))
  1.1291 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, C anr), amf)) =
  1.1292 +    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, C anr), amf))
  1.1293 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Sub (anc, anda), amf)) =
  1.1294 +    Add (Add (Mul (mc, Neg ack), ao), Add (Sub (anc, anda), amf))
  1.1295 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Add (ana, anb), amf)) =
  1.1296 +    Add (Add (Mul (mc, Neg ack), ao), Add (Add (ana, anb), amf))
  1.1297 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Neg amz, amf)) =
  1.1298 +    Add (Add (Mul (mc, Neg ack), ao), Add (Neg amz, amf))
  1.1299 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Cx (amx, amy), amf)) =
  1.1300 +    Add (Add (Mul (mc, Neg ack), ao), Add (Cx (amx, amy), amf))
  1.1301 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (Bound amw, amf)) =
  1.1302 +    Add (Add (Mul (mc, Neg ack), ao), Add (Bound amw, amf))
  1.1303 +  | numadd (Add (Mul (mc, Neg ack), ao), Add (C amv, amf)) =
  1.1304 +    Add (Add (Mul (mc, Neg ack), ao), Add (C amv, amf))
  1.1305 +  | numadd (Add (Mul (mc, Neg ack), ao), Neg amd) =
  1.1306 +    Add (Add (Mul (mc, Neg ack), ao), Neg amd)
  1.1307 +  | numadd (Add (Mul (mc, Neg ack), ao), Cx (amb, amc)) =
  1.1308 +    Add (Add (Mul (mc, Neg ack), ao), Cx (amb, amc))
  1.1309 +  | numadd (Add (Mul (mc, Neg ack), ao), Bound ama) =
  1.1310 +    Add (Add (Mul (mc, Neg ack), ao), Bound ama)
  1.1311 +  | numadd (Add (Mul (mc, Neg ack), ao), C alz) =
  1.1312 +    Add (Add (Mul (mc, Neg ack), ao), C alz)
  1.1313 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Mul (aju, ajv)) =
  1.1314 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Mul (aju, ajv))
  1.1315 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Sub (ajs, ajt)) =
  1.1316 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Sub (ajs, ajt))
  1.1317 +  | numadd
  1.1318 +    (Add (Mul (mc, Cx (aci, acj)), ao), Add (Mul (akq, Mul (alm, aln)), ajr)) =
  1.1319 +    Add (Add (Mul (mc, Cx (aci, acj)), ao),
  1.1320 +          Add (Mul (akq, Mul (alm, aln)), ajr))
  1.1321 +  | numadd
  1.1322 +    (Add (Mul (mc, Cx (aci, acj)), ao), Add (Mul (akq, Sub (alk, all)), ajr)) =
  1.1323 +    Add (Add (Mul (mc, Cx (aci, acj)), ao),
  1.1324 +          Add (Mul (akq, Sub (alk, all)), ajr))
  1.1325 +  | numadd
  1.1326 +    (Add (Mul (mc, Cx (aci, acj)), ao), Add (Mul (akq, Add (ali, alj)), ajr)) =
  1.1327 +    Add (Add (Mul (mc, Cx (aci, acj)), ao),
  1.1328 +          Add (Mul (akq, Add (ali, alj)), ajr))
  1.1329 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Add (Mul (akq, Neg alh), ajr)) =
  1.1330 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Add (Mul (akq, Neg alh), ajr))
  1.1331 +  | numadd
  1.1332 +    (Add (Mul (mc, Cx (aci, acj)), ao), Add (Mul (akq, Cx (alf, alg)), ajr)) =
  1.1333 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Add (Mul (akq, Cx (alf, alg)), ajr))
  1.1334 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Add (Mul (akq, C ald), ajr)) =
  1.1335 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Add (Mul (akq, C ald), ajr))
  1.1336 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Add (Sub (ako, akp), ajr)) =
  1.1337 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Add (Sub (ako, akp), ajr))
  1.1338 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Add (Add (akm, akn), ajr)) =
  1.1339 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Add (Add (akm, akn), ajr))
  1.1340 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Add (Neg akl, ajr)) =
  1.1341 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Add (Neg akl, ajr))
  1.1342 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Add (Cx (akj, akk), ajr)) =
  1.1343 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Add (Cx (akj, akk), ajr))
  1.1344 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Add (Bound aki, ajr)) =
  1.1345 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Add (Bound aki, ajr))
  1.1346 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Add (C akh, ajr)) =
  1.1347 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Add (C akh, ajr))
  1.1348 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Neg ajp) =
  1.1349 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Neg ajp)
  1.1350 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Cx (ajn, ajo)) =
  1.1351 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Cx (ajn, ajo))
  1.1352 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), Bound ajm) =
  1.1353 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), Bound ajm)
  1.1354 +  | numadd (Add (Mul (mc, Cx (aci, acj)), ao), C ajl) =
  1.1355 +    Add (Add (Mul (mc, Cx (aci, acj)), ao), C ajl)
  1.1356 +  | numadd (Add (Mul (mc, C acg), ao), Mul (adl, adm)) =
  1.1357 +    Add (Add (Mul (mc, C acg), ao), Mul (adl, adm))
  1.1358 +  | numadd (Add (Mul (mc, C acg), ao), Sub (adj, adk)) =
  1.1359 +    Add (Add (Mul (mc, C acg), ao), Sub (adj, adk))
  1.1360 +  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Mul (afd, afe)), adi)) =
  1.1361 +    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Mul (afd, afe)), adi))
  1.1362 +  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Sub (afb, afc)), adi)) =
  1.1363 +    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Sub (afb, afc)), adi))
  1.1364 +  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Add (aez, afa)), adi)) =
  1.1365 +    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Add (aez, afa)), adi))
  1.1366 +  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Neg aey), adi)) =
  1.1367 +    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Neg aey), adi))
  1.1368 +  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Cx (aew, aex)), adi)) =
  1.1369 +    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Cx (aew, aex)), adi))
  1.1370 +  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, C aeu), adi)) =
  1.1371 +    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, C aeu), adi))
  1.1372 +  | numadd (Add (Mul (mc, C acg), ao), Add (Sub (aef, aeg), adi)) =
  1.1373 +    Add (Add (Mul (mc, C acg), ao), Add (Sub (aef, aeg), adi))
  1.1374 +  | numadd (Add (Mul (mc, C acg), ao), Add (Add (aed, aee), adi)) =
  1.1375 +    Add (Add (Mul (mc, C acg), ao), Add (Add (aed, aee), adi))
  1.1376 +  | numadd (Add (Mul (mc, C acg), ao), Add (Neg aec, adi)) =
  1.1377 +    Add (Add (Mul (mc, C acg), ao), Add (Neg aec, adi))
  1.1378 +  | numadd (Add (Mul (mc, C acg), ao), Add (Cx (aea, aeb), adi)) =
  1.1379 +    Add (Add (Mul (mc, C acg), ao), Add (Cx (aea, aeb), adi))
  1.1380 +  | numadd (Add (Mul (mc, C acg), ao), Add (Bound adz, adi)) =
  1.1381 +    Add (Add (Mul (mc, C acg), ao), Add (Bound adz, adi))
  1.1382 +  | numadd (Add (Mul (mc, C acg), ao), Add (C ady, adi)) =
  1.1383 +    Add (Add (Mul (mc, C acg), ao), Add (C ady, adi))
  1.1384 +  | numadd (Add (Mul (mc, C acg), ao), Neg adg) =
  1.1385 +    Add (Add (Mul (mc, C acg), ao), Neg adg)
  1.1386 +  | numadd (Add (Mul (mc, C acg), ao), Cx (ade, adf)) =
  1.1387 +    Add (Add (Mul (mc, C acg), ao), Cx (ade, adf))
  1.1388 +  | numadd (Add (Mul (mc, C acg), ao), Bound add) =
  1.1389 +    Add (Add (Mul (mc, C acg), ao), Bound add)
  1.1390 +  | numadd (Add (Mul (mc, C acg), ao), C adc) =
  1.1391 +    Add (Add (Mul (mc, C acg), ao), C adc)
  1.1392 +  | numadd (Add (Sub (ma, mb), ao), Mul (zq, zr)) =
  1.1393 +    Add (Add (Sub (ma, mb), ao), Mul (zq, zr))
  1.1394 +  | numadd (Add (Sub (ma, mb), ao), Sub (zo, zp)) =
  1.1395 +    Add (Add (Sub (ma, mb), ao), Sub (zo, zp))
  1.1396 +  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, Mul (abi, abj)), zn)) =
  1.1397 +    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, Mul (abi, abj)), zn))
  1.1398 +  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, Sub (abg, abh)), zn)) =
  1.1399 +    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, Sub (abg, abh)), zn))
  1.1400 +  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, Add (abe, abf)), zn)) =
  1.1401 +    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, Add (abe, abf)), zn))
  1.1402 +  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, Neg abd), zn)) =
  1.1403 +    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, Neg abd), zn))
  1.1404 +  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, Cx (abb, abc)), zn)) =
  1.1405 +    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, Cx (abb, abc)), zn))
  1.1406 +  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, C aaz), zn)) =
  1.1407 +    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, C aaz), zn))
  1.1408 +  | numadd (Add (Sub (ma, mb), ao), Add (Sub (aak, aal), zn)) =
  1.1409 +    Add (Add (Sub (ma, mb), ao), Add (Sub (aak, aal), zn))
  1.1410 +  | numadd (Add (Sub (ma, mb), ao), Add (Add (aai, aaj), zn)) =
  1.1411 +    Add (Add (Sub (ma, mb), ao), Add (Add (aai, aaj), zn))
  1.1412 +  | numadd (Add (Sub (ma, mb), ao), Add (Neg aah, zn)) =
  1.1413 +    Add (Add (Sub (ma, mb), ao), Add (Neg aah, zn))
  1.1414 +  | numadd (Add (Sub (ma, mb), ao), Add (Cx (aaf, aag), zn)) =
  1.1415 +    Add (Add (Sub (ma, mb), ao), Add (Cx (aaf, aag), zn))
  1.1416 +  | numadd (Add (Sub (ma, mb), ao), Add (Bound aae, zn)) =
  1.1417 +    Add (Add (Sub (ma, mb), ao), Add (Bound aae, zn))
  1.1418 +  | numadd (Add (Sub (ma, mb), ao), Add (C aad, zn)) =
  1.1419 +    Add (Add (Sub (ma, mb), ao), Add (C aad, zn))
  1.1420 +  | numadd (Add (Sub (ma, mb), ao), Neg zl) =
  1.1421 +    Add (Add (Sub (ma, mb), ao), Neg zl)
  1.1422 +  | numadd (Add (Sub (ma, mb), ao), Cx (zj, zk)) =
  1.1423 +    Add (Add (Sub (ma, mb), ao), Cx (zj, zk))
  1.1424 +  | numadd (Add (Sub (ma, mb), ao), Bound zi) =
  1.1425 +    Add (Add (Sub (ma, mb), ao), Bound zi)
  1.1426 +  | numadd (Add (Sub (ma, mb), ao), C zh) = Add (Add (Sub (ma, mb), ao), C zh)
  1.1427 +  | numadd (Add (Add (ly, lz), ao), Mul (xc, xd)) =
  1.1428 +    Add (Add (Add (ly, lz), ao), Mul (xc, xd))
  1.1429 +  | numadd (Add (Add (ly, lz), ao), Sub (xa, xb)) =
  1.1430 +    Add (Add (Add (ly, lz), ao), Sub (xa, xb))
  1.1431 +  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, Mul (yu, yv)), wz)) =
  1.1432 +    Add (Add (Add (ly, lz), ao), Add (Mul (xy, Mul (yu, yv)), wz))
  1.1433 +  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, Sub (ys, yt)), wz)) =
  1.1434 +    Add (Add (Add (ly, lz), ao), Add (Mul (xy, Sub (ys, yt)), wz))
  1.1435 +  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, Add (yq, yr)), wz)) =
  1.1436 +    Add (Add (Add (ly, lz), ao), Add (Mul (xy, Add (yq, yr)), wz))
  1.1437 +  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, Neg yp), wz)) =
  1.1438 +    Add (Add (Add (ly, lz), ao), Add (Mul (xy, Neg yp), wz))
  1.1439 +  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, Cx (yn, yo)), wz)) =
  1.1440 +    Add (Add (Add (ly, lz), ao), Add (Mul (xy, Cx (yn, yo)), wz))
  1.1441 +  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, C yl), wz)) =
  1.1442 +    Add (Add (Add (ly, lz), ao), Add (Mul (xy, C yl), wz))
  1.1443 +  | numadd (Add (Add (ly, lz), ao), Add (Sub (xw, xx), wz)) =
  1.1444 +    Add (Add (Add (ly, lz), ao), Add (Sub (xw, xx), wz))
  1.1445 +  | numadd (Add (Add (ly, lz), ao), Add (Add (xu, xv), wz)) =
  1.1446 +    Add (Add (Add (ly, lz), ao), Add (Add (xu, xv), wz))
  1.1447 +  | numadd (Add (Add (ly, lz), ao), Add (Neg xt, wz)) =
  1.1448 +    Add (Add (Add (ly, lz), ao), Add (Neg xt, wz))
  1.1449 +  | numadd (Add (Add (ly, lz), ao), Add (Cx (xr, xs), wz)) =
  1.1450 +    Add (Add (Add (ly, lz), ao), Add (Cx (xr, xs), wz))
  1.1451 +  | numadd (Add (Add (ly, lz), ao), Add (Bound xq, wz)) =
  1.1452 +    Add (Add (Add (ly, lz), ao), Add (Bound xq, wz))
  1.1453 +  | numadd (Add (Add (ly, lz), ao), Add (C xp, wz)) =
  1.1454 +    Add (Add (Add (ly, lz), ao), Add (C xp, wz))
  1.1455 +  | numadd (Add (Add (ly, lz), ao), Neg wx) =
  1.1456 +    Add (Add (Add (ly, lz), ao), Neg wx)
  1.1457 +  | numadd (Add (Add (ly, lz), ao), Cx (wv, ww)) =
  1.1458 +    Add (Add (Add (ly, lz), ao), Cx (wv, ww))
  1.1459 +  | numadd (Add (Add (ly, lz), ao), Bound wu) =
  1.1460 +    Add (Add (Add (ly, lz), ao), Bound wu)
  1.1461 +  | numadd (Add (Add (ly, lz), ao), C wt) = Add (Add (Add (ly, lz), ao), C wt)
  1.1462 +  | numadd (Add (Neg lx, ao), Mul (uo, up)) =
  1.1463 +    Add (Add (Neg lx, ao), Mul (uo, up))
  1.1464 +  | numadd (Add (Neg lx, ao), Sub (um, un)) =
  1.1465 +    Add (Add (Neg lx, ao), Sub (um, un))
  1.1466 +  | numadd (Add (Neg lx, ao), Add (Mul (vk, Mul (wg, wh)), ul)) =
  1.1467 +    Add (Add (Neg lx, ao), Add (Mul (vk, Mul (wg, wh)), ul))
  1.1468 +  | numadd (Add (Neg lx, ao), Add (Mul (vk, Sub (we, wf)), ul)) =
  1.1469 +    Add (Add (Neg lx, ao), Add (Mul (vk, Sub (we, wf)), ul))
  1.1470 +  | numadd (Add (Neg lx, ao), Add (Mul (vk, Add (wc, wd)), ul)) =
  1.1471 +    Add (Add (Neg lx, ao), Add (Mul (vk, Add (wc, wd)), ul))
  1.1472 +  | numadd (Add (Neg lx, ao), Add (Mul (vk, Neg wb), ul)) =
  1.1473 +    Add (Add (Neg lx, ao), Add (Mul (vk, Neg wb), ul))
  1.1474 +  | numadd (Add (Neg lx, ao), Add (Mul (vk, Cx (vz, wa)), ul)) =
  1.1475 +    Add (Add (Neg lx, ao), Add (Mul (vk, Cx (vz, wa)), ul))
  1.1476 +  | numadd (Add (Neg lx, ao), Add (Mul (vk, C vx), ul)) =
  1.1477 +    Add (Add (Neg lx, ao), Add (Mul (vk, C vx), ul))
  1.1478 +  | numadd (Add (Neg lx, ao), Add (Sub (vi, vj), ul)) =
  1.1479 +    Add (Add (Neg lx, ao), Add (Sub (vi, vj), ul))
  1.1480 +  | numadd (Add (Neg lx, ao), Add (Add (vg, vh), ul)) =
  1.1481 +    Add (Add (Neg lx, ao), Add (Add (vg, vh), ul))
  1.1482 +  | numadd (Add (Neg lx, ao), Add (Neg vf, ul)) =
  1.1483 +    Add (Add (Neg lx, ao), Add (Neg vf, ul))
  1.1484 +  | numadd (Add (Neg lx, ao), Add (Cx (vd, ve), ul)) =
  1.1485 +    Add (Add (Neg lx, ao), Add (Cx (vd, ve), ul))
  1.1486 +  | numadd (Add (Neg lx, ao), Add (Bound vc, ul)) =
  1.1487 +    Add (Add (Neg lx, ao), Add (Bound vc, ul))
  1.1488 +  | numadd (Add (Neg lx, ao), Add (C vb, ul)) =
  1.1489 +    Add (Add (Neg lx, ao), Add (C vb, ul))
  1.1490 +  | numadd (Add (Neg lx, ao), Neg uj) = Add (Add (Neg lx, ao), Neg uj)
  1.1491 +  | numadd (Add (Neg lx, ao), Cx (uh, ui)) = Add (Add (Neg lx, ao), Cx (uh, ui))
  1.1492 +  | numadd (Add (Neg lx, ao), Bound ug) = Add (Add (Neg lx, ao), Bound ug)
  1.1493 +  | numadd (Add (Neg lx, ao), C uf) = Add (Add (Neg lx, ao), C uf)
  1.1494 +  | numadd (Add (Cx (lv, lw), ao), Mul (sa, sb)) =
  1.1495 +    Add (Add (Cx (lv, lw), ao), Mul (sa, sb))
  1.1496 +  | numadd (Add (Cx (lv, lw), ao), Sub (ry, rz)) =
  1.1497 +    Add (Add (Cx (lv, lw), ao), Sub (ry, rz))
  1.1498 +  | numadd (Add (Cx (lv, lw), ao), Add (Mul (sw, Mul (ts, tt)), rx)) =
  1.1499 +    Add (Add (Cx (lv, lw), ao), Add (Mul (sw, Mul (ts, tt)), rx))
  1.1500 +  | numadd (Add (Cx (lv, lw), ao), Add (Mul (sw, Sub (tq, tr)), rx)) =
  1.1501 +    Add (Add (Cx (lv, lw), ao), Add (Mul (sw, Sub (tq, tr)), rx))
  1.1502 +  | numadd (Add (Cx (lv, lw), ao), Add (Mul (sw, Add (to, tp)), rx)) =
  1.1503 +    Add (Add (Cx (lv, lw), ao), Add (Mul (sw, Add (to, tp)), rx))
  1.1504 +  | numadd (Add (Cx (lv, lw), ao), Add (Mul (sw, Neg tn), rx)) =
  1.1505 +    Add (Add (Cx (lv, lw), ao), Add (Mul (sw, Neg tn), rx))
  1.1506 +  | numadd (Add (Cx (lv, lw), ao), Add (Mul (sw, Cx (tl, tm)), rx)) =
  1.1507 +    Add (Add (Cx (lv, lw), ao), Add (Mul (sw, Cx (tl, tm)), rx))
  1.1508 +  | numadd (Add (Cx (lv, lw), ao), Add (Mul (sw, C tj), rx)) =
  1.1509 +    Add (Add (Cx (lv, lw), ao), Add (Mul (sw, C tj), rx))
  1.1510 +  | numadd (Add (Cx (lv, lw), ao), Add (Sub (su, sv), rx)) =
  1.1511 +    Add (Add (Cx (lv, lw), ao), Add (Sub (su, sv), rx))
  1.1512 +  | numadd (Add (Cx (lv, lw), ao), Add (Add (ss, st), rx)) =
  1.1513 +    Add (Add (Cx (lv, lw), ao), Add (Add (ss, st), rx))
  1.1514 +  | numadd (Add (Cx (lv, lw), ao), Add (Neg sr, rx)) =
  1.1515 +    Add (Add (Cx (lv, lw), ao), Add (Neg sr, rx))
  1.1516 +  | numadd (Add (Cx (lv, lw), ao), Add (Cx (sp, sq), rx)) =
  1.1517 +    Add (Add (Cx (lv, lw), ao), Add (Cx (sp, sq), rx))
  1.1518 +  | numadd (Add (Cx (lv, lw), ao), Add (Bound so, rx)) =
  1.1519 +    Add (Add (Cx (lv, lw), ao), Add (Bound so, rx))
  1.1520 +  | numadd (Add (Cx (lv, lw), ao), Add (C sn, rx)) =
  1.1521 +    Add (Add (Cx (lv, lw), ao), Add (C sn, rx))
  1.1522 +  | numadd (Add (Cx (lv, lw), ao), Neg rv) = Add (Add (Cx (lv, lw), ao), Neg rv)
  1.1523 +  | numadd (Add (Cx (lv, lw), ao), Cx (rt, ru)) =
  1.1524 +    Add (Add (Cx (lv, lw), ao), Cx (rt, ru))
  1.1525 +  | numadd (Add (Cx (lv, lw), ao), Bound rs) =
  1.1526 +    Add (Add (Cx (lv, lw), ao), Bound rs)
  1.1527 +  | numadd (Add (Cx (lv, lw), ao), C rr) = Add (Add (Cx (lv, lw), ao), C rr)
  1.1528 +  | numadd (Add (Bound lu, ao), Mul (pm, pn)) =
  1.1529 +    Add (Add (Bound lu, ao), Mul (pm, pn))
  1.1530 +  | numadd (Add (Bound lu, ao), Sub (pk, pl)) =
  1.1531 +    Add (Add (Bound lu, ao), Sub (pk, pl))
  1.1532 +  | numadd (Add (Bound lu, ao), Add (Mul (qi, Mul (re, rf)), pj)) =
  1.1533 +    Add (Add (Bound lu, ao), Add (Mul (qi, Mul (re, rf)), pj))
  1.1534 +  | numadd (Add (Bound lu, ao), Add (Mul (qi, Sub (rc, rd)), pj)) =
  1.1535 +    Add (Add (Bound lu, ao), Add (Mul (qi, Sub (rc, rd)), pj))
  1.1536 +  | numadd (Add (Bound lu, ao), Add (Mul (qi, Add (ra, rb)), pj)) =
  1.1537 +    Add (Add (Bound lu, ao), Add (Mul (qi, Add (ra, rb)), pj))
  1.1538 +  | numadd (Add (Bound lu, ao), Add (Mul (qi, Neg qz), pj)) =
  1.1539 +    Add (Add (Bound lu, ao), Add (Mul (qi, Neg qz), pj))
  1.1540 +  | numadd (Add (Bound lu, ao), Add (Mul (qi, Cx (qx, qy)), pj)) =
  1.1541 +    Add (Add (Bound lu, ao), Add (Mul (qi, Cx (qx, qy)), pj))
  1.1542 +  | numadd (Add (Bound lu, ao), Add (Mul (qi, C qv), pj)) =
  1.1543 +    Add (Add (Bound lu, ao), Add (Mul (qi, C qv), pj))
  1.1544 +  | numadd (Add (Bound lu, ao), Add (Sub (qg, qh), pj)) =
  1.1545 +    Add (Add (Bound lu, ao), Add (Sub (qg, qh), pj))
  1.1546 +  | numadd (Add (Bound lu, ao), Add (Add (qe, qf), pj)) =
  1.1547 +    Add (Add (Bound lu, ao), Add (Add (qe, qf), pj))
  1.1548 +  | numadd (Add (Bound lu, ao), Add (Neg qd, pj)) =
  1.1549 +    Add (Add (Bound lu, ao), Add (Neg qd, pj))
  1.1550 +  | numadd (Add (Bound lu, ao), Add (Cx (qb, qc), pj)) =
  1.1551 +    Add (Add (Bound lu, ao), Add (Cx (qb, qc), pj))
  1.1552 +  | numadd (Add (Bound lu, ao), Add (Bound qa, pj)) =
  1.1553 +    Add (Add (Bound lu, ao), Add (Bound qa, pj))
  1.1554 +  | numadd (Add (Bound lu, ao), Add (C pz, pj)) =
  1.1555 +    Add (Add (Bound lu, ao), Add (C pz, pj))
  1.1556 +  | numadd (Add (Bound lu, ao), Neg ph) = Add (Add (Bound lu, ao), Neg ph)
  1.1557 +  | numadd (Add (Bound lu, ao), Cx (pf, pg)) =
  1.1558 +    Add (Add (Bound lu, ao), Cx (pf, pg))
  1.1559 +  | numadd (Add (Bound lu, ao), Bound pe) = Add (Add (Bound lu, ao), Bound pe)
  1.1560 +  | numadd (Add (Bound lu, ao), C pd) = Add (Add (Bound lu, ao), C pd)
  1.1561 +  | numadd (Add (C lt, ao), Mul (my, mz)) = Add (Add (C lt, ao), Mul (my, mz))
  1.1562 +  | numadd (Add (C lt, ao), Sub (mw, mx)) = Add (Add (C lt, ao), Sub (mw, mx))
  1.1563 +  | numadd (Add (C lt, ao), Add (Mul (nu, Mul (oq, or)), mv)) =
  1.1564 +    Add (Add (C lt, ao), Add (Mul (nu, Mul (oq, or)), mv))
  1.1565 +  | numadd (Add (C lt, ao), Add (Mul (nu, Sub (ooa, opa)), mv)) =
  1.1566 +    Add (Add (C lt, ao), Add (Mul (nu, Sub (ooa, opa)), mv))
  1.1567 +  | numadd (Add (C lt, ao), Add (Mul (nu, Add (om, on)), mv)) =
  1.1568 +    Add (Add (C lt, ao), Add (Mul (nu, Add (om, on)), mv))
  1.1569 +  | numadd (Add (C lt, ao), Add (Mul (nu, Neg ol), mv)) =
  1.1570 +    Add (Add (C lt, ao), Add (Mul (nu, Neg ol), mv))
  1.1571 +  | numadd (Add (C lt, ao), Add (Mul (nu, Cx (oj, ok)), mv)) =
  1.1572 +    Add (Add (C lt, ao), Add (Mul (nu, Cx (oj, ok)), mv))
  1.1573 +  | numadd (Add (C lt, ao), Add (Mul (nu, C oh), mv)) =
  1.1574 +    Add (Add (C lt, ao), Add (Mul (nu, C oh), mv))
  1.1575 +  | numadd (Add (C lt, ao), Add (Sub (ns, nt), mv)) =
  1.1576 +    Add (Add (C lt, ao), Add (Sub (ns, nt), mv))
  1.1577 +  | numadd (Add (C lt, ao), Add (Add (nq, nr), mv)) =
  1.1578 +    Add (Add (C lt, ao), Add (Add (nq, nr), mv))
  1.1579 +  | numadd (Add (C lt, ao), Add (Neg np, mv)) =
  1.1580 +    Add (Add (C lt, ao), Add (Neg np, mv))
  1.1581 +  | numadd (Add (C lt, ao), Add (Cx (nn, no), mv)) =
  1.1582 +    Add (Add (C lt, ao), Add (Cx (nn, no), mv))
  1.1583 +  | numadd (Add (C lt, ao), Add (Bound nm, mv)) =
  1.1584 +    Add (Add (C lt, ao), Add (Bound nm, mv))
  1.1585 +  | numadd (Add (C lt, ao), Add (C nl, mv)) =
  1.1586 +    Add (Add (C lt, ao), Add (C nl, mv))
  1.1587 +  | numadd (Add (C lt, ao), Neg mt) = Add (Add (C lt, ao), Neg mt)
  1.1588 +  | numadd (Add (C lt, ao), Cx (mr, ms)) = Add (Add (C lt, ao), Cx (mr, ms))
  1.1589 +  | numadd (Add (C lt, ao), Bound mq) = Add (Add (C lt, ao), Bound mq)
  1.1590 +  | numadd (Add (C lt, ao), C mp) = Add (Add (C lt, ao), C mp)
  1.1591 +  | numadd (Neg am, Mul (jd, je)) = Add (Neg am, Mul (jd, je))
  1.1592 +  | numadd (Neg am, Sub (jb, jc)) = Add (Neg am, Sub (jb, jc))
  1.1593 +  | numadd (Neg am, Add (Mul (jz, Mul (kv, kw)), ja)) =
  1.1594 +    Add (Neg am, Add (Mul (jz, Mul (kv, kw)), ja))
  1.1595 +  | numadd (Neg am, Add (Mul (jz, Sub (kt, ku)), ja)) =
  1.1596 +    Add (Neg am, Add (Mul (jz, Sub (kt, ku)), ja))
  1.1597 +  | numadd (Neg am, Add (Mul (jz, Add (kr, ks)), ja)) =
  1.1598 +    Add (Neg am, Add (Mul (jz, Add (kr, ks)), ja))
  1.1599 +  | numadd (Neg am, Add (Mul (jz, Neg kq), ja)) =
  1.1600 +    Add (Neg am, Add (Mul (jz, Neg kq), ja))
  1.1601 +  | numadd (Neg am, Add (Mul (jz, Cx (ko, kp)), ja)) =
  1.1602 +    Add (Neg am, Add (Mul (jz, Cx (ko, kp)), ja))
  1.1603 +  | numadd (Neg am, Add (Mul (jz, C km), ja)) =
  1.1604 +    Add (Neg am, Add (Mul (jz, C km), ja))
  1.1605 +  | numadd (Neg am, Add (Sub (jx, jy), ja)) =
  1.1606 +    Add (Neg am, Add (Sub (jx, jy), ja))
  1.1607 +  | numadd (Neg am, Add (Add (jv, jw), ja)) =
  1.1608 +    Add (Neg am, Add (Add (jv, jw), ja))
  1.1609 +  | numadd (Neg am, Add (Neg ju, ja)) = Add (Neg am, Add (Neg ju, ja))
  1.1610 +  | numadd (Neg am, Add (Cx (js, jt), ja)) = Add (Neg am, Add (Cx (js, jt), ja))
  1.1611 +  | numadd (Neg am, Add (Bound jr, ja)) = Add (Neg am, Add (Bound jr, ja))
  1.1612 +  | numadd (Neg am, Add (C jq, ja)) = Add (Neg am, Add (C jq, ja))
  1.1613 +  | numadd (Neg am, Neg iy) = Add (Neg am, Neg iy)
  1.1614 +  | numadd (Neg am, Cx (iw, ix)) = Add (Neg am, Cx (iw, ix))
  1.1615 +  | numadd (Neg am, Bound iv) = Add (Neg am, Bound iv)
  1.1616 +  | numadd (Neg am, C iu) = Add (Neg am, C iu)
  1.1617 +  | numadd (Cx (ak, al), Mul (gp, gq)) = Add (Cx (ak, al), Mul (gp, gq))
  1.1618 +  | numadd (Cx (ak, al), Sub (gn, go)) = Add (Cx (ak, al), Sub (gn, go))
  1.1619 +  | numadd (Cx (ak, al), Add (Mul (hl, Mul (ih, ii)), gm)) =
  1.1620 +    Add (Cx (ak, al), Add (Mul (hl, Mul (ih, ii)), gm))
  1.1621 +  | numadd (Cx (ak, al), Add (Mul (hl, Sub (ifa, ig)), gm)) =
  1.1622 +    Add (Cx (ak, al), Add (Mul (hl, Sub (ifa, ig)), gm))
  1.1623 +  | numadd (Cx (ak, al), Add (Mul (hl, Add (id, ie)), gm)) =
  1.1624 +    Add (Cx (ak, al), Add (Mul (hl, Add (id, ie)), gm))
  1.1625 +  | numadd (Cx (ak, al), Add (Mul (hl, Neg ic), gm)) =
  1.1626 +    Add (Cx (ak, al), Add (Mul (hl, Neg ic), gm))
  1.1627 +  | numadd (Cx (ak, al), Add (Mul (hl, Cx (ia, ib)), gm)) =
  1.1628 +    Add (Cx (ak, al), Add (Mul (hl, Cx (ia, ib)), gm))
  1.1629 +  | numadd (Cx (ak, al), Add (Mul (hl, C hy), gm)) =
  1.1630 +    Add (Cx (ak, al), Add (Mul (hl, C hy), gm))
  1.1631 +  | numadd (Cx (ak, al), Add (Sub (hj, hk), gm)) =
  1.1632 +    Add (Cx (ak, al), Add (Sub (hj, hk), gm))
  1.1633 +  | numadd (Cx (ak, al), Add (Add (hh, hi), gm)) =
  1.1634 +    Add (Cx (ak, al), Add (Add (hh, hi), gm))
  1.1635 +  | numadd (Cx (ak, al), Add (Neg hg, gm)) = Add (Cx (ak, al), Add (Neg hg, gm))
  1.1636 +  | numadd (Cx (ak, al), Add (Cx (he, hf), gm)) =
  1.1637 +    Add (Cx (ak, al), Add (Cx (he, hf), gm))
  1.1638 +  | numadd (Cx (ak, al), Add (Bound hd, gm)) =
  1.1639 +    Add (Cx (ak, al), Add (Bound hd, gm))
  1.1640 +  | numadd (Cx (ak, al), Add (C hc, gm)) = Add (Cx (ak, al), Add (C hc, gm))
  1.1641 +  | numadd (Cx (ak, al), Neg gk) = Add (Cx (ak, al), Neg gk)
  1.1642 +  | numadd (Cx (ak, al), Cx (gi, gj)) = Add (Cx (ak, al), Cx (gi, gj))
  1.1643 +  | numadd (Cx (ak, al), Bound gh) = Add (Cx (ak, al), Bound gh)
  1.1644 +  | numadd (Cx (ak, al), C gg) = Add (Cx (ak, al), C gg)
  1.1645 +  | numadd (Bound aj, Mul (eb, ec)) = Add (Bound aj, Mul (eb, ec))
  1.1646 +  | numadd (Bound aj, Sub (dz, ea)) = Add (Bound aj, Sub (dz, ea))
  1.1647 +  | numadd (Bound aj, Add (Mul (ex, Mul (ft, fu)), dy)) =
  1.1648 +    Add (Bound aj, Add (Mul (ex, Mul (ft, fu)), dy))
  1.1649 +  | numadd (Bound aj, Add (Mul (ex, Sub (fr, fs)), dy)) =
  1.1650 +    Add (Bound aj, Add (Mul (ex, Sub (fr, fs)), dy))
  1.1651 +  | numadd (Bound aj, Add (Mul (ex, Add (fp, fq)), dy)) =
  1.1652 +    Add (Bound aj, Add (Mul (ex, Add (fp, fq)), dy))
  1.1653 +  | numadd (Bound aj, Add (Mul (ex, Neg fo), dy)) =
  1.1654 +    Add (Bound aj, Add (Mul (ex, Neg fo), dy))
  1.1655 +  | numadd (Bound aj, Add (Mul (ex, Cx (fm, fna)), dy)) =
  1.1656 +    Add (Bound aj, Add (Mul (ex, Cx (fm, fna)), dy))
  1.1657 +  | numadd (Bound aj, Add (Mul (ex, C fk), dy)) =
  1.1658 +    Add (Bound aj, Add (Mul (ex, C fk), dy))
  1.1659 +  | numadd (Bound aj, Add (Sub (ev, ew), dy)) =
  1.1660 +    Add (Bound aj, Add (Sub (ev, ew), dy))
  1.1661 +  | numadd (Bound aj, Add (Add (et, eu), dy)) =
  1.1662 +    Add (Bound aj, Add (Add (et, eu), dy))
  1.1663 +  | numadd (Bound aj, Add (Neg es, dy)) = Add (Bound aj, Add (Neg es, dy))
  1.1664 +  | numadd (Bound aj, Add (Cx (eq, er), dy)) =
  1.1665 +    Add (Bound aj, Add (Cx (eq, er), dy))
  1.1666 +  | numadd (Bound aj, Add (Bound ep, dy)) = Add (Bound aj, Add (Bound ep, dy))
  1.1667 +  | numadd (Bound aj, Add (C eo, dy)) = Add (Bound aj, Add (C eo, dy))
  1.1668 +  | numadd (Bound aj, Neg dw) = Add (Bound aj, Neg dw)
  1.1669 +  | numadd (Bound aj, Cx (du, dv)) = Add (Bound aj, Cx (du, dv))
  1.1670 +  | numadd (Bound aj, Bound dt) = Add (Bound aj, Bound dt)
  1.1671 +  | numadd (Bound aj, C ds) = Add (Bound aj, C ds)
  1.1672 +  | numadd (C ai, Mul (bn, bo)) = Add (C ai, Mul (bn, bo))
  1.1673 +  | numadd (C ai, Sub (bl, bm)) = Add (C ai, Sub (bl, bm))
  1.1674 +  | numadd (C ai, Add (Mul (cj, Mul (df, dg)), bk)) =
  1.1675 +    Add (C ai, Add (Mul (cj, Mul (df, dg)), bk))
  1.1676 +  | numadd (C ai, Add (Mul (cj, Sub (dd, de)), bk)) =
  1.1677 +    Add (C ai, Add (Mul (cj, Sub (dd, de)), bk))
  1.1678 +  | numadd (C ai, Add (Mul (cj, Add (db, dc)), bk)) =
  1.1679 +    Add (C ai, Add (Mul (cj, Add (db, dc)), bk))
  1.1680 +  | numadd (C ai, Add (Mul (cj, Neg da), bk)) =
  1.1681 +    Add (C ai, Add (Mul (cj, Neg da), bk))
  1.1682 +  | numadd (C ai, Add (Mul (cj, Cx (cy, cz)), bk)) =
  1.1683 +    Add (C ai, Add (Mul (cj, Cx (cy, cz)), bk))
  1.1684 +  | numadd (C ai, Add (Mul (cj, C cw), bk)) =
  1.1685 +    Add (C ai, Add (Mul (cj, C cw), bk))
  1.1686 +  | numadd (C ai, Add (Sub (ch, ci), bk)) = Add (C ai, Add (Sub (ch, ci), bk))
  1.1687 +  | numadd (C ai, Add (Add (cf, cg), bk)) = Add (C ai, Add (Add (cf, cg), bk))
  1.1688 +  | numadd (C ai, Add (Neg ce, bk)) = Add (C ai, Add (Neg ce, bk))
  1.1689 +  | numadd (C ai, Add (Cx (cc, cd), bk)) = Add (C ai, Add (Cx (cc, cd), bk))
  1.1690 +  | numadd (C ai, Add (Bound cb, bk)) = Add (C ai, Add (Bound cb, bk))
  1.1691 +  | numadd (C ai, Add (C ca, bk)) = Add (C ai, Add (C ca, bk))
  1.1692 +  | numadd (C ai, Neg bi) = Add (C ai, Neg bi)
  1.1693 +  | numadd (C ai, Cx (bg, bh)) = Add (C ai, Cx (bg, bh))
  1.1694 +  | numadd (C ai, Bound bf) = Add (C ai, Bound bf)
  1.1695 +  | numadd (C b1, C b2) = C (IntInf.+ (b1, b2))
  1.1696 +  | numadd (Mul (ag, ah), Add (Mul (c2, Bound n2), r2)) =
  1.1697 +    Add (Mul (c2, Bound n2), numadd (Mul (ag, ah), r2))
  1.1698 +  | numadd (Sub (ae, af), Add (Mul (c2, Bound n2), r2)) =
  1.1699 +    Add (Mul (c2, Bound n2), numadd (Sub (ae, af), r2))
  1.1700 +  | numadd (Add (Mul (lr, Mul (ace, acf)), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1701 +    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, Mul (ace, acf)), ad), r2))
  1.1702 +  | numadd (Add (Mul (lr, Sub (acc, acd)), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1703 +    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, Sub (acc, acd)), ad), r2))
  1.1704 +  | numadd (Add (Mul (lr, Add (aca, acb)), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1705 +    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, Add (aca, acb)), ad), r2))
  1.1706 +  | numadd (Add (Mul (lr, Neg abz), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1707 +    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, Neg abz), ad), r2))
  1.1708 +  | numadd (Add (Mul (lr, Cx (abx, aby)), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1709 +    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, Cx (abx, aby)), ad), r2))
  1.1710 +  | numadd (Add (Mul (lr, C abv), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1711 +    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, C abv), ad), r2))
  1.1712 +  | numadd (Add (Sub (lp, lq), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1713 +    Add (Mul (c2, Bound n2), numadd (Add (Sub (lp, lq), ad), r2))
  1.1714 +  | numadd (Add (Add (ln, lo), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1715 +    Add (Mul (c2, Bound n2), numadd (Add (Add (ln, lo), ad), r2))
  1.1716 +  | numadd (Add (Neg lm, ad), Add (Mul (c2, Bound n2), r2)) =
  1.1717 +    Add (Mul (c2, Bound n2), numadd (Add (Neg lm, ad), r2))
  1.1718 +  | numadd (Add (Cx (lk, ll), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1719 +    Add (Mul (c2, Bound n2), numadd (Add (Cx (lk, ll), ad), r2))
  1.1720 +  | numadd (Add (Bound lj, ad), Add (Mul (c2, Bound n2), r2)) =
  1.1721 +    Add (Mul (c2, Bound n2), numadd (Add (Bound lj, ad), r2))
  1.1722 +  | numadd (Add (C li, ad), Add (Mul (c2, Bound n2), r2)) =
  1.1723 +    Add (Mul (c2, Bound n2), numadd (Add (C li, ad), r2))
  1.1724 +  | numadd (Neg ab, Add (Mul (c2, Bound n2), r2)) =
  1.1725 +    Add (Mul (c2, Bound n2), numadd (Neg ab, r2))
  1.1726 +  | numadd (Cx (y, z), Add (Mul (c2, Bound n2), r2)) =
  1.1727 +    Add (Mul (c2, Bound n2), numadd (Cx (y, z), r2))
  1.1728 +  | numadd (Bound x, Add (Mul (c2, Bound n2), r2)) =
  1.1729 +    Add (Mul (c2, Bound n2), numadd (Bound x, r2))
  1.1730 +  | numadd (C w, Add (Mul (c2, Bound n2), r2)) =
  1.1731 +    Add (Mul (c2, Bound n2), numadd (C w, r2))
  1.1732 +  | numadd (Add (Mul (c1, Bound n1), r1), Mul (afz, aga)) =
  1.1733 +    Add (Mul (c1, Bound n1), numadd (r1, Mul (afz, aga)))
  1.1734 +  | numadd (Add (Mul (c1, Bound n1), r1), Sub (afx, afy)) =
  1.1735 +    Add (Mul (c1, Bound n1), numadd (r1, Sub (afx, afy)))
  1.1736 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, Mul (ain, aio)), afw))
  1.1737 +    = Add (Mul (c1, Bound n1),
  1.1738 +            numadd (r1, Add (Mul (ahg, Mul (ain, aio)), afw)))
  1.1739 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, Sub (ail, aim)), afw))
  1.1740 +    = Add (Mul (c1, Bound n1),
  1.1741 +            numadd (r1, Add (Mul (ahg, Sub (ail, aim)), afw)))
  1.1742 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, Add (aij, aik)), afw))
  1.1743 +    = Add (Mul (c1, Bound n1),
  1.1744 +            numadd (r1, Add (Mul (ahg, Add (aij, aik)), afw)))
  1.1745 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, Neg aii), afw)) =
  1.1746 +    Add (Mul (c1, Bound n1), numadd (r1, Add (Mul (ahg, Neg aii), afw)))
  1.1747 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, Cx (aig, aih)), afw)) =
  1.1748 +    Add (Mul (c1, Bound n1), numadd (r1, Add (Mul (ahg, Cx (aig, aih)), afw)))
  1.1749 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, C aie), afw)) =
  1.1750 +    Add (Mul (c1, Bound n1), numadd (r1, Add (Mul (ahg, C aie), afw)))
  1.1751 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Sub (ahe, ahf), afw)) =
  1.1752 +    Add (Mul (c1, Bound n1), numadd (r1, Add (Sub (ahe, ahf), afw)))
  1.1753 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Add (ahc, ahd), afw)) =
  1.1754 +    Add (Mul (c1, Bound n1), numadd (r1, Add (Add (ahc, ahd), afw)))
  1.1755 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Neg ahb, afw)) =
  1.1756 +    Add (Mul (c1, Bound n1), numadd (r1, Add (Neg ahb, afw)))
  1.1757 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Cx (agz, aha), afw)) =
  1.1758 +    Add (Mul (c1, Bound n1), numadd (r1, Add (Cx (agz, aha), afw)))
  1.1759 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Bound agy, afw)) =
  1.1760 +    Add (Mul (c1, Bound n1), numadd (r1, Add (Bound agy, afw)))
  1.1761 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (C agx, afw)) =
  1.1762 +    Add (Mul (c1, Bound n1), numadd (r1, Add (C agx, afw)))
  1.1763 +  | numadd (Add (Mul (c1, Bound n1), r1), Neg afu) =
  1.1764 +    Add (Mul (c1, Bound n1), numadd (r1, Neg afu))
  1.1765 +  | numadd (Add (Mul (c1, Bound n1), r1), Cx (afs, aft)) =
  1.1766 +    Add (Mul (c1, Bound n1), numadd (r1, Cx (afs, aft)))
  1.1767 +  | numadd (Add (Mul (c1, Bound n1), r1), Bound afr) =
  1.1768 +    Add (Mul (c1, Bound n1), numadd (r1, Bound afr))
  1.1769 +  | numadd (Add (Mul (c1, Bound n1), r1), C afq) =
  1.1770 +    Add (Mul (c1, Bound n1), numadd (r1, C afq))
  1.1771 +  | numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (c2, Bound n2), r2)) =
  1.1772 +    (if ((n1 : IntInf.int) = n2)
  1.1773 +      then let
  1.1774 +             val c = IntInf.+ (c1, c2);
  1.1775 +           in
  1.1776 +             (if ((c : IntInf.int) = (0 : IntInf.int)) then numadd (r1, r2)
  1.1777 +               else Add (Mul (c, Bound n1), numadd (r1, r2)))
  1.1778             end
  1.1779 -      else (if less_eq_def3 n1 n2
  1.1780 +      else (if IntInf.<= (n1, n2)
  1.1781               then Add (Mul (c1, Bound n1),
  1.1782                          numadd (r1, Add (Mul (c2, Bound n2), r2)))
  1.1783               else Add (Mul (c2, Bound n2),
  1.1784 -                        numadd (Add (Mul (c1, Bound n1), r1), r2))))
  1.1785 -  | numadd (Add (Mul (c1, Bound n1), r1), C afq) =
  1.1786 -    Add (Mul (c1, Bound n1), numadd (r1, C afq))
  1.1787 -  | numadd (Add (Mul (c1, Bound n1), r1), Bound afr) =
  1.1788 -    Add (Mul (c1, Bound n1), numadd (r1, Bound afr))
  1.1789 -  | numadd (Add (Mul (c1, Bound n1), r1), CX (afs, aft)) =
  1.1790 -    Add (Mul (c1, Bound n1), numadd (r1, CX (afs, aft)))
  1.1791 -  | numadd (Add (Mul (c1, Bound n1), r1), Neg afu) =
  1.1792 -    Add (Mul (c1, Bound n1), numadd (r1, Neg afu))
  1.1793 -  | numadd (Add (Mul (c1, Bound n1), r1), Add (C agx, afw)) =
  1.1794 -    Add (Mul (c1, Bound n1), numadd (r1, Add (C agx, afw)))
  1.1795 -  | numadd (Add (Mul (c1, Bound n1), r1), Add (Bound agy, afw)) =
  1.1796 -    Add (Mul (c1, Bound n1), numadd (r1, Add (Bound agy, afw)))
  1.1797 -  | numadd (Add (Mul (c1, Bound n1), r1), Add (CX (agz, aha), afw)) =
  1.1798 -    Add (Mul (c1, Bound n1), numadd (r1, Add (CX (agz, aha), afw)))
  1.1799 -  | numadd (Add (Mul (c1, Bound n1), r1), Add (Neg ahb, afw)) =
  1.1800 -    Add (Mul (c1, Bound n1), numadd (r1, Add (Neg ahb, afw)))
  1.1801 -  | numadd (Add (Mul (c1, Bound n1), r1), Add (Add (ahc, ahd), afw)) =
  1.1802 -    Add (Mul (c1, Bound n1), numadd (r1, Add (Add (ahc, ahd), afw)))
  1.1803 -  | numadd (Add (Mul (c1, Bound n1), r1), Add (Sub (ahe, ahf), afw)) =
  1.1804 -    Add (Mul (c1, Bound n1), numadd (r1, Add (Sub (ahe, ahf), afw)))
  1.1805 -  | numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, C aie), afw)) =
  1.1806 -    Add (Mul (c1, Bound n1), numadd (r1, Add (Mul (ahg, C aie), afw)))
  1.1807 -  | numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, CX (aig, aih)), afw)) =
  1.1808 -    Add (Mul (c1, Bound n1), numadd (r1, Add (Mul (ahg, CX (aig, aih)), afw)))
  1.1809 -  | numadd (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, Neg aii), afw)) =
  1.1810 -    Add (Mul (c1, Bound n1), numadd (r1, Add (Mul (ahg, Neg aii), afw)))
  1.1811 -  | numadd
  1.1812 -      (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, Add (aij, aik)), afw)) =
  1.1813 -    Add (Mul (c1, Bound n1), numadd (r1, Add (Mul (ahg, Add (aij, aik)), afw)))
  1.1814 -  | numadd
  1.1815 -      (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, Sub (ail, aim)), afw)) =
  1.1816 -    Add (Mul (c1, Bound n1), numadd (r1, Add (Mul (ahg, Sub (ail, aim)), afw)))
  1.1817 -  | numadd
  1.1818 -      (Add (Mul (c1, Bound n1), r1), Add (Mul (ahg, Mul (ain, aio)), afw)) =
  1.1819 -    Add (Mul (c1, Bound n1), numadd (r1, Add (Mul (ahg, Mul (ain, aio)), afw)))
  1.1820 -  | numadd (Add (Mul (c1, Bound n1), r1), Sub (afx, afy)) =
  1.1821 -    Add (Mul (c1, Bound n1), numadd (r1, Sub (afx, afy)))
  1.1822 -  | numadd (Add (Mul (c1, Bound n1), r1), Mul (afz, aga)) =
  1.1823 -    Add (Mul (c1, Bound n1), numadd (r1, Mul (afz, aga)))
  1.1824 -  | numadd (C w, Add (Mul (c2, Bound n2), r2)) =
  1.1825 -    Add (Mul (c2, Bound n2), numadd (C w, r2))
  1.1826 -  | numadd (Bound x, Add (Mul (c2, Bound n2), r2)) =
  1.1827 -    Add (Mul (c2, Bound n2), numadd (Bound x, r2))
  1.1828 -  | numadd (CX (y, z), Add (Mul (c2, Bound n2), r2)) =
  1.1829 -    Add (Mul (c2, Bound n2), numadd (CX (y, z), r2))
  1.1830 -  | numadd (Neg ab, Add (Mul (c2, Bound n2), r2)) =
  1.1831 -    Add (Mul (c2, Bound n2), numadd (Neg ab, r2))
  1.1832 -  | numadd (Add (C li, ad), Add (Mul (c2, Bound n2), r2)) =
  1.1833 -    Add (Mul (c2, Bound n2), numadd (Add (C li, ad), r2))
  1.1834 -  | numadd (Add (Bound lj, ad), Add (Mul (c2, Bound n2), r2)) =
  1.1835 -    Add (Mul (c2, Bound n2), numadd (Add (Bound lj, ad), r2))
  1.1836 -  | numadd (Add (CX (lk, ll), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1837 -    Add (Mul (c2, Bound n2), numadd (Add (CX (lk, ll), ad), r2))
  1.1838 -  | numadd (Add (Neg lm, ad), Add (Mul (c2, Bound n2), r2)) =
  1.1839 -    Add (Mul (c2, Bound n2), numadd (Add (Neg lm, ad), r2))
  1.1840 -  | numadd (Add (Add (ln, lo), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1841 -    Add (Mul (c2, Bound n2), numadd (Add (Add (ln, lo), ad), r2))
  1.1842 -  | numadd (Add (Sub (lp, lq), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1843 -    Add (Mul (c2, Bound n2), numadd (Add (Sub (lp, lq), ad), r2))
  1.1844 -  | numadd (Add (Mul (lr, C abv), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1845 -    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, C abv), ad), r2))
  1.1846 -  | numadd (Add (Mul (lr, CX (abx, aby)), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1847 -    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, CX (abx, aby)), ad), r2))
  1.1848 -  | numadd (Add (Mul (lr, Neg abz), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1849 -    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, Neg abz), ad), r2))
  1.1850 -  | numadd (Add (Mul (lr, Add (aca, acb)), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1851 -    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, Add (aca, acb)), ad), r2))
  1.1852 -  | numadd (Add (Mul (lr, Sub (acc, acd)), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1853 -    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, Sub (acc, acd)), ad), r2))
  1.1854 -  | numadd (Add (Mul (lr, Mul (ace, acf)), ad), Add (Mul (c2, Bound n2), r2)) =
  1.1855 -    Add (Mul (c2, Bound n2), numadd (Add (Mul (lr, Mul (ace, acf)), ad), r2))
  1.1856 -  | numadd (Sub (ae, af), Add (Mul (c2, Bound n2), r2)) =
  1.1857 -    Add (Mul (c2, Bound n2), numadd (Sub (ae, af), r2))
  1.1858 -  | numadd (Mul (ag, ah), Add (Mul (c2, Bound n2), r2)) =
  1.1859 -    Add (Mul (c2, Bound n2), numadd (Mul (ag, ah), r2))
  1.1860 -  | numadd (C b1, C b2) = C (b1 + b2)
  1.1861 -  | numadd (C ai, Bound bf) = Add (C ai, Bound bf)
  1.1862 -  | numadd (C ai, CX (bg, bh)) = Add (C ai, CX (bg, bh))
  1.1863 -  | numadd (C ai, Neg bi) = Add (C ai, Neg bi)
  1.1864 -  | numadd (C ai, Add (C ca, bk)) = Add (C ai, Add (C ca, bk))
  1.1865 -  | numadd (C ai, Add (Bound cb, bk)) = Add (C ai, Add (Bound cb, bk))
  1.1866 -  | numadd (C ai, Add (CX (cc, cd), bk)) = Add (C ai, Add (CX (cc, cd), bk))
  1.1867 -  | numadd (C ai, Add (Neg ce, bk)) = Add (C ai, Add (Neg ce, bk))
  1.1868 -  | numadd (C ai, Add (Add (cf, cg), bk)) = Add (C ai, Add (Add (cf, cg), bk))
  1.1869 -  | numadd (C ai, Add (Sub (ch, ci), bk)) = Add (C ai, Add (Sub (ch, ci), bk))
  1.1870 -  | numadd (C ai, Add (Mul (cj, C cw), bk)) =
  1.1871 -    Add (C ai, Add (Mul (cj, C cw), bk))
  1.1872 -  | numadd (C ai, Add (Mul (cj, CX (cy, cz)), bk)) =
  1.1873 -    Add (C ai, Add (Mul (cj, CX (cy, cz)), bk))
  1.1874 -  | numadd (C ai, Add (Mul (cj, Neg da), bk)) =
  1.1875 -    Add (C ai, Add (Mul (cj, Neg da), bk))
  1.1876 -  | numadd (C ai, Add (Mul (cj, Add (db, dc)), bk)) =
  1.1877 -    Add (C ai, Add (Mul (cj, Add (db, dc)), bk))
  1.1878 -  | numadd (C ai, Add (Mul (cj, Sub (dd, de)), bk)) =
  1.1879 -    Add (C ai, Add (Mul (cj, Sub (dd, de)), bk))
  1.1880 -  | numadd (C ai, Add (Mul (cj, Mul (df, dg)), bk)) =
  1.1881 -    Add (C ai, Add (Mul (cj, Mul (df, dg)), bk))
  1.1882 -  | numadd (C ai, Sub (bl, bm)) = Add (C ai, Sub (bl, bm))
  1.1883 -  | numadd (C ai, Mul (bn, bo)) = Add (C ai, Mul (bn, bo))
  1.1884 -  | numadd (Bound aj, C ds) = Add (Bound aj, C ds)
  1.1885 -  | numadd (Bound aj, Bound dt) = Add (Bound aj, Bound dt)
  1.1886 -  | numadd (Bound aj, CX (du, dv)) = Add (Bound aj, CX (du, dv))
  1.1887 -  | numadd (Bound aj, Neg dw) = Add (Bound aj, Neg dw)
  1.1888 -  | numadd (Bound aj, Add (C eo, dy)) = Add (Bound aj, Add (C eo, dy))
  1.1889 -  | numadd (Bound aj, Add (Bound ep, dy)) = Add (Bound aj, Add (Bound ep, dy))
  1.1890 -  | numadd (Bound aj, Add (CX (eq, er), dy)) =
  1.1891 -    Add (Bound aj, Add (CX (eq, er), dy))
  1.1892 -  | numadd (Bound aj, Add (Neg es, dy)) = Add (Bound aj, Add (Neg es, dy))
  1.1893 -  | numadd (Bound aj, Add (Add (et, eu), dy)) =
  1.1894 -    Add (Bound aj, Add (Add (et, eu), dy))
  1.1895 -  | numadd (Bound aj, Add (Sub (ev, ew), dy)) =
  1.1896 -    Add (Bound aj, Add (Sub (ev, ew), dy))
  1.1897 -  | numadd (Bound aj, Add (Mul (ex, C fk), dy)) =
  1.1898 -    Add (Bound aj, Add (Mul (ex, C fk), dy))
  1.1899 -  | numadd (Bound aj, Add (Mul (ex, CX (fm, fn')), dy)) =
  1.1900 -    Add (Bound aj, Add (Mul (ex, CX (fm, fn')), dy))
  1.1901 -  | numadd (Bound aj, Add (Mul (ex, Neg fo), dy)) =
  1.1902 -    Add (Bound aj, Add (Mul (ex, Neg fo), dy))
  1.1903 -  | numadd (Bound aj, Add (Mul (ex, Add (fp, fq)), dy)) =
  1.1904 -    Add (Bound aj, Add (Mul (ex, Add (fp, fq)), dy))
  1.1905 -  | numadd (Bound aj, Add (Mul (ex, Sub (fr, fs)), dy)) =
  1.1906 -    Add (Bound aj, Add (Mul (ex, Sub (fr, fs)), dy))
  1.1907 -  | numadd (Bound aj, Add (Mul (ex, Mul (ft, fu)), dy)) =
  1.1908 -    Add (Bound aj, Add (Mul (ex, Mul (ft, fu)), dy))
  1.1909 -  | numadd (Bound aj, Sub (dz, ea)) = Add (Bound aj, Sub (dz, ea))
  1.1910 -  | numadd (Bound aj, Mul (eb, ec)) = Add (Bound aj, Mul (eb, ec))
  1.1911 -  | numadd (CX (ak, al), C gg) = Add (CX (ak, al), C gg)
  1.1912 -  | numadd (CX (ak, al), Bound gh) = Add (CX (ak, al), Bound gh)
  1.1913 -  | numadd (CX (ak, al), CX (gi, gj)) = Add (CX (ak, al), CX (gi, gj))
  1.1914 -  | numadd (CX (ak, al), Neg gk) = Add (CX (ak, al), Neg gk)
  1.1915 -  | numadd (CX (ak, al), Add (C hc, gm)) = Add (CX (ak, al), Add (C hc, gm))
  1.1916 -  | numadd (CX (ak, al), Add (Bound hd, gm)) =
  1.1917 -    Add (CX (ak, al), Add (Bound hd, gm))
  1.1918 -  | numadd (CX (ak, al), Add (CX (he, hf), gm)) =
  1.1919 -    Add (CX (ak, al), Add (CX (he, hf), gm))
  1.1920 -  | numadd (CX (ak, al), Add (Neg hg, gm)) = Add (CX (ak, al), Add (Neg hg, gm))
  1.1921 -  | numadd (CX (ak, al), Add (Add (hh, hi), gm)) =
  1.1922 -    Add (CX (ak, al), Add (Add (hh, hi), gm))
  1.1923 -  | numadd (CX (ak, al), Add (Sub (hj, hk), gm)) =
  1.1924 -    Add (CX (ak, al), Add (Sub (hj, hk), gm))
  1.1925 -  | numadd (CX (ak, al), Add (Mul (hl, C hy), gm)) =
  1.1926 -    Add (CX (ak, al), Add (Mul (hl, C hy), gm))
  1.1927 -  | numadd (CX (ak, al), Add (Mul (hl, CX (ia, ib)), gm)) =
  1.1928 -    Add (CX (ak, al), Add (Mul (hl, CX (ia, ib)), gm))
  1.1929 -  | numadd (CX (ak, al), Add (Mul (hl, Neg ic), gm)) =
  1.1930 -    Add (CX (ak, al), Add (Mul (hl, Neg ic), gm))
  1.1931 -  | numadd (CX (ak, al), Add (Mul (hl, Add (id, ie)), gm)) =
  1.1932 -    Add (CX (ak, al), Add (Mul (hl, Add (id, ie)), gm))
  1.1933 -  | numadd (CX (ak, al), Add (Mul (hl, Sub (if', ig)), gm)) =
  1.1934 -    Add (CX (ak, al), Add (Mul (hl, Sub (if', ig)), gm))
  1.1935 -  | numadd (CX (ak, al), Add (Mul (hl, Mul (ih, ii)), gm)) =
  1.1936 -    Add (CX (ak, al), Add (Mul (hl, Mul (ih, ii)), gm))
  1.1937 -  | numadd (CX (ak, al), Sub (gn, go)) = Add (CX (ak, al), Sub (gn, go))
  1.1938 -  | numadd (CX (ak, al), Mul (gp, gq)) = Add (CX (ak, al), Mul (gp, gq))
  1.1939 -  | numadd (Neg am, C iu) = Add (Neg am, C iu)
  1.1940 -  | numadd (Neg am, Bound iv) = Add (Neg am, Bound iv)
  1.1941 -  | numadd (Neg am, CX (iw, ix)) = Add (Neg am, CX (iw, ix))
  1.1942 -  | numadd (Neg am, Neg iy) = Add (Neg am, Neg iy)
  1.1943 -  | numadd (Neg am, Add (C jq, ja)) = Add (Neg am, Add (C jq, ja))
  1.1944 -  | numadd (Neg am, Add (Bound jr, ja)) = Add (Neg am, Add (Bound jr, ja))
  1.1945 -  | numadd (Neg am, Add (CX (js, jt), ja)) = Add (Neg am, Add (CX (js, jt), ja))
  1.1946 -  | numadd (Neg am, Add (Neg ju, ja)) = Add (Neg am, Add (Neg ju, ja))
  1.1947 -  | numadd (Neg am, Add (Add (jv, jw), ja)) =
  1.1948 -    Add (Neg am, Add (Add (jv, jw), ja))
  1.1949 -  | numadd (Neg am, Add (Sub (jx, jy), ja)) =
  1.1950 -    Add (Neg am, Add (Sub (jx, jy), ja))
  1.1951 -  | numadd (Neg am, Add (Mul (jz, C km), ja)) =
  1.1952 -    Add (Neg am, Add (Mul (jz, C km), ja))
  1.1953 -  | numadd (Neg am, Add (Mul (jz, CX (ko, kp)), ja)) =
  1.1954 -    Add (Neg am, Add (Mul (jz, CX (ko, kp)), ja))
  1.1955 -  | numadd (Neg am, Add (Mul (jz, Neg kq), ja)) =
  1.1956 -    Add (Neg am, Add (Mul (jz, Neg kq), ja))
  1.1957 -  | numadd (Neg am, Add (Mul (jz, Add (kr, ks)), ja)) =
  1.1958 -    Add (Neg am, Add (Mul (jz, Add (kr, ks)), ja))
  1.1959 -  | numadd (Neg am, Add (Mul (jz, Sub (kt, ku)), ja)) =
  1.1960 -    Add (Neg am, Add (Mul (jz, Sub (kt, ku)), ja))
  1.1961 -  | numadd (Neg am, Add (Mul (jz, Mul (kv, kw)), ja)) =
  1.1962 -    Add (Neg am, Add (Mul (jz, Mul (kv, kw)), ja))
  1.1963 -  | numadd (Neg am, Sub (jb, jc)) = Add (Neg am, Sub (jb, jc))
  1.1964 -  | numadd (Neg am, Mul (jd, je)) = Add (Neg am, Mul (jd, je))
  1.1965 -  | numadd (Add (C lt, ao), C mp) = Add (Add (C lt, ao), C mp)
  1.1966 -  | numadd (Add (C lt, ao), Bound mq) = Add (Add (C lt, ao), Bound mq)
  1.1967 -  | numadd (Add (C lt, ao), CX (mr, ms)) = Add (Add (C lt, ao), CX (mr, ms))
  1.1968 -  | numadd (Add (C lt, ao), Neg mt) = Add (Add (C lt, ao), Neg mt)
  1.1969 -  | numadd (Add (C lt, ao), Add (C nl, mv)) =
  1.1970 -    Add (Add (C lt, ao), Add (C nl, mv))
  1.1971 -  | numadd (Add (C lt, ao), Add (Bound nm, mv)) =
  1.1972 -    Add (Add (C lt, ao), Add (Bound nm, mv))
  1.1973 -  | numadd (Add (C lt, ao), Add (CX (nn, no), mv)) =
  1.1974 -    Add (Add (C lt, ao), Add (CX (nn, no), mv))
  1.1975 -  | numadd (Add (C lt, ao), Add (Neg np, mv)) =
  1.1976 -    Add (Add (C lt, ao), Add (Neg np, mv))
  1.1977 -  | numadd (Add (C lt, ao), Add (Add (nq, nr), mv)) =
  1.1978 -    Add (Add (C lt, ao), Add (Add (nq, nr), mv))
  1.1979 -  | numadd (Add (C lt, ao), Add (Sub (ns, nt), mv)) =
  1.1980 -    Add (Add (C lt, ao), Add (Sub (ns, nt), mv))
  1.1981 -  | numadd (Add (C lt, ao), Add (Mul (nu, C oh), mv)) =
  1.1982 -    Add (Add (C lt, ao), Add (Mul (nu, C oh), mv))
  1.1983 -  | numadd (Add (C lt, ao), Add (Mul (nu, CX (oj, ok)), mv)) =
  1.1984 -    Add (Add (C lt, ao), Add (Mul (nu, CX (oj, ok)), mv))
  1.1985 -  | numadd (Add (C lt, ao), Add (Mul (nu, Neg ol), mv)) =
  1.1986 -    Add (Add (C lt, ao), Add (Mul (nu, Neg ol), mv))
  1.1987 -  | numadd (Add (C lt, ao), Add (Mul (nu, Add (om, on)), mv)) =
  1.1988 -    Add (Add (C lt, ao), Add (Mul (nu, Add (om, on)), mv))
  1.1989 -  | numadd (Add (C lt, ao), Add (Mul (nu, Sub (oo, op')), mv)) =
  1.1990 -    Add (Add (C lt, ao), Add (Mul (nu, Sub (oo, op')), mv))
  1.1991 -  | numadd (Add (C lt, ao), Add (Mul (nu, Mul (oq, or)), mv)) =
  1.1992 -    Add (Add (C lt, ao), Add (Mul (nu, Mul (oq, or)), mv))
  1.1993 -  | numadd (Add (C lt, ao), Sub (mw, mx)) = Add (Add (C lt, ao), Sub (mw, mx))
  1.1994 -  | numadd (Add (C lt, ao), Mul (my, mz)) = Add (Add (C lt, ao), Mul (my, mz))
  1.1995 -  | numadd (Add (Bound lu, ao), C pd) = Add (Add (Bound lu, ao), C pd)
  1.1996 -  | numadd (Add (Bound lu, ao), Bound pe) = Add (Add (Bound lu, ao), Bound pe)
  1.1997 -  | numadd (Add (Bound lu, ao), CX (pf, pg)) =
  1.1998 -    Add (Add (Bound lu, ao), CX (pf, pg))
  1.1999 -  | numadd (Add (Bound lu, ao), Neg ph) = Add (Add (Bound lu, ao), Neg ph)
  1.2000 -  | numadd (Add (Bound lu, ao), Add (C pz, pj)) =
  1.2001 -    Add (Add (Bound lu, ao), Add (C pz, pj))
  1.2002 -  | numadd (Add (Bound lu, ao), Add (Bound qa, pj)) =
  1.2003 -    Add (Add (Bound lu, ao), Add (Bound qa, pj))
  1.2004 -  | numadd (Add (Bound lu, ao), Add (CX (qb, qc), pj)) =
  1.2005 -    Add (Add (Bound lu, ao), Add (CX (qb, qc), pj))
  1.2006 -  | numadd (Add (Bound lu, ao), Add (Neg qd, pj)) =
  1.2007 -    Add (Add (Bound lu, ao), Add (Neg qd, pj))
  1.2008 -  | numadd (Add (Bound lu, ao), Add (Add (qe, qf), pj)) =
  1.2009 -    Add (Add (Bound lu, ao), Add (Add (qe, qf), pj))
  1.2010 -  | numadd (Add (Bound lu, ao), Add (Sub (qg, qh), pj)) =
  1.2011 -    Add (Add (Bound lu, ao), Add (Sub (qg, qh), pj))
  1.2012 -  | numadd (Add (Bound lu, ao), Add (Mul (qi, C qv), pj)) =
  1.2013 -    Add (Add (Bound lu, ao), Add (Mul (qi, C qv), pj))
  1.2014 -  | numadd (Add (Bound lu, ao), Add (Mul (qi, CX (qx, qy)), pj)) =
  1.2015 -    Add (Add (Bound lu, ao), Add (Mul (qi, CX (qx, qy)), pj))
  1.2016 -  | numadd (Add (Bound lu, ao), Add (Mul (qi, Neg qz), pj)) =
  1.2017 -    Add (Add (Bound lu, ao), Add (Mul (qi, Neg qz), pj))
  1.2018 -  | numadd (Add (Bound lu, ao), Add (Mul (qi, Add (ra, rb)), pj)) =
  1.2019 -    Add (Add (Bound lu, ao), Add (Mul (qi, Add (ra, rb)), pj))
  1.2020 -  | numadd (Add (Bound lu, ao), Add (Mul (qi, Sub (rc, rd)), pj)) =
  1.2021 -    Add (Add (Bound lu, ao), Add (Mul (qi, Sub (rc, rd)), pj))
  1.2022 -  | numadd (Add (Bound lu, ao), Add (Mul (qi, Mul (re, rf)), pj)) =
  1.2023 -    Add (Add (Bound lu, ao), Add (Mul (qi, Mul (re, rf)), pj))
  1.2024 -  | numadd (Add (Bound lu, ao), Sub (pk, pl)) =
  1.2025 -    Add (Add (Bound lu, ao), Sub (pk, pl))
  1.2026 -  | numadd (Add (Bound lu, ao), Mul (pm, pn)) =
  1.2027 -    Add (Add (Bound lu, ao), Mul (pm, pn))
  1.2028 -  | numadd (Add (CX (lv, lw), ao), C rr) = Add (Add (CX (lv, lw), ao), C rr)
  1.2029 -  | numadd (Add (CX (lv, lw), ao), Bound rs) =
  1.2030 -    Add (Add (CX (lv, lw), ao), Bound rs)
  1.2031 -  | numadd (Add (CX (lv, lw), ao), CX (rt, ru)) =
  1.2032 -    Add (Add (CX (lv, lw), ao), CX (rt, ru))
  1.2033 -  | numadd (Add (CX (lv, lw), ao), Neg rv) = Add (Add (CX (lv, lw), ao), Neg rv)
  1.2034 -  | numadd (Add (CX (lv, lw), ao), Add (C sn, rx)) =
  1.2035 -    Add (Add (CX (lv, lw), ao), Add (C sn, rx))
  1.2036 -  | numadd (Add (CX (lv, lw), ao), Add (Bound so, rx)) =
  1.2037 -    Add (Add (CX (lv, lw), ao), Add (Bound so, rx))
  1.2038 -  | numadd (Add (CX (lv, lw), ao), Add (CX (sp, sq), rx)) =
  1.2039 -    Add (Add (CX (lv, lw), ao), Add (CX (sp, sq), rx))
  1.2040 -  | numadd (Add (CX (lv, lw), ao), Add (Neg sr, rx)) =
  1.2041 -    Add (Add (CX (lv, lw), ao), Add (Neg sr, rx))
  1.2042 -  | numadd (Add (CX (lv, lw), ao), Add (Add (ss, st), rx)) =
  1.2043 -    Add (Add (CX (lv, lw), ao), Add (Add (ss, st), rx))
  1.2044 -  | numadd (Add (CX (lv, lw), ao), Add (Sub (su, sv), rx)) =
  1.2045 -    Add (Add (CX (lv, lw), ao), Add (Sub (su, sv), rx))
  1.2046 -  | numadd (Add (CX (lv, lw), ao), Add (Mul (sw, C tj), rx)) =
  1.2047 -    Add (Add (CX (lv, lw), ao), Add (Mul (sw, C tj), rx))
  1.2048 -  | numadd (Add (CX (lv, lw), ao), Add (Mul (sw, CX (tl, tm)), rx)) =
  1.2049 -    Add (Add (CX (lv, lw), ao), Add (Mul (sw, CX (tl, tm)), rx))
  1.2050 -  | numadd (Add (CX (lv, lw), ao), Add (Mul (sw, Neg tn), rx)) =
  1.2051 -    Add (Add (CX (lv, lw), ao), Add (Mul (sw, Neg tn), rx))
  1.2052 -  | numadd (Add (CX (lv, lw), ao), Add (Mul (sw, Add (to, tp)), rx)) =
  1.2053 -    Add (Add (CX (lv, lw), ao), Add (Mul (sw, Add (to, tp)), rx))
  1.2054 -  | numadd (Add (CX (lv, lw), ao), Add (Mul (sw, Sub (tq, tr)), rx)) =
  1.2055 -    Add (Add (CX (lv, lw), ao), Add (Mul (sw, Sub (tq, tr)), rx))
  1.2056 -  | numadd (Add (CX (lv, lw), ao), Add (Mul (sw, Mul (ts, tt)), rx)) =
  1.2057 -    Add (Add (CX (lv, lw), ao), Add (Mul (sw, Mul (ts, tt)), rx))
  1.2058 -  | numadd (Add (CX (lv, lw), ao), Sub (ry, rz)) =
  1.2059 -    Add (Add (CX (lv, lw), ao), Sub (ry, rz))
  1.2060 -  | numadd (Add (CX (lv, lw), ao), Mul (sa, sb)) =
  1.2061 -    Add (Add (CX (lv, lw), ao), Mul (sa, sb))
  1.2062 -  | numadd (Add (Neg lx, ao), C uf) = Add (Add (Neg lx, ao), C uf)
  1.2063 -  | numadd (Add (Neg lx, ao), Bound ug) = Add (Add (Neg lx, ao), Bound ug)
  1.2064 -  | numadd (Add (Neg lx, ao), CX (uh, ui)) = Add (Add (Neg lx, ao), CX (uh, ui))
  1.2065 -  | numadd (Add (Neg lx, ao), Neg uj) = Add (Add (Neg lx, ao), Neg uj)
  1.2066 -  | numadd (Add (Neg lx, ao), Add (C vb, ul)) =
  1.2067 -    Add (Add (Neg lx, ao), Add (C vb, ul))
  1.2068 -  | numadd (Add (Neg lx, ao), Add (Bound vc, ul)) =
  1.2069 -    Add (Add (Neg lx, ao), Add (Bound vc, ul))
  1.2070 -  | numadd (Add (Neg lx, ao), Add (CX (vd, ve), ul)) =
  1.2071 -    Add (Add (Neg lx, ao), Add (CX (vd, ve), ul))
  1.2072 -  | numadd (Add (Neg lx, ao), Add (Neg vf, ul)) =
  1.2073 -    Add (Add (Neg lx, ao), Add (Neg vf, ul))
  1.2074 -  | numadd (Add (Neg lx, ao), Add (Add (vg, vh), ul)) =
  1.2075 -    Add (Add (Neg lx, ao), Add (Add (vg, vh), ul))
  1.2076 -  | numadd (Add (Neg lx, ao), Add (Sub (vi, vj), ul)) =
  1.2077 -    Add (Add (Neg lx, ao), Add (Sub (vi, vj), ul))
  1.2078 -  | numadd (Add (Neg lx, ao), Add (Mul (vk, C vx), ul)) =
  1.2079 -    Add (Add (Neg lx, ao), Add (Mul (vk, C vx), ul))
  1.2080 -  | numadd (Add (Neg lx, ao), Add (Mul (vk, CX (vz, wa)), ul)) =
  1.2081 -    Add (Add (Neg lx, ao), Add (Mul (vk, CX (vz, wa)), ul))
  1.2082 -  | numadd (Add (Neg lx, ao), Add (Mul (vk, Neg wb), ul)) =
  1.2083 -    Add (Add (Neg lx, ao), Add (Mul (vk, Neg wb), ul))
  1.2084 -  | numadd (Add (Neg lx, ao), Add (Mul (vk, Add (wc, wd)), ul)) =
  1.2085 -    Add (Add (Neg lx, ao), Add (Mul (vk, Add (wc, wd)), ul))
  1.2086 -  | numadd (Add (Neg lx, ao), Add (Mul (vk, Sub (we, wf)), ul)) =
  1.2087 -    Add (Add (Neg lx, ao), Add (Mul (vk, Sub (we, wf)), ul))
  1.2088 -  | numadd (Add (Neg lx, ao), Add (Mul (vk, Mul (wg, wh)), ul)) =
  1.2089 -    Add (Add (Neg lx, ao), Add (Mul (vk, Mul (wg, wh)), ul))
  1.2090 -  | numadd (Add (Neg lx, ao), Sub (um, un)) =
  1.2091 -    Add (Add (Neg lx, ao), Sub (um, un))
  1.2092 -  | numadd (Add (Neg lx, ao), Mul (uo, up)) =
  1.2093 -    Add (Add (Neg lx, ao), Mul (uo, up))
  1.2094 -  | numadd (Add (Add (ly, lz), ao), C wt) = Add (Add (Add (ly, lz), ao), C wt)
  1.2095 -  | numadd (Add (Add (ly, lz), ao), Bound wu) =
  1.2096 -    Add (Add (Add (ly, lz), ao), Bound wu)
  1.2097 -  | numadd (Add (Add (ly, lz), ao), CX (wv, ww)) =
  1.2098 -    Add (Add (Add (ly, lz), ao), CX (wv, ww))
  1.2099 -  | numadd (Add (Add (ly, lz), ao), Neg wx) =
  1.2100 -    Add (Add (Add (ly, lz), ao), Neg wx)
  1.2101 -  | numadd (Add (Add (ly, lz), ao), Add (C xp, wz)) =
  1.2102 -    Add (Add (Add (ly, lz), ao), Add (C xp, wz))
  1.2103 -  | numadd (Add (Add (ly, lz), ao), Add (Bound xq, wz)) =
  1.2104 -    Add (Add (Add (ly, lz), ao), Add (Bound xq, wz))
  1.2105 -  | numadd (Add (Add (ly, lz), ao), Add (CX (xr, xs), wz)) =
  1.2106 -    Add (Add (Add (ly, lz), ao), Add (CX (xr, xs), wz))
  1.2107 -  | numadd (Add (Add (ly, lz), ao), Add (Neg xt, wz)) =
  1.2108 -    Add (Add (Add (ly, lz), ao), Add (Neg xt, wz))
  1.2109 -  | numadd (Add (Add (ly, lz), ao), Add (Add (xu, xv), wz)) =
  1.2110 -    Add (Add (Add (ly, lz), ao), Add (Add (xu, xv), wz))
  1.2111 -  | numadd (Add (Add (ly, lz), ao), Add (Sub (xw, xx), wz)) =
  1.2112 -    Add (Add (Add (ly, lz), ao), Add (Sub (xw, xx), wz))
  1.2113 -  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, C yl), wz)) =
  1.2114 -    Add (Add (Add (ly, lz), ao), Add (Mul (xy, C yl), wz))
  1.2115 -  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, CX (yn, yo)), wz)) =
  1.2116 -    Add (Add (Add (ly, lz), ao), Add (Mul (xy, CX (yn, yo)), wz))
  1.2117 -  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, Neg yp), wz)) =
  1.2118 -    Add (Add (Add (ly, lz), ao), Add (Mul (xy, Neg yp), wz))
  1.2119 -  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, Add (yq, yr)), wz)) =
  1.2120 -    Add (Add (Add (ly, lz), ao), Add (Mul (xy, Add (yq, yr)), wz))
  1.2121 -  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, Sub (ys, yt)), wz)) =
  1.2122 -    Add (Add (Add (ly, lz), ao), Add (Mul (xy, Sub (ys, yt)), wz))
  1.2123 -  | numadd (Add (Add (ly, lz), ao), Add (Mul (xy, Mul (yu, yv)), wz)) =
  1.2124 -    Add (Add (Add (ly, lz), ao), Add (Mul (xy, Mul (yu, yv)), wz))
  1.2125 -  | numadd (Add (Add (ly, lz), ao), Sub (xa, xb)) =
  1.2126 -    Add (Add (Add (ly, lz), ao), Sub (xa, xb))
  1.2127 -  | numadd (Add (Add (ly, lz), ao), Mul (xc, xd)) =
  1.2128 -    Add (Add (Add (ly, lz), ao), Mul (xc, xd))
  1.2129 -  | numadd (Add (Sub (ma, mb), ao), C zh) = Add (Add (Sub (ma, mb), ao), C zh)
  1.2130 -  | numadd (Add (Sub (ma, mb), ao), Bound zi) =
  1.2131 -    Add (Add (Sub (ma, mb), ao), Bound zi)
  1.2132 -  | numadd (Add (Sub (ma, mb), ao), CX (zj, zk)) =
  1.2133 -    Add (Add (Sub (ma, mb), ao), CX (zj, zk))
  1.2134 -  | numadd (Add (Sub (ma, mb), ao), Neg zl) =
  1.2135 -    Add (Add (Sub (ma, mb), ao), Neg zl)
  1.2136 -  | numadd (Add (Sub (ma, mb), ao), Add (C aad, zn)) =
  1.2137 -    Add (Add (Sub (ma, mb), ao), Add (C aad, zn))
  1.2138 -  | numadd (Add (Sub (ma, mb), ao), Add (Bound aae, zn)) =
  1.2139 -    Add (Add (Sub (ma, mb), ao), Add (Bound aae, zn))
  1.2140 -  | numadd (Add (Sub (ma, mb), ao), Add (CX (aaf, aag), zn)) =
  1.2141 -    Add (Add (Sub (ma, mb), ao), Add (CX (aaf, aag), zn))
  1.2142 -  | numadd (Add (Sub (ma, mb), ao), Add (Neg aah, zn)) =
  1.2143 -    Add (Add (Sub (ma, mb), ao), Add (Neg aah, zn))
  1.2144 -  | numadd (Add (Sub (ma, mb), ao), Add (Add (aai, aaj), zn)) =
  1.2145 -    Add (Add (Sub (ma, mb), ao), Add (Add (aai, aaj), zn))
  1.2146 -  | numadd (Add (Sub (ma, mb), ao), Add (Sub (aak, aal), zn)) =
  1.2147 -    Add (Add (Sub (ma, mb), ao), Add (Sub (aak, aal), zn))
  1.2148 -  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, C aaz), zn)) =
  1.2149 -    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, C aaz), zn))
  1.2150 -  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, CX (abb, abc)), zn)) =
  1.2151 -    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, CX (abb, abc)), zn))
  1.2152 -  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, Neg abd), zn)) =
  1.2153 -    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, Neg abd), zn))
  1.2154 -  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, Add (abe, abf)), zn)) =
  1.2155 -    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, Add (abe, abf)), zn))
  1.2156 -  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, Sub (abg, abh)), zn)) =
  1.2157 -    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, Sub (abg, abh)), zn))
  1.2158 -  | numadd (Add (Sub (ma, mb), ao), Add (Mul (aam, Mul (abi, abj)), zn)) =
  1.2159 -    Add (Add (Sub (ma, mb), ao), Add (Mul (aam, Mul (abi, abj)), zn))
  1.2160 -  | numadd (Add (Sub (ma, mb), ao), Sub (zo, zp)) =
  1.2161 -    Add (Add (Sub (ma, mb), ao), Sub (zo, zp))
  1.2162 -  | numadd (Add (Sub (ma, mb), ao), Mul (zq, zr)) =
  1.2163 -    Add (Add (Sub (ma, mb), ao), Mul (zq, zr))
  1.2164 -  | numadd (Add (Mul (mc, C acg), ao), C adc) =
  1.2165 -    Add (Add (Mul (mc, C acg), ao), C adc)
  1.2166 -  | numadd (Add (Mul (mc, C acg), ao), Bound add) =
  1.2167 -    Add (Add (Mul (mc, C acg), ao), Bound add)
  1.2168 -  | numadd (Add (Mul (mc, C acg), ao), CX (ade, adf)) =
  1.2169 -    Add (Add (Mul (mc, C acg), ao), CX (ade, adf))
  1.2170 -  | numadd (Add (Mul (mc, C acg), ao), Neg adg) =
  1.2171 -    Add (Add (Mul (mc, C acg), ao), Neg adg)
  1.2172 -  | numadd (Add (Mul (mc, C acg), ao), Add (C ady, adi)) =
  1.2173 -    Add (Add (Mul (mc, C acg), ao), Add (C ady, adi))
  1.2174 -  | numadd (Add (Mul (mc, C acg), ao), Add (Bound adz, adi)) =
  1.2175 -    Add (Add (Mul (mc, C acg), ao), Add (Bound adz, adi))
  1.2176 -  | numadd (Add (Mul (mc, C acg), ao), Add (CX (aea, aeb), adi)) =
  1.2177 -    Add (Add (Mul (mc, C acg), ao), Add (CX (aea, aeb), adi))
  1.2178 -  | numadd (Add (Mul (mc, C acg), ao), Add (Neg aec, adi)) =
  1.2179 -    Add (Add (Mul (mc, C acg), ao), Add (Neg aec, adi))
  1.2180 -  | numadd (Add (Mul (mc, C acg), ao), Add (Add (aed, aee), adi)) =
  1.2181 -    Add (Add (Mul (mc, C acg), ao), Add (Add (aed, aee), adi))
  1.2182 -  | numadd (Add (Mul (mc, C acg), ao), Add (Sub (aef, aeg), adi)) =
  1.2183 -    Add (Add (Mul (mc, C acg), ao), Add (Sub (aef, aeg), adi))
  1.2184 -  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, C aeu), adi)) =
  1.2185 -    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, C aeu), adi))
  1.2186 -  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, CX (aew, aex)), adi)) =
  1.2187 -    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, CX (aew, aex)), adi))
  1.2188 -  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Neg aey), adi)) =
  1.2189 -    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Neg aey), adi))
  1.2190 -  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Add (aez, afa)), adi)) =
  1.2191 -    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Add (aez, afa)), adi))
  1.2192 -  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Sub (afb, afc)), adi)) =
  1.2193 -    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Sub (afb, afc)), adi))
  1.2194 -  | numadd (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Mul (afd, afe)), adi)) =
  1.2195 -    Add (Add (Mul (mc, C acg), ao), Add (Mul (aeh, Mul (afd, afe)), adi))
  1.2196 -  | numadd (Add (Mul (mc, C acg), ao), Sub (adj, adk)) =
  1.2197 -    Add (Add (Mul (mc, C acg), ao), Sub (adj, adk))
  1.2198 -  | numadd (Add (Mul (mc, C acg), ao), Mul (adl, adm)) =
  1.2199 -    Add (Add (Mul (mc, C acg), ao), Mul (adl, adm))
  1.2200 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), C ajl) =
  1.2201 -    Add (Add (Mul (mc, CX (aci, acj)), ao), C ajl)
  1.2202 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Bound ajm) =
  1.2203 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Bound ajm)
  1.2204 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), CX (ajn, ajo)) =
  1.2205 -    Add (Add (Mul (mc, CX (aci, acj)), ao), CX (ajn, ajo))
  1.2206 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Neg ajp) =
  1.2207 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Neg ajp)
  1.2208 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Add (C akh, ajr)) =
  1.2209 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Add (C akh, ajr))
  1.2210 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Add (Bound aki, ajr)) =
  1.2211 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Add (Bound aki, ajr))
  1.2212 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Add (CX (akj, akk), ajr)) =
  1.2213 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Add (CX (akj, akk), ajr))
  1.2214 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Add (Neg akl, ajr)) =
  1.2215 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Add (Neg akl, ajr))
  1.2216 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Add (Add (akm, akn), ajr)) =
  1.2217 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Add (Add (akm, akn), ajr))
  1.2218 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Add (Sub (ako, akp), ajr)) =
  1.2219 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Add (Sub (ako, akp), ajr))
  1.2220 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Add (Mul (akq, C ald), ajr)) =
  1.2221 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Add (Mul (akq, C ald), ajr))
  1.2222 -  | numadd
  1.2223 -      (Add (Mul (mc, CX (aci, acj)), ao), Add (Mul (akq, CX (alf, alg)), ajr)) =
  1.2224 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Add (Mul (akq, CX (alf, alg)), ajr))
  1.2225 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Add (Mul (akq, Neg alh), ajr)) =
  1.2226 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Add (Mul (akq, Neg alh), ajr))
  1.2227 -  | numadd
  1.2228 -      (Add (Mul (mc, CX (aci, acj)), ao),
  1.2229 -        Add (Mul (akq, Add (ali, alj)), ajr)) =
  1.2230 -    Add (Add (Mul (mc, CX (aci, acj)), ao),
  1.2231 -          Add (Mul (akq, Add (ali, alj)), ajr))
  1.2232 -  | numadd
  1.2233 -      (Add (Mul (mc, CX (aci, acj)), ao),
  1.2234 -        Add (Mul (akq, Sub (alk, all)), ajr)) =
  1.2235 -    Add (Add (Mul (mc, CX (aci, acj)), ao),
  1.2236 -          Add (Mul (akq, Sub (alk, all)), ajr))
  1.2237 -  | numadd
  1.2238 -      (Add (Mul (mc, CX (aci, acj)), ao),
  1.2239 -        Add (Mul (akq, Mul (alm, aln)), ajr)) =
  1.2240 -    Add (Add (Mul (mc, CX (aci, acj)), ao),
  1.2241 -          Add (Mul (akq, Mul (alm, aln)), ajr))
  1.2242 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Sub (ajs, ajt)) =
  1.2243 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Sub (ajs, ajt))
  1.2244 -  | numadd (Add (Mul (mc, CX (aci, acj)), ao), Mul (aju, ajv)) =
  1.2245 -    Add (Add (Mul (mc, CX (aci, acj)), ao), Mul (aju, ajv))
  1.2246 -  | numadd (Add (Mul (mc, Neg ack), ao), C alz) =
  1.2247 -    Add (Add (Mul (mc, Neg ack), ao), C alz)
  1.2248 -  | numadd (Add (Mul (mc, Neg ack), ao), Bound ama) =
  1.2249 -    Add (Add (Mul (mc, Neg ack), ao), Bound ama)
  1.2250 -  | numadd (Add (Mul (mc, Neg ack), ao), CX (amb, amc)) =
  1.2251 -    Add (Add (Mul (mc, Neg ack), ao), CX (amb, amc))
  1.2252 -  | numadd (Add (Mul (mc, Neg ack), ao), Neg amd) =
  1.2253 -    Add (Add (Mul (mc, Neg ack), ao), Neg amd)
  1.2254 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (C amv, amf)) =
  1.2255 -    Add (Add (Mul (mc, Neg ack), ao), Add (C amv, amf))
  1.2256 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (Bound amw, amf)) =
  1.2257 -    Add (Add (Mul (mc, Neg ack), ao), Add (Bound amw, amf))
  1.2258 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (CX (amx, amy), amf)) =
  1.2259 -    Add (Add (Mul (mc, Neg ack), ao), Add (CX (amx, amy), amf))
  1.2260 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (Neg amz, amf)) =
  1.2261 -    Add (Add (Mul (mc, Neg ack), ao), Add (Neg amz, amf))
  1.2262 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (Add (ana, anb), amf)) =
  1.2263 -    Add (Add (Mul (mc, Neg ack), ao), Add (Add (ana, anb), amf))
  1.2264 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (Sub (anc, and'), amf)) =
  1.2265 -    Add (Add (Mul (mc, Neg ack), ao), Add (Sub (anc, and'), amf))
  1.2266 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, C anr), amf)) =
  1.2267 -    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, C anr), amf))
  1.2268 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, CX (ant, anu)), amf)) =
  1.2269 -    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, CX (ant, anu)), amf))
  1.2270 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Neg anv), amf)) =
  1.2271 -    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Neg anv), amf))
  1.2272 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Add (anw, anx)), amf)) =
  1.2273 -    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Add (anw, anx)), amf))
  1.2274 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Sub (any, anz)), amf)) =
  1.2275 -    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Sub (any, anz)), amf))
  1.2276 -  | numadd (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Mul (aoa, aob)), amf)) =
  1.2277 -    Add (Add (Mul (mc, Neg ack), ao), Add (Mul (ane, Mul (aoa, aob)), amf))
  1.2278 -  | numadd (Add (Mul (mc, Neg ack), ao), Sub (amg, amh)) =
  1.2279 -    Add (Add (Mul (mc, Neg ack), ao), Sub (amg, amh))
  1.2280 -  | numadd (Add (Mul (mc, Neg ack), ao), Mul (ami, amj)) =
  1.2281 -    Add (Add (Mul (mc, Neg ack), ao), Mul (ami, amj))
  1.2282 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), C aon) =
  1.2283 -    Add (Add (Mul (mc, Add (acl, acm)), ao), C aon)
  1.2284 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Bound aoo) =
  1.2285 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Bound aoo)
  1.2286 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), CX (aop, aoq)) =
  1.2287 -    Add (Add (Mul (mc, Add (acl, acm)), ao), CX (aop, aoq))
  1.2288 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Neg aor) =
  1.2289 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Neg aor)
  1.2290 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (C apj, aot)) =
  1.2291 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (C apj, aot))
  1.2292 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Bound apk, aot)) =
  1.2293 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Bound apk, aot))
  1.2294 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (CX (apl, apm), aot)) =
  1.2295 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (CX (apl, apm), aot))
  1.2296 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Neg apn, aot)) =
  1.2297 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Neg apn, aot))
  1.2298 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Add (apo, app), aot)) =
  1.2299 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Add (apo, app), aot))
  1.2300 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Sub (apq, apr), aot)) =
  1.2301 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Sub (apq, apr), aot))
  1.2302 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, C aqf), aot)) =
  1.2303 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, C aqf), aot))
  1.2304 -  | numadd
  1.2305 -      (Add (Mul (mc, Add (acl, acm)), ao),
  1.2306 -        Add (Mul (aps, CX (aqh, aqi)), aot)) =
  1.2307 -    Add (Add (Mul (mc, Add (acl, acm)), ao),
  1.2308 -          Add (Mul (aps, CX (aqh, aqi)), aot))
  1.2309 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, Neg aqj), aot)) =
  1.2310 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Add (Mul (aps, Neg aqj), aot))
  1.2311 -  | numadd
  1.2312 -      (Add (Mul (mc, Add (acl, acm)), ao),
  1.2313 -        Add (Mul (aps, Add (aqk, aql)), aot)) =
  1.2314 -    Add (Add (Mul (mc, Add (acl, acm)), ao),
  1.2315 -          Add (Mul (aps, Add (aqk, aql)), aot))
  1.2316 -  | numadd
  1.2317 -      (Add (Mul (mc, Add (acl, acm)), ao),
  1.2318 -        Add (Mul (aps, Sub (aqm, aqn)), aot)) =
  1.2319 -    Add (Add (Mul (mc, Add (acl, acm)), ao),
  1.2320 -          Add (Mul (aps, Sub (aqm, aqn)), aot))
  1.2321 -  | numadd
  1.2322 -      (Add (Mul (mc, Add (acl, acm)), ao),
  1.2323 -        Add (Mul (aps, Mul (aqo, aqp)), aot)) =
  1.2324 -    Add (Add (Mul (mc, Add (acl, acm)), ao),
  1.2325 -          Add (Mul (aps, Mul (aqo, aqp)), aot))
  1.2326 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Sub (aou, aov)) =
  1.2327 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Sub (aou, aov))
  1.2328 -  | numadd (Add (Mul (mc, Add (acl, acm)), ao), Mul (aow, aox)) =
  1.2329 -    Add (Add (Mul (mc, Add (acl, acm)), ao), Mul (aow, aox))
  1.2330 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), C arb) =
  1.2331 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), C arb)
  1.2332 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Bound arc) =
  1.2333 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Bound arc)
  1.2334 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), CX (ard, are)) =
  1.2335 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), CX (ard, are))
  1.2336 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Neg arf) =
  1.2337 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Neg arf)
  1.2338 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (C arx, arh)) =
  1.2339 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (C arx, arh))
  1.2340 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Bound ary, arh)) =
  1.2341 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Bound ary, arh))
  1.2342 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (CX (arz, asa), arh)) =
  1.2343 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (CX (arz, asa), arh))
  1.2344 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Neg asb, arh)) =
  1.2345 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Neg asb, arh))
  1.2346 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Add (asc, asd), arh)) =
  1.2347 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Add (asc, asd), arh))
  1.2348 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Sub (ase, asf), arh)) =
  1.2349 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Sub (ase, asf), arh))
  1.2350 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, C ast), arh)) =
  1.2351 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, C ast), arh))
  1.2352 -  | numadd
  1.2353 -      (Add (Mul (mc, Sub (acn, aco)), ao),
  1.2354 -        Add (Mul (asg, CX (asv, asw)), arh)) =
  1.2355 -    Add (Add (Mul (mc, Sub (acn, aco)), ao),
  1.2356 -          Add (Mul (asg, CX (asv, asw)), arh))
  1.2357 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, Neg asx), arh)) =
  1.2358 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Add (Mul (asg, Neg asx), arh))
  1.2359 -  | numadd
  1.2360 -      (Add (Mul (mc, Sub (acn, aco)), ao),
  1.2361 -        Add (Mul (asg, Add (asy, asz)), arh)) =
  1.2362 -    Add (Add (Mul (mc, Sub (acn, aco)), ao),
  1.2363 -          Add (Mul (asg, Add (asy, asz)), arh))
  1.2364 -  | numadd
  1.2365 -      (Add (Mul (mc, Sub (acn, aco)), ao),
  1.2366 -        Add (Mul (asg, Sub (ata, atb)), arh)) =
  1.2367 -    Add (Add (Mul (mc, Sub (acn, aco)), ao),
  1.2368 -          Add (Mul (asg, Sub (ata, atb)), arh))
  1.2369 -  | numadd
  1.2370 -      (Add (Mul (mc, Sub (acn, aco)), ao),
  1.2371 -        Add (Mul (asg, Mul (atc, atd)), arh)) =
  1.2372 -    Add (Add (Mul (mc, Sub (acn, aco)), ao),
  1.2373 -          Add (Mul (asg, Mul (atc, atd)), arh))
  1.2374 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Sub (ari, arj)) =
  1.2375 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Sub (ari, arj))
  1.2376 -  | numadd (Add (Mul (mc, Sub (acn, aco)), ao), Mul (ark, arl)) =
  1.2377 -    Add (Add (Mul (mc, Sub (acn, aco)), ao), Mul (ark, arl))
  1.2378 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), C atp) =
  1.2379 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), C atp)
  1.2380 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Bound atq) =
  1.2381 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Bound atq)
  1.2382 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), CX (atr, ats)) =
  1.2383 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), CX (atr, ats))
  1.2384 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Neg att) =
  1.2385 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Neg att)
  1.2386 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (C aul, atv)) =
  1.2387 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (C aul, atv))
  1.2388 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Bound aum, atv)) =
  1.2389 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Bound aum, atv))
  1.2390 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (CX (aun, auo), atv)) =
  1.2391 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (CX (aun, auo), atv))
  1.2392 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Neg aup, atv)) =
  1.2393 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Neg aup, atv))
  1.2394 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Add (auq, aur), atv)) =
  1.2395 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Add (auq, aur), atv))
  1.2396 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Sub (aus, aut), atv)) =
  1.2397 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Sub (aus, aut), atv))
  1.2398 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, C avh), atv)) =
  1.2399 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, C avh), atv))
  1.2400 -  | numadd
  1.2401 -      (Add (Mul (mc, Mul (acp, acq)), ao),
  1.2402 -        Add (Mul (auu, CX (avj, avk)), atv)) =
  1.2403 -    Add (Add (Mul (mc, Mul (acp, acq)), ao),
  1.2404 -          Add (Mul (auu, CX (avj, avk)), atv))
  1.2405 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, Neg avl), atv)) =
  1.2406 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Add (Mul (auu, Neg avl), atv))
  1.2407 -  | numadd
  1.2408 -      (Add (Mul (mc, Mul (acp, acq)), ao),
  1.2409 -        Add (Mul (auu, Add (avm, avn)), atv)) =
  1.2410 -    Add (Add (Mul (mc, Mul (acp, acq)), ao),
  1.2411 -          Add (Mul (auu, Add (avm, avn)), atv))
  1.2412 -  | numadd
  1.2413 -      (Add (Mul (mc, Mul (acp, acq)), ao),
  1.2414 -        Add (Mul (auu, Sub (avo, avp)), atv)) =
  1.2415 -    Add (Add (Mul (mc, Mul (acp, acq)), ao),
  1.2416 -          Add (Mul (auu, Sub (avo, avp)), atv))
  1.2417 -  | numadd
  1.2418 -      (Add (Mul (mc, Mul (acp, acq)), ao),
  1.2419 -        Add (Mul (auu, Mul (avq, avr)), atv)) =
  1.2420 -    Add (Add (Mul (mc, Mul (acp, acq)), ao),
  1.2421 -          Add (Mul (auu, Mul (avq, avr)), atv))
  1.2422 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Sub (atw, atx)) =
  1.2423 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Sub (atw, atx))
  1.2424 -  | numadd (Add (Mul (mc, Mul (acp, acq)), ao), Mul (aty, atz)) =
  1.2425 -    Add (Add (Mul (mc, Mul (acp, acq)), ao), Mul (aty, atz))
  1.2426 -  | numadd (Sub (ap, aq), C awd) = Add (Sub (ap, aq), C awd)
  1.2427 -  | numadd (Sub (ap, aq), Bound awe) = Add (Sub (ap, aq), Bound awe)
  1.2428 -  | numadd (Sub (ap, aq), CX (awf, awg)) = Add (Sub (ap, aq), CX (awf, awg))
  1.2429 -  | numadd (Sub (ap, aq), Neg awh) = Add (Sub (ap, aq), Neg awh)
  1.2430 -  | numadd (Sub (ap, aq), Add (C awz, awj)) =
  1.2431 -    Add (Sub (ap, aq), Add (C awz, awj))
  1.2432 -  | numadd (Sub (ap, aq), Add (Bound axa, awj)) =
  1.2433 -    Add (Sub (ap, aq), Add (Bound axa, awj))
  1.2434 -  | numadd (Sub (ap, aq), Add (CX (axb, axc), awj)) =
  1.2435 -    Add (Sub (ap, aq), Add (CX (axb, axc), awj))
  1.2436 -  | numadd (Sub (ap, aq), Add (Neg axd, awj)) =
  1.2437 -    Add (Sub (ap, aq), Add (Neg axd, awj))
  1.2438 -  | numadd (Sub (ap, aq), Add (Add (axe, axf), awj)) =
  1.2439 -    Add (Sub (ap, aq), Add (Add (axe, axf), awj))
  1.2440 -  | numadd (Sub (ap, aq), Add (Sub (axg, axh), awj)) =
  1.2441 -    Add (Sub (ap, aq), Add (Sub (axg, axh), awj))
  1.2442 -  | numadd (Sub (ap, aq), Add (Mul (axi, C axv), awj)) =
  1.2443 -    Add (Sub (ap, aq), Add (Mul (axi, C axv), awj))
  1.2444 -  | numadd (Sub (ap, aq), Add (Mul (axi, CX (axx, axy)), awj)) =
  1.2445 -    Add (Sub (ap, aq), Add (Mul (axi, CX (axx, axy)), awj))
  1.2446 -  | numadd (Sub (ap, aq), Add (Mul (axi, Neg axz), awj)) =
  1.2447 -    Add (Sub (ap, aq), Add (Mul (axi, Neg axz), awj))
  1.2448 -  | numadd (Sub (ap, aq), Add (Mul (axi, Add (aya, ayb)), awj)) =
  1.2449 -    Add (Sub (ap, aq), Add (Mul (axi, Add (aya, ayb)), awj))
  1.2450 -  | numadd (Sub (ap, aq), Add (Mul (axi, Sub (ayc, ayd)), awj)) =
  1.2451 -    Add (Sub (ap, aq), Add (Mul (axi, Sub (ayc, ayd)), awj))
  1.2452 -  | numadd (Sub (ap, aq), Add (Mul (axi, Mul (aye, ayf)), awj)) =
  1.2453 -    Add (Sub (ap, aq), Add (Mul (axi, Mul (aye, ayf)), awj))
  1.2454 -  | numadd (Sub (ap, aq), Sub (awk, awl)) = Add (Sub (ap, aq), Sub (awk, awl))
  1.2455 -  | numadd (Sub (ap, aq), Mul (awm, awn)) = Add (Sub (ap, aq), Mul (awm, awn))
  1.2456 -  | numadd (Mul (ar, as'), C ayr) = Add (Mul (ar, as'), C ayr)
  1.2457 -  | numadd (Mul (ar, as'), Bound ays) = Add (Mul (ar, as'), Bound ays)
  1.2458 -  | numadd (Mul (ar, as'), CX (ayt, ayu)) = Add (Mul (ar, as'), CX (ayt, ayu))
  1.2459 -  | numadd (Mul (ar, as'), Neg ayv) = Add (Mul (ar, as'), Neg ayv)
  1.2460 -  | numadd (Mul (ar, as'), Add (C azn, ayx)) =
  1.2461 -    Add (Mul (ar, as'), Add (C azn, ayx))
  1.2462 -  | numadd (Mul (ar, as'), Add (Bound azo, ayx)) =
  1.2463 -    Add (Mul (ar, as'), Add (Bound azo, ayx))
  1.2464 -  | numadd (Mul (ar, as'), Add (CX (azp, azq), ayx)) =
  1.2465 -    Add (Mul (ar, as'), Add (CX (azp, azq), ayx))
  1.2466 -  | numadd (Mul (ar, as'), Add (Neg azr, ayx)) =
  1.2467 -    Add (Mul (ar, as'), Add (Neg azr, ayx))
  1.2468 -  | numadd (Mul (ar, as'), Add (Add (azs, azt), ayx)) =
  1.2469 -    Add (Mul (ar, as'), Add (Add (azs, azt), ayx))
  1.2470 -  | numadd (Mul (ar, as'), Add (Sub (azu, azv), ayx)) =
  1.2471 -    Add (Mul (ar, as'), Add (Sub (azu, azv), ayx))
  1.2472 -  | numadd (Mul (ar, as'), Add (Mul (azw, C baj), ayx)) =
  1.2473 -    Add (Mul (ar, as'), Add (Mul (azw, C baj), ayx))
  1.2474 -  | numadd (Mul (ar, as'), Add (Mul (azw, CX (bal, bam)), ayx)) =
  1.2475 -    Add (Mul (ar, as'), Add (Mul (azw, CX (bal, bam)), ayx))
  1.2476 -  | numadd (Mul (ar, as'), Add (Mul (azw, Neg ban), ayx)) =
  1.2477 -    Add (Mul (ar, as'), Add (Mul (azw, Neg ban), ayx))
  1.2478 -  | numadd (Mul (ar, as'), Add (Mul (azw, Add (bao, bap)), ayx)) =
  1.2479 -    Add (Mul (ar, as'), Add (Mul (azw, Add (bao, bap)), ayx))
  1.2480 -  | numadd (Mul (ar, as'), Add (Mul (azw, Sub (baq, bar)), ayx)) =
  1.2481 -    Add (Mul (ar, as'), Add (Mul (azw, Sub (baq, bar)), ayx))
  1.2482 -  | numadd (Mul (ar, as'), Add (Mul (azw, Mul (bas, bat)), ayx)) =
  1.2483 -    Add (Mul (ar, as'), Add (Mul (azw, Mul (bas, bat)), ayx))
  1.2484 -  | numadd (Mul (ar, as'), Sub (ayy, ayz)) = Add (Mul (ar, as'), Sub (ayy, ayz))
  1.2485 -  | numadd (Mul (ar, as'), Mul (aza, azb)) =
  1.2486 -    Add (Mul (ar, as'), Mul (aza, azb));
  1.2487 +                        numadd (Add (Mul (c1, Bound n1), r1), r2))));
  1.2488  
  1.2489 -fun nummul (C j) = (fn i => C (i * j))
  1.2490 -  | nummul (Add (a, b)) = (fn i => numadd (nummul a i, nummul b i))
  1.2491 -  | nummul (Mul (c, t)) = (fn i => nummul t (i * c))
  1.2492 -  | nummul (Bound v) = (fn i => Mul (i, Bound v))
  1.2493 -  | nummul (CX (w, x)) = (fn i => Mul (i, CX (w, x)))
  1.2494 -  | nummul (Neg y) = (fn i => Mul (i, Neg y))
  1.2495 -  | nummul (Sub (ac, ad)) = (fn i => Mul (i, Sub (ac, ad)));
  1.2496 +fun nummul i (Sub (v, va)) = Mul (i, Sub (v, va))
  1.2497 +  | nummul i (Neg v) = Mul (i, Neg v)
  1.2498 +  | nummul i (Cx (v, va)) = Mul (i, Cx (v, va))
  1.2499 +  | nummul i (Bound v) = Mul (i, Bound v)
  1.2500 +  | nummul i (Mul (c, t)) = nummul (IntInf.* (i, c)) t
  1.2501 +  | nummul i (Add (a, b)) = numadd (nummul i a, nummul i b)
  1.2502 +  | nummul i (C j) = C (IntInf.* (i, j));
  1.2503  
  1.2504 -fun numneg t = nummul t (~ 1);
  1.2505 +fun numneg t = nummul (IntInf.~ (1 : IntInf.int)) t;
  1.2506  
  1.2507 -fun numsub s t = (if (s = t) then C 0 else numadd (s, numneg t));
  1.2508 +fun numsub s t =
  1.2509 +  (if eq_num s t then C (0 : IntInf.int) else numadd (s, numneg t));
  1.2510  
  1.2511 -fun simpnum (C j) = C j
  1.2512 -  | simpnum (Bound n) = Add (Mul (1, Bound n), C 0)
  1.2513 +fun simpnum (Cx (v, va)) = Cx (v, va)
  1.2514 +  | simpnum (Mul (i, t)) =
  1.2515 +    (if ((i : IntInf.int) = (0 : IntInf.int)) then C (0 : IntInf.int)
  1.2516 +      else nummul i (simpnum t))
  1.2517 +  | simpnum (Sub (t, s)) = numsub (simpnum t) (simpnum s)
  1.2518 +  | simpnum (Add (t, s)) = numadd (simpnum t, simpnum s)
  1.2519    | simpnum (Neg t) = numneg (simpnum t)
  1.2520 -  | simpnum (Add (t, s)) = numadd (simpnum t, simpnum s)
  1.2521 -  | simpnum (Sub (t, s)) = numsub (simpnum t) (simpnum s)
  1.2522 -  | simpnum (Mul (i, t)) = (if (i = 0) then C 0 else nummul (simpnum t) i)
  1.2523 -  | simpnum (CX (w, x)) = CX (w, x);
  1.2524 +  | simpnum (Bound n) =
  1.2525 +    Add (Mul ((1 : IntInf.int), Bound n), C (0 : IntInf.int))
  1.2526 +  | simpnum (C j) = C j;
  1.2527  
  1.2528 -datatype fm = T | F | Lt of num | Le of num | Gt of num | Ge of num | Eq of num
  1.2529 -  | NEq of num | Dvd of int * num | NDvd of int * num | NOT of fm
  1.2530 -  | And of fm * fm | Or of fm * fm | Imp of fm * fm | Iff of fm * fm | E of fm
  1.2531 -  | A of fm | Closed of int | NClosed of int;
  1.2532 +val eq_numa = {eq = eq_num} : num HOL.eq;
  1.2533  
  1.2534 -fun not (NOT p) = p
  1.2535 -  | not T = F
  1.2536 -  | not F = T
  1.2537 -  | not (Lt u) = NOT (Lt u)
  1.2538 -  | not (Le v) = NOT (Le v)
  1.2539 -  | not (Gt w) = NOT (Gt w)
  1.2540 -  | not (Ge x) = NOT (Ge x)
  1.2541 -  | not (Eq y) = NOT (Eq y)
  1.2542 -  | not (NEq z) = NOT (NEq z)
  1.2543 -  | not (Dvd (aa, ab)) = NOT (Dvd (aa, ab))
  1.2544 -  | not (NDvd (ac, ad)) = NOT (NDvd (ac, ad))
  1.2545 -  | not (And (af, ag)) = NOT (And (af, ag))
  1.2546 -  | not (Or (ah, ai)) = NOT (Or (ah, ai))
  1.2547 -  | not (Imp (aj, ak)) = NOT (Imp (aj, ak))
  1.2548 -  | not (Iff (al, am)) = NOT (Iff (al, am))
  1.2549 -  | not (E an) = NOT (E an)
  1.2550 -  | not (A ao) = NOT (A ao)
  1.2551 -  | not (Closed ap) = NOT (Closed ap)
  1.2552 -  | not (NClosed aq) = NOT (NClosed aq);
  1.2553 +fun mirror (NClosed aq) = NClosed aq
  1.2554 +  | mirror (Closed ap) = Closed ap
  1.2555 +  | mirror (A ao) = A ao
  1.2556 +  | mirror (E an) = E an
  1.2557 +  | mirror (Iffa (al, am)) = Iffa (al, am)
  1.2558 +  | mirror (Impa (aj, ak)) = Impa (aj, ak)
  1.2559 +  | mirror (Nota ae) = Nota ae
  1.2560 +  | mirror (NDvd (ac, Mul (hv, hw))) = NDvd (ac, Mul (hv, hw))
  1.2561 +  | mirror (NDvd (ac, Sub (ht, hu))) = NDvd (ac, Sub (ht, hu))
  1.2562 +  | mirror (NDvd (ac, Add (hr, hs))) = NDvd (ac, Add (hr, hs))
  1.2563 +  | mirror (NDvd (ac, Neg hq)) = NDvd (ac, Neg hq)
  1.2564 +  | mirror (NDvd (ac, Bound hn)) = NDvd (ac, Bound hn)
  1.2565 +  | mirror (NDvd (ac, C hm)) = NDvd (ac, C hm)
  1.2566 +  | mirror (Dvd (aa, Mul (gz, ha))) = Dvd (aa, Mul (gz, ha))
  1.2567 +  | mirror (Dvd (aa, Sub (gx, gy))) = Dvd (aa, Sub (gx, gy))
  1.2568 +  | mirror (Dvd (aa, Add (gv, gw))) = Dvd (aa, Add (gv, gw))
  1.2569 +  | mirror (Dvd (aa, Neg gu)) = Dvd (aa, Neg gu)
  1.2570 +  | mirror (Dvd (aa, Bound gr)) = Dvd (aa, Bound gr)
  1.2571 +  | mirror (Dvd (aa, C gq)) = Dvd (aa, C gq)
  1.2572 +  | mirror (NEq (Mul (gd, ge))) = NEq (Mul (gd, ge))
  1.2573 +  | mirror (NEq (Sub (gb, gc))) = NEq (Sub (gb, gc))
  1.2574 +  | mirror (NEq (Add (fz, ga))) = NEq (Add (fz, ga))
  1.2575 +  | mirror (NEq (Neg fy)) = NEq (Neg fy)
  1.2576 +  | mirror (NEq (Bound fv)) = NEq (Bound fv)
  1.2577 +  | mirror (NEq (C fu)) = NEq (C fu)
  1.2578 +  | mirror (Eq (Mul (fh, fi))) = Eq (Mul (fh, fi))
  1.2579 +  | mirror (Eq (Sub (ff, fg))) = Eq (Sub (ff, fg))
  1.2580 +  | mirror (Eq (Add (fd, fe))) = Eq (Add (fd, fe))
  1.2581 +  | mirror (Eq (Neg fc)) = Eq (Neg fc)
  1.2582 +  | mirror (Eq (Bound ez)) = Eq (Bound ez)
  1.2583 +  | mirror (Eq (C ey)) = Eq (C ey)
  1.2584 +  | mirror (Ge (Mul (el, em))) = Ge (Mul (el, em))
  1.2585 +  | mirror (Ge (Sub (ej, ek))) = Ge (Sub (ej, ek))
  1.2586 +  | mirror (Ge (Add (eh, ei))) = Ge (Add (eh, ei))
  1.2587 +  | mirror (Ge (Neg eg)) = Ge (Neg eg)
  1.2588 +  | mirror (Ge (Bound ed)) = Ge (Bound ed)
  1.2589 +  | mirror (Ge (C ec)) = Ge (C ec)
  1.2590 +  | mirror (Gt (Mul (dp, dq))) = Gt (Mul (dp, dq))
  1.2591 +  | mirror (Gt (Sub (dn, doa))) = Gt (Sub (dn, doa))
  1.2592 +  | mirror (Gt (Add (dl, dm))) = Gt (Add (dl, dm))
  1.2593 +  | mirror (Gt (Neg dk)) = Gt (Neg dk)
  1.2594 +  | mirror (Gt (Bound dh)) = Gt (Bound dh)
  1.2595 +  | mirror (Gt (C dg)) = Gt (C dg)
  1.2596 +  | mirror (Le (Mul (ct, cu))) = Le (Mul (ct, cu))
  1.2597 +  | mirror (Le (Sub (cr, cs))) = Le (Sub (cr, cs))
  1.2598 +  | mirror (Le (Add (cp, cq))) = Le (Add (cp, cq))
  1.2599 +  | mirror (Le (Neg co)) = Le (Neg co)
  1.2600 +  | mirror (Le (Bound cl)) = Le (Bound cl)
  1.2601 +  | mirror (Le (C ck)) = Le (C ck)
  1.2602 +  | mirror (Lt (Mul (bx, by))) = Lt (Mul (bx, by))
  1.2603 +  | mirror (Lt (Sub (bv, bw))) = Lt (Sub (bv, bw))
  1.2604 +  | mirror (Lt (Add (bt, bu))) = Lt (Add (bt, bu))
  1.2605 +  | mirror (Lt (Neg bs)) = Lt (Neg bs)
  1.2606 +  | mirror (Lt (Bound bp)) = Lt (Bound bp)
  1.2607 +  | mirror (Lt (C bo)) = Lt (C bo)
  1.2608 +  | mirror F = F
  1.2609 +  | mirror T = T
  1.2610 +  | mirror (NDvd (i, Cx (c, e))) = NDvd (i, Cx (c, Neg e))
  1.2611 +  | mirror (Dvd (i, Cx (c, e))) = Dvd (i, Cx (c, Neg e))
  1.2612 +  | mirror (Ge (Cx (c, e))) = Le (Cx (c, Neg e))
  1.2613 +  | mirror (Gt (Cx (c, e))) = Lt (Cx (c, Neg e))
  1.2614 +  | mirror (Le (Cx (c, e))) = Ge (Cx (c, Neg e))
  1.2615 +  | mirror (Lt (Cx (c, e))) = Gt (Cx (c, Neg e))
  1.2616 +  | mirror (NEq (Cx (c, e))) = NEq (Cx (c, Neg e))
  1.2617 +  | mirror (Eq (Cx (c, e))) = Eq (Cx (c, Neg e))
  1.2618 +  | mirror (Or (p, q)) = Or (mirror p, mirror q)
  1.2619 +  | mirror (And (p, q)) = And (mirror p, mirror q);
  1.2620 +
  1.2621 +fun unita p =
  1.2622 +  let
  1.2623 +    val p' = zlfm p;
  1.2624 +    val l = zeta p';
  1.2625 +    val q =
  1.2626 +      And (Dvd (l, Cx ((1 : IntInf.int), C (0 : IntInf.int))), a_beta p' l);
  1.2627 +    val d = delta q;
  1.2628 +    val b = List.remdups eq_numa (List.map simpnum (beta q));
  1.2629 +    val a = List.remdups eq_numa (List.map simpnum (alpha q));
  1.2630 +  in
  1.2631 +    (if IntInf.<= ((List.size_list b), (List.size_list a)) then (q, (b, d))
  1.2632 +      else (mirror q, (a, d)))
  1.2633 +  end;
  1.2634 +
  1.2635 +fun iupt i j =
  1.2636 +  (if IntInf.< (j, i) then []
  1.2637 +    else i :: iupt (IntInf.+ (i, (1 : IntInf.int))) j);
  1.2638 +
  1.2639 +fun minusinf (NClosed aq) = NClosed aq
  1.2640 +  | minusinf (Closed ap) = Closed ap
  1.2641 +  | minusinf (A ao) = A ao
  1.2642 +  | minusinf (E an) = E an
  1.2643 +  | minusinf (Iffa (al, am)) = Iffa (al, am)
  1.2644 +  | minusinf (Impa (aj, ak)) = Impa (aj, ak)
  1.2645 +  | minusinf (Nota ae) = Nota ae
  1.2646 +  | minusinf (NDvd (ac, ad)) = NDvd (ac, ad)
  1.2647 +  | minusinf (Dvd (aa, ab)) = Dvd (aa, ab)
  1.2648 +  | minusinf (NEq (Mul (gd, ge))) = NEq (Mul (gd, ge))
  1.2649 +  | minusinf (NEq (Sub (gb, gc))) = NEq (Sub (gb, gc))
  1.2650 +  | minusinf (NEq (Add (fz, ga))) = NEq (Add (fz, ga))
  1.2651 +  | minusinf (NEq (Neg fy)) = NEq (Neg fy)
  1.2652 +  | minusinf (NEq (Bound fv)) = NEq (Bound fv)
  1.2653 +  | minusinf (NEq (C fu)) = NEq (C fu)
  1.2654 +  | minusinf (Eq (Mul (fh, fi))) = Eq (Mul (fh, fi))
  1.2655 +  | minusinf (Eq (Sub (ff, fg))) = Eq (Sub (ff, fg))
  1.2656 +  | minusinf (Eq (Add (fd, fe))) = Eq (Add (fd, fe))
  1.2657 +  | minusinf (Eq (Neg fc)) = Eq (Neg fc)
  1.2658 +  | minusinf (Eq (Bound ez)) = Eq (Bound ez)
  1.2659 +  | minusinf (Eq (C ey)) = Eq (C ey)
  1.2660 +  | minusinf (Ge (Mul (el, em))) = Ge (Mul (el, em))
  1.2661 +  | minusinf (Ge (Sub (ej, ek))) = Ge (Sub (ej, ek))
  1.2662 +  | minusinf (Ge (Add (eh, ei))) = Ge (Add (eh, ei))
  1.2663 +  | minusinf (Ge (Neg eg)) = Ge (Neg eg)
  1.2664 +  | minusinf (Ge (Bound ed)) = Ge (Bound ed)
  1.2665 +  | minusinf (Ge (C ec)) = Ge (C ec)
  1.2666 +  | minusinf (Gt (Mul (dp, dq))) = Gt (Mul (dp, dq))
  1.2667 +  | minusinf (Gt (Sub (dn, doa))) = Gt (Sub (dn, doa))
  1.2668 +  | minusinf (Gt (Add (dl, dm))) = Gt (Add (dl, dm))
  1.2669 +  | minusinf (Gt (Neg dk)) = Gt (Neg dk)
  1.2670 +  | minusinf (Gt (Bound dh)) = Gt (Bound dh)
  1.2671 +  | minusinf (Gt (C dg)) = Gt (C dg)
  1.2672 +  | minusinf (Le (Mul (ct, cu))) = Le (Mul (ct, cu))
  1.2673 +  | minusinf (Le (Sub (cr, cs))) = Le (Sub (cr, cs))
  1.2674 +  | minusinf (Le (Add (cp, cq))) = Le (Add (cp, cq))
  1.2675 +  | minusinf (Le (Neg co)) = Le (Neg co)
  1.2676 +  | minusinf (Le (Bound cl)) = Le (Bound cl)
  1.2677 +  | minusinf (Le (C ck)) = Le (C ck)
  1.2678 +  | minusinf (Lt (Mul (bx, by))) = Lt (Mul (bx, by))
  1.2679 +  | minusinf (Lt (Sub (bv, bw))) = Lt (Sub (bv, bw))
  1.2680 +  | minusinf (Lt (Add (bt, bu))) = Lt (Add (bt, bu))
  1.2681 +  | minusinf (Lt (Neg bs)) = Lt (Neg bs)
  1.2682 +  | minusinf (Lt (Bound bp)) = Lt (Bound bp)
  1.2683 +  | minusinf (Lt (C bo)) = Lt (C bo)
  1.2684 +  | minusinf F = F
  1.2685 +  | minusinf T = T
  1.2686 +  | minusinf (Ge (Cx (c, e))) = F
  1.2687 +  | minusinf (Gt (Cx (c, e))) = F
  1.2688 +  | minusinf (Le (Cx (c, e))) = T
  1.2689 +  | minusinf (Lt (Cx (c, e))) = T
  1.2690 +  | minusinf (NEq (Cx (c, e))) = T
  1.2691 +  | minusinf (Eq (Cx (c, e))) = F
  1.2692 +  | minusinf (Or (p, q)) = Or (minusinf p, minusinf q)
  1.2693 +  | minusinf (And (p, q)) = And (minusinf p, minusinf q);
  1.2694 +
  1.2695 +fun numsubst0 t (Mul (i, a)) = Mul (i, numsubst0 t a)
  1.2696 +  | numsubst0 t (Sub (a, b)) = Sub (numsubst0 t a, numsubst0 t b)
  1.2697 +  | numsubst0 t (Add (a, b)) = Add (numsubst0 t a, numsubst0 t b)
  1.2698 +  | numsubst0 t (Neg a) = Neg (numsubst0 t a)
  1.2699 +  | numsubst0 t (Cx (i, a)) = Add (Mul (i, t), numsubst0 t a)
  1.2700 +  | numsubst0 t (Bound n) =
  1.2701 +    (if ((n : IntInf.int) = Integer.zero_nat) then t else Bound n)
  1.2702 +  | numsubst0 t (C c) = C c;
  1.2703 +
  1.2704 +fun subst0 t (NClosed p) = NClosed p
  1.2705 +  | subst0 t (Closed p) = Closed p
  1.2706 +  | subst0 t (Iffa (p, q)) = Iffa (subst0 t p, subst0 t q)
  1.2707 +  | subst0 t (Impa (p, q)) = Impa (subst0 t p, subst0 t q)
  1.2708 +  | subst0 t (Or (p, q)) = Or (subst0 t p, subst0 t q)
  1.2709 +  | subst0 t (And (p, q)) = And (subst0 t p, subst0 t q)
  1.2710 +  | subst0 t (Nota p) = Nota (subst0 t p)
  1.2711 +  | subst0 t (NDvd (i, a)) = NDvd (i, numsubst0 t a)
  1.2712 +  | subst0 t (Dvd (i, a)) = Dvd (i, numsubst0 t a)
  1.2713 +  | subst0 t (NEq a) = NEq (numsubst0 t a)
  1.2714 +  | subst0 t (Eq a) = Eq (numsubst0 t a)
  1.2715 +  | subst0 t (Ge a) = Ge (numsubst0 t a)
  1.2716 +  | subst0 t (Gt a) = Gt (numsubst0 t a)
  1.2717 +  | subst0 t (Le a) = Le (numsubst0 t a)
  1.2718 +  | subst0 t (Lt a) = Lt (numsubst0 t a)
  1.2719 +  | subst0 t F = F
  1.2720 +  | subst0 t T = T;
  1.2721 +
  1.2722 +fun conj p q =
  1.2723 +  (if eq_fm p F orelse eq_fm q F then F
  1.2724 +    else (if eq_fm p T then q else (if eq_fm q T then p else And (p, q))));
  1.2725 +
  1.2726 +fun disj p q =
  1.2727 +  (if eq_fm p T orelse eq_fm q T then T
  1.2728 +    else (if eq_fm p F then q else (if eq_fm q F then p else Or (p, q))));
  1.2729 +
  1.2730 +fun nota (NClosed v) = Nota (NClosed v)
  1.2731 +  | nota (Closed v) = Nota (Closed v)
  1.2732 +  | nota (A v) = Nota (A v)
  1.2733 +  | nota (E v) = Nota (E v)
  1.2734 +  | nota (Iffa (v, va)) = Nota (Iffa (v, va))
  1.2735 +  | nota (Impa (v, va)) = Nota (Impa (v, va))
  1.2736 +  | nota (Or (v, va)) = Nota (Or (v, va))
  1.2737 +  | nota (And (v, va)) = Nota (And (v, va))
  1.2738 +  | nota (NDvd (v, va)) = Nota (NDvd (v, va))
  1.2739 +  | nota (Dvd (v, va)) = Nota (Dvd (v, va))
  1.2740 +  | nota (NEq v) = Nota (NEq v)
  1.2741 +  | nota (Eq v) = Nota (Eq v)
  1.2742 +  | nota (Ge v) = Nota (Ge v)
  1.2743 +  | nota (Gt v) = Nota (Gt v)
  1.2744 +  | nota (Le v) = Nota (Le v)
  1.2745 +  | nota (Lt v) = Nota (Lt v)
  1.2746 +  | nota F = T
  1.2747 +  | nota T = F
  1.2748 +  | nota (Nota y) = y;
  1.2749 +
  1.2750 +fun imp p q =
  1.2751 +  (if eq_fm p F orelse eq_fm q T then T
  1.2752 +    else (if eq_fm p T then q
  1.2753 +           else (if eq_fm q F then nota p else Impa (p, q))));
  1.2754  
  1.2755  fun iff p q =
  1.2756 -  (if (p = q) then T
  1.2757 -    else (if ((p = not q) orelse (not p = q)) then F
  1.2758 -           else (if (p = F) then not q
  1.2759 -                  else (if (q = F) then not p
  1.2760 -                         else (if (p = T) then q
  1.2761 -                                else (if (q = T) then p else Iff (p, q)))))));
  1.2762 +  (if eq_fm p q then T
  1.2763 +    else (if eq_fm p (nota q) orelse eq_fm (nota p) q then F
  1.2764 +           else (if eq_fm p F then nota q
  1.2765 +                  else (if eq_fm q F then nota p
  1.2766 +                         else (if eq_fm p T then q
  1.2767 +                                else (if eq_fm q T then p
  1.2768 +                                       else Iffa (p, q)))))));
  1.2769  
  1.2770 -fun imp p q =
  1.2771 -  (if ((p = F) orelse (q = T)) then T
  1.2772 -    else (if (p = T) then q else (if (q = F) then not p else Imp (p, q))));
  1.2773 -
  1.2774 -fun disj p q =
  1.2775 -  (if ((p = T) orelse (q = T)) then T
  1.2776 -    else (if (p = F) then q else (if (q = F) then p else Or (p, q))));
  1.2777 -
  1.2778 -fun conj p q =
  1.2779 -  (if ((p = F) orelse (q = F)) then F
  1.2780 -    else (if (p = T) then q else (if (q = T) then p else And (p, q))));
  1.2781 -
  1.2782 -fun simpfm (And (p, q)) = conj (simpfm p) (simpfm q)
  1.2783 -  | simpfm (Or (p, q)) = disj (simpfm p) (simpfm q)
  1.2784 -  | simpfm (Imp (p, q)) = imp (simpfm p) (simpfm q)
  1.2785 -  | simpfm (Iff (p, q)) = iff (simpfm p) (simpfm q)
  1.2786 -  | simpfm (NOT p) = not (simpfm p)
  1.2787 -  | simpfm (Lt a) =
  1.2788 -    let val a' = simpnum a
  1.2789 -    in (case a' of C x => (if (x < 0) then T else F) | Bound x => Lt a'
  1.2790 -         | CX (x, xa) => Lt a' | Neg x => Lt a' | Add (x, xa) => Lt a'
  1.2791 -         | Sub (x, xa) => Lt a' | Mul (x, xa) => Lt a')
  1.2792 +fun simpfm (NClosed v) = NClosed v
  1.2793 +  | simpfm (Closed v) = Closed v
  1.2794 +  | simpfm (A v) = A v
  1.2795 +  | simpfm (E v) = E v
  1.2796 +  | simpfm F = F
  1.2797 +  | simpfm T = T
  1.2798 +  | simpfm (NDvd (i, a)) =
  1.2799 +    (if ((i : IntInf.int) = (0 : IntInf.int)) then simpfm (NEq a)
  1.2800 +      else (if (((Integer.abs_int i) : IntInf.int) = (1 : IntInf.int)) then F
  1.2801 +             else let
  1.2802 +                    val a' = simpnum a;
  1.2803 +                  in
  1.2804 +                    (case a'
  1.2805 +                       of C v => (if not (Integer.dvd_int i v) then T else F)
  1.2806 +                       | Bound nat => NDvd (i, a')
  1.2807 +                       | Cx (int, num) => NDvd (i, a') | Neg num => NDvd (i, a')
  1.2808 +                       | Add (num1, num2) => NDvd (i, a')
  1.2809 +                       | Sub (num1, num2) => NDvd (i, a')
  1.2810 +                       | Mul (int, num) => NDvd (i, a'))
  1.2811 +                  end))
  1.2812 +  | simpfm (Dvd (i, a)) =
  1.2813 +    (if ((i : IntInf.int) = (0 : IntInf.int)) then simpfm (Eq a)
  1.2814 +      else (if (((Integer.abs_int i) : IntInf.int) = (1 : IntInf.int)) then T
  1.2815 +             else let
  1.2816 +                    val a' = simpnum a;
  1.2817 +                  in
  1.2818 +                    (case a' of C v => (if Integer.dvd_int i v then T else F)
  1.2819 +                       | Bound nat => Dvd (i, a') | Cx (int, num) => Dvd (i, a')
  1.2820 +                       | Neg num => Dvd (i, a')
  1.2821 +                       | Add (num1, num2) => Dvd (i, a')
  1.2822 +                       | Sub (num1, num2) => Dvd (i, a')
  1.2823 +                       | Mul (int, num) => Dvd (i, a'))
  1.2824 +                  end))
  1.2825 +  | simpfm (NEq a) =
  1.2826 +    let
  1.2827 +      val a' = simpnum a;
  1.2828 +    in
  1.2829 +      (case a'
  1.2830 +         of C v => (if not ((v : IntInf.int) = (0 : IntInf.int)) then T else F)
  1.2831 +         | Bound nat => NEq a' | Cx (int, num) => NEq a' | Neg num => NEq a'
  1.2832 +         | Add (num1, num2) => NEq a' | Sub (num1, num2) => NEq a'
  1.2833 +         | Mul (int, num) => NEq a')
  1.2834 +    end
  1.2835 +  | simpfm (Eq a) =
  1.2836 +    let
  1.2837 +      val a' = simpnum a;
  1.2838 +    in
  1.2839 +      (case a'
  1.2840 +         of C v => (if ((v : IntInf.int) = (0 : IntInf.int)) then T else F)
  1.2841 +         | Bound nat => Eq a' | Cx (int, num) => Eq a' | Neg num => Eq a'
  1.2842 +         | Add (num1, num2) => Eq a' | Sub (num1, num2) => Eq a'
  1.2843 +         | Mul (int, num) => Eq a')
  1.2844 +    end
  1.2845 +  | simpfm (Ge a) =
  1.2846 +    let
  1.2847 +      val a' = simpnum a;
  1.2848 +    in
  1.2849 +      (case a' of C v => (if IntInf.<= ((0 : IntInf.int), v) then T else F)
  1.2850 +         | Bound nat => Ge a' | Cx (int, num) => Ge a' | Neg num => Ge a'
  1.2851 +         | Add (num1, num2) => Ge a' | Sub (num1, num2) => Ge a'
  1.2852 +         | Mul (int, num) => Ge a')
  1.2853 +    end
  1.2854 +  | simpfm (Gt a) =
  1.2855 +    let
  1.2856 +      val a' = simpnum a;
  1.2857 +    in
  1.2858 +      (case a' of C v => (if IntInf.< ((0 : IntInf.int), v) then T else F)
  1.2859 +         | Bound nat => Gt a' | Cx (int, num) => Gt a' | Neg num => Gt a'
  1.2860 +         | Add (num1, num2) => Gt a' | Sub (num1, num2) => Gt a'
  1.2861 +         | Mul (int, num) => Gt a')
  1.2862      end
  1.2863    | simpfm (Le a) =
  1.2864 -    let val a' = simpnum a
  1.2865 -    in (case a' of C x => (if (x <= 0) then T else F) | Bound x => Le a'
  1.2866 -         | CX (x, xa) => Le a' | Neg x => Le a' | Add (x, xa) => Le a'
  1.2867 -         | Sub (x, xa) => Le a' | Mul (x, xa) => Le a')
  1.2868 +    let
  1.2869 +      val a' = simpnum a;
  1.2870 +    in
  1.2871 +      (case a' of C v => (if IntInf.<= (v, (0 : IntInf.int)) then T else F)
  1.2872 +         | Bound nat => Le a' | Cx (int, num) => Le a' | Neg num => Le a'
  1.2873 +         | Add (num1, num2) => Le a' | Sub (num1, num2) => Le a'
  1.2874 +         | Mul (int, num) => Le a')
  1.2875      end
  1.2876 -  | simpfm (Gt a) =
  1.2877 -    let val a' = simpnum a
  1.2878 -    in (case a' of C x => (if (0 < x) then T else F) | Bound x => Gt a'
  1.2879 -         | CX (x, xa) => Gt a' | Neg x => Gt a' | Add (x, xa) => Gt a'
  1.2880 -         | Sub (x, xa) => Gt a' | Mul (x, xa) => Gt a')
  1.2881 +  | simpfm (Lt a) =
  1.2882 +    let
  1.2883 +      val a' = simpnum a;
  1.2884 +    in
  1.2885 +      (case a' of C v => (if IntInf.< (v, (0 : IntInf.int)) then T else F)
  1.2886 +         | Bound nat => Lt a' | Cx (int, num) => Lt a' | Neg num => Lt a'
  1.2887 +         | Add (num1, num2) => Lt a' | Sub (num1, num2) => Lt a'
  1.2888 +         | Mul (int, num) => Lt a')
  1.2889      end
  1.2890 -  | simpfm (Ge a) =
  1.2891 -    let val a' = simpnum a
  1.2892 -    in (case a' of C x => (if (0 <= x) then T else F) | Bound x => Ge a'
  1.2893 -         | CX (x, xa) => Ge a' | Neg x => Ge a' | Add (x, xa) => Ge a'
  1.2894 -         | Sub (x, xa) => Ge a' | Mul (x, xa) => Ge a')
  1.2895 -    end
  1.2896 -  | simpfm (Eq a) =
  1.2897 -    let val a' = simpnum a
  1.2898 -    in (case a' of C x => (if (x = 0) then T else F) | Bound x => Eq a'
  1.2899 -         | CX (x, xa) => Eq a' | Neg x => Eq a' | Add (x, xa) => Eq a'
  1.2900 -         | Sub (x, xa) => Eq a' | Mul (x, xa) => Eq a')
  1.2901 -    end
  1.2902 -  | simpfm (NEq a) =
  1.2903 -    let val a' = simpnum a
  1.2904 -    in (case a' of C x => (if Bool.not (x = 0) then T else F)
  1.2905 -         | Bound x => NEq a' | CX (x, xa) => NEq a' | Neg x => NEq a'
  1.2906 -         | Add (x, xa) => NEq a' | Sub (x, xa) => NEq a'
  1.2907 -         | Mul (x, xa) => NEq a')
  1.2908 -    end
  1.2909 -  | simpfm (Dvd (i, a)) =
  1.2910 -    (if (i = 0) then simpfm (Eq a)
  1.2911 -      else (if (abs i = 1) then T
  1.2912 -             else let val a' = simpnum a
  1.2913 -                  in (case a' of C x => (if dvd i x then T else F)
  1.2914 -                       | Bound x => Dvd (i, a') | CX (x, xa) => Dvd (i, a')
  1.2915 -                       | Neg x => Dvd (i, a') | Add (x, xa) => Dvd (i, a')
  1.2916 -                       | Sub (x, xa) => Dvd (i, a')
  1.2917 -                       | Mul (x, xa) => Dvd (i, a'))
  1.2918 -                  end))
  1.2919 -  | simpfm (NDvd (i, a)) =
  1.2920 -    (if (i = 0) then simpfm (NEq a)
  1.2921 -      else (if (abs i = 1) then F
  1.2922 -             else let val a' = simpnum a
  1.2923 -                  in (case a' of C x => (if Bool.not (dvd i x) then T else F)
  1.2924 -                       | Bound x => NDvd (i, a') | CX (x, xa) => NDvd (i, a')
  1.2925 -                       | Neg x => NDvd (i, a') | Add (x, xa) => NDvd (i, a')
  1.2926 -                       | Sub (x, xa) => NDvd (i, a')
  1.2927 -                       | Mul (x, xa) => NDvd (i, a'))
  1.2928 -                  end))
  1.2929 -  | simpfm T = T
  1.2930 -  | simpfm F = F
  1.2931 -  | simpfm (E ao) = E ao
  1.2932 -  | simpfm (A ap) = A ap
  1.2933 -  | simpfm (Closed aq) = Closed aq
  1.2934 -  | simpfm (NClosed ar) = NClosed ar;
  1.2935 +  | simpfm (Nota p) = nota (simpfm p)
  1.2936 +  | simpfm (Iffa (p, q)) = iff (simpfm p) (simpfm q)
  1.2937 +  | simpfm (Impa (p, q)) = imp (simpfm p) (simpfm q)
  1.2938 +  | simpfm (Or (p, q)) = disj (simpfm p) (simpfm q)
  1.2939 +  | simpfm (And (p, q)) = conj (simpfm p) (simpfm q);
  1.2940  
  1.2941 -fun foldr f [] a = a
  1.2942 -  | foldr f (x :: xs) a = f x (foldr f xs a);
  1.2943 +fun decrnum (Cx (w, x)) = Cx (w, x)
  1.2944 +  | decrnum (C u) = C u
  1.2945 +  | decrnum (Mul (c, a)) = Mul (c, decrnum a)
  1.2946 +  | decrnum (Sub (a, b)) = Sub (decrnum a, decrnum b)
  1.2947 +  | decrnum (Add (a, b)) = Add (decrnum a, decrnum b)
  1.2948 +  | decrnum (Neg a) = Neg (decrnum a)
  1.2949 +  | decrnum (Bound n) = Bound (Integer.nat (IntInf.- (n, (1 : IntInf.int))));
  1.2950  
  1.2951 -fun djf f p q =
  1.2952 -  (if (q = T) then T
  1.2953 -    else (if (q = F) then f p
  1.2954 -           else let val fp = f p
  1.2955 -                in (case fp of T => T | F => q | Lt x => Or (f p, q)
  1.2956 -                     | Le x => Or (f p, q) | Gt x => Or (f p, q)
  1.2957 -                     | Ge x => Or (f p, q) | Eq x => Or (f p, q)
  1.2958 -                     | NEq x => Or (f p, q) | Dvd (x, xa) => Or (f p, q)
  1.2959 -                     | NDvd (x, xa) => Or (f p, q) | NOT x => Or (f p, q)
  1.2960 -                     | And (x, xa) => Or (f p, q) | Or (x, xa) => Or (f p, q)
  1.2961 -                     | Imp (x, xa) => Or (f p, q) | Iff (x, xa) => Or (f p, q)
  1.2962 -                     | E x => Or (f p, q) | A x => Or (f p, q)
  1.2963 -                     | Closed x => Or (f p, q) | NClosed x => Or (f p, q))
  1.2964 -                end));
  1.2965 +fun decr (NClosed ar) = NClosed ar
  1.2966 +  | decr (Closed aq) = Closed aq
  1.2967 +  | decr (A ap) = A ap
  1.2968 +  | decr (E ao) = E ao
  1.2969 +  | decr F = F
  1.2970 +  | decr T = T
  1.2971 +  | decr (Iffa (p, q)) = Iffa (decr p, decr q)
  1.2972 +  | decr (Impa (p, q)) = Impa (decr p, decr q)
  1.2973 +  | decr (Or (p, q)) = Or (decr p, decr q)
  1.2974 +  | decr (And (p, q)) = And (decr p, decr q)
  1.2975 +  | decr (Nota p) = Nota (decr p)
  1.2976 +  | decr (NDvd (i, a)) = NDvd (i, decrnum a)
  1.2977 +  | decr (Dvd (i, a)) = Dvd (i, decrnum a)
  1.2978 +  | decr (NEq a) = NEq (decrnum a)
  1.2979 +  | decr (Eq a) = Eq (decrnum a)
  1.2980 +  | decr (Ge a) = Ge (decrnum a)
  1.2981 +  | decr (Gt a) = Gt (decrnum a)
  1.2982 +  | decr (Le a) = Le (decrnum a)
  1.2983 +  | decr (Lt a) = Lt (decrnum a);
  1.2984  
  1.2985 -fun evaldjf f ps = foldr (djf f) ps F;
  1.2986 -
  1.2987 -fun append [] ys = ys
  1.2988 -  | append (x :: xs) ys = (x :: append xs ys);
  1.2989 -
  1.2990 -fun disjuncts (Or (p, q)) = append (disjuncts p) (disjuncts q)
  1.2991 -  | disjuncts F = []
  1.2992 -  | disjuncts T = [T]
  1.2993 -  | disjuncts (Lt u) = [Lt u]
  1.2994 -  | disjuncts (Le v) = [Le v]
  1.2995 -  | disjuncts (Gt w) = [Gt w]
  1.2996 -  | disjuncts (Ge x) = [Ge x]
  1.2997 -  | disjuncts (Eq y) = [Eq y]
  1.2998 -  | disjuncts (NEq z) = [NEq z]
  1.2999 -  | disjuncts (Dvd (aa, ab)) = [Dvd (aa, ab)]
  1.3000 -  | disjuncts (NDvd (ac, ad)) = [NDvd (ac, ad)]
  1.3001 -  | disjuncts (NOT ae) = [NOT ae]
  1.3002 -  | disjuncts (And (af, ag)) = [And (af, ag)]
  1.3003 -  | disjuncts (Imp (aj, ak)) = [Imp (aj, ak)]
  1.3004 -  | disjuncts (Iff (al, am)) = [Iff (al, am)]
  1.3005 -  | disjuncts (E an) = [E an]
  1.3006 -  | disjuncts (A ao) = [A ao]
  1.3007 -  | disjuncts (Closed ap) = [Closed ap]
  1.3008 -  | disjuncts (NClosed aq) = [NClosed aq];
  1.3009 -
  1.3010 -fun DJ f p = evaldjf f (disjuncts p);
  1.3011 -
  1.3012 -fun qelim (E p) = (fn qe => DJ qe (qelim p qe))
  1.3013 -  | qelim (A p) = (fn qe => not (qe (qelim (NOT p) qe)))
  1.3014 -  | qelim (NOT p) = (fn qe => not (qelim p qe))
  1.3015 -  | qelim (And (p, q)) = (fn qe => conj (qelim p qe) (qelim q qe))
  1.3016 -  | qelim (Or (p, q)) = (fn qe => disj (qelim p qe) (qelim q qe))
  1.3017 -  | qelim (Imp (p, q)) = (fn qe => imp (qelim p qe) (qelim q qe))
  1.3018 -  | qelim (Iff (p, q)) = (fn qe => iff (qelim p qe) (qelim q qe))
  1.3019 -  | qelim T = (fn y => simpfm T)
  1.3020 -  | qelim F = (fn y => simpfm F)
  1.3021 -  | qelim (Lt u) = (fn y => simpfm (Lt u))
  1.3022 -  | qelim (Le v) = (fn y => simpfm (Le v))
  1.3023 -  | qelim (Gt w) = (fn y => simpfm (Gt w))
  1.3024 -  | qelim (Ge x) = (fn y => simpfm (Ge x))
  1.3025 -  | qelim (Eq y) = (fn ya => simpfm (Eq y))
  1.3026 -  | qelim (NEq z) = (fn y => simpfm (NEq z))
  1.3027 -  | qelim (Dvd (aa, ab)) = (fn y => simpfm (Dvd (aa, ab)))
  1.3028 -  | qelim (NDvd (ac, ad)) = (fn y => simpfm (NDvd (ac, ad)))
  1.3029 -  | qelim (Closed ap) = (fn y => simpfm (Closed ap))
  1.3030 -  | qelim (NClosed aq) = (fn y => simpfm (NClosed aq));
  1.3031 -
  1.3032 -fun minus_def1 m n = nat (minus_def2 (m) (n));
  1.3033 -
  1.3034 -fun decrnum (Bound n) = Bound (minus_def1 n one_def0)
  1.3035 -  | decrnum (Neg a) = Neg (decrnum a)
  1.3036 -  | decrnum (Add (a, b)) = Add (decrnum a, decrnum b)
  1.3037 -  | decrnum (Sub (a, b)) = Sub (decrnum a, decrnum b)
  1.3038 -  | decrnum (Mul (c, a)) = Mul (c, decrnum a)
  1.3039 -  | decrnum (C u) = C u
  1.3040 -  | decrnum (CX (w, x)) = CX (w, x);
  1.3041 -
  1.3042 -fun decr (Lt a) = Lt (decrnum a)
  1.3043 -  | decr (Le a) = Le (decrnum a)
  1.3044 -  | decr (Gt a) = Gt (decrnum a)
  1.3045 -  | decr (Ge a) = Ge (decrnum a)
  1.3046 -  | decr (Eq a) = Eq (decrnum a)
  1.3047 -  | decr (NEq a) = NEq (decrnum a)
  1.3048 -  | decr (Dvd (i, a)) = Dvd (i, decrnum a)
  1.3049 -  | decr (NDvd (i, a)) = NDvd (i, decrnum a)
  1.3050 -  | decr (NOT p) = NOT (decr p)
  1.3051 -  | decr (And (p, q)) = And (decr p, decr q)
  1.3052 -  | decr (Or (p, q)) = Or (decr p, decr q)
  1.3053 -  | decr (Imp (p, q)) = Imp (decr p, decr q)
  1.3054 -  | decr (Iff (p, q)) = Iff (decr p, decr q)
  1.3055 -  | decr T = T
  1.3056 -  | decr F = F
  1.3057 -  | decr (E ao) = E ao
  1.3058 -  | decr (A ap) = A ap
  1.3059 -  | decr (Closed aq) = Closed aq
  1.3060 -  | decr (NClosed ar) = NClosed ar;
  1.3061 -
  1.3062 -fun map f [] = []
  1.3063 -  | map f (x :: xs) = (f x :: map f xs);
  1.3064 -
  1.3065 -fun allpairs f [] ys = []
  1.3066 -  | allpairs f (x :: xs) ys = append (map (f x) ys) (allpairs f xs ys);
  1.3067 -
  1.3068 -fun numsubst0 t (C c) = C c
  1.3069 -  | numsubst0 t (Bound n) = (if (n = 0) then t else Bound n)
  1.3070 -  | numsubst0 t (CX (i, a)) = Add (Mul (i, t), numsubst0 t a)
  1.3071 -  | numsubst0 t (Neg a) = Neg (numsubst0 t a)
  1.3072 -  | numsubst0 t (Add (a, b)) = Add (numsubst0 t a, numsubst0 t b)
  1.3073 -  | numsubst0 t (Sub (a, b)) = Sub (numsubst0 t a, numsubst0 t b)
  1.3074 -  | numsubst0 t (Mul (i, a)) = Mul (i, numsubst0 t a);
  1.3075 -
  1.3076 -fun subst0 t T = T
  1.3077 -  | subst0 t F = F
  1.3078 -  | subst0 t (Lt a) = Lt (numsubst0 t a)
  1.3079 -  | subst0 t (Le a) = Le (numsubst0 t a)
  1.3080 -  | subst0 t (Gt a) = Gt (numsubst0 t a)
  1.3081 -  | subst0 t (Ge a) = Ge (numsubst0 t a)
  1.3082 -  | subst0 t (Eq a) = Eq (numsubst0 t a)
  1.3083 -  | subst0 t (NEq a) = NEq (numsubst0 t a)
  1.3084 -  | subst0 t (Dvd (i, a)) = Dvd (i, numsubst0 t a)
  1.3085 -  | subst0 t (NDvd (i, a)) = NDvd (i, numsubst0 t a)
  1.3086 -  | subst0 t (NOT p) = NOT (subst0 t p)
  1.3087 -  | subst0 t (And (p, q)) = And (subst0 t p, subst0 t q)
  1.3088 -  | subst0 t (Or (p, q)) = Or (subst0 t p, subst0 t q)
  1.3089 -  | subst0 t (Imp (p, q)) = Imp (subst0 t p, subst0 t q)
  1.3090 -  | subst0 t (Iff (p, q)) = Iff (subst0 t p, subst0 t q)
  1.3091 -  | subst0 t (Closed P) = Closed P
  1.3092 -  | subst0 t (NClosed P) = NClosed P;
  1.3093 -
  1.3094 -fun minusinf (And (p, q)) = And (minusinf p, minusinf q)
  1.3095 -  | minusinf (Or (p, q)) = Or (minusinf p, minusinf q)
  1.3096 -  | minusinf (Eq (CX (c, e))) = F
  1.3097 -  | minusinf (NEq (CX (c, e))) = T
  1.3098 -  | minusinf (Lt (CX (c, e))) = T
  1.3099 -  | minusinf (Le (CX (c, e))) = T
  1.3100 -  | minusinf (Gt (CX (c, e))) = F
  1.3101 -  | minusinf (Ge (CX (c, e))) = F
  1.3102 -  | minusinf T = T
  1.3103 -  | minusinf F = F
  1.3104 -  | minusinf (Lt (C bo)) = Lt (C bo)
  1.3105 -  | minusinf (Lt (Bound bp)) = Lt (Bound bp)
  1.3106 -  | minusinf (Lt (Neg bs)) = Lt (Neg bs)
  1.3107 -  | minusinf (Lt (Add (bt, bu))) = Lt (Add (bt, bu))
  1.3108 -  | minusinf (Lt (Sub (bv, bw))) = Lt (Sub (bv, bw))
  1.3109 -  | minusinf (Lt (Mul (bx, by))) = Lt (Mul (bx, by))
  1.3110 -  | minusinf (Le (C ck)) = Le (C ck)
  1.3111 -  | minusinf (Le (Bound cl)) = Le (Bound cl)
  1.3112 -  | minusinf (Le (Neg co)) = Le (Neg co)
  1.3113 -  | minusinf (Le (Add (cp, cq))) = Le (Add (cp, cq))
  1.3114 -  | minusinf (Le (Sub (cr, cs))) = Le (Sub (cr, cs))
  1.3115 -  | minusinf (Le (Mul (ct, cu))) = Le (Mul (ct, cu))
  1.3116 -  | minusinf (Gt (C dg)) = Gt (C dg)
  1.3117 -  | minusinf (Gt (Bound dh)) = Gt (Bound dh)
  1.3118 -  | minusinf (Gt (Neg dk)) = Gt (Neg dk)
  1.3119 -  | minusinf (Gt (Add (dl, dm))) = Gt (Add (dl, dm))
  1.3120 -  | minusinf (Gt (Sub (dn, do'))) = Gt (Sub (dn, do'))
  1.3121 -  | minusinf (Gt (Mul (dp, dq))) = Gt (Mul (dp, dq))
  1.3122 -  | minusinf (Ge (C ec)) = Ge (C ec)
  1.3123 -  | minusinf (Ge (Bound ed)) = Ge (Bound ed)
  1.3124 -  | minusinf (Ge (Neg eg)) = Ge (Neg eg)
  1.3125 -  | minusinf (Ge (Add (eh, ei))) = Ge (Add (eh, ei))
  1.3126 -  | minusinf (Ge (Sub (ej, ek))) = Ge (Sub (ej, ek))
  1.3127 -  | minusinf (Ge (Mul (el, em))) = Ge (Mul (el, em))
  1.3128 -  | minusinf (Eq (C ey)) = Eq (C ey)
  1.3129 -  | minusinf (Eq (Bound ez)) = Eq (Bound ez)
  1.3130 -  | minusinf (Eq (Neg fc)) = Eq (Neg fc)
  1.3131 -  | minusinf (Eq (Add (fd, fe))) = Eq (Add (fd, fe))
  1.3132 -  | minusinf (Eq (Sub (ff, fg))) = Eq (Sub (ff, fg))
  1.3133 -  | minusinf (Eq (Mul (fh, fi))) = Eq (Mul (fh, fi))
  1.3134 -  | minusinf (NEq (C fu)) = NEq (C fu)
  1.3135 -  | minusinf (NEq (Bound fv)) = NEq (Bound fv)
  1.3136 -  | minusinf (NEq (Neg fy)) = NEq (Neg fy)
  1.3137 -  | minusinf (NEq (Add (fz, ga))) = NEq (Add (fz, ga))
  1.3138 -  | minusinf (NEq (Sub (gb, gc))) = NEq (Sub (gb, gc))
  1.3139 -  | minusinf (NEq (Mul (gd, ge))) = NEq (Mul (gd, ge))
  1.3140 -  | minusinf (Dvd (aa, ab)) = Dvd (aa, ab)
  1.3141 -  | minusinf (NDvd (ac, ad)) = NDvd (ac, ad)
  1.3142 -  | minusinf (NOT ae) = NOT ae
  1.3143 -  | minusinf (Imp (aj, ak)) = Imp (aj, ak)
  1.3144 -  | minusinf (Iff (al, am)) = Iff (al, am)
  1.3145 -  | minusinf (E an) = E an
  1.3146 -  | minusinf (A ao) = A ao
  1.3147 -  | minusinf (Closed ap) = Closed ap
  1.3148 -  | minusinf (NClosed aq) = NClosed aq;
  1.3149 -
  1.3150 -fun iupt (i, j) = (if (j < i) then [] else (i :: iupt ((i + 1), j)));
  1.3151 -
  1.3152 -fun mirror (And (p, q)) = And (mirror p, mirror q)
  1.3153 -  | mirror (Or (p, q)) = Or (mirror p, mirror q)
  1.3154 -  | mirror (Eq (CX (c, e))) = Eq (CX (c, Neg e))
  1.3155 -  | mirror (NEq (CX (c, e))) = NEq (CX (c, Neg e))
  1.3156 -  | mirror (Lt (CX (c, e))) = Gt (CX (c, Neg e))
  1.3157 -  | mirror (Le (CX (c, e))) = Ge (CX (c, Neg e))
  1.3158 -  | mirror (Gt (CX (c, e))) = Lt (CX (c, Neg e))
  1.3159 -  | mirror (Ge (CX (c, e))) = Le (CX (c, Neg e))
  1.3160 -  | mirror (Dvd (i, CX (c, e))) = Dvd (i, CX (c, Neg e))
  1.3161 -  | mirror (NDvd (i, CX (c, e))) = NDvd (i, CX (c, Neg e))
  1.3162 -  | mirror T = T
  1.3163 -  | mirror F = F
  1.3164 -  | mirror (Lt (C bo)) = Lt (C bo)
  1.3165 -  | mirror (Lt (Bound bp)) = Lt (Bound bp)
  1.3166 -  | mirror (Lt (Neg bs)) = Lt (Neg bs)
  1.3167 -  | mirror (Lt (Add (bt, bu))) = Lt (Add (bt, bu))
  1.3168 -  | mirror (Lt (Sub (bv, bw))) = Lt (Sub (bv, bw))
  1.3169 -  | mirror (Lt (Mul (bx, by))) = Lt (Mul (bx, by))
  1.3170 -  | mirror (Le (C ck)) = Le (C ck)
  1.3171 -  | mirror (Le (Bound cl)) = Le (Bound cl)
  1.3172 -  | mirror (Le (Neg co)) = Le (Neg co)
  1.3173 -  | mirror (Le (Add (cp, cq))) = Le (Add (cp, cq))
  1.3174 -  | mirror (Le (Sub (cr, cs))) = Le (Sub (cr, cs))
  1.3175 -  | mirror (Le (Mul (ct, cu))) = Le (Mul (ct, cu))
  1.3176 -  | mirror (Gt (C dg)) = Gt (C dg)
  1.3177 -  | mirror (Gt (Bound dh)) = Gt (Bound dh)
  1.3178 -  | mirror (Gt (Neg dk)) = Gt (Neg dk)
  1.3179 -  | mirror (Gt (Add (dl, dm))) = Gt (Add (dl, dm))
  1.3180 -  | mirror (Gt (Sub (dn, do'))) = Gt (Sub (dn, do'))
  1.3181 -  | mirror (Gt (Mul (dp, dq))) = Gt (Mul (dp, dq))
  1.3182 -  | mirror (Ge (C ec)) = Ge (C ec)
  1.3183 -  | mirror (Ge (Bound ed)) = Ge (Bound ed)
  1.3184 -  | mirror (Ge (Neg eg)) = Ge (Neg eg)
  1.3185 -  | mirror (Ge (Add (eh, ei))) = Ge (Add (eh, ei))
  1.3186 -  | mirror (Ge (Sub (ej, ek))) = Ge (Sub (ej, ek))
  1.3187 -  | mirror (Ge (Mul (el, em))) = Ge (Mul (el, em))
  1.3188 -  | mirror (Eq (C ey)) = Eq (C ey)
  1.3189 -  | mirror (Eq (Bound ez)) = Eq (Bound ez)
  1.3190 -  | mirror (Eq (Neg fc)) = Eq (Neg fc)
  1.3191 -  | mirror (Eq (Add (fd, fe))) = Eq (Add (fd, fe))
  1.3192 -  | mirror (Eq (Sub (ff, fg))) = Eq (Sub (ff, fg))
  1.3193 -  | mirror (Eq (Mul (fh, fi))) = Eq (Mul (fh, fi))
  1.3194 -  | mirror (NEq (C fu)) = NEq (C fu)
  1.3195 -  | mirror (NEq (Bound fv)) = NEq (Bound fv)
  1.3196 -  | mirror (NEq (Neg fy)) = NEq (Neg fy)
  1.3197 -  | mirror (NEq (Add (fz, ga))) = NEq (Add (fz, ga))
  1.3198 -  | mirror (NEq (Sub (gb, gc))) = NEq (Sub (gb, gc))
  1.3199 -  | mirror (NEq (Mul (gd, ge))) = NEq (Mul (gd, ge))
  1.3200 -  | mirror (Dvd (aa, C gq)) = Dvd (aa, C gq)
  1.3201 -  | mirror (Dvd (aa, Bound gr)) = Dvd (aa, Bound gr)
  1.3202 -  | mirror (Dvd (aa, Neg gu)) = Dvd (aa, Neg gu)
  1.3203 -  | mirror (Dvd (aa, Add (gv, gw))) = Dvd (aa, Add (gv, gw))
  1.3204 -  | mirror (Dvd (aa, Sub (gx, gy))) = Dvd (aa, Sub (gx, gy))
  1.3205 -  | mirror (Dvd (aa, Mul (gz, ha))) = Dvd (aa, Mul (gz, ha))
  1.3206 -  | mirror (NDvd (ac, C hm)) = NDvd (ac, C hm)
  1.3207 -  | mirror (NDvd (ac, Bound hn)) = NDvd (ac, Bound hn)
  1.3208 -  | mirror (NDvd (ac, Neg hq)) = NDvd (ac, Neg hq)
  1.3209 -  | mirror (NDvd (ac, Add (hr, hs))) = NDvd (ac, Add (hr, hs))
  1.3210 -  | mirror (NDvd (ac, Sub (ht, hu))) = NDvd (ac, Sub (ht, hu))
  1.3211 -  | mirror (NDvd (ac, Mul (hv, hw))) = NDvd (ac, Mul (hv, hw))
  1.3212 -  | mirror (NOT ae) = NOT ae
  1.3213 -  | mirror (Imp (aj, ak)) = Imp (aj, ak)
  1.3214 -  | mirror (Iff (al, am)) = Iff (al, am)
  1.3215 -  | mirror (E an) = E an
  1.3216 -  | mirror (A ao) = A ao
  1.3217 -  | mirror (Closed ap) = Closed ap
  1.3218 -  | mirror (NClosed aq) = NClosed aq;
  1.3219 -
  1.3220 -fun plus_def0 m n = nat ((m) + (n));
  1.3221 -
  1.3222 -fun size_def9 [] = 0
  1.3223 -  | size_def9 (a :: list) = plus_def0 (size_def9 list) (0 + 1);
  1.3224 -
  1.3225 -fun alpha (And (p, q)) = append (alpha p) (alpha q)
  1.3226 -  | alpha (Or (p, q)) = append (alpha p) (alpha q)
  1.3227 -  | alpha (Eq (CX (c, e))) = [Add (C ~1, e)]
  1.3228 -  | alpha (NEq (CX (c, e))) = [e]
  1.3229 -  | alpha (Lt (CX (c, e))) = [e]
  1.3230 -  | alpha (Le (CX (c, e))) = [Add (C ~1, e)]
  1.3231 -  | alpha (Gt (CX (c, e))) = []
  1.3232 -  | alpha (Ge (CX (c, e))) = []
  1.3233 -  | alpha T = []
  1.3234 -  | alpha F = []
  1.3235 -  | alpha (Lt (C bo)) = []
  1.3236 -  | alpha (Lt (Bound bp)) = []
  1.3237 -  | alpha (Lt (Neg bs)) = []
  1.3238 -  | alpha (Lt (Add (bt, bu))) = []
  1.3239 -  | alpha (Lt (Sub (bv, bw))) = []
  1.3240 -  | alpha (Lt (Mul (bx, by))) = []
  1.3241 -  | alpha (Le (C ck)) = []
  1.3242 -  | alpha (Le (Bound cl)) = []
  1.3243 -  | alpha (Le (Neg co)) = []
  1.3244 -  | alpha (Le (Add (cp, cq))) = []
  1.3245 -  | alpha (Le (Sub (cr, cs))) = []
  1.3246 -  | alpha (Le (Mul (ct, cu))) = []
  1.3247 -  | alpha (Gt (C dg)) = []
  1.3248 -  | alpha (Gt (Bound dh)) = []
  1.3249 -  | alpha (Gt (Neg dk)) = []
  1.3250 -  | alpha (Gt (Add (dl, dm))) = []
  1.3251 -  | alpha (Gt (Sub (dn, do'))) = []
  1.3252 -  | alpha (Gt (Mul (dp, dq))) = []
  1.3253 -  | alpha (Ge (C ec)) = []
  1.3254 -  | alpha (Ge (Bound ed)) = []
  1.3255 -  | alpha (Ge (Neg eg)) = []
  1.3256 -  | alpha (Ge (Add (eh, ei))) = []
  1.3257 -  | alpha (Ge (Sub (ej, ek))) = []
  1.3258 -  | alpha (Ge (Mul (el, em))) = []
  1.3259 -  | alpha (Eq (C ey)) = []
  1.3260 -  | alpha (Eq (Bound ez)) = []
  1.3261 -  | alpha (Eq (Neg fc)) = []
  1.3262 -  | alpha (Eq (Add (fd, fe))) = []
  1.3263 -  | alpha (Eq (Sub (ff, fg))) = []
  1.3264 -  | alpha (Eq (Mul (fh, fi))) = []
  1.3265 -  | alpha (NEq (C fu)) = []
  1.3266 -  | alpha (NEq (Bound fv)) = []
  1.3267 -  | alpha (NEq (Neg fy)) = []
  1.3268 -  | alpha (NEq (Add (fz, ga))) = []
  1.3269 -  | alpha (NEq (Sub (gb, gc))) = []
  1.3270 -  | alpha (NEq (Mul (gd, ge))) = []
  1.3271 -  | alpha (Dvd (aa, ab)) = []
  1.3272 -  | alpha (NDvd (ac, ad)) = []
  1.3273 -  | alpha (NOT ae) = []
  1.3274 -  | alpha (Imp (aj, ak)) = []
  1.3275 -  | alpha (Iff (al, am)) = []
  1.3276 -  | alpha (E an) = []
  1.3277 -  | alpha (A ao) = []
  1.3278 -  | alpha (Closed ap) = []
  1.3279 -  | alpha (NClosed aq) = [];
  1.3280 -
  1.3281 -fun memberl x [] = false
  1.3282 -  | memberl x (y :: ys) = ((x = y) orelse memberl x ys);
  1.3283 -
  1.3284 -fun remdups [] = []
  1.3285 -  | remdups (x :: xs) =
  1.3286 -    (if memberl x xs then remdups xs else (x :: remdups xs));
  1.3287 -
  1.3288 -fun beta (And (p, q)) = append (beta p) (beta q)
  1.3289 -  | beta (Or (p, q)) = append (beta p) (beta q)
  1.3290 -  | beta (Eq (CX (c, e))) = [Sub (C ~1, e)]
  1.3291 -  | beta (NEq (CX (c, e))) = [Neg e]
  1.3292 -  | beta (Lt (CX (c, e))) = []
  1.3293 -  | beta (Le (CX (c, e))) = []
  1.3294 -  | beta (Gt (CX (c, e))) = [Neg e]
  1.3295 -  | beta (Ge (CX (c, e))) = [Sub (C ~1, e)]
  1.3296 -  | beta T = []
  1.3297 -  | beta F = []
  1.3298 -  | beta (Lt (C bo)) = []
  1.3299 -  | beta (Lt (Bound bp)) = []
  1.3300 -  | beta (Lt (Neg bs)) = []
  1.3301 -  | beta (Lt (Add (bt, bu))) = []
  1.3302 -  | beta (Lt (Sub (bv, bw))) = []
  1.3303 -  | beta (Lt (Mul (bx, by))) = []
  1.3304 -  | beta (Le (C ck)) = []
  1.3305 -  | beta (Le (Bound cl)) = []
  1.3306 -  | beta (Le (Neg co)) = []
  1.3307 -  | beta (Le (Add (cp, cq))) = []
  1.3308 -  | beta (Le (Sub (cr, cs))) = []
  1.3309 -  | beta (Le (Mul (ct, cu))) = []
  1.3310 -  | beta (Gt (C dg)) = []
  1.3311 -  | beta (Gt (Bound dh)) = []
  1.3312 -  | beta (Gt (Neg dk)) = []
  1.3313 -  | beta (Gt (Add (dl, dm))) = []
  1.3314 -  | beta (Gt (Sub (dn, do'))) = []
  1.3315 -  | beta (Gt (Mul (dp, dq))) = []
  1.3316 -  | beta (Ge (C ec)) = []
  1.3317 -  | beta (Ge (Bound ed)) = []
  1.3318 -  | beta (Ge (Neg eg)) = []
  1.3319 -  | beta (Ge (Add (eh, ei))) = []
  1.3320 -  | beta (Ge (Sub (ej, ek))) = []
  1.3321 -  | beta (Ge (Mul (el, em))) = []
  1.3322 -  | beta (Eq (C ey)) = []
  1.3323 -  | beta (Eq (Bound ez)) = []
  1.3324 -  | beta (Eq (Neg fc)) = []
  1.3325 -  | beta (Eq (Add (fd, fe))) = []
  1.3326 -  | beta (Eq (Sub (ff, fg))) = []
  1.3327 -  | beta (Eq (Mul (fh, fi))) = []
  1.3328 -  | beta (NEq (C fu)) = []
  1.3329 -  | beta (NEq (Bound fv)) = []
  1.3330 -  | beta (NEq (Neg fy)) = []
  1.3331 -  | beta (NEq (Add (fz, ga))) = []
  1.3332 -  | beta (NEq (Sub (gb, gc))) = []
  1.3333 -  | beta (NEq (Mul (gd, ge))) = []
  1.3334 -  | beta (Dvd (aa, ab)) = []
  1.3335 -  | beta (NDvd (ac, ad)) = []
  1.3336 -  | beta (NOT ae) = []
  1.3337 -  | beta (Imp (aj, ak)) = []
  1.3338 -  | beta (Iff (al, am)) = []
  1.3339 -  | beta (E an) = []
  1.3340 -  | beta (A ao) = []
  1.3341 -  | beta (Closed ap) = []
  1.3342 -  | beta (NClosed aq) = [];
  1.3343 -
  1.3344 -fun fst (a, b) = a;
  1.3345 -
  1.3346 -fun div_def1 a b = fst (divAlg (a, b));
  1.3347 -
  1.3348 -fun div_def0 m n = nat (div_def1 (m) (n));
  1.3349 -
  1.3350 -fun mod_def0 m n = nat (mod_def1 (m) (n));
  1.3351 -
  1.3352 -fun gcd (m, n) = (if (n = 0) then m else gcd (n, mod_def0 m n));
  1.3353 -
  1.3354 -fun times_def0 m n = nat ((m) * (n));
  1.3355 -
  1.3356 -fun lcm x = (fn (m, n) => div_def0 (times_def0 m n) (gcd (m, n))) x;
  1.3357 -
  1.3358 -fun ilcm x = (fn j => (lcm (nat (abs x), nat (abs j))));
  1.3359 -
  1.3360 -fun delta (And (p, q)) = ilcm (delta p) (delta q)
  1.3361 -  | delta (Or (p, q)) = ilcm (delta p) (delta q)
  1.3362 -  | delta (Dvd (i, CX (c, e))) = i
  1.3363 -  | delta (NDvd (i, CX (c, e))) = i
  1.3364 -  | delta T = 1
  1.3365 -  | delta F = 1
  1.3366 -  | delta (Lt u) = 1
  1.3367 -  | delta (Le v) = 1
  1.3368 -  | delta (Gt w) = 1
  1.3369 -  | delta (Ge x) = 1
  1.3370 -  | delta (Eq y) = 1
  1.3371 -  | delta (NEq z) = 1
  1.3372 -  | delta (Dvd (aa, C bo)) = 1
  1.3373 -  | delta (Dvd (aa, Bound bp)) = 1
  1.3374 -  | delta (Dvd (aa, Neg bs)) = 1
  1.3375 -  | delta (Dvd (aa, Add (bt, bu))) = 1
  1.3376 -  | delta (Dvd (aa, Sub (bv, bw))) = 1
  1.3377 -  | delta (Dvd (aa, Mul (bx, by))) = 1
  1.3378 -  | delta (NDvd (ac, C ck)) = 1
  1.3379 -  | delta (NDvd (ac, Bound cl)) = 1
  1.3380 -  | delta (NDvd (ac, Neg co)) = 1
  1.3381 -  | delta (NDvd (ac, Add (cp, cq))) = 1
  1.3382 -  | delta (NDvd (ac, Sub (cr, cs))) = 1
  1.3383 -  | delta (NDvd (ac, Mul (ct, cu))) = 1
  1.3384 -  | delta (NOT ae) = 1
  1.3385 -  | delta (Imp (aj, ak)) = 1
  1.3386 -  | delta (Iff (al, am)) = 1
  1.3387 -  | delta (E an) = 1
  1.3388 -  | delta (A ao) = 1
  1.3389 -  | delta (Closed ap) = 1
  1.3390 -  | delta (NClosed aq) = 1;
  1.3391 -
  1.3392 -fun a_beta (And (p, q)) = (fn k => And (a_beta p k, a_beta q k))
  1.3393 -  | a_beta (Or (p, q)) = (fn k => Or (a_beta p k, a_beta q k))
  1.3394 -  | a_beta (Eq (CX (c, e))) = (fn k => Eq (CX (1, Mul (div_def1 k c, e))))
  1.3395 -  | a_beta (NEq (CX (c, e))) = (fn k => NEq (CX (1, Mul (div_def1 k c, e))))
  1.3396 -  | a_beta (Lt (CX (c, e))) = (fn k => Lt (CX (1, Mul (div_def1 k c, e))))
  1.3397 -  | a_beta (Le (CX (c, e))) = (fn k => Le (CX (1, Mul (div_def1 k c, e))))
  1.3398 -  | a_beta (Gt (CX (c, e))) = (fn k => Gt (CX (1, Mul (div_def1 k c, e))))
  1.3399 -  | a_beta (Ge (CX (c, e))) = (fn k => Ge (CX (1, Mul (div_def1 k c, e))))
  1.3400 -  | a_beta (Dvd (i, CX (c, e))) =
  1.3401 -    (fn k => Dvd ((div_def1 k c * i), CX (1, Mul (div_def1 k c, e))))
  1.3402 -  | a_beta (NDvd (i, CX (c, e))) =
  1.3403 -    (fn k => NDvd ((div_def1 k c * i), CX (1, Mul (div_def1 k c, e))))
  1.3404 -  | a_beta T = (fn k => T)
  1.3405 -  | a_beta F = (fn k => F)
  1.3406 -  | a_beta (Lt (C bo)) = (fn k => Lt (C bo))
  1.3407 -  | a_beta (Lt (Bound bp)) = (fn k => Lt (Bound bp))
  1.3408 -  | a_beta (Lt (Neg bs)) = (fn k => Lt (Neg bs))
  1.3409 -  | a_beta (Lt (Add (bt, bu))) = (fn k => Lt (Add (bt, bu)))
  1.3410 -  | a_beta (Lt (Sub (bv, bw))) = (fn k => Lt (Sub (bv, bw)))
  1.3411 -  | a_beta (Lt (Mul (bx, by))) = (fn k => Lt (Mul (bx, by)))
  1.3412 -  | a_beta (Le (C ck)) = (fn k => Le (C ck))
  1.3413 -  | a_beta (Le (Bound cl)) = (fn k => Le (Bound cl))
  1.3414 -  | a_beta (Le (Neg co)) = (fn k => Le (Neg co))
  1.3415 -  | a_beta (Le (Add (cp, cq))) = (fn k => Le (Add (cp, cq)))
  1.3416 -  | a_beta (Le (Sub (cr, cs))) = (fn k => Le (Sub (cr, cs)))
  1.3417 -  | a_beta (Le (Mul (ct, cu))) = (fn k => Le (Mul (ct, cu)))
  1.3418 -  | a_beta (Gt (C dg)) = (fn k => Gt (C dg))
  1.3419 -  | a_beta (Gt (Bound dh)) = (fn k => Gt (Bound dh))
  1.3420 -  | a_beta (Gt (Neg dk)) = (fn k => Gt (Neg dk))
  1.3421 -  | a_beta (Gt (Add (dl, dm))) = (fn k => Gt (Add (dl, dm)))
  1.3422 -  | a_beta (Gt (Sub (dn, do'))) = (fn k => Gt (Sub (dn, do')))
  1.3423 -  | a_beta (Gt (Mul (dp, dq))) = (fn k => Gt (Mul (dp, dq)))
  1.3424 -  | a_beta (Ge (C ec)) = (fn k => Ge (C ec))
  1.3425 -  | a_beta (Ge (Bound ed)) = (fn k => Ge (Bound ed))
  1.3426 -  | a_beta (Ge (Neg eg)) = (fn k => Ge (Neg eg))
  1.3427 -  | a_beta (Ge (Add (eh, ei))) = (fn k => Ge (Add (eh, ei)))
  1.3428 -  | a_beta (Ge (Sub (ej, ek))) = (fn k => Ge (Sub (ej, ek)))
  1.3429 -  | a_beta (Ge (Mul (el, em))) = (fn k => Ge (Mul (el, em)))
  1.3430 -  | a_beta (Eq (C ey)) = (fn k => Eq (C ey))
  1.3431 -  | a_beta (Eq (Bound ez)) = (fn k => Eq (Bound ez))
  1.3432 -  | a_beta (Eq (Neg fc)) = (fn k => Eq (Neg fc))
  1.3433 -  | a_beta (Eq (Add (fd, fe))) = (fn k => Eq (Add (fd, fe)))
  1.3434 -  | a_beta (Eq (Sub (ff, fg))) = (fn k => Eq (Sub (ff, fg)))
  1.3435 -  | a_beta (Eq (Mul (fh, fi))) = (fn k => Eq (Mul (fh, fi)))
  1.3436 -  | a_beta (NEq (C fu)) = (fn k => NEq (C fu))
  1.3437 -  | a_beta (NEq (Bound fv)) = (fn k => NEq (Bound fv))
  1.3438 -  | a_beta (NEq (Neg fy)) = (fn k => NEq (Neg fy))
  1.3439 -  | a_beta (NEq (Add (fz, ga))) = (fn k => NEq (Add (fz, ga)))
  1.3440 -  | a_beta (NEq (Sub (gb, gc))) = (fn k => NEq (Sub (gb, gc)))
  1.3441 -  | a_beta (NEq (Mul (gd, ge))) = (fn k => NEq (Mul (gd, ge)))
  1.3442 -  | a_beta (Dvd (aa, C gq)) = (fn k => Dvd (aa, C gq))
  1.3443 -  | a_beta (Dvd (aa, Bound gr)) = (fn k => Dvd (aa, Bound gr))
  1.3444 -  | a_beta (Dvd (aa, Neg gu)) = (fn k => Dvd (aa, Neg gu))
  1.3445 -  | a_beta (Dvd (aa, Add (gv, gw))) = (fn k => Dvd (aa, Add (gv, gw)))
  1.3446 -  | a_beta (Dvd (aa, Sub (gx, gy))) = (fn k => Dvd (aa, Sub (gx, gy)))
  1.3447 -  | a_beta (Dvd (aa, Mul (gz, ha))) = (fn k => Dvd (aa, Mul (gz, ha)))
  1.3448 -  | a_beta (NDvd (ac, C hm)) = (fn k => NDvd (ac, C hm))
  1.3449 -  | a_beta (NDvd (ac, Bound hn)) = (fn k => NDvd (ac, Bound hn))
  1.3450 -  | a_beta (NDvd (ac, Neg hq)) = (fn k => NDvd (ac, Neg hq))
  1.3451 -  | a_beta (NDvd (ac, Add (hr, hs))) = (fn k => NDvd (ac, Add (hr, hs)))
  1.3452 -  | a_beta (NDvd (ac, Sub (ht, hu))) = (fn k => NDvd (ac, Sub (ht, hu)))
  1.3453 -  | a_beta (NDvd (ac, Mul (hv, hw))) = (fn k => NDvd (ac, Mul (hv, hw)))
  1.3454 -  | a_beta (NOT ae) = (fn k => NOT ae)
  1.3455 -  | a_beta (Imp (aj, ak)) = (fn k => Imp (aj, ak))
  1.3456 -  | a_beta (Iff (al, am)) = (fn k => Iff (al, am))
  1.3457 -  | a_beta (E an) = (fn k => E an)
  1.3458 -  | a_beta (A ao) = (fn k => A ao)
  1.3459 -  | a_beta (Closed ap) = (fn k => Closed ap)
  1.3460 -  | a_beta (NClosed aq) = (fn k => NClosed aq);
  1.3461 -
  1.3462 -fun zeta (And (p, q)) = ilcm (zeta p) (zeta q)
  1.3463 -  | zeta (Or (p, q)) = ilcm (zeta p) (zeta q)
  1.3464 -  | zeta (Eq (CX (c, e))) = c
  1.3465 -  | zeta (NEq (CX (c, e))) = c
  1.3466 -  | zeta (Lt (CX (c, e))) = c
  1.3467 -  | zeta (Le (CX (c, e))) = c
  1.3468 -  | zeta (Gt (CX (c, e))) = c
  1.3469 -  | zeta (Ge (CX (c, e))) = c
  1.3470 -  | zeta (Dvd (i, CX (c, e))) = c
  1.3471 -  | zeta (NDvd (i, CX (c, e))) = c
  1.3472 -  | zeta T = 1
  1.3473 -  | zeta F = 1
  1.3474 -  | zeta (Lt (C bo)) = 1
  1.3475 -  | zeta (Lt (Bound bp)) = 1
  1.3476 -  | zeta (Lt (Neg bs)) = 1
  1.3477 -  | zeta (Lt (Add (bt, bu))) = 1
  1.3478 -  | zeta (Lt (Sub (bv, bw))) = 1
  1.3479 -  | zeta (Lt (Mul (bx, by))) = 1
  1.3480 -  | zeta (Le (C ck)) = 1
  1.3481 -  | zeta (Le (Bound cl)) = 1
  1.3482 -  | zeta (Le (Neg co)) = 1
  1.3483 -  | zeta (Le (Add (cp, cq))) = 1
  1.3484 -  | zeta (Le (Sub (cr, cs))) = 1
  1.3485 -  | zeta (Le (Mul (ct, cu))) = 1
  1.3486 -  | zeta (Gt (C dg)) = 1
  1.3487 -  | zeta (Gt (Bound dh)) = 1
  1.3488 -  | zeta (Gt (Neg dk)) = 1
  1.3489 -  | zeta (Gt (Add (dl, dm))) = 1
  1.3490 -  | zeta (Gt (Sub (dn, do'))) = 1
  1.3491 -  | zeta (Gt (Mul (dp, dq))) = 1
  1.3492 -  | zeta (Ge (C ec)) = 1
  1.3493 -  | zeta (Ge (Bound ed)) = 1
  1.3494 -  | zeta (Ge (Neg eg)) = 1
  1.3495 -  | zeta (Ge (Add (eh, ei))) = 1
  1.3496 -  | zeta (Ge (Sub (ej, ek))) = 1
  1.3497 -  | zeta (Ge (Mul (el, em))) = 1
  1.3498 -  | zeta (Eq (C ey)) = 1
  1.3499 -  | zeta (Eq (Bound ez)) = 1
  1.3500 -  | zeta (Eq (Neg fc)) = 1
  1.3501 -  | zeta (Eq (Add (fd, fe))) = 1
  1.3502 -  | zeta (Eq (Sub (ff, fg))) = 1
  1.3503 -  | zeta (Eq (Mul (fh, fi))) = 1
  1.3504 -  | zeta (NEq (C fu)) = 1
  1.3505 -  | zeta (NEq (Bound fv)) = 1
  1.3506 -  | zeta (NEq (Neg fy)) = 1
  1.3507 -  | zeta (NEq (Add (fz, ga))) = 1
  1.3508 -  | zeta (NEq (Sub (gb, gc))) = 1
  1.3509 -  | zeta (NEq (Mul (gd, ge))) = 1
  1.3510 -  | zeta (Dvd (aa, C gq)) = 1
  1.3511 -  | zeta (Dvd (aa, Bound gr)) = 1
  1.3512 -  | zeta (Dvd (aa, Neg gu)) = 1
  1.3513 -  | zeta (Dvd (aa, Add (gv, gw))) = 1
  1.3514 -  | zeta (Dvd (aa, Sub (gx, gy))) = 1
  1.3515 -  | zeta (Dvd (aa, Mul (gz, ha))) = 1
  1.3516 -  | zeta (NDvd (ac, C hm)) = 1
  1.3517 -  | zeta (NDvd (ac, Bound hn)) = 1
  1.3518 -  | zeta (NDvd (ac, Neg hq)) = 1
  1.3519 -  | zeta (NDvd (ac, Add (hr, hs))) = 1
  1.3520 -  | zeta (NDvd (ac, Sub (ht, hu))) = 1
  1.3521 -  | zeta (NDvd (ac, Mul (hv, hw))) = 1
  1.3522 -  | zeta (NOT ae) = 1
  1.3523 -  | zeta (Imp (aj, ak)) = 1
  1.3524 -  | zeta (Iff (al, am)) = 1
  1.3525 -  | zeta (E an) = 1
  1.3526 -  | zeta (A ao) = 1
  1.3527 -  | zeta (Closed ap) = 1
  1.3528 -  | zeta (NClosed aq) = 1;
  1.3529 -
  1.3530 -fun split x = (fn p => x (fst p) (snd p));
  1.3531 -
  1.3532 -fun zsplit0 (C c) = (0, C c)
  1.3533 -  | zsplit0 (Bound n) = (if (n = 0) then (1, C 0) else (0, Bound n))
  1.3534 -  | zsplit0 (CX (i, a)) = split (fn i' => (fn x => ((i + i'), x))) (zsplit0 a)
  1.3535 -  | zsplit0 (Neg a) = (fn (i', a') => (~ i', Neg a')) (zsplit0 a)
  1.3536 -  | zsplit0 (Add (a, b)) =
  1.3537 -    (fn (ia, a') => (fn (ib, b') => ((ia + ib), Add (a', b'))) (zsplit0 b))
  1.3538 -      (zsplit0 a)
  1.3539 -  | zsplit0 (Sub (a, b)) =
  1.3540 -    (fn (ia, a') =>
  1.3541 -      (fn (ib, b') => (minus_def2 ia ib, Sub (a', b'))) (zsplit0 b))
  1.3542 -      (zsplit0 a)
  1.3543 -  | zsplit0 (Mul (i, a)) = (fn (i', a') => ((i * i'), Mul (i, a'))) (zsplit0 a);
  1.3544 -
  1.3545 -fun zlfm (And (p, q)) = And (zlfm p, zlfm q)
  1.3546 -  | zlfm (Or (p, q)) = Or (zlfm p, zlfm q)
  1.3547 -  | zlfm (Imp (p, q)) = Or (zlfm (NOT p), zlfm q)
  1.3548 -  | zlfm (Iff (p, q)) =
  1.3549 -    Or (And (zlfm p, zlfm q), And (zlfm (NOT p), zlfm (NOT q)))
  1.3550 -  | zlfm (Lt a) =
  1.3551 -    let val x = zsplit0 a
  1.3552 -    in (fn (c, r) =>
  1.3553 -         (if (c = 0) then Lt r
  1.3554 -           else (if (0 < c) then Lt (CX (c, r)) else Gt (CX (~ c, Neg r)))))
  1.3555 -         x
  1.3556 -    end
  1.3557 -  | zlfm (Le a) =
  1.3558 -    let val x = zsplit0 a
  1.3559 -    in (fn (c, r) =>
  1.3560 -         (if (c = 0) then Le r
  1.3561 -           else (if (0 < c) then Le (CX (c, r)) else Ge (CX (~ c, Neg r)))))
  1.3562 -         x
  1.3563 -    end
  1.3564 -  | zlfm (Gt a) =
  1.3565 -    let val x = zsplit0 a
  1.3566 -    in (fn (c, r) =>
  1.3567 -         (if (c = 0) then Gt r
  1.3568 -           else (if (0 < c) then Gt (CX (c, r)) else Lt (CX (~ c, Neg r)))))
  1.3569 -         x
  1.3570 -    end
  1.3571 -  | zlfm (Ge a) =
  1.3572 -    let val x = zsplit0 a
  1.3573 -    in (fn (c, r) =>
  1.3574 -         (if (c = 0) then Ge r
  1.3575 -           else (if (0 < c) then Ge (CX (c, r)) else Le (CX (~ c, Neg r)))))
  1.3576 -         x
  1.3577 -    end
  1.3578 -  | zlfm (Eq a) =
  1.3579 -    let val x = zsplit0 a
  1.3580 -    in (fn (c, r) =>
  1.3581 -         (if (c = 0) then Eq r
  1.3582 -           else (if (0 < c) then Eq (CX (c, r)) else Eq (CX (~ c, Neg r)))))
  1.3583 -         x
  1.3584 -    end
  1.3585 -  | zlfm (NEq a) =
  1.3586 -    let val x = zsplit0 a
  1.3587 -    in (fn (c, r) =>
  1.3588 -         (if (c = 0) then NEq r
  1.3589 -           else (if (0 < c) then NEq (CX (c, r)) else NEq (CX (~ c, Neg r)))))
  1.3590 -         x
  1.3591 -    end
  1.3592 -  | zlfm (Dvd (i, a)) =
  1.3593 -    (if (i = 0) then zlfm (Eq a)
  1.3594 -      else let val x = zsplit0 a
  1.3595 -           in (fn (c, r) =>
  1.3596 -                (if (c = 0) then Dvd (abs i, r)
  1.3597 -                  else (if (0 < c) then Dvd (abs i, CX (c, r))
  1.3598 -                         else Dvd (abs i, CX (~ c, Neg r)))))
  1.3599 -                x
  1.3600 +fun cooper p =
  1.3601 +  let
  1.3602 +    val (q, a) = unita p;
  1.3603 +    val (b, d) = a;
  1.3604 +    val js = iupt (1 : IntInf.int) d;
  1.3605 +    val mq = simpfm (minusinf q);
  1.3606 +    val md = evaldjf (fn j => simpfm (subst0 (C j) mq)) js;
  1.3607 +  in
  1.3608 +    (if eq_fm md T then T
  1.3609 +      else let
  1.3610 +             val qd =
  1.3611 +               evaldjf (fn aa as (ba, j) => simpfm (subst0 (Add (ba, C j)) q))
  1.3612 +                 (List.allpairs (fn aa => fn ba => (aa, ba)) b js);
  1.3613 +           in
  1.3614 +             decr (disj md qd)
  1.3615             end)
  1.3616 -  | zlfm (NDvd (i, a)) =
  1.3617 -    (if (i = 0) then zlfm (NEq a)
  1.3618 -      else let val x = zsplit0 a
  1.3619 -           in (fn (c, r) =>
  1.3620 -                (if (c = 0) then NDvd (abs i, r)
  1.3621 -                  else (if (0 < c) then NDvd (abs i, CX (c, r))
  1.3622 -                         else NDvd (abs i, CX (~ c, Neg r)))))
  1.3623 -                x
  1.3624 -           end)
  1.3625 -  | zlfm (NOT (And (p, q))) = Or (zlfm (NOT p), zlfm (NOT q))
  1.3626 -  | zlfm (NOT (Or (p, q))) = And (zlfm (NOT p), zlfm (NOT q))
  1.3627 -  | zlfm (NOT (Imp (p, q))) = And (zlfm p, zlfm (NOT q))
  1.3628 -  | zlfm (NOT (Iff (p, q))) =
  1.3629 -    Or (And (zlfm p, zlfm (NOT q)), And (zlfm (NOT p), zlfm q))
  1.3630 -  | zlfm (NOT (NOT p)) = zlfm p
  1.3631 -  | zlfm (NOT T) = F
  1.3632 -  | zlfm (NOT F) = T
  1.3633 -  | zlfm (NOT (Lt a)) = zlfm (Ge a)
  1.3634 -  | zlfm (NOT (Le a)) = zlfm (Gt a)
  1.3635 -  | zlfm (NOT (Gt a)) = zlfm (Le a)
  1.3636 -  | zlfm (NOT (Ge a)) = zlfm (Lt a)
  1.3637 -  | zlfm (NOT (Eq a)) = zlfm (NEq a)
  1.3638 -  | zlfm (NOT (NEq a)) = zlfm (Eq a)
  1.3639 -  | zlfm (NOT (Dvd (i, a))) = zlfm (NDvd (i, a))
  1.3640 -  | zlfm (NOT (NDvd (i, a))) = zlfm (Dvd (i, a))
  1.3641 -  | zlfm (NOT (Closed P)) = NClosed P
  1.3642 -  | zlfm (NOT (NClosed P)) = Closed P
  1.3643 -  | zlfm T = T
  1.3644 -  | zlfm F = F
  1.3645 -  | zlfm (NOT (E ci)) = NOT (E ci)
  1.3646 -  | zlfm (NOT (A cj)) = NOT (A cj)
  1.3647 -  | zlfm (E ao) = E ao
  1.3648 -  | zlfm (A ap) = A ap
  1.3649 -  | zlfm (Closed aq) = Closed aq
  1.3650 -  | zlfm (NClosed ar) = NClosed ar;
  1.3651 -
  1.3652 -fun unit p =
  1.3653 -  let val p' = zlfm p; val l = zeta p';
  1.3654 -      val q = And (Dvd (l, CX (1, C 0)), a_beta p' l); val d = delta q;
  1.3655 -      val B = remdups (map simpnum (beta q));
  1.3656 -      val a = remdups (map simpnum (alpha q))
  1.3657 -  in (if less_eq_def3 (size_def9 B) (size_def9 a) then (q, (B, d))
  1.3658 -       else (mirror q, (a, d)))
  1.3659    end;
  1.3660  
  1.3661 -fun cooper p =
  1.3662 -  let val (q, (B, d)) = unit p; val js = iupt (1, d);
  1.3663 -      val mq = simpfm (minusinf q);
  1.3664 -      val md = evaldjf (fn j => simpfm (subst0 (C j) mq)) js
  1.3665 -  in (if (md = T) then T
  1.3666 -       else let val qd =
  1.3667 -                  evaldjf (fn (b, j) => simpfm (subst0 (Add (b, C j)) q))
  1.3668 -                    (allpairs (fn x => fn xa => (x, xa)) B js)
  1.3669 -            in decr (disj md qd) end)
  1.3670 -  end;
  1.3671 +fun prep (NClosed aq) = NClosed aq
  1.3672 +  | prep (Closed ap) = Closed ap
  1.3673 +  | prep (NDvd (ac, ad)) = NDvd (ac, ad)
  1.3674 +  | prep (Dvd (aa, ab)) = Dvd (aa, ab)
  1.3675 +  | prep (NEq z) = NEq z
  1.3676 +  | prep (Eq y) = Eq y
  1.3677 +  | prep (Ge x) = Ge x
  1.3678 +  | prep (Gt w) = Gt w
  1.3679 +  | prep (Le v) = Le v
  1.3680 +  | prep (Lt u) = Lt u
  1.3681 +  | prep F = F
  1.3682 +  | prep T = T
  1.3683 +  | prep (Iffa (p, q)) = Or (prep (And (p, q)), prep (And (Nota p, Nota q)))
  1.3684 +  | prep (Impa (p, q)) = prep (Or (Nota p, q))
  1.3685 +  | prep (And (p, q)) = And (prep p, prep q)
  1.3686 +  | prep (Or (p, q)) = Or (prep p, prep q)
  1.3687 +  | prep (Nota (NClosed ck)) = Nota (prep (NClosed ck))
  1.3688 +  | prep (Nota (Closed cj)) = Nota (prep (Closed cj))
  1.3689 +  | prep (Nota (E ch)) = Nota (prep (E ch))
  1.3690 +  | prep (Nota (NDvd (bw, bx))) = Nota (prep (NDvd (bw, bx)))
  1.3691 +  | prep (Nota (Dvd (bu, bv))) = Nota (prep (Dvd (bu, bv)))
  1.3692 +  | prep (Nota (NEq bt)) = Nota (prep (NEq bt))
  1.3693 +  | prep (Nota (Eq bs)) = Nota (prep (Eq bs))
  1.3694 +  | prep (Nota (Ge br)) = Nota (prep (Ge br))
  1.3695 +  | prep (Nota (Gt bq)) = Nota (prep (Gt bq))
  1.3696 +  | prep (Nota (Le bp)) = Nota (prep (Le bp))
  1.3697 +  | prep (Nota (Lt bo)) = Nota (prep (Lt bo))
  1.3698 +  | prep (Nota F) = Nota (prep F)
  1.3699 +  | prep (Nota T) = Nota (prep T)
  1.3700 +  | prep (Nota (Iffa (p, q))) =
  1.3701 +    Or (prep (And (p, Nota q)), prep (And (Nota p, q)))
  1.3702 +  | prep (Nota (Impa (p, q))) = And (prep p, prep (Nota q))
  1.3703 +  | prep (Nota (Or (p, q))) = And (prep (Nota p), prep (Nota q))
  1.3704 +  | prep (Nota (A p)) = prep (E (Nota p))
  1.3705 +  | prep (Nota (And (p, q))) = Or (prep (Nota p), prep (Nota q))
  1.3706 +  | prep (Nota (Nota p)) = prep p
  1.3707 +  | prep (A (NClosed kj)) = prep (Nota (E (Nota (NClosed kj))))
  1.3708 +  | prep (A (Closed ki)) = prep (Nota (E (Nota (Closed ki))))
  1.3709 +  | prep (A (A kh)) = prep (Nota (E (Nota (A kh))))
  1.3710 +  | prep (A (E kg)) = prep (Nota (E (Nota (E kg))))
  1.3711 +  | prep (A (Iffa (ke, kf))) = prep (Nota (E (Nota (Iffa (ke, kf)))))
  1.3712 +  | prep (A (Impa (kc, kd))) = prep (Nota (E (Nota (Impa (kc, kd)))))
  1.3713 +  | prep (A (Or (ka, kb))) = prep (Nota (E (Nota (Or (ka, kb)))))
  1.3714 +  | prep (A (Nota jx)) = prep (Nota (E (Nota (Nota jx))))
  1.3715 +  | prep (A (NDvd (jv, jw))) = prep (Nota (E (Nota (NDvd (jv, jw)))))
  1.3716 +  | prep (A (Dvd (jt, ju))) = prep (Nota (E (Nota (Dvd (jt, ju)))))
  1.3717 +  | prep (A (NEq js)) = prep (Nota (E (Nota (NEq js))))
  1.3718 +  | prep (A (Eq jr)) = prep (Nota (E (Nota (Eq jr))))
  1.3719 +  | prep (A (Ge jq)) = prep (Nota (E (Nota (Ge jq))))
  1.3720 +  | prep (A (Gt jp)) = prep (Nota (E (Nota (Gt jp))))
  1.3721 +  | prep (A (Le jo)) = prep (Nota (E (Nota (Le jo))))
  1.3722 +  | prep (A (Lt jn)) = prep (Nota (E (Nota (Lt jn))))
  1.3723 +  | prep (A F) = prep (Nota (E (Nota F)))
  1.3724 +  | prep (A T) = prep (Nota (E (Nota T)))
  1.3725 +  | prep (A (And (p, q))) = And (prep (A p), prep (A q))
  1.3726 +  | prep (E (NClosed fb)) = E (prep (NClosed fb))
  1.3727 +  | prep (E (Closed fa)) = E (prep (Closed fa))
  1.3728 +  | prep (E (A ez)) = E (prep (A ez))
  1.3729 +  | prep (E (E ey)) = E (prep (E ey))
  1.3730 +  | prep (E (And (eq, er))) = E (prep (And (eq, er)))
  1.3731 +  | prep (E (Nota (NClosed hs))) = E (prep (Nota (NClosed hs)))
  1.3732 +  | prep (E (Nota (Closed hr))) = E (prep (Nota (Closed hr)))
  1.3733 +  | prep (E (Nota (A hq))) = E (prep (Nota (A hq)))
  1.3734 +  | prep (E (Nota (E hp))) = E (prep (Nota (E hp)))
  1.3735 +  | prep (E (Nota (Or (hj, hk)))) = E (prep (Nota (Or (hj, hk))))
  1.3736 +  | prep (E (Nota (Nota hg))) = E (prep (Nota (Nota hg)))
  1.3737 +  | prep (E (Nota (NDvd (he, hf)))) = E (prep (Nota (NDvd (he, hf))))
  1.3738 +  | prep (E (Nota (Dvd (hc, hd)))) = E (prep (Nota (Dvd (hc, hd))))
  1.3739 +  | prep (E (Nota (NEq hb))) = E (prep (Nota (NEq hb)))
  1.3740 +  | prep (E (Nota (Eq ha))) = E (prep (Nota (Eq ha)))
  1.3741 +  | prep (E (Nota (Ge gz))) = E (prep (Nota (Ge gz)))
  1.3742 +  | prep (E (Nota (Gt gy))) = E (prep (Nota (Gt gy)))
  1.3743 +  | prep (E (Nota (Le gx))) = E (prep (Nota (Le gx)))
  1.3744 +  | prep (E (Nota (Lt gw))) = E (prep (Nota (Lt gw)))
  1.3745 +  | prep (E (Nota F)) = E (prep (Nota F))
  1.3746 +  | prep (E (Nota T)) = E (prep (Nota T))
  1.3747 +  | prep (E (NDvd (en, eo))) = E (prep (NDvd (en, eo)))
  1.3748 +  | prep (E (Dvd (el, em))) = E (prep (Dvd (el, em)))
  1.3749 +  | prep (E (NEq ek)) = E (prep (NEq ek))
  1.3750 +  | prep (E (Eq ej)) = E (prep (Eq ej))
  1.3751 +  | prep (E (Ge ei)) = E (prep (Ge ei))
  1.3752 +  | prep (E (Gt eh)) = E (prep (Gt eh))
  1.3753 +  | prep (E (Le eg)) = E (prep (Le eg))
  1.3754 +  | prep (E (Lt ef)) = E (prep (Lt ef))
  1.3755 +  | prep (E (Nota (Iffa (p, q)))) =
  1.3756 +    Or (prep (E (And (p, Nota q))), prep (E (And (Nota p, q))))
  1.3757 +  | prep (E (Nota (Impa (p, q)))) = prep (E (And (p, Nota q)))
  1.3758 +  | prep (E (Nota (And (p, q)))) = Or (prep (E (Nota p)), prep (E (Nota q)))
  1.3759 +  | prep (E (Iffa (p, q))) =
  1.3760 +    Or (prep (E (And (p, q))), prep (E (And (Nota p, Nota q))))
  1.3761 +  | prep (E (Impa (p, q))) = Or (prep (E (Nota p)), prep (E q))
  1.3762 +  | prep (E (Or (p, q))) = Or (prep (E p), prep (E q))
  1.3763 +  | prep (E F) = F
  1.3764 +  | prep (E T) = T;
  1.3765  
  1.3766 -fun prep (E T) = T
  1.3767 -  | prep (E F) = F
  1.3768 -  | prep (E (Or (p, q))) = Or (prep (E p), prep (E q))
  1.3769 -  | prep (E (Imp (p, q))) = Or (prep (E (NOT p)), prep (E q))
  1.3770 -  | prep (E (Iff (p, q))) =
  1.3771 -    Or (prep (E (And (p, q))), prep (E (And (NOT p, NOT q))))
  1.3772 -  | prep (E (NOT (And (p, q)))) = Or (prep (E (NOT p)), prep (E (NOT q)))
  1.3773 -  | prep (E (NOT (Imp (p, q)))) = prep (E (And (p, NOT q)))
  1.3774 -  | prep (E (NOT (Iff (p, q)))) =
  1.3775 -    Or (prep (E (And (p, NOT q))), prep (E (And (NOT p, q))))
  1.3776 -  | prep (E (Lt ef)) = E (prep (Lt ef))
  1.3777 -  | prep (E (Le eg)) = E (prep (Le eg))
  1.3778 -  | prep (E (Gt eh)) = E (prep (Gt eh))
  1.3779 -  | prep (E (Ge ei)) = E (prep (Ge ei))
  1.3780 -  | prep (E (Eq ej)) = E (prep (Eq ej))
  1.3781 -  | prep (E (NEq ek)) = E (prep (NEq ek))
  1.3782 -  | prep (E (Dvd (el, em))) = E (prep (Dvd (el, em)))
  1.3783 -  | prep (E (NDvd (en, eo))) = E (prep (NDvd (en, eo)))
  1.3784 -  | prep (E (NOT T)) = E (prep (NOT T))
  1.3785 -  | prep (E (NOT F)) = E (prep (NOT F))
  1.3786 -  | prep (E (NOT (Lt gw))) = E (prep (NOT (Lt gw)))
  1.3787 -  | prep (E (NOT (Le gx))) = E (prep (NOT (Le gx)))
  1.3788 -  | prep (E (NOT (Gt gy))) = E (prep (NOT (Gt gy)))
  1.3789 -  | prep (E (NOT (Ge gz))) = E (prep (NOT (Ge gz)))
  1.3790 -  | prep (E (NOT (Eq ha))) = E (prep (NOT (Eq ha)))
  1.3791 -  | prep (E (NOT (NEq hb))) = E (prep (NOT (NEq hb)))
  1.3792 -  | prep (E (NOT (Dvd (hc, hd)))) = E (prep (NOT (Dvd (hc, hd))))
  1.3793 -  | prep (E (NOT (NDvd (he, hf)))) = E (prep (NOT (NDvd (he, hf))))
  1.3794 -  | prep (E (NOT (NOT hg))) = E (prep (NOT (NOT hg)))
  1.3795 -  | prep (E (NOT (Or (hj, hk)))) = E (prep (NOT (Or (hj, hk))))
  1.3796 -  | prep (E (NOT (E hp))) = E (prep (NOT (E hp)))
  1.3797 -  | prep (E (NOT (A hq))) = E (prep (NOT (A hq)))
  1.3798 -  | prep (E (NOT (Closed hr))) = E (prep (NOT (Closed hr)))
  1.3799 -  | prep (E (NOT (NClosed hs))) = E (prep (NOT (NClosed hs)))
  1.3800 -  | prep (E (And (eq, er))) = E (prep (And (eq, er)))
  1.3801 -  | prep (E (E ey)) = E (prep (E ey))
  1.3802 -  | prep (E (A ez)) = E (prep (A ez))
  1.3803 -  | prep (E (Closed fa)) = E (prep (Closed fa))
  1.3804 -  | prep (E (NClosed fb)) = E (prep (NClosed fb))
  1.3805 -  | prep (A (And (p, q))) = And (prep (A p), prep (A q))
  1.3806 -  | prep (A T) = prep (NOT (E (NOT T)))
  1.3807 -  | prep (A F) = prep (NOT (E (NOT F)))
  1.3808 -  | prep (A (Lt jn)) = prep (NOT (E (NOT (Lt jn))))
  1.3809 -  | prep (A (Le jo)) = prep (NOT (E (NOT (Le jo))))
  1.3810 -  | prep (A (Gt jp)) = prep (NOT (E (NOT (Gt jp))))
  1.3811 -  | prep (A (Ge jq)) = prep (NOT (E (NOT (Ge jq))))
  1.3812 -  | prep (A (Eq jr)) = prep (NOT (E (NOT (Eq jr))))
  1.3813 -  | prep (A (NEq js)) = prep (NOT (E (NOT (NEq js))))
  1.3814 -  | prep (A (Dvd (jt, ju))) = prep (NOT (E (NOT (Dvd (jt, ju)))))
  1.3815 -  | prep (A (NDvd (jv, jw))) = prep (NOT (E (NOT (NDvd (jv, jw)))))
  1.3816 -  | prep (A (NOT jx)) = prep (NOT (E (NOT (NOT jx))))
  1.3817 -  | prep (A (Or (ka, kb))) = prep (NOT (E (NOT (Or (ka, kb)))))
  1.3818 -  | prep (A (Imp (kc, kd))) = prep (NOT (E (NOT (Imp (kc, kd)))))
  1.3819 -  | prep (A (Iff (ke, kf))) = prep (NOT (E (NOT (Iff (ke, kf)))))
  1.3820 -  | prep (A (E kg)) = prep (NOT (E (NOT (E kg))))
  1.3821 -  | prep (A (A kh)) = prep (NOT (E (NOT (A kh))))
  1.3822 -  | prep (A (Closed ki)) = prep (NOT (E (NOT (Closed ki))))
  1.3823 -  | prep (A (NClosed kj)) = prep (NOT (E (NOT (NClosed kj))))
  1.3824 -  | prep (NOT (NOT p)) = prep p
  1.3825 -  | prep (NOT (And (p, q))) = Or (prep (NOT p), prep (NOT q))
  1.3826 -  | prep (NOT (A p)) = prep (E (NOT p))
  1.3827 -  | prep (NOT (Or (p, q))) = And (prep (NOT p), prep (NOT q))
  1.3828 -  | prep (NOT (Imp (p, q))) = And (prep p, prep (NOT q))
  1.3829 -  | prep (NOT (Iff (p, q))) = Or (prep (And (p, NOT q)), prep (And (NOT p, q)))
  1.3830 -  | prep (NOT T) = NOT (prep T)
  1.3831 -  | prep (NOT F) = NOT (prep F)
  1.3832 -  | prep (NOT (Lt bo)) = NOT (prep (Lt bo))
  1.3833 -  | prep (NOT (Le bp)) = NOT (prep (Le bp))
  1.3834 -  | prep (NOT (Gt bq)) = NOT (prep (Gt bq))
  1.3835 -  | prep (NOT (Ge br)) = NOT (prep (Ge br))
  1.3836 -  | prep (NOT (Eq bs)) = NOT (prep (Eq bs))
  1.3837 -  | prep (NOT (NEq bt)) = NOT (prep (NEq bt))
  1.3838 -  | prep (NOT (Dvd (bu, bv))) = NOT (prep (Dvd (bu, bv)))
  1.3839 -  | prep (NOT (NDvd (bw, bx))) = NOT (prep (NDvd (bw, bx)))
  1.3840 -  | prep (NOT (E ch)) = NOT (prep (E ch))
  1.3841 -  | prep (NOT (Closed cj)) = NOT (prep (Closed cj))
  1.3842 -  | prep (NOT (NClosed ck)) = NOT (prep (NClosed ck))
  1.3843 -  | prep (Or (p, q)) = Or (prep p, prep q)
  1.3844 -  | prep (And (p, q)) = And (prep p, prep q)
  1.3845 -  | prep (Imp (p, q)) = prep (Or (NOT p, q))
  1.3846 -  | prep (Iff (p, q)) = Or (prep (And (p, q)), prep (And (NOT p, NOT q)))
  1.3847 -  | prep T = T
  1.3848 -  | prep F = F
  1.3849 -  | prep (Lt u) = Lt u
  1.3850 -  | prep (Le v) = Le v
  1.3851 -  | prep (Gt w) = Gt w
  1.3852 -  | prep (Ge x) = Ge x
  1.3853 -  | prep (Eq y) = Eq y
  1.3854 -  | prep (NEq z) = NEq z
  1.3855 -  | prep (Dvd (aa, ab)) = Dvd (aa, ab)
  1.3856 -  | prep (NDvd (ac, ad)) = NDvd (ac, ad)
  1.3857 -  | prep (Closed ap) = Closed ap
  1.3858 -  | prep (NClosed aq) = NClosed aq;
  1.3859 +fun qelim (NClosed aq) = (fn y => simpfm (NClosed aq))
  1.3860 +  | qelim (Closed ap) = (fn y => simpfm (Closed ap))
  1.3861 +  | qelim (NDvd (ac, ad)) = (fn y => simpfm (NDvd (ac, ad)))
  1.3862 +  | qelim (Dvd (aa, ab)) = (fn y => simpfm (Dvd (aa, ab)))
  1.3863 +  | qelim (NEq z) = (fn y => simpfm (NEq z))
  1.3864 +  | qelim (Eq y) = (fn ya => simpfm (Eq y))
  1.3865 +  | qelim (Ge x) = (fn y => simpfm (Ge x))
  1.3866 +  | qelim (Gt w) = (fn y => simpfm (Gt w))
  1.3867 +  | qelim (Le v) = (fn y => simpfm (Le v))
  1.3868 +  | qelim (Lt u) = (fn y => simpfm (Lt u))
  1.3869 +  | qelim F = (fn y => simpfm F)
  1.3870 +  | qelim T = (fn y => simpfm T)
  1.3871 +  | qelim (Iffa (p, q)) = (fn qe => iff (qelim p qe) (qelim q qe))
  1.3872 +  | qelim (Impa (p, q)) = (fn qe => imp (qelim p qe) (qelim q qe))
  1.3873 +  | qelim (Or (p, q)) = (fn qe => disj (qelim p qe) (qelim q qe))
  1.3874 +  | qelim (And (p, q)) = (fn qe => conj (qelim p qe) (qelim q qe))
  1.3875 +  | qelim (Nota p) = (fn qe => nota (qelim p qe))
  1.3876 +  | qelim (A p) = (fn qe => nota (qe (qelim (Nota p) qe)))
  1.3877 +  | qelim (E p) = (fn qe => dj qe (qelim p qe));
  1.3878  
  1.3879 -fun pa x = qelim (prep x) cooper;
  1.3880 +val pa : fm -> fm = (fn p => qelim (prep p) cooper);
  1.3881  
  1.3882 -val pa = (fn x => pa x);
  1.3883 +end; (*struct Reflected_Presburger*)
  1.3884  
  1.3885 -val test =
  1.3886 -  (fn x =>
  1.3887 -    pa (E (A (Imp (Ge (Sub (Bound 0, Bound one_def0)),
  1.3888 -                    E (E (Eq (Sub (Add (Mul (3, Bound one_def0),
  1.3889 - Mul (5, Bound 0)),
  1.3890 -                                    Bound (nat 2))))))))));
  1.3891 -
  1.3892 -end;
  1.3893 +end; (*struct ROOT*)