# HG changeset patch # User lcp # Date 769863799 -7200 # Node ID d64593bb95d3dff06560ed942b950d4aa4cccd76 # Parent fb4fe9f8c3cd29d5d769096ba9296eb25da7ca63 HOL/Arith: definition of diff now uses pred, not nat_rec diff -r fb4fe9f8c3cd -r d64593bb95d3 Arith.ML --- 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)]); diff -r fb4fe9f8c3cd -r d64593bb95d3 Arith.thy --- 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