equal
deleted
inserted
replaced
1 (* Title: Integ.thy |
1 (* Title: Integ.thy |
2 ID: $Id$ |
2 ID: $Id$ |
3 Authors: Riccardo Mattolini, Dip. Sistemi e Informatica |
3 Authors: Riccardo Mattolini, Dip. Sistemi e Informatica |
4 Lawrence C Paulson, Cambridge University Computer Laboratory |
4 Lawrence C Paulson, Cambridge University Computer Laboratory |
5 Copyright 1994 Universita' di Firenze |
5 Copyright 1994 Universita' di Firenze |
6 Copyright 1993 University of Cambridge |
6 Copyright 1993 University of Cambridge |
7 |
7 |
8 The integers as equivalence classes over nat*nat. |
8 The integers as equivalence classes over nat*nat. |
9 *) |
9 *) |
14 |
14 |
15 defs |
15 defs |
16 intrel_def |
16 intrel_def |
17 "intrel == {p. ? x1 y1 x2 y2. p=((x1::nat,y1),(x2,y2)) & x1+y2 = x2+y1}" |
17 "intrel == {p. ? x1 y1 x2 y2. p=((x1::nat,y1),(x2,y2)) & x1+y2 = x2+y1}" |
18 |
18 |
19 subtype (Integ) |
19 typedef (Integ) |
20 int = "{x::(nat*nat).True}/intrel" (Equiv.quotient_def) |
20 int = "{x::(nat*nat).True}/intrel" (Equiv.quotient_def) |
21 |
21 |
22 instance |
22 instance |
23 int :: {ord, plus, times, minus} |
23 int :: {ord, plus, times, minus} |
24 |
24 |
25 consts |
25 consts |
26 zNat :: nat set |
26 zNat :: nat set |
27 znat :: nat => int ("$# _" [80] 80) |
27 znat :: nat => int ("$# _" [80] 80) |
28 zminus :: int => int ("$~ _" [80] 80) |
28 zminus :: int => int ("$~ _" [80] 80) |
29 znegative :: int => bool |
29 znegative :: int => bool |
30 zmagnitude :: int => int |
30 zmagnitude :: int => int |
31 zdiv,zmod :: [int,int]=>int (infixl 70) |
31 zdiv,zmod :: [int,int]=>int (infixl 70) |
32 zpred,zsuc :: int=>int |
32 zpred,zsuc :: int=>int |
33 |
33 |
35 zNat_def "zNat == {x::nat. True}" |
35 zNat_def "zNat == {x::nat. True}" |
36 |
36 |
37 znat_def "$# m == Abs_Integ(intrel ^^ {(m,0)})" |
37 znat_def "$# m == Abs_Integ(intrel ^^ {(m,0)})" |
38 |
38 |
39 zminus_def |
39 zminus_def |
40 "$~ Z == Abs_Integ(UN p:Rep_Integ(Z). split (%x y. intrel^^{(y,x)}) p)" |
40 "$~ Z == Abs_Integ(UN p:Rep_Integ(Z). split (%x y. intrel^^{(y,x)}) p)" |
41 |
41 |
42 znegative_def |
42 znegative_def |
43 "znegative(Z) == EX x y. x<y & (x,y::nat):Rep_Integ(Z)" |
43 "znegative(Z) == EX x y. x<y & (x,y::nat):Rep_Integ(Z)" |
44 |
44 |
45 zmagnitude_def |
45 zmagnitude_def |