File: integer.mod

package info (click to toggle)
cafeobj 1.6.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, sid
  • size: 19,900 kB
  • sloc: lisp: 85,055; sh: 659; makefile: 437; perl: 147
file content (71 lines) | stat: -rw-r--r-- 1,583 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
-- FILE: /home/diacon/LANG/Cafe/prog/integer.mod
-- CONTENTS: ADT specification of integers;
--           spec (almost) operationally complete
-- AUTHOR: Michihiro Matsumoto
-- DIFFICULTY: *

mod! DINT {
  [ DNat < DInt ]
  op 0 : -> DNat { constr }
  op s_ : DNat -> DNat { constr }
  op s_ : DInt -> DInt { constr }
  op p_ : DInt -> DInt { constr }

  op _+_ : DInt DInt -> DInt
  op _+_ : DNat DNat -> DNat
  op _-_ : DInt DInt -> DInt
  op -_ : DInt -> DInt

  op _<_ : DNat DNat -> Bool
  op _<=_ : DNat DNat -> Bool
  op _<_ : DInt DInt -> Bool
  op _<=_ : DInt DInt -> Bool 
        

  vars I J I' J' : DInt
  eq s p I = I .
  eq p s I = I .

  eq I + 0 = I .
  eq 0 + I = I .
  eq I + s J = s(I + J) .
  eq s I + J = s(I + J) .
  eq I + p J = p(I + J) .
  eq p I + J = p(I + J) .

  eq I - 0 = I .
  eq 0 - I = - I .
  eq I - s J = p(I - J) .
  eq s I - J = s(I - J) .
  eq I - p J = s(I - J) .
  eq p I - J = p(I - J) .

  eq - 0 = 0 .
  eq - (s I) = p (- I) .
  eq - (p I) = s (- I) .

  vars M N K L : DInt
  eq 0 < 0 = false .
  eq 0 < s N = true .
  eq s M < 0 = false .
  eq s M < s N = M < N .
  ceq M <= N = true if M < N .
  ceq M <= N = true if M == N .
  ceq M <= N = false if N < M .
  eq M <= (M + N) = true .
  eq N <= (M + N) = true .

  eq (- I) < (- J) = J < I .
  eq (- I) <= (- J) = J <= I .
  eq (- M) <= N = true .
  eq N <= (- M) = false .
  eq N < (- M) = false .
  ceq (- M) < N = true if (0 < M) or (0 < N) .
  
  ceq (I + J) <= (I' + J') = true if (I <= I') and (J <= J') .
}

--
eof
--
$Id: integer.mod,v 1.1.1.1 2003-06-19 08:30:10 sawada Exp $