14 consts |
14 consts |
15 pred :: nat => nat |
15 pred :: nat => nat |
16 div, mod :: [nat, nat] => nat (infixl 70) |
16 div, mod :: [nat, nat] => nat (infixl 70) |
17 |
17 |
18 defs |
18 defs |
19 pred_def "pred(m) == nat_rec m 0 (%n r.n)" |
19 pred_def "pred(m) == nat_rec 0 (%n r.n) m" |
20 add_def "m+n == nat_rec m n (%u v. Suc(v))" |
20 add_def "m+n == nat_rec n (%u v. Suc(v)) m" |
21 diff_def "m-n == nat_rec n m (%u v. pred(v))" |
21 diff_def "m-n == nat_rec m (%u v. pred(v)) n" |
22 mult_def "m*n == nat_rec m 0 (%u v. n + v)" |
22 mult_def "m*n == nat_rec 0 (%u v. n + v) m" |
23 |
23 |
24 mod_def "m mod n == wfrec (trancl pred_nat) |
24 mod_def "m mod n == wfrec (trancl pred_nat) |
25 (%f j. if j<n then j else f (j-n)) m" |
25 (%f j. if j<n then j else f (j-n)) m" |
26 div_def "m div n == wfrec (trancl pred_nat) |
26 div_def "m div n == wfrec (trancl pred_nat) |
27 (%f j. if j<n then 0 else Suc (f (j-n))) m" |
27 (%f j. if j<n then 0 else Suc (f (j-n))) m" |
28 end |
28 end |
29 |
29 |
30 (*"Difference" is subtraction of natural numbers. |
30 (*"Difference" is subtraction of natural numbers. |
31 There are no negative numbers; we have |
31 There are no negative numbers; we have |
32 m - n = 0 iff m<=n and m - n = Suc(k) iff m)n. |
32 m - n = 0 iff m<=n and m - n = Suc(k) iff m)n. |
33 Also, nat_rec(m, 0, %z w.z) is pred(m). *) |
33 Also, nat_rec(0, %z w.z, m) is pred(m). *) |
34 |
34 |