diff --git a/hol4/.HOLCOMMIT b/hol4/.HOLCOMMIT
index faf9210f32ee9982d06b581a71db2bad5580814d..0777dc3aed055adb9ef7ef067ce271eee25e5055 100644
--- a/hol4/.HOLCOMMIT
+++ b/hol4/.HOLCOMMIT
@@ -1 +1 @@
-89e07c5a43c0637bc614b4396e6a8b3cb902cedb
+52ffdc8f01c5cf044427bf6f3a12e8300e91765a
diff --git a/hol4/ErrorBoundsScript.sml b/hol4/ErrorBoundsScript.sml
index 3f87939a93e880c62f6d90459bf85e0ddfe9cf47..18aa186b267261be16af2ec19155eef6de07482a 100644
--- a/hol4/ErrorBoundsScript.sml
+++ b/hol4/ErrorBoundsScript.sml
@@ -447,16 +447,13 @@ Proof
 QED
 
 Theorem err_prop_inversion_pos:
-  !(nF:real) (nR:real) (err:real) (elo:real) (ehi:real).
-      0 < elo - err  /\ 0 < elo /\
-      abs (nR - nF) <= err /\
-      elo <= nR /\
-      nR <= ehi /\
-      elo - err <= nF /\
-      nF <= ehi + err /\
-      0 <=
-      err ==>
-      abs (inv nR - inv nF) <= err * inv ((elo - err) * (elo - err))
+  ∀ (nF:real) (nR:real) (err:real) (elo:real) (ehi:real).
+    0 < elo - err  ∧ 0 < elo ∧
+    abs (nR - nF) <= err ∧
+    elo <= nR ∧ nR <= ehi ∧
+    elo - err <= nF ∧ nF <= ehi + err ∧
+    0 <= err ⇒
+    abs (inv nR - inv nF) <= err * inv ((elo - err) * (elo - err))
 Proof
   rpt strip_tac
   \\ `! (x:real). ((abs x = x) /\ 0 < x) \/ ((abs x = - x) /\ x <= 0)`
@@ -481,26 +478,25 @@ Proof
     >- (match_mp_tac REAL_LE_LADD_IMP
         \\ ‘0 < nR - err ∧ nR - err ≤ nF’ by REAL_ASM_ARITH_TAC
         \\ simp[])
