--- a/Arith.ML Wed May 25 12:43:50 1994 +0200
+++ b/Arith.ML Wed May 25 13:03:19 1994 +0200
@@ -21,12 +21,14 @@
val diff_0 = diff_def RS def_nat_rec_0;
-val diff_0_eq_0 = prove_goalw Arith.thy [diff_def] "0 - n = 0"
+val diff_0_eq_0 = prove_goalw Arith.thy [diff_def, pred_def]
+ "0 - n = 0"
(fn _ => [nat_ind_tac "n" 1, ALLGOALS(asm_simp_tac nat_ss)]);
(*Must simplify BEFORE the induction!! (Else we get a critical pair)
Suc(m) - Suc(n) rewrites to pred(Suc(m) - n) *)
-val diff_Suc_Suc = prove_goalw Arith.thy [diff_def] "Suc(m) - Suc(n) = m - n"
+val diff_Suc_Suc = prove_goalw Arith.thy [diff_def, pred_def]
+ "Suc(m) - Suc(n) = m - n"
(fn _ =>
[simp_tac nat_ss 1, nat_ind_tac "n" 1, ALLGOALS(asm_simp_tac nat_ss)]);
--- a/Arith.thy Wed May 25 12:43:50 1994 +0200
+++ b/Arith.thy Wed May 25 13:03:19 1994 +0200
@@ -15,8 +15,8 @@
div,mod :: "[nat,nat]=>nat" (infixl 70)
rules
pred_def "pred(m) == nat_rec(m, 0, %n r.n)"
- add_def "m+n == nat_rec(m, n, %u v.Suc(v))"
- diff_def "m-n == nat_rec(n, m, %u v. nat_rec(v, 0, %x y.x))"
+ add_def "m+n == nat_rec(m, n, %u v. Suc(v))"
+ diff_def "m-n == nat_rec(n, m, %u v. pred(v))"
mult_def "m*n == nat_rec(m, 0, %u v. n + v)"
mod_def "m mod n == wfrec(trancl(pred_nat), m, %j f. if(j<n, j, f(j-n)))"
div_def "m div n == wfrec(trancl(pred_nat), m, %j f. if(j<n, 0, Suc(f(j-n))))"