0
|
1 |
(* Title: ZF/bin
|
|
2 |
ID: $Id$
|
|
3 |
Author: Lawrence C Paulson, Cambridge University Computer Laboratory
|
|
4 |
Copyright 1993 University of Cambridge
|
|
5 |
|
|
6 |
Arithmetic on binary integers.
|
|
7 |
*)
|
|
8 |
|
|
9 |
BinFn = Integ + Bin +
|
|
10 |
consts
|
|
11 |
bin_rec :: "[i, i, i, [i,i,i]=>i] => i"
|
|
12 |
integ_of_bin :: "i=>i"
|
|
13 |
bin_succ :: "i=>i"
|
|
14 |
bin_pred :: "i=>i"
|
|
15 |
bin_minus :: "i=>i"
|
|
16 |
bin_add,bin_mult :: "[i,i]=>i"
|
|
17 |
|
|
18 |
rules
|
|
19 |
|
|
20 |
bin_rec_def
|
|
21 |
"bin_rec(z,a,b,h) == \
|
|
22 |
\ Vrec(z, %z g. bin_case(a, b, %w x. h(w, x, g`w), z))"
|
|
23 |
|
|
24 |
integ_of_bin_def
|
|
25 |
"integ_of_bin(w) == bin_rec(w, $#0, $~($#1), %w x r. $#x $+ r $+ r)"
|
|
26 |
|
|
27 |
bin_succ_def
|
|
28 |
"bin_succ(w0) == bin_rec(w0, Plus$$1, Plus, %w x r. cond(x, r$$0, w$$1))"
|
|
29 |
|
|
30 |
bin_pred_def
|
|
31 |
"bin_pred(w0) == \
|
|
32 |
\ bin_rec(w0, Minus, Minus$$0, %w x r. cond(x, w$$0, r$$1))"
|
|
33 |
|
|
34 |
bin_minus_def
|
|
35 |
"bin_minus(w0) == \
|
|
36 |
\ bin_rec(w0, Plus, Plus$$1, %w x r. cond(x, bin_pred(r$$0), r$$0))"
|
|
37 |
|
|
38 |
bin_add_def
|
|
39 |
"bin_add(v0,w0) == \
|
|
40 |
\ bin_rec(v0, \
|
|
41 |
\ lam w:bin. w, \
|
|
42 |
\ lam w:bin. bin_pred(w), \
|
|
43 |
\ %v x r. lam w1:bin. \
|
|
44 |
\ bin_rec(w1, v$$x, bin_pred(v$$x), \
|
|
45 |
\ %w y s. (r`cond(x and y, bin_succ(w), w)) \
|
|
46 |
\ $$ (x xor y))) ` w0"
|
|
47 |
|
|
48 |
bin_mult_def
|
|
49 |
"bin_mult(v0,w) == \
|
|
50 |
\ bin_rec(v0, Plus, bin_minus(w), \
|
|
51 |
\ %v x r. cond(x, bin_add(r$$0,w), r$$0))"
|
|
52 |
end
|