src/HOL/Hyperreal/HyperDef.thy
author paulson
Wed, 17 Dec 2003 16:23:52 +0100
changeset 14299 0b5c0b0a3eba
parent 13487 1291c6375c29
child 14301 48dc606749bd
permissions -rw-r--r--
converted Hyperreal/HyperDef to Isar script
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
     1
(*  Title       : HOL/Real/Hyperreal/HyperDef.thy
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
     2
    ID          : $Id$
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
     3
    Author      : Jacques D. Fleuriot
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
     4
    Copyright   : 1998  University of Cambridge
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
     5
    Description : Construction of hyperreals using ultrafilters
13487
wenzelm
parents: 12018
diff changeset
     6
*)
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
     7
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
     8
theory HyperDef = Filter + Real
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
     9
files ("fuf.ML"):  (*Warning: file fuf.ML refers to the name Hyperdef!*)
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    10
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    11
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    12
constdefs
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    13
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    14
  FreeUltrafilterNat   :: "nat set set"    ("\\<U>")
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    15
    "FreeUltrafilterNat == (SOME U. U \<in> FreeUltrafilter (UNIV:: nat set))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    16
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    17
  hyprel :: "((nat=>real)*(nat=>real)) set"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    18
    "hyprel == {p. \<exists>X Y. p = ((X::nat=>real),Y) &
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    19
                   {n::nat. X(n) = Y(n)}: FreeUltrafilterNat}"
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    20
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    21
typedef hypreal = "UNIV//hyprel" 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    22
    by (auto simp add: quotient_def) 
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    23
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    24
instance hypreal :: ord ..
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    25
instance hypreal :: zero ..
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    26
instance hypreal :: one ..
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    27
instance hypreal :: plus ..
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    28
instance hypreal :: times ..
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    29
instance hypreal :: minus ..
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    30
instance hypreal :: inverse ..
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    31
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    32
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    33
defs (overloaded)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    34
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    35
  hypreal_zero_def:
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11713
diff changeset
    36
  "0 == Abs_hypreal(hyprel``{%n::nat. (0::real)})"
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    37
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    38
  hypreal_one_def:
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11713
diff changeset
    39
  "1 == Abs_hypreal(hyprel``{%n::nat. (1::real)})"
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    40
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    41
  hypreal_minus_def:
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    42
  "- P == Abs_hypreal(\<Union>X \<in> Rep_hypreal(P). hyprel``{%n::nat. - (X n)})"
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    43
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    44
  hypreal_diff_def:
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    45
  "x - y == x + -(y::hypreal)"
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    46
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    47
  hypreal_inverse_def:
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    48
  "inverse P == Abs_hypreal(\<Union>X \<in> Rep_hypreal(P).
12018
ec054019c910 Numerals and simprocs for types real and hypreal. The abstract
paulson
parents: 11713
diff changeset
    49
                    hyprel``{%n. if X n = 0 then 0 else inverse (X n)})"
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    50
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    51
  hypreal_divide_def:
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    52
  "P / Q::hypreal == P * inverse Q"
13487
wenzelm
parents: 12018
diff changeset
    53
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    54
constdefs
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    55
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    56
  hypreal_of_real  :: "real => hypreal"
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10797
diff changeset
    57
  "hypreal_of_real r         == Abs_hypreal(hyprel``{%n::nat. r})"
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    58
10919
144ede948e58 renamings: real_of_nat, real_of_int -> (overloaded) real
paulson
parents: 10834
diff changeset
    59
  omega   :: hypreal   (*an infinite number = [<1,2,3,...>] *)
144ede948e58 renamings: real_of_nat, real_of_int -> (overloaded) real
paulson
parents: 10834
diff changeset
    60
  "omega == Abs_hypreal(hyprel``{%n::nat. real (Suc n)})"
13487
wenzelm
parents: 12018
diff changeset
    61
10919
144ede948e58 renamings: real_of_nat, real_of_int -> (overloaded) real
paulson
parents: 10834
diff changeset
    62
  epsilon :: hypreal   (*an infinitesimal number = [<1,1/2,1/3,...>] *)
144ede948e58 renamings: real_of_nat, real_of_int -> (overloaded) real
paulson
parents: 10834
diff changeset
    63
  "epsilon == Abs_hypreal(hyprel``{%n::nat. inverse (real (Suc n))})"
144ede948e58 renamings: real_of_nat, real_of_int -> (overloaded) real
paulson
parents: 10834
diff changeset
    64
144ede948e58 renamings: real_of_nat, real_of_int -> (overloaded) real
paulson
parents: 10834
diff changeset
    65
syntax (xsymbols)
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    66
  omega   :: hypreal   ("\<omega>")
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    67
  epsilon :: hypreal   ("\<epsilon>")
10919
144ede948e58 renamings: real_of_nat, real_of_int -> (overloaded) real
paulson
parents: 10834
diff changeset
    68
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    69
13487
wenzelm
parents: 12018
diff changeset
    70
defs
wenzelm
parents: 12018
diff changeset
    71
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    72
  hypreal_add_def:
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    73
  "P + Q == Abs_hypreal(\<Union>X \<in> Rep_hypreal(P). \<Union>Y \<in> Rep_hypreal(Q).
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10797
diff changeset
    74
                hyprel``{%n::nat. X n + Y n})"
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    75
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    76
  hypreal_mult_def:
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    77
  "P * Q == Abs_hypreal(\<Union>X \<in> Rep_hypreal(P). \<Union>Y \<in> Rep_hypreal(Q).
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 10797
diff changeset
    78
                hyprel``{%n::nat. X n * Y n})"
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    79
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    80
  hypreal_less_def:
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    81
  "P < (Q::hypreal) == \<exists>X Y. X \<in> Rep_hypreal(P) &
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    82
                               Y \<in> Rep_hypreal(Q) &
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    83
                               {n::nat. X n < Y n} \<in> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    84
  hypreal_le_def:
13487
wenzelm
parents: 12018
diff changeset
    85
  "P <= (Q::hypreal) == ~(Q < P)"
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
    86