-    >- (`- nR <> 0 /\ nR - err <> 0` by REAL_ASM_ARITH_TAC
-        \\ ‘(nR - err + -nR) / (-nR * (nR - err)) ≤ err * (1 / (elo + -err) pow 2)’
-          suffices_by (rewrite_tac[REAL_INV_1OVER] \\ fs[REAL_ADD_RAT])
-        \\ `nR - err + - nR = - err` by REAL_ASM_ARITH_TAC
-        \\ pop_assum (rewrite_tac o single)
-        \\ qspec_then `nR` (fn thm => fs [real_div, GSYM thm]) REAL_NEG_LMUL
-        (* Goal: -(err * inv (-(nR * (nR − err)))) ≤ err * inv ((elo + -err) pow 2) *)
-        \\ `nR * (nR - err) <> 0` by fs[REAL_ENTIRE]
-        \\ fs [GSYM REAL_NEG_INV, GSYM REAL_NEG_LMUL, GSYM REAL_NEG_RMUL]
-        (* Goal: err * inv (nR * (nR − err)) ≤ err * inv ((elo + -err) pow 2) *)
-        \\ rewrite_tac [REAL_POW_INV]
-        \\ match_mp_tac REAL_LE_LMUL_IMP \\ conj_tac \\ simp[]
-        \\ rpt (qpat_x_assum `T` kall_tac)
-        \\ `0 < elo + - err` by REAL_ASM_ARITH_TAC
-        \\ `0 <  (elo + - err) * (elo + - err)` by fs[REAL_LT_MUL]
-        \\ match_mp_tac REAL_INV_LE_ANTIMONO_IMPR \\ conj_tac
-        >- (match_mp_tac REAL_LT_MUL \\ REAL_ASM_ARITH_TAC)
-        \\ conj_tac
-        >- (fs[POW_2])
-        \\ once_rewrite_tac [POW_2] \\ irule REAL_LE_MUL2 \\ REAL_ASM_ARITH_TAC))
+    \\ `- nR <> 0 /\ nR - err <> 0` by REAL_ASM_ARITH_TAC
+    \\ ‘(nR - err + -nR) / (-nR * (nR - err)) ≤ err * (1 / (elo + -err) pow 2)’
+      suffices_by (rewrite_tac[REAL_INV_1OVER] \\ fs[REAL_ADD_RAT])
+    \\ `nR - err + - nR = - err` by REAL_ASM_ARITH_TAC
+    \\ pop_assum (rewrite_tac o single)
+    \\ qspec_then `nR` (fn thm => fs [real_div, GSYM thm]) REAL_NEG_LMUL
+    \\ `nR * (nR - err) <> 0` by fs[REAL_ENTIRE]
+    \\ ‘err * inv (nR * (nR − err)) ≤ err * inv ((elo + -err) pow 2)’
+      by (
+      match_mp_tac REAL_LE_LMUL_IMP \\ conj_tac \\ simp[]
+      \\ rpt (qpat_x_assum `T` kall_tac)
+      \\ `0 < elo + - err` by REAL_ASM_ARITH_TAC
+      \\ `0 <  (elo + - err) * (elo + - err)` by fs[REAL_LT_MUL]
+      \\ match_mp_tac REAL_INV_LE_ANTIMONO_IMPR \\ conj_tac
+      >- (match_mp_tac REAL_LT_MUL \\ REAL_ASM_ARITH_TAC)
+      \\ conj_tac
+      >- (fs[POW_2])
+      \\ once_rewrite_tac [POW_2] \\ irule REAL_LE_MUL2 \\ REAL_ASM_ARITH_TAC)
+    \\ fs[REAL_INV_MUL'] \\ pop_assum mp_tac \\ fs[])
   >- (fs[]
       \\ `nR <= nF` by REAL_ASM_ARITH_TAC
       \\ `0 < nF` by REAL_ASM_ARITH_TAC
@@ -617,61 +613,61 @@ Proof
          >- (`- (nR * (nR - err)) <= - ((ehi + err) * (nR - err))`
                 by (once_rewrite_tac [REAL_NEG_RMUL] \\ match_mp_tac REAL_LE_RMUL_IMP \\ REAL_ASM_ARITH_TAC)
              \\ REAL_ASM_ARITH_TAC)))
