(* Title : HOL/Real/Hyperreal/HyperDef.thy ID : $Id: HyperDef.thy,v 1.2 1999/08/19 16:36:49 paulson Exp $ Author : Jacques D. Fleuriot Copyright : 1998 University of Cambridge Description : Construction of hyperreals using ultrafilters *) HyperDef = Filter + RealBin + consts FreeUltrafilterNat :: nat set set defs FreeUltrafilterNat_def "FreeUltrafilterNat == (@U. U : FreeUltrafilter (UNIV:: nat set))" constdefs hyprel :: "((nat=>real)*(nat=>real)) set" "hyprel == {p. ? X Y. p = ((X::nat=>real),Y) & {n::nat. X(n) = Y(n)}: FreeUltrafilterNat}" typedef hypreal = "{x::nat=>real. True}/hyprel" (Equiv.quotient_def) instance hypreal :: {ord,plus,times,minus} consts "0hr" :: hypreal ("0hr") "1hr" :: hypreal ("1hr") "whr" :: hypreal ("whr") "ehr" :: hypreal ("ehr") defs hypreal_zero_def "0hr == Abs_hypreal(hyprel^^{%n::nat. 0r})" hypreal_one_def "1hr == Abs_hypreal(hyprel^^{%n::nat. 1r})" (* an infinite number = [<1,2,3,...>] *) omega_def "whr == Abs_hypreal(hyprel^^{%n::nat. real_of_posnat n})" (* an infinitesimal number = [<1,1/2,1/3,...>] *) epsilon_def "ehr == Abs_hypreal(hyprel^^{%n::nat. rinv(real_of_posnat n)})" hypreal_minus_def "- P == Abs_hypreal(UN X: Rep_hypreal(P). hyprel^^{%n::nat. - (X n)})" hypreal_diff_def "x - y == x + -(y::hypreal)" constdefs hypreal_of_real :: real => hypreal ("&# _" [80] 80) "hypreal_of_real r == Abs_hypreal(hyprel^^{%n::nat. r})" hrinv :: hypreal => hypreal "hrinv(P) == Abs_hypreal(UN X: Rep_hypreal(P). hyprel^^{%n. if X n = 0r then 0r else rinv(X n)})" (* n::nat --> (n+1)::hypreal *) hypreal_of_posnat :: nat => hypreal ("&&# _" [80] 80) "hypreal_of_posnat n == (hypreal_of_real(real_of_preal (preal_of_prat(prat_of_pnat(pnat_of_nat n)))))" hypreal_of_nat :: nat => hypreal ("&&## _" [80] 80) "hypreal_of_nat n == hypreal_of_posnat n + -1hr" defs hypreal_add_def "P + Q == Abs_hypreal(UN X:Rep_hypreal(P). UN Y:Rep_hypreal(Q). hyprel^^{%n::nat. X n + Y n})" hypreal_mult_def "P * Q == Abs_hypreal(UN X:Rep_hypreal(P). UN Y:Rep_hypreal(Q). hyprel^^{%n::nat. X n * Y n})" hypreal_less_def "P < (Q::hypreal) == EX X Y. X: Rep_hypreal(P) & Y: Rep_hypreal(Q) & {n::nat. X n < Y n} : FreeUltrafilterNat" hypreal_le_def "P <= (Q::hypreal) == ~(Q < P)" end