14299
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    87
(*------------------------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    88
             Proof that the set of naturals is not finite
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    89
 ------------------------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    90
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    91
(*** based on James' proof that the set of naturals is not finite ***)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    92
lemma finite_exhausts [rule_format (no_asm)]: "finite (A::nat set) --> (\<exists>n. \<forall>m. Suc (n + m) \<notin> A)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    93
apply (rule impI)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    94
apply (erule_tac F = "A" in finite_induct)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    95
apply (blast , erule exE)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    96
apply (rule_tac x = "n + x" in exI)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    97
apply (rule allI , erule_tac x = "x + m" in allE)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    98
apply (auto simp add: add_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
    99
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   100
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   101
lemma finite_not_covers [rule_format (no_asm)]: "finite (A :: nat set) --> (\<exists>n. n \<notin>A)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   102
apply (rule impI , drule finite_exhausts)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   103
apply blast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   104
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   105
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   106
lemma not_finite_nat: "~ finite(UNIV:: nat set)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   107
apply (fast dest!: finite_exhausts)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   108
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   109
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   110
(*------------------------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   111
   Existence of free ultrafilter over the naturals and proof of various 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   112
   properties of the FreeUltrafilterNat- an arbitrary free ultrafilter
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   113
 ------------------------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   114
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   115
lemma FreeUltrafilterNat_Ex: "\<exists>U. U: FreeUltrafilter (UNIV::nat set)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   116
apply (rule not_finite_nat [THEN FreeUltrafilter_Ex])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   117
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   118
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   119
lemma FreeUltrafilterNat_mem: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   120
     "FreeUltrafilterNat: FreeUltrafilter(UNIV:: nat set)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   121
apply (unfold FreeUltrafilterNat_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   122
apply (rule FreeUltrafilterNat_Ex [THEN exE])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   123
apply (rule someI2)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   124
apply assumption+
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   125
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   126
declare FreeUltrafilterNat_mem [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   127
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   128
lemma FreeUltrafilterNat_finite: "finite x ==> x \<notin> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   129
apply (unfold FreeUltrafilterNat_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   130
apply (rule FreeUltrafilterNat_Ex [THEN exE])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   131
apply (rule someI2 , assumption)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   132
apply (blast dest: mem_FreeUltrafiltersetD1)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   133
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   134
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   135
lemma FreeUltrafilterNat_not_finite: "x: FreeUltrafilterNat ==> ~ finite x"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   136
apply (blast dest: FreeUltrafilterNat_finite)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   137
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   138
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   139
lemma FreeUltrafilterNat_empty: "{} \<notin> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   140
apply (unfold FreeUltrafilterNat_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   141
apply (rule FreeUltrafilterNat_Ex [THEN exE])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   142
apply (rule someI2 , assumption)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   143
apply (blast dest: FreeUltrafilter_Ultrafilter Ultrafilter_Filter Filter_empty_not_mem)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   144
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   145
declare FreeUltrafilterNat_empty [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   146
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   147
lemma FreeUltrafilterNat_Int: "[| X: FreeUltrafilterNat;  Y: FreeUltrafilterNat |]   
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   148
      ==> X Int Y \<in> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   149
apply (cut_tac FreeUltrafilterNat_mem)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   150
apply (blast dest: FreeUltrafilter_Ultrafilter Ultrafilter_Filter mem_FiltersetD1)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   151
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   152
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   153
lemma FreeUltrafilterNat_subset: "[| X: FreeUltrafilterNat;  X <= Y |]  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   154
      ==> Y \<in> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   155
apply (cut_tac FreeUltrafilterNat_mem)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   156
apply (blast dest: FreeUltrafilter_Ultrafilter Ultrafilter_Filter mem_FiltersetD2)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   157
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   158
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   159
lemma FreeUltrafilterNat_Compl: "X: FreeUltrafilterNat ==> -X \<notin> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   160
apply (safe)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   161
apply (drule FreeUltrafilterNat_Int , assumption)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   162
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   163
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   164
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   165
lemma FreeUltrafilterNat_Compl_mem: "X\<notin> FreeUltrafilterNat ==> -X \<in> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   166
apply (cut_tac FreeUltrafilterNat_mem [THEN FreeUltrafilter_iff [THEN iffD1]])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   167
apply (safe , drule_tac x = "X" in bspec)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   168
apply (auto simp add: UNIV_diff_Compl)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   169
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   170
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   171
lemma FreeUltrafilterNat_Compl_iff1: "(X \<notin> FreeUltrafilterNat) = (-X: FreeUltrafilterNat)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   172
apply (blast dest: FreeUltrafilterNat_Compl FreeUltrafilterNat_Compl_mem)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   173
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   174
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   175
lemma FreeUltrafilterNat_Compl_iff2: "(X: FreeUltrafilterNat) = (-X \<notin> FreeUltrafilterNat)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   176
apply (auto simp add: FreeUltrafilterNat_Compl_iff1 [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   177
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   178
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   179
lemma FreeUltrafilterNat_UNIV: "(UNIV::nat set) \<in> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   180
apply (rule FreeUltrafilterNat_mem [THEN FreeUltrafilter_Ultrafilter, THEN Ultrafilter_Filter, THEN mem_FiltersetD4])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   181
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   182
declare FreeUltrafilterNat_UNIV [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   183
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   184
lemma FreeUltrafilterNat_Nat_set: "UNIV \<in> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   185
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   186
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   187
declare FreeUltrafilterNat_Nat_set [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   188
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   189
lemma FreeUltrafilterNat_Nat_set_refl: "{n. P(n) = P(n)} \<in> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   190
apply (simp (no_asm))
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   191
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   192
declare FreeUltrafilterNat_Nat_set_refl [intro]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   193
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   194
lemma FreeUltrafilterNat_P: "{n::nat. P} \<in> FreeUltrafilterNat ==> P"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   195
apply (rule ccontr)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   196
apply simp
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   197
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   198
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   199
lemma FreeUltrafilterNat_Ex_P: "{n. P(n)} \<in> FreeUltrafilterNat ==> \<exists>n. P(n)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   200
apply (rule ccontr)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   201
apply simp
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   202
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   203
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   204
lemma FreeUltrafilterNat_all: "\<forall>n. P(n) ==> {n. P(n)} \<in> FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   205
apply (auto intro: FreeUltrafilterNat_Nat_set)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   206
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   207
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   208
(*-------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   209
     Define and use Ultrafilter tactics
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   210
 -------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   211
use "fuf.ML"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   212
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   213
method_setup fuf = {*
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   214
    Method.ctxt_args (fn ctxt =>
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   215
        Method.METHOD (fn facts =>
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   216
            fuf_tac (Classical.get_local_claset ctxt,
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   217
                     Simplifier.get_local_simpset ctxt) 1)) *}
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   218
    "free ultrafilter tactic"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   219
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   220
method_setup ultra = {*
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   221
    Method.ctxt_args (fn ctxt =>
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   222
        Method.METHOD (fn facts =>
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   223
            ultra_tac (Classical.get_local_claset ctxt,
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   224
                       Simplifier.get_local_simpset ctxt) 1)) *}
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   225
    "ultrafilter tactic"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   226
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   227
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   228
(*-------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   229
  Now prove one further property of our free ultrafilter
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   230
 -------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   231
lemma FreeUltrafilterNat_Un: "X Un Y: FreeUltrafilterNat  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   232
      ==> X: FreeUltrafilterNat | Y: FreeUltrafilterNat"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   233
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   234
apply (ultra)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   235
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   236
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   237
(*-------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   238
   Properties of hyprel
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   239
 -------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   240
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   241
(** Proving that hyprel is an equivalence relation **)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   242
(** Natural deduction for hyprel **)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   243
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   244
lemma hyprel_iff: "((X,Y): hyprel) = ({n. X n = Y n}: FreeUltrafilterNat)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   245
apply (unfold hyprel_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   246
apply fast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   247
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   248
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   249
lemma hyprel_refl: "(x,x): hyprel"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   250
apply (unfold hyprel_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   251
apply (auto simp add: FreeUltrafilterNat_Nat_set)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   252
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   253
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   254
lemma hyprel_sym [rule_format (no_asm)]: "(x,y): hyprel --> (y,x):hyprel"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   255
apply (simp add: hyprel_def eq_commute) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   256
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   257
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   258
lemma hyprel_trans: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   259
      "[|(x,y): hyprel; (y,z):hyprel|] ==> (x,z):hyprel"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   260
apply (unfold hyprel_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   261
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   262
apply (ultra)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   263
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   264
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   265
lemma equiv_hyprel: "equiv UNIV hyprel"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   266
apply (simp add: equiv_def refl_def sym_def trans_def hyprel_refl)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   267
apply (blast intro: hyprel_sym hyprel_trans) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   268
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   269
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   270
(* (hyprel `` {x} = hyprel `` {y}) = ((x,y) \<in> hyprel) *)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   271
lemmas equiv_hyprel_iff =
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   272
    eq_equiv_class_iff [OF equiv_hyprel UNIV_I UNIV_I, simp] 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   273
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   274
lemma hyprel_in_hypreal: "hyprel``{x}:hypreal"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   275
apply (unfold hypreal_def hyprel_def quotient_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   276
apply blast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   277
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   278
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   279
lemma inj_on_Abs_hypreal: "inj_on Abs_hypreal hypreal"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   280
apply (rule inj_on_inverseI)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   281
apply (erule Abs_hypreal_inverse)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   282
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   283
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   284
declare inj_on_Abs_hypreal [THEN inj_on_iff, simp] 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   285
        hyprel_in_hypreal [simp] Abs_hypreal_inverse [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   286
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   287
declare equiv_hyprel [THEN eq_equiv_class_iff, simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   288
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   289
declare hyprel_iff [iff]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   290
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   291
lemmas eq_hyprelD = eq_equiv_class [OF _ equiv_hyprel]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   292
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   293
lemma inj_Rep_hypreal: "inj(Rep_hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   294
apply (rule inj_on_inverseI)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   295
apply (rule Rep_hypreal_inverse)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   296
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   297
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   298
lemma lemma_hyprel_refl: "x \<in> hyprel `` {x}"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   299
apply (unfold hyprel_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   300
apply (safe)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   301
apply (auto intro!: FreeUltrafilterNat_Nat_set)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   302
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   303
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   304
declare lemma_hyprel_refl [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   305
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   306
lemma hypreal_empty_not_mem: "{} \<notin> hypreal"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   307
apply (unfold hypreal_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   308
apply (auto elim!: quotientE equalityCE)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   309
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   310
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   311
declare hypreal_empty_not_mem [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   312
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   313
lemma Rep_hypreal_nonempty: "Rep_hypreal x \<noteq> {}"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   314
apply (cut_tac x = "x" in Rep_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   315
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   316
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   317
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   318
declare Rep_hypreal_nonempty [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   319
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   320
(*------------------------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   321
   hypreal_of_real: the injection from real to hypreal
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   322
 ------------------------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   323
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   324
lemma inj_hypreal_of_real: "inj(hypreal_of_real)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   325
apply (rule inj_onI)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   326
apply (unfold hypreal_of_real_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   327
apply (drule inj_on_Abs_hypreal [THEN inj_onD])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   328
apply (rule hyprel_in_hypreal)+
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   329
apply (drule eq_equiv_class)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   330
apply (rule equiv_hyprel)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   331
apply (simp_all add: split: split_if_asm) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   332
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   333
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   334
lemma eq_Abs_hypreal:
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   335
    "(!!x y. z = Abs_hypreal(hyprel``{x}) ==> P) ==> P"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   336
apply (rule_tac x1=z in Rep_hypreal [unfolded hypreal_def, THEN quotientE])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   337
apply (drule_tac f = "Abs_hypreal" in arg_cong)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   338
apply (force simp add: Rep_hypreal_inverse)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   339
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   340
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   341
(**** hypreal_minus: additive inverse on hypreal ****)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   342
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   343
lemma hypreal_minus_congruent: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   344
  "congruent hyprel (%X. hyprel``{%n. - (X n)})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   345
by (force simp add: congruent_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   346
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   347
lemma hypreal_minus: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   348
   "- (Abs_hypreal(hyprel``{%n. X n})) = Abs_hypreal(hyprel `` {%n. -(X n)})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   349
apply (unfold hypreal_minus_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   350
apply (rule_tac f = "Abs_hypreal" in arg_cong)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   351
apply (simp (no_asm) add: hyprel_in_hypreal [THEN Abs_hypreal_inverse] 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   352
               UN_equiv_class [OF equiv_hyprel hypreal_minus_congruent])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   353
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   354
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   355
lemma hypreal_minus_minus: "- (- z) = (z::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   356
apply (rule_tac z = "z" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   357
apply (simp (no_asm_simp) add: hypreal_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   358
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   359
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   360
declare hypreal_minus_minus [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   361
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   362
lemma inj_hypreal_minus: "inj(%r::hypreal. -r)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   363
apply (rule inj_onI)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   364
apply (drule_tac f = "uminus" in arg_cong)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   365
apply (simp add: hypreal_minus_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   366
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   367
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   368
lemma hypreal_minus_zero: "- 0 = (0::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   369
apply (unfold hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   370
apply (simp (no_asm) add: hypreal_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   371
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   372
declare hypreal_minus_zero [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   373
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   374
lemma hypreal_minus_zero_iff: "(-x = 0) = (x = (0::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   375
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   376
apply (auto simp add: hypreal_zero_def hypreal_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   377
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   378
declare hypreal_minus_zero_iff [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   379
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   380
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   381
(**** hyperreal addition: hypreal_add  ****)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   382
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   383
lemma hypreal_add_congruent2: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   384
    "congruent2 hyprel (%X Y. hyprel``{%n. X n + Y n})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   385
apply (unfold congruent2_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   386
apply (auto ); 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   387
apply ultra
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   388
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   389
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   390
lemma hypreal_add: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   391
  "Abs_hypreal(hyprel``{%n. X n}) + Abs_hypreal(hyprel``{%n. Y n}) =  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   392
   Abs_hypreal(hyprel``{%n. X n + Y n})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   393
apply (unfold hypreal_add_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   394
apply (simp add: UN_equiv_class2 [OF equiv_hyprel hypreal_add_congruent2])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   395
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   396
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   397
lemma hypreal_diff: "Abs_hypreal(hyprel``{%n. X n}) - Abs_hypreal(hyprel``{%n. Y n}) =  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   398
      Abs_hypreal(hyprel``{%n. X n - Y n})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   399
apply (simp (no_asm) add: hypreal_diff_def hypreal_minus hypreal_add)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   400
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   401
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   402
lemma hypreal_add_commute: "(z::hypreal) + w = w + z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   403
apply (rule_tac z = "z" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   404
apply (rule_tac z = "w" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   405
apply (simp (no_asm_simp) add: real_add_ac hypreal_add)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   406
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   407
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   408
lemma hypreal_add_assoc: "((z1::hypreal) + z2) + z3 = z1 + (z2 + z3)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   409
apply (rule_tac z = "z1" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   410
apply (rule_tac z = "z2" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   411
apply (rule_tac z = "z3" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   412
apply (simp (no_asm_simp) add: hypreal_add real_add_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   413
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   414
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   415
(*For AC rewriting*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   416
lemma hypreal_add_left_commute: "(x::hypreal)+(y+z)=y+(x+z)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   417
  apply (rule mk_left_commute [of "op +"])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   418
  apply (rule hypreal_add_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   419
  apply (rule hypreal_add_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   420
  done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   421
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   422
(* hypreal addition is an AC operator *)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   423
lemmas hypreal_add_ac =
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   424
       hypreal_add_assoc hypreal_add_commute hypreal_add_left_commute
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   425
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   426
lemma hypreal_add_zero_left: "(0::hypreal) + z = z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   427
apply (unfold hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   428
apply (rule_tac z = "z" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   429
apply (simp add: hypreal_add)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   430
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   431
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   432
lemma hypreal_add_zero_right: "z + (0::hypreal) = z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   433
apply (simp (no_asm) add: hypreal_add_zero_left hypreal_add_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   434
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   435
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   436
lemma hypreal_add_minus: "z + -z = (0::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   437
apply (unfold hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   438
apply (rule_tac z = "z" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   439
apply (simp add: hypreal_minus hypreal_add)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   440
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   441
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   442
lemma hypreal_add_minus_left: "-z + z = (0::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   443
apply (simp (no_asm) add: hypreal_add_commute hypreal_add_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   444
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   445
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   446
declare hypreal_add_minus [simp] hypreal_add_minus_left [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   447
    hypreal_add_zero_left [simp] hypreal_add_zero_right [simp] 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   448
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   449
lemma hypreal_minus_ex: "\<exists>y. (x::hypreal) + y = 0"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   450
apply (fast intro: hypreal_add_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   451
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   452
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   453
lemma hypreal_minus_ex1: "EX! y. (x::hypreal) + y = 0"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   454
apply (auto intro: hypreal_add_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   455
apply (drule_tac f = "%x. ya+x" in arg_cong)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   456
apply (simp add: hypreal_add_assoc [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   457
apply (simp add: hypreal_add_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   458
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   459
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   460
lemma hypreal_minus_left_ex1: "EX! y. y + (x::hypreal) = 0"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   461
apply (auto intro: hypreal_add_minus_left)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   462
apply (drule_tac f = "%x. x+ya" in arg_cong)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   463
apply (simp add: hypreal_add_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   464
apply (simp add: hypreal_add_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   465
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   466
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   467
lemma hypreal_add_minus_eq_minus: "x + y = (0::hypreal) ==> x = -y"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   468
apply (cut_tac z = "y" in hypreal_add_minus_left)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   469
apply (rule_tac x1 = "y" in hypreal_minus_left_ex1 [THEN ex1E])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   470
apply blast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   471
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   472
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   473
lemma hypreal_as_add_inverse_ex: "\<exists>y::hypreal. x = -y"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   474
apply (cut_tac x = "x" in hypreal_minus_ex)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   475
apply (erule exE , drule hypreal_add_minus_eq_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   476
apply fast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   477
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   478
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   479
lemma hypreal_minus_add_distrib: "-(x + (y::hypreal)) = -x + -y"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   480
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   481
apply (rule_tac z = "y" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   482
apply (auto simp add: hypreal_minus hypreal_add real_minus_add_distrib)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   483
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   484
declare hypreal_minus_add_distrib [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   485
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   486
lemma hypreal_minus_distrib1: "-(y + -(x::hypreal)) = x + -y"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   487
apply (simp (no_asm) add: hypreal_add_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   488
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   489
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   490
lemma hypreal_add_left_cancel: "((x::hypreal) + y = x + z) = (y = z)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   491
apply (safe)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   492
apply (drule_tac f = "%t.-x + t" in arg_cong)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   493
apply (simp add: hypreal_add_assoc [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   494
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   495
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   496
lemma hypreal_add_right_cancel: "(y + (x::hypreal)= z + x) = (y = z)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   497
apply (simp (no_asm) add: hypreal_add_commute hypreal_add_left_cancel)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   498
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   499
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   500
lemma hypreal_add_minus_cancelA: "z + ((- z) + w) = (w::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   501
apply (simp (no_asm) add: hypreal_add_assoc [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   502
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   503
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   504
lemma hypreal_minus_add_cancelA: "(-z) + (z + w) = (w::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   505
apply (simp (no_asm) add: hypreal_add_assoc [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   506
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   507
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   508
declare hypreal_add_minus_cancelA [simp] hypreal_minus_add_cancelA [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   509
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   510
(**** hyperreal multiplication: hypreal_mult  ****)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   511
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   512
lemma hypreal_mult_congruent2: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   513
    "congruent2 hyprel (%X Y. hyprel``{%n. X n * Y n})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   514
apply (unfold congruent2_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   515
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   516
apply (ultra)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   517
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   518
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   519
lemma hypreal_mult: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   520
  "Abs_hypreal(hyprel``{%n. X n}) * Abs_hypreal(hyprel``{%n. Y n}) =  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   521
   Abs_hypreal(hyprel``{%n. X n * Y n})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   522
apply (unfold hypreal_mult_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   523
apply (simp add: UN_equiv_class2 [OF equiv_hyprel hypreal_mult_congruent2])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   524
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   525
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   526
lemma hypreal_mult_commute: "(z::hypreal) * w = w * z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   527
apply (rule_tac z = "z" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   528
apply (rule_tac z = "w" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   529
apply (simp (no_asm_simp) add: hypreal_mult real_mult_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   530
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   531
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   532
lemma hypreal_mult_assoc: "((z1::hypreal) * z2) * z3 = z1 * (z2 * z3)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   533
apply (rule_tac z = "z1" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   534
apply (rule_tac z = "z2" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   535
apply (rule_tac z = "z3" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   536
apply (simp (no_asm_simp) add: hypreal_mult real_mult_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   537
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   538
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   539
lemma hypreal_mult_left_commute: "(z1::hypreal) * (z2 * z3) = z2 * (z1 * z3)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   540
  apply (rule mk_left_commute [of "op *"])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   541
  apply (rule hypreal_mult_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   542
  apply (rule hypreal_mult_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   543
  done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   544
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   545
(* hypreal multiplication is an AC operator *)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   546
lemmas hypreal_mult_ac =
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   547
       hypreal_mult_assoc hypreal_mult_commute hypreal_mult_left_commute
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   548
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   549
lemma hypreal_mult_1: "(1::hypreal) * z = z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   550
apply (unfold hypreal_one_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   551
apply (rule_tac z = "z" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   552
apply (simp add: hypreal_mult)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   553
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   554
declare hypreal_mult_1 [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   555
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   556
lemma hypreal_mult_1_right: "z * (1::hypreal) = z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   557
apply (simp (no_asm) add: hypreal_mult_commute hypreal_mult_1)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   558
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   559
declare hypreal_mult_1_right [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   560
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   561
lemma hypreal_mult_0: "0 * z = (0::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   562
apply (unfold hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   563
apply (rule_tac z = "z" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   564
apply (simp add: hypreal_mult)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   565
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   566
declare hypreal_mult_0 [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   567
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   568
lemma hypreal_mult_0_right: "z * 0 = (0::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   569
apply (simp (no_asm) add: hypreal_mult_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   570
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   571
declare hypreal_mult_0_right [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   572
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   573
lemma hypreal_minus_mult_eq1: "-(x * y) = -x * (y::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   574
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   575
apply (rule_tac z = "y" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   576
apply (auto simp add: hypreal_minus hypreal_mult real_mult_ac real_add_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   577
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   578
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   579
lemma hypreal_minus_mult_eq2: "-(x * y) = (x::hypreal) * -y"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   580
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   581
apply (rule_tac z = "y" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   582
apply (auto simp add: hypreal_minus hypreal_mult real_mult_ac real_add_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   583
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   584
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   585
(*Pull negations out*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   586
declare hypreal_minus_mult_eq2 [symmetric, simp] hypreal_minus_mult_eq1 [symmetric, simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   587
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   588
lemma hypreal_mult_minus_1: "(- (1::hypreal)) * z = -z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   589
apply (simp (no_asm))
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   590
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   591
declare hypreal_mult_minus_1 [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   592
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   593
lemma hypreal_mult_minus_1_right: "z * (- (1::hypreal)) = -z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   594
apply (subst hypreal_mult_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   595
apply (simp (no_asm))
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   596
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   597
declare hypreal_mult_minus_1_right [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   598
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   599
lemma hypreal_minus_mult_commute: "(-x) * y = (x::hypreal) * -y"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   600
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   601
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   602
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   603
(*-----------------------------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   604
    A few more theorems
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   605
 ----------------------------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   606
lemma hypreal_add_assoc_cong: "(z::hypreal) + v = z' + v' ==> z + (v + w) = z' + (v' + w)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   607
apply (simp (no_asm_simp) add: hypreal_add_assoc [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   608
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   609
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   610
lemma hypreal_add_mult_distrib: "((z1::hypreal) + z2) * w = (z1 * w) + (z2 * w)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   611
apply (rule_tac z = "z1" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   612
apply (rule_tac z = "z2" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   613
apply (rule_tac z = "w" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   614
apply (simp (no_asm_simp) add: hypreal_mult hypreal_add real_add_mult_distrib)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   615
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   616
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   617
lemma hypreal_add_mult_distrib2: "(w::hypreal) * (z1 + z2) = (w * z1) + (w * z2)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   618
apply (simp add: hypreal_mult_commute [of w] hypreal_add_mult_distrib)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   619
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   620
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   621
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   622
lemma hypreal_diff_mult_distrib: "((z1::hypreal) - z2) * w = (z1 * w) - (z2 * w)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   623
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   624
apply (unfold hypreal_diff_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   625
apply (simp (no_asm) add: hypreal_add_mult_distrib)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   626
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   627
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   628
lemma hypreal_diff_mult_distrib2: "(w::hypreal) * (z1 - z2) = (w * z1) - (w * z2)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   629
apply (simp add: hypreal_mult_commute [of w] hypreal_diff_mult_distrib)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   630
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   631
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   632
(*** one and zero are distinct ***)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   633
lemma hypreal_zero_not_eq_one: "0 \<noteq> (1::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   634
apply (unfold hypreal_zero_def hypreal_one_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   635
apply (auto simp add: real_zero_not_eq_one)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   636
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   637
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   638
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   639
(**** multiplicative inverse on hypreal ****)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   640
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   641
lemma hypreal_inverse_congruent: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   642
  "congruent hyprel (%X. hyprel``{%n. if X n = 0 then 0 else inverse(X n)})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   643
apply (unfold congruent_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   644
apply (auto , ultra)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   645
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   646
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   647
lemma hypreal_inverse: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   648
      "inverse (Abs_hypreal(hyprel``{%n. X n})) =  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   649
       Abs_hypreal(hyprel `` {%n. if X n = 0 then 0 else inverse(X n)})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   650
apply (unfold hypreal_inverse_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   651
apply (rule_tac f = "Abs_hypreal" in arg_cong)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   652
apply (simp (no_asm) add: hyprel_in_hypreal [THEN Abs_hypreal_inverse] 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   653
           UN_equiv_class [OF equiv_hyprel hypreal_inverse_congruent])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   654
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   655
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   656
lemma HYPREAL_INVERSE_ZERO: "inverse 0 = (0::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   657
apply (simp (no_asm) add: hypreal_inverse hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   658
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   659
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   660
lemma HYPREAL_DIVISION_BY_ZERO: "a / (0::hypreal) = 0"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   661
apply (simp (no_asm) add: hypreal_divide_def HYPREAL_INVERSE_ZERO)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   662
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   663
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   664
lemma hypreal_inverse_inverse: "inverse (inverse (z::hypreal)) = z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   665
apply (case_tac "z=0", simp add: HYPREAL_INVERSE_ZERO)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   666
apply (rule_tac z = "z" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   667
apply (simp add: hypreal_inverse hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   668
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   669
declare hypreal_inverse_inverse [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   670
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   671
lemma hypreal_inverse_1: "inverse((1::hypreal)) = (1::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   672
apply (unfold hypreal_one_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   673
apply (simp (no_asm_use) add: hypreal_inverse real_zero_not_eq_one [THEN not_sym])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   674
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   675
declare hypreal_inverse_1 [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   676
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   677
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   678
(*** existence of inverse ***)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   679
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   680
lemma hypreal_mult_inverse: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   681
     "x \<noteq> 0 ==> x*inverse(x) = (1::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   682
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   683
apply (unfold hypreal_one_def hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   684
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   685
apply (simp add: hypreal_inverse hypreal_mult)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   686
apply (drule FreeUltrafilterNat_Compl_mem)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   687
apply (blast intro!: real_mult_inv_right FreeUltrafilterNat_subset)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   688
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   689
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   690
lemma hypreal_mult_inverse_left: "x \<noteq> 0 ==> inverse(x)*x = (1::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   691
apply (simp (no_asm_simp) add: hypreal_mult_inverse hypreal_mult_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   692
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   693
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   694
lemma hypreal_mult_left_cancel: "(c::hypreal) \<noteq> 0 ==> (c*a=c*b) = (a=b)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   695
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   696
apply (drule_tac f = "%x. x*inverse c" in arg_cong)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   697
apply (simp add: hypreal_mult_inverse hypreal_mult_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   698
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   699
    
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   700
lemma hypreal_mult_right_cancel: "(c::hypreal) \<noteq> 0 ==> (a*c=b*c) = (a=b)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   701
apply (safe)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   702
apply (drule_tac f = "%x. x*inverse c" in arg_cong)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   703
apply (simp add: hypreal_mult_inverse hypreal_mult_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   704
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   705
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   706
lemma hypreal_inverse_not_zero: "x \<noteq> 0 ==> inverse (x::hypreal) \<noteq> 0"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   707
apply (unfold hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   708
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   709
apply (simp add: hypreal_inverse hypreal_mult)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   710
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   711
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   712
declare hypreal_mult_inverse [simp] hypreal_mult_inverse_left [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   713
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   714
lemma hypreal_mult_not_0: "[| x \<noteq> 0; y \<noteq> 0 |] ==> x * y \<noteq> (0::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   715
apply (safe)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   716
apply (drule_tac f = "%z. inverse x*z" in arg_cong)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   717
apply (simp add: hypreal_mult_assoc [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   718
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   719
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   720
lemma hypreal_mult_zero_disj: "x*y = (0::hypreal) ==> x = 0 | y = 0"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   721
apply (auto intro: ccontr dest: hypreal_mult_not_0)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   722
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   723
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   724
lemma hypreal_minus_inverse: "inverse(-x) = -inverse(x::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   725
apply (case_tac "x=0", simp add: HYPREAL_INVERSE_ZERO)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   726
apply (rule hypreal_mult_right_cancel [of "-x", THEN iffD1]) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   727
apply (simp add: ); 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   728
apply (subst hypreal_mult_inverse_left)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   729
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   730
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   731
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   732
lemma hypreal_inverse_distrib: "inverse(x*y) = inverse(x)*inverse(y::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   733
apply (case_tac "x=0", simp add: HYPREAL_INVERSE_ZERO)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   734
apply (case_tac "y=0", simp add: HYPREAL_INVERSE_ZERO)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   735
apply (frule_tac y = "y" in hypreal_mult_not_0 , assumption)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   736
apply (rule_tac c1 = "x" in hypreal_mult_left_cancel [THEN iffD1])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   737
apply (auto simp add: hypreal_mult_assoc [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   738
apply (rule_tac c1 = "y" in hypreal_mult_left_cancel [THEN iffD1])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   739
apply (auto simp add: hypreal_mult_left_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   740
apply (simp (no_asm_simp) add: hypreal_mult_assoc [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   741
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   742
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   743
(*------------------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   744
                   Theorems for ordering 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   745
 ------------------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   746
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   747
(* prove introduction and elimination rules for hypreal_less *)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   748
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   749
lemma hypreal_less_iff: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   750
 "(P < (Q::hypreal)) = (\<exists>X Y. X \<in> Rep_hypreal(P) &  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   751
                              Y \<in> Rep_hypreal(Q) &  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   752
                              {n. X n < Y n} \<in> FreeUltrafilterNat)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   753
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   754
apply (unfold hypreal_less_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   755
apply fast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   756
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   757
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   758
lemma hypreal_lessI: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   759
 "[| {n. X n < Y n} \<in> FreeUltrafilterNat;  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   760
          X \<in> Rep_hypreal(P);  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   761
          Y \<in> Rep_hypreal(Q) |] ==> P < (Q::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   762
apply (unfold hypreal_less_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   763
apply fast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   764
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   765
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   766
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   767
lemma hypreal_lessE: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   768
     "!! R1. [| R1 < (R2::hypreal);  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   769
          !!X Y. {n. X n < Y n} \<in> FreeUltrafilterNat ==> P;  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   770
          !!X. X \<in> Rep_hypreal(R1) ==> P;   
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   771
          !!Y. Y \<in> Rep_hypreal(R2) ==> P |]  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   772
      ==> P"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   773
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   774
apply (unfold hypreal_less_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   775
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   776
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   777
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   778
lemma hypreal_lessD: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   779
 "R1 < (R2::hypreal) ==> (\<exists>X Y. {n. X n < Y n} \<in> FreeUltrafilterNat &  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   780
                                   X \<in> Rep_hypreal(R1) &  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   781
                                   Y \<in> Rep_hypreal(R2))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   782
apply (unfold hypreal_less_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   783
apply fast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   784
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   785
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   786
lemma hypreal_less_not_refl: "~ (R::hypreal) < R"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   787
apply (rule_tac z = "R" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   788
apply (auto simp add: hypreal_less_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   789
apply (ultra)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   790
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   791
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   792
(*** y < y ==> P ***)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   793
lemmas hypreal_less_irrefl = hypreal_less_not_refl [THEN notE, standard]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   794
declare hypreal_less_irrefl [elim!]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   795
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   796
lemma hypreal_not_refl2: "!!(x::hypreal). x < y ==> x \<noteq> y"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   797
apply (auto simp add: hypreal_less_not_refl)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   798
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   799
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   800
lemma hypreal_less_trans: "!!(R1::hypreal). [| R1 < R2; R2 < R3 |] ==> R1 < R3"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   801
apply (rule_tac z = "R1" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   802
apply (rule_tac z = "R2" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   803
apply (rule_tac z = "R3" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   804
apply (auto intro!: exI simp add: hypreal_less_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   805
apply ultra
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   806
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   807
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   808
lemma hypreal_less_asym: "!! (R1::hypreal). [| R1 < R2; R2 < R1 |] ==> P"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   809
apply (drule hypreal_less_trans , assumption)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   810
apply (simp add: hypreal_less_not_refl)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   811
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   812
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   813
(*-------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   814
  TODO: The following theorem should have been proved 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   815
  first and then used througout the proofs as it probably 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   816
  makes many of them more straightforward. 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   817
 -------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   818
lemma hypreal_less: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   819
      "(Abs_hypreal(hyprel``{%n. X n}) <  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   820
            Abs_hypreal(hyprel``{%n. Y n})) =  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   821
       ({n. X n < Y n} \<in> FreeUltrafilterNat)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   822
apply (unfold hypreal_less_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   823
apply (auto intro!: lemma_hyprel_refl)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   824
apply (ultra)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   825
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   826
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   827
(*----------------------------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   828
		 Trichotomy: the hyperreals are linearly ordered
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   829
  ---------------------------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   830
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   831
lemma lemma_hyprel_0_mem: "\<exists>x. x: hyprel `` {%n. 0}"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   832
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   833
apply (unfold hyprel_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   834
apply (rule_tac x = "%n. 0" in exI)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   835
apply (safe)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   836
apply (auto intro!: FreeUltrafilterNat_Nat_set)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   837
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   838
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   839
lemma hypreal_trichotomy: "0 <  x | x = 0 | x < (0::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   840
apply (unfold hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   841
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   842
apply (auto simp add: hypreal_less_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   843
apply (cut_tac lemma_hyprel_0_mem , erule exE)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   844
apply (drule_tac x = "xa" in spec)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   845
apply (drule_tac x = "x" in spec)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   846
apply (cut_tac x = "x" in lemma_hyprel_refl)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   847
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   848
apply (drule_tac x = "x" in spec)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   849
apply (drule_tac x = "xa" in spec)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   850
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   851
apply (ultra)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   852
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   853
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   854
lemma hypreal_trichotomyE:
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   855
     "[| (0::hypreal) < x ==> P;  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   856
         x = 0 ==> P;  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   857
         x < 0 ==> P |] ==> P"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   858
apply (insert hypreal_trichotomy [of x])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   859
apply (blast intro: elim:); 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   860
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   861
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   862
(*----------------------------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   863
            More properties of <
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   864
 ----------------------------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   865
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   866
lemma hypreal_less_minus_iff: "((x::hypreal) < y) = (0 < y + -x)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   867
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   868
apply (rule_tac z = "y" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   869
apply (auto simp add: hypreal_add hypreal_zero_def hypreal_minus hypreal_less)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   870
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   871
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   872
lemma hypreal_less_minus_iff2: "((x::hypreal) < y) = (x + -y < 0)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   873
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   874
apply (rule_tac z = "y" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   875
apply (auto simp add: hypreal_add hypreal_zero_def hypreal_minus hypreal_less)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   876
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   877
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   878
lemma hypreal_eq_minus_iff: "((x::hypreal) = y) = (x + - y = 0)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   879
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   880
apply (rule_tac x1 = "-y" in hypreal_add_right_cancel [THEN iffD1])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   881
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   882
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   883
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   884
lemma hypreal_eq_minus_iff2: "((x::hypreal) = y) = (0 = y + - x)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   885
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   886
apply (rule_tac x1 = "-x" in hypreal_add_right_cancel [THEN iffD1])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   887
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   888
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   889
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   890
(* 07/00 *)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   891
lemma hypreal_diff_zero: "(0::hypreal) - x = -x"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   892
apply (simp (no_asm) add: hypreal_diff_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   893
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   894
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   895
lemma hypreal_diff_zero_right: "x - (0::hypreal) = x"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   896
apply (simp (no_asm) add: hypreal_diff_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   897
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   898
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   899
lemma hypreal_diff_self: "x - x = (0::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   900
apply (simp (no_asm) add: hypreal_diff_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   901
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   902
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   903
declare hypreal_diff_zero [simp] hypreal_diff_zero_right [simp] hypreal_diff_self [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   904
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   905
lemma hypreal_eq_minus_iff3: "(x = y + z) = (x + -z = (y::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   906
apply (auto simp add: hypreal_add_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   907
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   908
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   909
lemma hypreal_not_eq_minus_iff: "(x \<noteq> a) = (x + -a \<noteq> (0::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   910
apply (auto dest: hypreal_eq_minus_iff [THEN iffD2])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   911
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   912
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   913
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   914
(*** linearity ***)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   915
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   916
lemma hypreal_linear: "(x::hypreal) < y | x = y | y < x"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   917
apply (subst hypreal_eq_minus_iff2)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   918
apply (rule_tac x1 = "x" in hypreal_less_minus_iff [THEN ssubst])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   919
apply (rule_tac x1 = "y" in hypreal_less_minus_iff2 [THEN ssubst])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   920
apply (rule hypreal_trichotomyE)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   921
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   922
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   923
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   924
lemma hypreal_neq_iff: "((w::hypreal) \<noteq> z) = (w<z | z<w)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   925
apply (cut_tac hypreal_linear)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   926
apply blast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   927
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   928
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   929
lemma hypreal_linear_less2: "!!(x::hypreal). [| x < y ==> P;  x = y ==> P;  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   930
           y < x ==> P |] ==> P"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   931
apply (cut_tac x = "x" and y = "y" in hypreal_linear)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   932
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   933
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   934
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   935
(*------------------------------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   936
                            Properties of <=
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   937
 ------------------------------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   938
(*------ hypreal le iff reals le a.e ------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   939
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   940
lemma hypreal_le: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   941
      "(Abs_hypreal(hyprel``{%n. X n}) <=  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   942
            Abs_hypreal(hyprel``{%n. Y n})) =  
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   943
       ({n. X n <= Y n} \<in> FreeUltrafilterNat)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   944
apply (unfold hypreal_le_def real_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   945
apply (auto simp add: hypreal_less)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   946
apply (ultra+)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   947
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   948
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   949
(*---------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   950
(*---------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   951
lemma hypreal_leI: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   952
     "~(w < z) ==> z <= (w::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   953
apply (unfold hypreal_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   954
apply assumption
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   955
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   956
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   957
lemma hypreal_leD: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   958
      "z<=w ==> ~(w<(z::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   959
apply (unfold hypreal_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   960
apply assumption
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   961
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   962
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   963
lemma hypreal_less_le_iff: "(~(w < z)) = (z <= (w::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   964
apply (fast intro!: hypreal_leI hypreal_leD)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   965
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   966
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   967
lemma not_hypreal_leE: "~ z <= w ==> w<(z::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   968
apply (unfold hypreal_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   969
apply fast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   970
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   971
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   972
lemma hypreal_le_imp_less_or_eq: "!!(x::hypreal). x <= y ==> x < y | x = y"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   973
apply (unfold hypreal_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   974
apply (cut_tac hypreal_linear)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   975
apply (fast elim: hypreal_less_irrefl hypreal_less_asym)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   976
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   977
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   978
lemma hypreal_less_or_eq_imp_le: "z<w | z=w ==> z <=(w::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   979
apply (unfold hypreal_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   980
apply (cut_tac hypreal_linear)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   981
apply (fast elim: hypreal_less_irrefl hypreal_less_asym)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   982
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   983
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   984
lemma hypreal_le_eq_less_or_eq: "(x <= (y::hypreal)) = (x < y | x=y)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   985
by (blast intro!: hypreal_less_or_eq_imp_le dest: hypreal_le_imp_less_or_eq) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   986
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   987
lemmas hypreal_le_less = hypreal_le_eq_less_or_eq
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   988
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   989
lemma hypreal_le_refl: "w <= (w::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   990
apply (simp (no_asm) add: hypreal_le_eq_less_or_eq)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   991
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   992
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   993
(* Axiom 'linorder_linear' of class 'linorder': *)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   994
lemma hypreal_le_linear: "(z::hypreal) <= w | w <= z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   995
apply (simp (no_asm) add: hypreal_le_less)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   996
apply (cut_tac hypreal_linear)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   997
apply blast
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   998
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
   999
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1000
lemma hypreal_le_trans: "[| i <= j; j <= k |] ==> i <= (k::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1001
apply (drule hypreal_le_imp_less_or_eq) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1002
apply (drule hypreal_le_imp_less_or_eq) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1003
apply (rule hypreal_less_or_eq_imp_le) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1004
apply (blast intro: hypreal_less_trans) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1005
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1006
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1007
lemma hypreal_le_anti_sym: "[| z <= w; w <= z |] ==> z = (w::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1008
apply (drule hypreal_le_imp_less_or_eq) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1009
apply (drule hypreal_le_imp_less_or_eq) 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1010
apply (fast elim: hypreal_less_irrefl hypreal_less_asym)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1011
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1012
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1013
lemma not_less_not_eq_hypreal_less: "[| ~ y < x; y \<noteq> x |] ==> x < (y::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1014
apply (rule not_hypreal_leE)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1015
apply (fast dest: hypreal_le_imp_less_or_eq)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1016
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1017
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1018
(* Axiom 'order_less_le' of class 'order': *)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1019
lemma hypreal_less_le: "((w::hypreal) < z) = (w <= z & w \<noteq> z)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1020
apply (simp (no_asm) add: hypreal_le_def hypreal_neq_iff)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1021
apply (blast intro: hypreal_less_asym)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1022
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1023
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1024
lemma hypreal_minus_zero_less_iff: "(0 < -R) = (R < (0::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1025
apply (rule_tac z = "R" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1026
apply (auto simp add: hypreal_zero_def hypreal_less hypreal_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1027
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1028
declare hypreal_minus_zero_less_iff [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1029
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1030
lemma hypreal_minus_zero_less_iff2: "(-R < 0) = ((0::hypreal) < R)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1031
apply (rule_tac z = "R" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1032
apply (auto simp add: hypreal_zero_def hypreal_less hypreal_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1033
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1034
declare hypreal_minus_zero_less_iff2 [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1035
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1036
lemma hypreal_minus_zero_le_iff: "((0::hypreal) <= -r) = (r <= 0)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1037
apply (unfold hypreal_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1038
apply (simp (no_asm) add: hypreal_minus_zero_less_iff2)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1039
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1040
declare hypreal_minus_zero_le_iff [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1041
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1042
lemma hypreal_minus_zero_le_iff2: "(-r <= (0::hypreal)) = (0 <= r)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1043
apply (unfold hypreal_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1044
apply (simp (no_asm) add: hypreal_minus_zero_less_iff2)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1045
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1046
declare hypreal_minus_zero_le_iff2 [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1047
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1048
(*----------------------------------------------------------
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1049
  hypreal_of_real preserves field and order properties
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1050
 -----------------------------------------------------------*)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1051
lemma hypreal_of_real_add: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1052
     "hypreal_of_real (z1 + z2) = hypreal_of_real z1 + hypreal_of_real z2"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1053
apply (unfold hypreal_of_real_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1054
apply (simp (no_asm) add: hypreal_add hypreal_add_mult_distrib)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1055
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1056
declare hypreal_of_real_add [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1057
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1058
lemma hypreal_of_real_mult: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1059
     "hypreal_of_real (z1 * z2) = hypreal_of_real z1 * hypreal_of_real z2"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1060
apply (unfold hypreal_of_real_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1061
apply (simp (no_asm) add: hypreal_mult hypreal_add_mult_distrib2)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1062
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1063
declare hypreal_of_real_mult [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1064
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1065
lemma hypreal_of_real_less_iff: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1066
     "(hypreal_of_real z1 <  hypreal_of_real z2) = (z1 < z2)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1067
apply (unfold hypreal_less_def hypreal_of_real_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1068
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1069
apply (rule_tac [2] x = "%n. z1" in exI)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1070
apply (safe)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1071
apply (rule_tac [3] x = "%n. z2" in exI)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1072
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1073
apply (rule FreeUltrafilterNat_P)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1074
apply (ultra)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1075
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1076
declare hypreal_of_real_less_iff [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1077
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1078
lemma hypreal_of_real_le_iff: 
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1079
     "(hypreal_of_real z1 <= hypreal_of_real z2) = (z1 <= z2)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1080
apply (unfold hypreal_le_def real_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1081
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1082
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1083
declare hypreal_of_real_le_iff [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1084
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1085
lemma hypreal_of_real_eq_iff: "(hypreal_of_real z1 = hypreal_of_real z2) = (z1 = z2)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1086
apply (force intro: order_antisym hypreal_of_real_le_iff [THEN iffD1])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1087
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1088
declare hypreal_of_real_eq_iff [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1089
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1090
lemma hypreal_of_real_minus: "hypreal_of_real (-r) = - hypreal_of_real  r"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1091
apply (unfold hypreal_of_real_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1092
apply (auto simp add: hypreal_minus)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1093
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1094
declare hypreal_of_real_minus [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1095
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1096
lemma hypreal_of_real_one: "hypreal_of_real 1 = (1::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1097
apply (unfold hypreal_of_real_def hypreal_one_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1098
apply (simp (no_asm))
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1099
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1100
declare hypreal_of_real_one [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1101
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1102
lemma hypreal_of_real_zero: "hypreal_of_real 0 = 0"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1103
apply (unfold hypreal_of_real_def hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1104
apply (simp (no_asm))
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1105
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1106
declare hypreal_of_real_zero [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1107
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1108
lemma hypreal_of_real_zero_iff: "(hypreal_of_real r = 0) = (r = 0)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1109
apply (auto intro: FreeUltrafilterNat_P simp add: hypreal_of_real_def hypreal_zero_def FreeUltrafilterNat_Nat_set)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1110
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1111
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1112
lemma hypreal_of_real_inverse: "hypreal_of_real (inverse r) = inverse (hypreal_of_real r)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1113
apply (case_tac "r=0")
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1114
apply (simp (no_asm_simp) add: DIVISION_BY_ZERO INVERSE_ZERO HYPREAL_INVERSE_ZERO)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1115
apply (rule_tac c1 = "hypreal_of_real r" in hypreal_mult_left_cancel [THEN iffD1])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1116
apply (auto simp add: hypreal_of_real_zero_iff hypreal_of_real_mult [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1117
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1118
declare hypreal_of_real_inverse [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1119
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1120
lemma hypreal_of_real_divide: "hypreal_of_real (z1 / z2) = hypreal_of_real z1 / hypreal_of_real z2"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1121
apply (simp (no_asm) add: hypreal_divide_def real_divide_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1122
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1123
declare hypreal_of_real_divide [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1124
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1125
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1126
(*** Division lemmas ***)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1127
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1128
lemma hypreal_zero_divide: "(0::hypreal)/x = 0"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1129
apply (simp (no_asm) add: hypreal_divide_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1130
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1131
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1132
lemma hypreal_divide_one: "x/(1::hypreal) = x"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1133
apply (simp (no_asm) add: hypreal_divide_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1134
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1135
declare hypreal_zero_divide [simp] hypreal_divide_one [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1136
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1137
lemma hypreal_times_divide1_eq: "(x::hypreal) * (y/z) = (x*y)/z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1138
apply (simp (no_asm) add: hypreal_divide_def hypreal_mult_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1139
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1140
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1141
lemma hypreal_times_divide2_eq: "(y/z) * (x::hypreal) = (y*x)/z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1142
apply (simp (no_asm) add: hypreal_divide_def hypreal_mult_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1143
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1144
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1145
declare hypreal_times_divide1_eq [simp] hypreal_times_divide2_eq [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1146
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1147
lemma hypreal_divide_divide1_eq: "(x::hypreal) / (y/z) = (x*z)/y"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1148
apply (simp (no_asm) add: hypreal_divide_def hypreal_inverse_distrib hypreal_mult_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1149
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1150
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1151
lemma hypreal_divide_divide2_eq: "((x::hypreal) / y) / z = x/(y*z)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1152
apply (simp (no_asm) add: hypreal_divide_def hypreal_inverse_distrib hypreal_mult_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1153
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1154
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1155
declare hypreal_divide_divide1_eq [simp] hypreal_divide_divide2_eq [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1156
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1157
(** As with multiplication, pull minus signs OUT of the / operator **)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1158
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1159
lemma hypreal_minus_divide_eq: "(-x) / (y::hypreal) = - (x/y)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1160
apply (simp (no_asm) add: hypreal_divide_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1161
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1162
declare hypreal_minus_divide_eq [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1163
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1164
lemma hypreal_divide_minus_eq: "(x / -(y::hypreal)) = - (x/y)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1165
apply (simp (no_asm) add: hypreal_divide_def hypreal_minus_inverse)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1166
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1167
declare hypreal_divide_minus_eq [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1168
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1169
lemma hypreal_add_divide_distrib: "(x+y)/(z::hypreal) = x/z + y/z"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1170
apply (simp (no_asm) add: hypreal_divide_def hypreal_add_mult_distrib)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1171
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1172
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1173
lemma hypreal_inverse_add: "[|(x::hypreal) \<noteq> 0;  y \<noteq> 0 |]   
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1174
      ==> inverse(x) + inverse(y) = (x + y)*inverse(x*y)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1175
apply (simp add: hypreal_inverse_distrib hypreal_add_mult_distrib hypreal_mult_assoc [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1176
apply (subst hypreal_mult_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1177
apply (rule hypreal_mult_left_commute [THEN subst])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1178
apply (simp add: hypreal_add_commute)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1179
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1180
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1181
lemma hypreal_self_eq_minus_self_zero: "x = -x ==> x = (0::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1182
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1183
apply (auto simp add: hypreal_minus hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1184
apply (ultra)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1185
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1186
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1187
lemma hypreal_add_self_zero_cancel: "(x + x = 0) = (x = (0::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1188
apply (rule_tac z = "x" in eq_Abs_hypreal)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1189
apply (auto simp add: hypreal_add hypreal_zero_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1190
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1191
declare hypreal_add_self_zero_cancel [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1192
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1193
lemma hypreal_add_self_zero_cancel2: "(x + x + y = y) = (x = (0::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1194
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1195
apply (drule hypreal_eq_minus_iff [THEN iffD1])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1196
apply (auto simp add: hypreal_add_assoc hypreal_self_eq_minus_self_zero)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1197
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1198
declare hypreal_add_self_zero_cancel2 [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1199
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1200
lemma hypreal_add_self_zero_cancel2a: "(x + (x + y) = y) = (x = (0::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1201
apply (simp (no_asm) add: hypreal_add_assoc [symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1202
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1203
declare hypreal_add_self_zero_cancel2a [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1204
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1205
lemma hypreal_minus_eq_swap: "(b = -a) = (-b = (a::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1206
apply auto
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1207
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1208
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1209
lemma hypreal_minus_eq_cancel: "(-b = -a) = (b = (a::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1210
apply (simp add: hypreal_minus_eq_swap)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1211
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1212
declare hypreal_minus_eq_cancel [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1213
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1214
lemma hypreal_less_eq_diff: "(x<y) = (x-y < (0::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1215
apply (unfold hypreal_diff_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1216
apply (rule hypreal_less_minus_iff2)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1217
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1218
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1219
(*** Subtraction laws ***)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1220
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1221
lemma hypreal_add_diff_eq: "x + (y - z) = (x + y) - (z::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1222
apply (simp (no_asm) add: hypreal_diff_def hypreal_add_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1223
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1224
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1225
lemma hypreal_diff_add_eq: "(x - y) + z = (x + z) - (y::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1226
apply (simp (no_asm) add: hypreal_diff_def hypreal_add_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1227
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1228
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1229
lemma hypreal_diff_diff_eq: "(x - y) - z = x - (y + (z::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1230
apply (simp (no_asm) add: hypreal_diff_def hypreal_add_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1231
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1232
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1233
lemma hypreal_diff_diff_eq2: "x - (y - z) = (x + z) - (y::hypreal)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1234
apply (simp (no_asm) add: hypreal_diff_def hypreal_add_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1235
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1236
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1237
lemma hypreal_diff_less_eq: "(x-y < z) = (x < z + (y::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1238
apply (subst hypreal_less_eq_diff)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1239
apply (rule_tac y1 = "z" in hypreal_less_eq_diff [THEN ssubst])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1240
apply (simp (no_asm) add: hypreal_diff_def hypreal_add_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1241
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1242
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1243
lemma hypreal_less_diff_eq: "(x < z-y) = (x + (y::hypreal) < z)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1244
apply (subst hypreal_less_eq_diff)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1245
apply (rule_tac y1 = "z-y" in hypreal_less_eq_diff [THEN ssubst])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1246
apply (simp (no_asm) add: hypreal_diff_def hypreal_add_ac)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1247
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1248
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1249
lemma hypreal_diff_le_eq: "(x-y <= z) = (x <= z + (y::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1250
apply (unfold hypreal_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1251
apply (simp (no_asm) add: hypreal_less_diff_eq)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1252
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1253
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1254
lemma hypreal_le_diff_eq: "(x <= z-y) = (x + (y::hypreal) <= z)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1255
apply (unfold hypreal_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1256
apply (simp (no_asm) add: hypreal_diff_less_eq)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1257
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1258
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1259
lemma hypreal_diff_eq_eq: "(x-y = z) = (x = z + (y::hypreal))"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1260
apply (unfold hypreal_diff_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1261
apply (auto simp add: hypreal_add_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1262
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1263
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1264
lemma hypreal_eq_diff_eq: "(x = z-y) = (x + (y::hypreal) = z)"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1265
apply (unfold hypreal_diff_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1266
apply (auto simp add: hypreal_add_assoc)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1267
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1268
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1269
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1270
(** For the cancellation simproc.
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1271
    The idea is to cancel like terms on opposite sides by subtraction **)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1272
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1273
lemma hypreal_less_eqI: "(x::hypreal) - y = x' - y' ==> (x<y) = (x'<y')"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1274
apply (subst hypreal_less_eq_diff)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1275
apply (rule_tac y1 = "y" in hypreal_less_eq_diff [THEN ssubst])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1276
apply (simp (no_asm_simp))
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1277
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1278
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1279
lemma hypreal_le_eqI: "(x::hypreal) - y = x' - y' ==> (y<=x) = (y'<=x')"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1280
apply (drule hypreal_less_eqI)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1281
apply (simp (no_asm_simp) add: hypreal_le_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1282
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1283
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1284
lemma hypreal_eq_eqI: "(x::hypreal) - y = x' - y' ==> (x=y) = (x'=y')"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1285
apply safe
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1286
apply (simp_all add: hypreal_eq_diff_eq hypreal_diff_eq_eq)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1287
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1288
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1289
lemma hypreal_zero_num: "0 = Abs_hypreal (hyprel `` {%n. 0})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1290
apply (simp (no_asm) add: hypreal_zero_def [THEN meta_eq_to_obj_eq, symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1291
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1292
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1293
lemma hypreal_one_num: "1 = Abs_hypreal (hyprel `` {%n. 1})"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1294
apply (simp (no_asm) add: hypreal_one_def [THEN meta_eq_to_obj_eq, symmetric])
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1295
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1296
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1297
lemma hypreal_omega_gt_zero: "0 < omega"
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1298
apply (unfold omega_def)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1299
apply (auto simp add: hypreal_less hypreal_zero_num)
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1300
done
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1301
declare hypreal_omega_gt_zero [simp]
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1302
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1303
ML
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1304
{*
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1305
val hypreal_zero_def = thm "hypreal_zero_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1306
val hypreal_one_def = thm "hypreal_one_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1307
val hypreal_minus_def = thm "hypreal_minus_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1308
val hypreal_diff_def = thm "hypreal_diff_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1309
val hypreal_inverse_def = thm "hypreal_inverse_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1310
val hypreal_divide_def = thm "hypreal_divide_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1311
val hypreal_of_real_def = thm "hypreal_of_real_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1312
val omega_def = thm "omega_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1313
val epsilon_def = thm "epsilon_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1314
val hypreal_add_def = thm "hypreal_add_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1315
val hypreal_mult_def = thm "hypreal_mult_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1316
val hypreal_less_def = thm "hypreal_less_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1317
val hypreal_le_def = thm "hypreal_le_def";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1318
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1319
val finite_exhausts = thm "finite_exhausts";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1320
val finite_not_covers = thm "finite_not_covers";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1321
val not_finite_nat = thm "not_finite_nat";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1322
val FreeUltrafilterNat_Ex = thm "FreeUltrafilterNat_Ex";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1323
val FreeUltrafilterNat_mem = thm "FreeUltrafilterNat_mem";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1324
val FreeUltrafilterNat_finite = thm "FreeUltrafilterNat_finite";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1325
val FreeUltrafilterNat_not_finite = thm "FreeUltrafilterNat_not_finite";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1326
val FreeUltrafilterNat_empty = thm "FreeUltrafilterNat_empty";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1327
val FreeUltrafilterNat_Int = thm "FreeUltrafilterNat_Int";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1328
val FreeUltrafilterNat_subset = thm "FreeUltrafilterNat_subset";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1329
val FreeUltrafilterNat_Compl = thm "FreeUltrafilterNat_Compl";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1330
val FreeUltrafilterNat_Compl_mem = thm "FreeUltrafilterNat_Compl_mem";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1331
val FreeUltrafilterNat_Compl_iff1 = thm "FreeUltrafilterNat_Compl_iff1";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1332
val FreeUltrafilterNat_Compl_iff2 = thm "FreeUltrafilterNat_Compl_iff2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1333
val FreeUltrafilterNat_UNIV = thm "FreeUltrafilterNat_UNIV";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1334
val FreeUltrafilterNat_Nat_set = thm "FreeUltrafilterNat_Nat_set";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1335
val FreeUltrafilterNat_Nat_set_refl = thm "FreeUltrafilterNat_Nat_set_refl";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1336
val FreeUltrafilterNat_P = thm "FreeUltrafilterNat_P";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1337
val FreeUltrafilterNat_Ex_P = thm "FreeUltrafilterNat_Ex_P";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1338
val FreeUltrafilterNat_all = thm "FreeUltrafilterNat_all";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1339
val FreeUltrafilterNat_Un = thm "FreeUltrafilterNat_Un";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1340
val hyprel_iff = thm "hyprel_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1341
val hyprel_refl = thm "hyprel_refl";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1342
val hyprel_sym = thm "hyprel_sym";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1343
val hyprel_trans = thm "hyprel_trans";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1344
val equiv_hyprel = thm "equiv_hyprel";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1345
val hyprel_in_hypreal = thm "hyprel_in_hypreal";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1346
val Abs_hypreal_inverse = thm "Abs_hypreal_inverse";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1347
val inj_on_Abs_hypreal = thm "inj_on_Abs_hypreal";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1348
val inj_Rep_hypreal = thm "inj_Rep_hypreal";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1349
val lemma_hyprel_refl = thm "lemma_hyprel_refl";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1350
val hypreal_empty_not_mem = thm "hypreal_empty_not_mem";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1351
val Rep_hypreal_nonempty = thm "Rep_hypreal_nonempty";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1352
val inj_hypreal_of_real = thm "inj_hypreal_of_real";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1353
val eq_Abs_hypreal = thm "eq_Abs_hypreal";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1354
val hypreal_minus_congruent = thm "hypreal_minus_congruent";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1355
val hypreal_minus = thm "hypreal_minus";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1356
val hypreal_minus_minus = thm "hypreal_minus_minus";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1357
val inj_hypreal_minus = thm "inj_hypreal_minus";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1358
val hypreal_minus_zero = thm "hypreal_minus_zero";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1359
val hypreal_minus_zero_iff = thm "hypreal_minus_zero_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1360
val hypreal_add_congruent2 = thm "hypreal_add_congruent2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1361
val hypreal_add = thm "hypreal_add";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1362
val hypreal_diff = thm "hypreal_diff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1363
val hypreal_add_commute = thm "hypreal_add_commute";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1364
val hypreal_add_assoc = thm "hypreal_add_assoc";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1365
val hypreal_add_left_commute = thm "hypreal_add_left_commute";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1366
val hypreal_add_zero_left = thm "hypreal_add_zero_left";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1367
val hypreal_add_zero_right = thm "hypreal_add_zero_right";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1368
val hypreal_add_minus = thm "hypreal_add_minus";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1369
val hypreal_add_minus_left = thm "hypreal_add_minus_left";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1370
val hypreal_minus_ex = thm "hypreal_minus_ex";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1371
val hypreal_minus_ex1 = thm "hypreal_minus_ex1";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1372
val hypreal_minus_left_ex1 = thm "hypreal_minus_left_ex1";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1373
val hypreal_add_minus_eq_minus = thm "hypreal_add_minus_eq_minus";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1374
val hypreal_as_add_inverse_ex = thm "hypreal_as_add_inverse_ex";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1375
val hypreal_minus_add_distrib = thm "hypreal_minus_add_distrib";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1376
val hypreal_minus_distrib1 = thm "hypreal_minus_distrib1";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1377
val hypreal_add_left_cancel = thm "hypreal_add_left_cancel";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1378
val hypreal_add_right_cancel = thm "hypreal_add_right_cancel";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1379
val hypreal_add_minus_cancelA = thm "hypreal_add_minus_cancelA";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1380
val hypreal_minus_add_cancelA = thm "hypreal_minus_add_cancelA";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1381
val hypreal_mult_congruent2 = thm "hypreal_mult_congruent2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1382
val hypreal_mult = thm "hypreal_mult";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1383
val hypreal_mult_commute = thm "hypreal_mult_commute";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1384
val hypreal_mult_assoc = thm "hypreal_mult_assoc";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1385
val hypreal_mult_left_commute = thm "hypreal_mult_left_commute";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1386
val hypreal_mult_1 = thm "hypreal_mult_1";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1387
val hypreal_mult_1_right = thm "hypreal_mult_1_right";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1388
val hypreal_mult_0 = thm "hypreal_mult_0";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1389
val hypreal_mult_0_right = thm "hypreal_mult_0_right";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1390
val hypreal_minus_mult_eq1 = thm "hypreal_minus_mult_eq1";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1391
val hypreal_minus_mult_eq2 = thm "hypreal_minus_mult_eq2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1392
val hypreal_mult_minus_1 = thm "hypreal_mult_minus_1";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1393
val hypreal_mult_minus_1_right = thm "hypreal_mult_minus_1_right";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1394
val hypreal_minus_mult_commute = thm "hypreal_minus_mult_commute";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1395
val hypreal_add_assoc_cong = thm "hypreal_add_assoc_cong";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1396
val hypreal_add_mult_distrib = thm "hypreal_add_mult_distrib";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1397
val hypreal_add_mult_distrib2 = thm "hypreal_add_mult_distrib2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1398
val hypreal_diff_mult_distrib = thm "hypreal_diff_mult_distrib";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1399
val hypreal_diff_mult_distrib2 = thm "hypreal_diff_mult_distrib2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1400
val hypreal_zero_not_eq_one = thm "hypreal_zero_not_eq_one";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1401
val hypreal_inverse_congruent = thm "hypreal_inverse_congruent";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1402
val hypreal_inverse = thm "hypreal_inverse";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1403
val HYPREAL_INVERSE_ZERO = thm "HYPREAL_INVERSE_ZERO";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1404
val HYPREAL_DIVISION_BY_ZERO = thm "HYPREAL_DIVISION_BY_ZERO";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1405
val hypreal_inverse_inverse = thm "hypreal_inverse_inverse";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1406
val hypreal_inverse_1 = thm "hypreal_inverse_1";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1407
val hypreal_mult_inverse = thm "hypreal_mult_inverse";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1408
val hypreal_mult_inverse_left = thm "hypreal_mult_inverse_left";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1409
val hypreal_mult_left_cancel = thm "hypreal_mult_left_cancel";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1410
val hypreal_mult_right_cancel = thm "hypreal_mult_right_cancel";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1411
val hypreal_inverse_not_zero = thm "hypreal_inverse_not_zero";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1412
val hypreal_mult_not_0 = thm "hypreal_mult_not_0";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1413
val hypreal_mult_zero_disj = thm "hypreal_mult_zero_disj";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1414
val hypreal_minus_inverse = thm "hypreal_minus_inverse";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1415
val hypreal_inverse_distrib = thm "hypreal_inverse_distrib";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1416
val hypreal_less_iff = thm "hypreal_less_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1417
val hypreal_lessI = thm "hypreal_lessI";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1418
val hypreal_lessE = thm "hypreal_lessE";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1419
val hypreal_lessD = thm "hypreal_lessD";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1420
val hypreal_less_not_refl = thm "hypreal_less_not_refl";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1421
val hypreal_not_refl2 = thm "hypreal_not_refl2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1422
val hypreal_less_trans = thm "hypreal_less_trans";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1423
val hypreal_less_asym = thm "hypreal_less_asym";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1424
val hypreal_less = thm "hypreal_less";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1425
val hypreal_trichotomy = thm "hypreal_trichotomy";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1426
val hypreal_trichotomyE = thm "hypreal_trichotomyE";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1427
val hypreal_less_minus_iff = thm "hypreal_less_minus_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1428
val hypreal_less_minus_iff2 = thm "hypreal_less_minus_iff2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1429
val hypreal_eq_minus_iff = thm "hypreal_eq_minus_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1430
val hypreal_eq_minus_iff2 = thm "hypreal_eq_minus_iff2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1431
val hypreal_diff_zero = thm "hypreal_diff_zero";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1432
val hypreal_diff_zero_right = thm "hypreal_diff_zero_right";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1433
val hypreal_diff_self = thm "hypreal_diff_self";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1434
val hypreal_eq_minus_iff3 = thm "hypreal_eq_minus_iff3";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1435
val hypreal_not_eq_minus_iff = thm "hypreal_not_eq_minus_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1436
val hypreal_linear = thm "hypreal_linear";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1437
val hypreal_neq_iff = thm "hypreal_neq_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1438
val hypreal_linear_less2 = thm "hypreal_linear_less2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1439
val hypreal_le = thm "hypreal_le";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1440
val hypreal_leI = thm "hypreal_leI";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1441
val hypreal_leD = thm "hypreal_leD";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1442
val hypreal_less_le_iff = thm "hypreal_less_le_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1443
val not_hypreal_leE = thm "not_hypreal_leE";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1444
val hypreal_le_imp_less_or_eq = thm "hypreal_le_imp_less_or_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1445
val hypreal_less_or_eq_imp_le = thm "hypreal_less_or_eq_imp_le";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1446
val hypreal_le_eq_less_or_eq = thm "hypreal_le_eq_less_or_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1447
val hypreal_le_refl = thm "hypreal_le_refl";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1448
val hypreal_le_linear = thm "hypreal_le_linear";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1449
val hypreal_le_trans = thm "hypreal_le_trans";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1450
val hypreal_le_anti_sym = thm "hypreal_le_anti_sym";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1451
val not_less_not_eq_hypreal_less = thm "not_less_not_eq_hypreal_less";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1452
val hypreal_less_le = thm "hypreal_less_le";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1453
val hypreal_minus_zero_less_iff = thm "hypreal_minus_zero_less_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1454
val hypreal_minus_zero_less_iff2 = thm "hypreal_minus_zero_less_iff2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1455
val hypreal_minus_zero_le_iff = thm "hypreal_minus_zero_le_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1456
val hypreal_minus_zero_le_iff2 = thm "hypreal_minus_zero_le_iff2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1457
val hypreal_of_real_add = thm "hypreal_of_real_add";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1458
val hypreal_of_real_mult = thm "hypreal_of_real_mult";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1459
val hypreal_of_real_less_iff = thm "hypreal_of_real_less_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1460
val hypreal_of_real_le_iff = thm "hypreal_of_real_le_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1461
val hypreal_of_real_eq_iff = thm "hypreal_of_real_eq_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1462
val hypreal_of_real_minus = thm "hypreal_of_real_minus";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1463
val hypreal_of_real_one = thm "hypreal_of_real_one";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1464
val hypreal_of_real_zero = thm "hypreal_of_real_zero";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1465
val hypreal_of_real_zero_iff = thm "hypreal_of_real_zero_iff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1466
val hypreal_of_real_inverse = thm "hypreal_of_real_inverse";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1467
val hypreal_of_real_divide = thm "hypreal_of_real_divide";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1468
val hypreal_zero_divide = thm "hypreal_zero_divide";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1469
val hypreal_divide_one = thm "hypreal_divide_one";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1470
val hypreal_times_divide1_eq = thm "hypreal_times_divide1_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1471
val hypreal_times_divide2_eq = thm "hypreal_times_divide2_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1472
val hypreal_divide_divide1_eq = thm "hypreal_divide_divide1_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1473
val hypreal_divide_divide2_eq = thm "hypreal_divide_divide2_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1474
val hypreal_minus_divide_eq = thm "hypreal_minus_divide_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1475
val hypreal_divide_minus_eq = thm "hypreal_divide_minus_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1476
val hypreal_add_divide_distrib = thm "hypreal_add_divide_distrib";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1477
val hypreal_inverse_add = thm "hypreal_inverse_add";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1478
val hypreal_self_eq_minus_self_zero = thm "hypreal_self_eq_minus_self_zero";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1479
val hypreal_add_self_zero_cancel = thm "hypreal_add_self_zero_cancel";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1480
val hypreal_add_self_zero_cancel2 = thm "hypreal_add_self_zero_cancel2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1481
val hypreal_add_self_zero_cancel2a = thm "hypreal_add_self_zero_cancel2a";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1482
val hypreal_minus_eq_swap = thm "hypreal_minus_eq_swap";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1483
val hypreal_minus_eq_cancel = thm "hypreal_minus_eq_cancel";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1484
val hypreal_less_eq_diff = thm "hypreal_less_eq_diff";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1485
val hypreal_add_diff_eq = thm "hypreal_add_diff_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1486
val hypreal_diff_add_eq = thm "hypreal_diff_add_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1487
val hypreal_diff_diff_eq = thm "hypreal_diff_diff_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1488
val hypreal_diff_diff_eq2 = thm "hypreal_diff_diff_eq2";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1489
val hypreal_diff_less_eq = thm "hypreal_diff_less_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1490
val hypreal_less_diff_eq = thm "hypreal_less_diff_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1491
val hypreal_diff_le_eq = thm "hypreal_diff_le_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1492
val hypreal_le_diff_eq = thm "hypreal_le_diff_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1493
val hypreal_diff_eq_eq = thm "hypreal_diff_eq_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1494
val hypreal_eq_diff_eq = thm "hypreal_eq_diff_eq";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1495
val hypreal_less_eqI = thm "hypreal_less_eqI";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1496
val hypreal_le_eqI = thm "hypreal_le_eqI";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1497
val hypreal_eq_eqI = thm "hypreal_eq_eqI";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1498
val hypreal_zero_num = thm "hypreal_zero_num";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1499
val hypreal_one_num = thm "hypreal_one_num";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1500
val hypreal_omega_gt_zero = thm "hypreal_omega_gt_zero";
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1501
*}
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1502
0b5c0b0a3eba converted Hyperreal/HyperDef to Isar script
paulson
parents: 13487
diff changeset
  1503
10751
a81ea5d3dd41 separation of HOL-Hyperreal from HOL-Real
paulson
parents:
diff changeset
  1504
end