-  >- (fs []
-      \\ `nR <= nF` by REAL_ASM_ARITH_TAC
-      \\ `0 < -nF /\ nF <> 0` by REAL_ASM_ARITH_TAC
-      \\ `0 < -nR /\ nR <> 0` by REAL_ASM_ARITH_TAC
-      \\ `inv (- nR) <= inv (- nF)`
-           by (match_mp_tac REAL_INV_LE_ANTIMONO_IMPR \\ conj_tac
-               \\ REAL_ASM_ARITH_TAC)
-      \\ `inv (- nR) - inv (- nF) <= 0` by REAL_ASM_ARITH_TAC
-      \\ `0 <= - (inv (- nR) - inv (-nR)) ` by REAL_ASM_ARITH_TAC
-      \\ `abs (- (inv (- nR) - inv (- nF))) = - (inv (- nR) - inv (- nF))` by fs [ABS_REFL]
-      \\ `abs (inv (- nR) - inv (- nF)) = - (inv (- nR) - inv (- nF))` by metis_tac[ABS_NEG]
-      \\ `inv (- nR) - inv (- nF) = inv nF - inv nR` by (fs[GSYM REAL_NEG_INV, real_sub] \\ REAL_ASM_ARITH_TAC)
-      \\ `abs (inv nF - inv nR) = - (inv (- nR) - inv (- nF))` by fs[]
-      \\ `abs (inv nR - inv nF) = - (inv (- nR) - inv (- nF))` by fs[ABS_SUB]
-      \\ simp[real_sub, REAL_NEG_ADD]
-      \\ rpt (qpat_x_assum `abs v = v'` kall_tac)
-      \\ `- (1 / nF) = 1 / - nF` by (fs [real_div] \\ match_mp_tac REAL_NEG_INV \\ REAL_ASM_ARITH_TAC)
-      \\ simp[]
-      \\ qspec_then `1 / -(nR + err) + 1 / nR` match_mp_tac real_le_trans2 \\ conj_tac
-      >- (once_rewrite_tac [REAL_ADD_COMM] \\ rewrite_tac [REAL_INV_1OVER]
-          \\ pop_assum (rewrite_tac o single)
-          \\ match_mp_tac REAL_LE_LADD_IMP
-          \\ `0 < - (nR + err) /\ nF <= nR + err` by REAL_ASM_ARITH_TAC
-          \\ simp [REAL_LE_NEG, REAL_INV_LE_ANTIMONO])
-      >- (`- nR <> 0 /\ nR - err <> 0` by REAL_ASM_ARITH_TAC
-          \\ `- (nR + err) <> 0` by REAL_ASM_ARITH_TAC
-          \\ ‘1 / - (nR + err) + 1 / nR = (1 * nR + - (nR + err) * 1) / (- (nR + err) * nR)’
-             by (fs[REAL_ADD_RAT])
-          \\ pop_assum (rewrite_tac o single)
-          \\ `nR + - (nR + err) = - err` by REAL_ASM_ARITH_TAC
-          \\ rewrite_tac [REAL_MUL_RID, REAL_MUL_LID, real_div, GSYM REAL_NEG_RMUL, GSYM REAL_NEG_LMUL]
-          \\ pop_assum (rewrite_tac o single)
-          \\ `inv (- ((nR + err) * nR)) = - (inv ((nR + err) * nR))`
-               by (match_mp_tac (GSYM REAL_NEG_INV) \\ fs[] \\ REAL_ASM_ARITH_TAC)
-          \\ pop_assum (rewrite_tac o single)
-          \\ simp[GSYM REAL_NEG_RMUL, GSYM REAL_NEG_LMUL, REAL_NEG_NEG]
-          \\ match_mp_tac REAL_LE_LMUL_IMP \\ conj_tac \\ simp[]
-          \\ `0 < - (ehi + err)` by REAL_ASM_ARITH_TAC
-          \\ `0 < - (ehi + err) * -(ehi + err)` by (match_mp_tac REAL_LT_MUL \\ fs[])
-          \\ `0 < (ehi + err) * (ehi + err)` by REAL_ASM_ARITH_TAC
-          \\ `0 < - nR * - (nR + err)` by  (match_mp_tac REAL_LT_MUL \\ REAL_ASM_ARITH_TAC)
-          \\ `0 < nR * (nR + err)` by REAL_ASM_ARITH_TAC
-          \\ asm_rewrite_tac[GSYM REAL_NEG_RMUL]
-          \\ once_rewrite_tac [REAL_MUL_COMM]
-          \\ asm_rewrite_tac[REAL_NEG_INV, REAL_NEGNEG]
-          \\ match_mp_tac REAL_INV_LE_ANTIMONO_IMPR \\ conj_tac
-          \\ once_rewrite_tac [POW_2] \\ TRY (REAL_ASM_ARITH_TAC)
-          \\ conj_tac \\ TRY(REAL_ASM_ARITH_TAC)
-          \\ qspec_then `(nR + err) * (ehi + err)` match_mp_tac real_le_trans2
-          \\ conj_tac
-         >- (once_rewrite_tac [REAL_MUL_COMM]
-             \\ match_mp_tac REAL_MUL_LE_COMPAT_NEG_L \\ conj_tac \\ REAL_ASM_ARITH_TAC)
-         >- (`- (nR * (nR + err)) <= - ((ehi + err) * (nR + err))`
-                by (once_rewrite_tac [REAL_NEG_RMUL] \\ match_mp_tac REAL_LE_RMUL_IMP \\ REAL_ASM_ARITH_TAC)
-             \\ REAL_ASM_ARITH_TAC)))
+   \\ fs []
+   \\ `nR <= nF` by REAL_ASM_ARITH_TAC
+   \\ `0 < -nF /\ nF <> 0` by REAL_ASM_ARITH_TAC
+   \\ `0 < -nR /\ nR <> 0` by REAL_ASM_ARITH_TAC
+   \\ `inv (- nR) <= inv (- nF)`
+     by (match_mp_tac REAL_INV_LE_ANTIMONO_IMPR \\ conj_tac
+         \\ REAL_ASM_ARITH_TAC)
+   \\ `inv (- nR) - inv (- nF) <= 0` by REAL_ASM_ARITH_TAC
+   \\ `0 <= - (inv (- nR) - inv (-nR)) ` by REAL_ASM_ARITH_TAC
+   \\ `abs (- (inv (- nR) - inv (- nF))) = - (inv (- nR) - inv (- nF))` by fs [ABS_REFL]
+   \\ `abs (inv (- nR) - inv (- nF)) = - (inv (- nR) - inv (- nF))` by metis_tac[ABS_NEG]
+   \\ `inv (- nR) - inv (- nF) = inv nF - inv nR` by (fs[GSYM REAL_NEG_INV, real_sub] \\ REAL_ASM_ARITH_TAC)
+   \\ `abs (inv nF - inv nR) = - (inv (- nR) - inv (- nF))` by fs[]
+   \\ `abs (inv nR - inv nF) = - (inv (- nR) - inv (- nF))` by fs[ABS_SUB]
+   \\ simp[real_sub, REAL_NEG_ADD]
+   \\ rpt (qpat_x_assum `abs v = v'` kall_tac)
+   \\ `- (1 / nF) = 1 / - nF` by (fs [real_div] \\ match_mp_tac REAL_NEG_INV \\ REAL_ASM_ARITH_TAC)
+   \\ simp[]
+   \\ qspec_then `1 / -(nR + err) + 1 / nR` match_mp_tac real_le_trans2 \\ conj_tac
+   >- (once_rewrite_tac [REAL_ADD_COMM] \\ rewrite_tac [REAL_INV_1OVER]
+       \\ pop_assum (rewrite_tac o single)
+       \\ match_mp_tac REAL_LE_LADD_IMP
+       \\ `0 < - (nR + err) /\ nF <= nR + err` by REAL_ASM_ARITH_TAC
+       \\ simp [REAL_LE_NEG, REAL_INV_LE_ANTIMONO, REAL_MUL_LNEG])
+   >- (`- nR <> 0 /\ nR - err <> 0` by REAL_ASM_ARITH_TAC
+       \\ `- (nR + err) <> 0` by REAL_ASM_ARITH_TAC
+       \\ ‘1 / - (nR + err) + 1 / nR = (1 * nR + - (nR + err) * 1) / (- (nR + err) * nR)’
+         by (fs[REAL_ADD_RAT])
+       \\ pop_assum (rewrite_tac o single)
+       \\ rewrite_tac [REAL_MUL_RID, REAL_MUL_LID, real_div, GSYM REAL_NEG_RMUL, GSYM REAL_NEG_LMUL]
+       \\ `nR + - (nR + err) = - err` by REAL_ASM_ARITH_TAC
+       \\ pop_assum (rewrite_tac o single)
+       \\ `inv (- ((nR + err) * nR)) = - (inv ((nR + err) * nR))`
+         by (match_mp_tac (GSYM REAL_NEG_INV) \\ fs[] \\ REAL_ASM_ARITH_TAC)
+       \\ pop_assum (rewrite_tac o single)
+       \\ simp[GSYM REAL_NEG_RMUL, GSYM REAL_NEG_LMUL, REAL_NEG_NEG]
+       \\ match_mp_tac REAL_LE_LMUL_IMP \\ conj_tac \\ simp[]
+       \\ `0 < - (ehi + err)` by REAL_ASM_ARITH_TAC
+       \\ `0 < - (ehi + err) * -(ehi + err)` by (match_mp_tac REAL_LT_MUL \\ fs[])
+       \\ `0 < (ehi + err) * (ehi + err)` by REAL_ASM_ARITH_TAC
+       \\ `0 < - nR * - (nR + err)` by  (match_mp_tac REAL_LT_MUL \\ REAL_ASM_ARITH_TAC)
+       \\ `0 < nR * (nR + err)` by REAL_ASM_ARITH_TAC
+       \\ asm_rewrite_tac[GSYM REAL_NEG_RMUL]
+       \\ once_rewrite_tac [REAL_MUL_COMM]
+       \\ asm_rewrite_tac[REAL_NEG_INV, REAL_NEGNEG, GSYM REAL_INV_1OVER]
+       \\ match_mp_tac REAL_INV_LE_ANTIMONO_IMPR \\ conj_tac
+       \\ once_rewrite_tac [POW_2] \\ TRY (REAL_ASM_ARITH_TAC)
+       \\ conj_tac \\ TRY(REAL_ASM_ARITH_TAC)
+       \\ qspec_then `(nR + err) * (ehi + err)` match_mp_tac real_le_trans2
+       \\ conj_tac
+       >- (once_rewrite_tac [REAL_MUL_COMM]
+           \\ match_mp_tac REAL_MUL_LE_COMPAT_NEG_L \\ conj_tac \\ REAL_ASM_ARITH_TAC)
+       \\ `- (nR * (nR + err)) <= - ((ehi + err) * (nR + err))`
+         by (once_rewrite_tac [REAL_NEG_RMUL] \\ match_mp_tac REAL_LE_RMUL_IMP \\ REAL_ASM_ARITH_TAC)
+       \\ REAL_ASM_ARITH_TAC)
 QED
 
 val _  = export_theory();
