diff --git a/src/num/theories/cv_compute/automation/cv_primScript.sml b/src/num/theories/cv_compute/automation/cv_primScript.sml
index 830267dedc..3df66869bc 100644
--- a/src/num/theories/cv_compute/automation/cv_primScript.sml
+++ b/src/num/theories/cv_compute/automation/cv_primScript.sml
@@ -131,6 +131,18 @@ Proof
   fs [cv_rep_def] \\ rw []
 QED
 
+Theorem cv_rep_gt[cv_rep]:
+  b2c (n > m) = cv_lt (Num m) (Num n)
+Proof
+  fs [cv_rep_def] \\ rw []
+QED
+
+Theorem cv_rep_ge[cv_rep]:
+  b2c (n >= m) = cv_sub (Num 1) (cv_lt (Num n) (Num m))
+Proof
+  fs [cv_rep_def] \\ rw []
+QED
+
 Theorem cv_rep_num_case[cv_rep]:
   cv_rep p1 c1 Num x /\
   cv_rep p2 c2 (a:'a->cv) y /\
@@ -321,21 +333,16 @@ Proof
   simp[int_sub, GSYM cv_neg_int, GSYM cv_int_add]
 QED
 
-Definition total_int_div_def:
-  total_int_div i j = if j = 0 then 0 else int_div i j
-End
-
-Theorem total_int_div:
-  total_int_div i j =
-    if j = 0 then 0
-    else if j < 0 then
-            if i < 0 then &(Num i DIV Num j)
-            else -&(Num i DIV Num j) + if Num i MOD Num j = 0 then 0 else -1
+Theorem int_div[local]:
+  j <> 0 ==>
+  int_div i j =
+    if j < 0 then
+      if i < 0 then &(Num i DIV Num j)
+      else -&(Num i DIV Num j) + if Num i MOD Num j = 0 then 0 else -1
     else if i < 0 then -&(Num i DIV Num j) + if Num i MOD Num j = 0 then 0 else -1
          else &(Num i DIV Num j)
 Proof
-  simp[total_int_div_def, int_div] >>
-  Cases_on `j = 0` >> gvs[] >>
+  strip_tac >> simp[int_div] >>
   Cases_on `j < 0` >> Cases_on `i < 0` >> gvs[] >>
   namedCases_on `i` ["ni","ni",""] >> gvs[] >>
   namedCases_on `j` ["nj","nj",""] >> gvs[]
@@ -343,26 +350,34 @@ QED
 
 Definition cv_int_div_def:
   cv_int_div i j =
-    cv_if (cv_eq j (Num 0)) (Num 0) $
-      cv_if (cv_ispair j) (* if j < 0 *)
-        (cv_if (cv_ispair i) (* if i < 0 *)
-          (cv_div (cv_fst i) (cv_fst j))
-          (cv_int_add
-            (Pair (cv_div i (cv_fst j)) (Num 0))
-            (cv_if (cv_mod i (cv_fst j))
-              (Pair (Num 1) (Num 0)) (Num 0))))
-        (cv_if (cv_ispair i) (* if i < 0 *)
-          (cv_int_add
-            (Pair (cv_div (cv_fst i) j) (Num 0))
-            (cv_if (cv_mod (cv_fst i) j)
-              (Pair (Num 1) (Num 0)) (Num 0)))
-          (cv_div i j))
+    cv_if (cv_ispair j) (* if j < 0 *)
+      (cv_if (cv_ispair i) (* if i < 0 *)
+        (cv_div (cv_fst i) (cv_fst j))
+        (cv_int_add
+          (Pair (cv_div i (cv_fst j)) (Num 0))
+          (cv_if (cv_mod i (cv_fst j))
+            (Pair (Num 1) (Num 0)) (Num 0))))
+      (cv_if (cv_ispair i) (* if i < 0 *)
+        (cv_int_add
+          (Pair (cv_div (cv_fst i) j) (Num 0))
+          (cv_if (cv_mod (cv_fst i) j)
+            (Pair (Num 1) (Num 0)) (Num 0)))
+        (cv_div i j))
+End
+
+Definition total_int_div_def:
+  total_int_div i j = if j = 0 then 0 else int_div i j
+End
+
+Definition cv_total_int_div_def:
+  cv_total_int_div i j =
+    cv_if (cv_eq j (Num 0)) (Num 0) (cv_int_div i j)
 End
 
 Theorem cv_int_div[cv_rep]:
-  from_int (total_int_div i j) = cv_int_div (from_int i) (from_int j)
+  j <> 0 ==> from_int (int_div i j) = cv_int_div (from_int i) (from_int j)
 Proof
-  simp[total_int_div, cv_int_div_def, from_int_def] >>
+  simp[int_div, cv_int_div_def, from_int_def] >>
   Cases_on `j = 0` >> gvs[] >>
   Cases_on `j < 0` >> Cases_on `i < 0` >> gvs[] >>
   Cases_on `i = 0` >> gvs[] >>
@@ -371,6 +386,14 @@ Proof
   Cases_on `Num i DIV Num j` >> gvs[]
 QED
 
+Theorem cv_total_int_div[cv_rep]:
+  from_int (total_int_div i j) = cv_total_int_div (from_int i) (from_int j)
+Proof
+  simp[total_int_div_def, cv_total_int_div_def] >>
+  Cases_on `j = 0` >> gvs[] >- simp[from_int_def] >>
+  rw[GSYM cv_int_div] >> Cases_on `j` >> gvs[from_int_def]
+QED
+
 Definition cv_int_mul_def:
   cv_int_mul i j =
     cv_if (cv_eq i (Num 0)) (Num 0) $
@@ -393,6 +416,35 @@ Proof
   gvs[INT_MUL_CALCULATE]
 QED
 
+Definition cv_int_mod_def:
+  cv_int_mod i j = cv_int_add i (cv_int_neg (cv_int_mul (cv_int_div i j) j))
+End
+
+Definition total_int_mod_def:
+  total_int_mod i j = if j = 0 then i else int_mod i j
+End
+
+Definition cv_total_int_mod_def:
+  cv_total_int_mod i j = cv_if (cv_eq j (Num 0)) i (cv_int_mod i j)
+End
+
+Theorem cv_int_mod[cv_rep]:
+  j <> 0 ==>
+  from_int (int_mod i j) = cv_int_mod (from_int i) (from_int j)
+Proof
+  strip_tac >> simp[cv_int_mod_def] >>
+  simp[GSYM cv_int_div, GSYM cv_int_mul, GSYM cv_int_sub] >>
+  simp[Once int_mod]
+QED
+
+Theorem cv_total_int_mod[cv_rep]:
+  from_int (total_int_mod i j) = cv_total_int_mod (from_int i) (from_int j)
+Proof
+  simp[total_int_mod_def, cv_total_int_mod_def] >>
+  Cases_on `j = 0` >> gvs[] >- simp[from_int_def] >>
+  rw[GSYM cv_int_mod] >> Cases_on `j` >> gvs[from_int_def]
+QED
+
 (*----------------------------------------------------------*
    rat
  *----------------------------------------------------------*)
@@ -458,7 +510,7 @@ Definition cv_rat_norm_def:
     let d = cv_gcd (cv_abs (cv_fst r)) (cv_snd r) in
     cv_if (cv_lt d (Num 2))
       r
-      (Pair (cv_int_div (cv_fst r) d) (cv_div (cv_snd r) d))
+      (Pair (cv_total_int_div (cv_fst r) d) (cv_div (cv_snd r) d))
 End
 
 Theorem cv_rat_norm_div_gcd:
@@ -469,7 +521,7 @@ Proof
   simp[GSYM cv_Num, GSYM cv_gcd_thm, c2b_def] >>
   ntac 3 $ simp[Once COND_RAND] >> simp[COND_RATOR] >>
   `Num (gcd (Num a) b) = from_int (&(gcd (Num a) b))` by simp[from_int_def] >>
-  simp[GSYM cv_int_div] >>
+  simp[GSYM cv_total_int_div] >>
   simp[wordsTheory.NUMERAL_LESS_THM] >>
   Cases_on `a = 0 /\ b = 0 \/ gcd (Num a) b = 1` >> gvs[] >>
   IF_CASES_TAC >> gvs[] >> simp[total_int_div_def] >> IF_CASES_TAC >> gvs[]
diff --git a/src/num/theories/cv_compute/automation/cv_stdScript.sml b/src/num/theories/cv_compute/automation/cv_stdScript.sml
index c39ebf5917..5155f97657 100644
--- a/src/num/theories/cv_compute/automation/cv_stdScript.sml
+++ b/src/num/theories/cv_compute/automation/cv_stdScript.sml
@@ -265,6 +265,22 @@ Proof
   \\ rw [] \\ AP_THM_TAC \\ AP_TERM_TAC \\ gvs [FUN_EQ_THM,arithmeticTheory.ADD1]
 QED
 
+Definition count_loop_def:
+  count_loop n k = if n = 0:num then [] else k::count_loop (n-1) (k+1:num)
+End
+
+val res = cv_trans count_loop_def;
+
+Theorem cv_COUNT_LIST[cv_inline]:
+  COUNT_LIST n = count_loop n 0
+Proof
+  qsuff_tac `!n k. count_loop n k = MAP (\i. i + k) (COUNT_LIST n)` >>
+  simp[] >>
+  Induct \\ rw[] \\ simp [rich_listTheory.COUNT_LIST_def,Once count_loop_def]
+  \\ gvs [MAP_MAP_o,combinTheory.o_DEF,ADD1] \\ AP_THM_TAC \\ AP_TERM_TAC
+  \\ gvs [FUN_EQ_THM]
+QED
+
 Theorem K_THM[cv_inline] = combinTheory.K_THM;
 Theorem I_THM[cv_inline] = combinTheory.I_THM;
 Theorem o_THM[cv_inline] = combinTheory.o_THM;
diff --git a/src/num/theories/cv_compute/automation/cv_transLib.sml b/src/num/theories/cv_compute/automation/cv_transLib.sml
index 5b5fb0548d..d5ea2452da 100644
--- a/src/num/theories/cv_compute/automation/cv_transLib.sml
+++ b/src/num/theories/cv_compute/automation/cv_transLib.sml
@@ -846,7 +846,14 @@ fun get_cv_consts tm = let
 fun get_code_eq_info const_tm = let
   val cv_def = get_code_eq_for const_tm
   val tm = cv_def |> SPEC_ALL |> concl |> dest_eq |> snd
-  in (cv_def, get_cv_consts tm) end
+  val res = get_cv_consts tm
+            handle HOL_ERR e => let
+              val _ = print ("\nERROR: " ^ #message e ^ "\n")
+              val _ = print "This appears in definition:\n\n"
+              val _ = print_thm cv_def
+              val _ = print "\n\n"
+              in raise HOL_ERR e end
+  in (cv_def, res) end
 
 fun cv_eqs_for tm = let
   val init_set = get_cv_consts tm
diff --git a/src/num/theories/cv_compute/automation/selftest.sml b/src/num/theories/cv_compute/automation/selftest.sml
index 827c8c6947..361cdc4488 100644
--- a/src/num/theories/cv_compute/automation/selftest.sml
+++ b/src/num/theories/cv_compute/automation/selftest.sml
@@ -337,3 +337,9 @@ val dest_handle_If_def = Define `
 
 val _ = cv_trans can_raise_def;
 val _ = cv_trans dest_handle_If_def;
+
+(*
+val mem_test_def = Define `mem_test n = MEM n ["test1"; "test2"]`
+val _ = cv_trans mem_test_def;
+val _ = cv_eval ``mem_test "hi"``
+*)