HOL/Arith: definition of diff now uses pred, not nat_rec
authorlcp
Wed, 25 May 1994 13:03:19 +0200
changeset 77 d64593bb95d3
parent 76 fb4fe9f8c3cd
child 78 f5e5a6b8c4d3
HOL/Arith: definition of diff now uses pred, not nat_rec
Arith.ML
Arith.thy
--- 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))))"