src/HOL/Real/PRat.thy
author wenzelm
Fri, 03 Jul 1998 18:05:03 +0200
changeset 5126 01cbf154d926
parent 5078 7b5ea59c0275
child 7077 60b098bb8b8a
permissions -rw-r--r--
theory Main includes everything;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5078
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     1
(*  Title       : PRat.thy
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     2
    Author      : Jacques D. Fleuriot
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     3
    Copyright   : 1998  University of Cambridge
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     4
    Description : The positive rationals
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     5
*) 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     6
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     7
PRat = PNat + Equiv +
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     8
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
     9
constdefs
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    10
    ratrel   ::  "((pnat * pnat) * (pnat * pnat)) set"
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    11
    "ratrel  ==  {p. ? x1 y1 x2 y2. p=((x1::pnat,y1),(x2,y2)) & x1*y2 = x2*y1}" 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    12
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    13
typedef prat = "{x::(pnat*pnat).True}/ratrel"          (Equiv.quotient_def)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    14
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    15
instance
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    16
   prat  :: {ord,plus,times}
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    17
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    18
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    19
constdefs
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    20
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    21
  prat_pnat :: pnat => prat              ("$#_" [80] 80)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    22
  "$# m     == Abs_prat(ratrel^^{(m,Abs_pnat 1)})"
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    23
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    24
  qinv      :: prat => prat
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    25
  "qinv(Q)  == Abs_prat(UN p:Rep_prat(Q). split (%x y. ratrel^^{(y,x)}) p)" 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    26
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    27
defs
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    28
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    29
  prat_add_def  
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    30
  "P + Q == Abs_prat(UN p1:Rep_prat(P). UN p2:Rep_prat(Q).
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    31
                split(%x1 y1. split(%x2 y2. ratrel^^{(x1*y2 + x2*y1, y1*y2)}) p2) p1)"
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    32
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    33
  prat_mult_def  
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    34
  "P * Q == Abs_prat(UN p1:Rep_prat(P). UN p2:Rep_prat(Q).
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    35
                split(%x1 y1. split(%x2 y2. ratrel^^{(x1*x2, y1*y2)}) p2) p1)"
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    36
 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    37
  (*** Gleason p. 119 ***)
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    38
  prat_less_def
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    39
  "P < (Q::prat) == ? T. P + T = Q"
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    40
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    41
  prat_le_def
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    42
  "P <= (Q::prat) == ~(Q < P)" 
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    43
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    44
end
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    45
  
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    46
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    47
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    48
7b5ea59c0275 Installation of target HOL-Real
paulson
parents:
diff changeset
    49