diff --git a/hol4/ErrorValidationScript.sml b/hol4/ErrorValidationScript.sml
index 9006a7bab503f1977f72cd1eda1d8df36169cd4c..5ad5d16b06967e07fc462ac387dbbba9773135fe 100644
--- a/hol4/ErrorValidationScript.sml
+++ b/hol4/ErrorValidationScript.sml
@@ -366,7 +366,7 @@ QED
 
 local
   val trivial_up_tac =
-    fs[REAL_LE_ADD] (* remove lhs of addition *)
+    irule REAL_LE_LADD_IMP (* remove lhs of addition *)
     (* Try first proving by transitivity only *)
     \\ TRY (
        irule REAL_LE_RMUL_IMP \\ fs[] \\ NO_TAC)
@@ -470,7 +470,8 @@ Proof
        (* 0 ≤ -(nR2 + err2) *)
        \\ irule REAL_LE_TRANS
        \\ qexists_tac `nR1 * nR2 + (nR1 + err1) * - (nR2 + err2)` \\ conj_tac
-       >- trivial_up_tac
+       >- (irule REAL_LE_LADD_IMP
+           \\ irule REAL_LE_RMUL_IMP \\ fs[])
        \\ real_rewrite
             `nR1 * nR2 + (nR1 + err1) * - (nR2 + err2) = - nR1 * err2 + - nR2 * err1 + - err1 * err2`
        \\ simp[] \\ irule REAL_LE_ADD2 \\ conj_tac \\ TRY(simp[GSYM REAL_NEG_LMUL])
