 !                                     IntInf.- (IntInf.abs l, s)))
 !                          end)));
   
+  fun snd (x1, x2) = x2;
+  
   fun modulo_integer k l = snd (divmod_integer k l);
   
-  fun modulo_nat m n = Nat (modulo_integer (integer_of_nat m) (integer_of_nat n));
-  
-  fun nat_of_uint32 x =
-!   nat_of_integer (IntInf.fromLarge (Word32.toLargeInt x) : IntInf.int);
-  
-  fun nat_of_hashcode x = nat_of_uint32 x;
-  
---- 1964,2003 ----
-  fun ht_new (A1_, A2_) B_ = ht_new_sz (A1_, A2_) B_ (def_hashmap_size A1_ Type);
+! datatype nat = Nat of IntInf.int;
+  
+  fun integer_of_nat (Nat x) = x;
+  
+--- 502,546 ----
+  val heap_int = {countable_heap = countable_int, typerep_heap = typerep_int} :
+    int heap;
+  
+! fun uminus_inta k = Int_of_integer (Int.~ (integer_of_int k));
+  
+! val zero_inta : int = Int_of_integer (0 : Int.int);
+  
+  datatype num = One | Bit0 of num | Bit1 of num;
   
   fun sgn_integer k =
 !   (if ((k : Int.int) = (0 : Int.int)) then (0 : Int.int)

!   datatype int = Int_of_integer of Int.int
!   val integer_of_int : int -> Int.int
    type nat
!   val nat_of_integer : Int.int -> nat
!   val integer_of_nat : nat -> Int.int
    datatype instr = JMPZ of nat | ADD | NOT | AND | LT | LE | EQ | PUSH of int |
      POP | LID of nat | STORE | STOREI of nat * int | COPY | CALL | RETURN | HALT
      | STOREC of nat * int | SETF of bool

  fun ahm_update eq bhc k v hm =
    let
***************
*** 3322,3342 ****
                           | SOME (CEXP _) => true) andalso
                          equal_optiona (equal_instrc A_)
                            (nth prog
