src/HOL/Integ/Integ.thy
changeset 1476 608483c2122a
parent 1374 5e407f2a3323
child 1559 9ba0906aa60d
equal deleted inserted replaced
1475:7f5a4cd08209 1476:608483c2122a
     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