@@ -479,7 +480,9 @@ Proof
     >- (
      irule REAL_LE_TRANS
      \\ qexists_tac `nR1 * nR2 + nF1 * - (nR2 - err2)` \\ conj_tac
-     >- trivial_up_tac
+     >- (irule REAL_LE_LADD_IMP \\ once_rewrite_tac [REAL_NEG_RMUL]
+         \\ irule REAL_LE_LMUL_IMP \\ fs[real_sub]
+         \\ qpat_x_assum ‘∀ x. _’ kall_tac \\ REAL_ASM_ARITH_TAC)
      \\ qspecl_then [`- (nR2 - err2)`, `0`] DISJ_CASES_TAC REAL_LTE_TOTAL
      (* -(nR2 - err2) < 0 *)
      >- (irule REAL_LE_TRANS
@@ -494,7 +497,7 @@ Proof
      >- (
        irule REAL_LE_TRANS
        \\ qexists_tac `nR1 * nR2 + (nR1 + err1) * - (nR2 - err2)` \\ conj_tac
-       >- trivial_up_tac
+       >- (irule REAL_LE_LADD_IMP \\ irule REAL_LE_RMUL_IMP \\ fs[])
        \\ real_rewrite
             `nR1 * nR2 + (nR1 + err1) * - (nR2 - err2) = nR1 * err2 + - nR2 * err1 + err1 * err2`
        \\ simp[] \\ irule REAL_LE_ADD2 \\ conj_tac \\ simp[GSYM REAL_NEG_LMUL])))
diff --git a/hol4/TypeValidatorScript.sml b/hol4/TypeValidatorScript.sml
index 3705382981c0d5f583c5199bd5b820d0c9085d41..4e6676a30108e16321bd4a434f8045f9f076faa5 100644
--- a/hol4/TypeValidatorScript.sml
+++ b/hol4/TypeValidatorScript.sml
@@ -219,6 +219,8 @@ val by_monotonicity =
   \\ fs[FloverMapTree_mem_def]
   \\ EVERY_CASE_TAC \\ fs[];
 
+val _ = temp_delsimps ["lift_disj_eq", "lift_imp_disj"]
+
 Theorem getValidMap_mono:
   ∀ e Gamma akk res.
     getValidMap Gamma e akk = Succes res ⇒