src/HOL/Complex/NSCA.thy
author paulson
Thu, 04 Mar 2004 12:06:07 +0100
changeset 14430 5cb24165a2e1
parent 14408 0cc42bb96330
child 14469 c7674b7034f5
permissions -rw-r--r--
new material from Avigad, and simplified treatment of division by 0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     1
(*  Title       : NSCA.thy
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     2
    Author      : Jacques D. Fleuriot
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     3
    Copyright   : 2001,2002 University of Edinburgh
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     4
*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     5
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
     6
header{*Non-Standard Complex Analysis*}
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     7
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
     8
theory NSCA = NSComplex:
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     9
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    10
constdefs
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    11
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    12
    capprox    :: "[hcomplex,hcomplex] => bool"  (infixl "@c=" 50)  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    13
      --{*the ``infinitely close'' relation*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    14
      "x @c= y == (x - y) \<in> CInfinitesimal"     
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    15
  
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    16
   (* standard complex numbers reagarded as an embedded subset of NS complex *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    17
   SComplex  :: "hcomplex set"
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    18
   "SComplex == {x. \<exists>r. x = hcomplex_of_complex r}"
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    19
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    20
   CInfinitesimal  :: "hcomplex set"
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    21
   "CInfinitesimal == {x. \<forall>r \<in> Reals. 0 < r --> hcmod x < r}"
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    22
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    23
   CFinite :: "hcomplex set"
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    24
   "CFinite == {x. \<exists>r \<in> Reals. hcmod x < r}"
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    25
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    26
   CInfinite :: "hcomplex set"
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    27
   "CInfinite == {x. \<forall>r \<in> Reals. r < hcmod x}"
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    28
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    29
   stc :: "hcomplex => hcomplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    30
    --{* standard part map*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    31
   "stc x == (@r. x \<in> CFinite & r:SComplex & r @c= x)"
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    32
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    33
   cmonad    :: "hcomplex => hcomplex set"
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    34
   "cmonad x  == {y. x @c= y}"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    35
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    36
   cgalaxy   :: "hcomplex => hcomplex set"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    37
   "cgalaxy x == {y. (x - y) \<in> CFinite}"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    38
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    39
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    40
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    41
subsection{*Closure Laws for SComplex, the Standard Complex Numbers*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    42
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    43
lemma SComplex_add: "[| x \<in> SComplex; y \<in> SComplex |] ==> x + y \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    44
apply (simp add: SComplex_def, safe)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    45
apply (rule_tac x = "r + ra" in exI, simp)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    46
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    47
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    48
lemma SComplex_mult: "[| x \<in> SComplex; y \<in> SComplex |] ==> x * y \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    49
apply (simp add: SComplex_def, safe)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    50
apply (rule_tac x = "r * ra" in exI, simp)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    51
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    52
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    53
lemma SComplex_inverse: "x \<in> SComplex ==> inverse x \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    54
apply (simp add: SComplex_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    55
apply (blast intro: hcomplex_of_complex_inverse [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    56
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    57
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    58
lemma SComplex_divide: "[| x \<in> SComplex;  y \<in> SComplex |] ==> x/y \<in> SComplex"
14430
5cb24165a2e1 new material from Avigad, and simplified treatment of division by 0
paulson
parents: 14408
diff changeset
    59
by (simp add: SComplex_mult SComplex_inverse divide_inverse)
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    60
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    61
lemma SComplex_minus: "x \<in> SComplex ==> -x \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    62
apply (simp add: SComplex_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    63
apply (blast intro: hcomplex_of_complex_minus [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    64
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    65
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    66
lemma SComplex_minus_iff [simp]: "(-x \<in> SComplex) = (x \<in> SComplex)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    67
apply auto
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    68
apply (erule_tac [2] SComplex_minus)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    69
apply (drule SComplex_minus, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    70
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    71
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    72
lemma SComplex_diff: "[| x \<in> SComplex; y \<in> SComplex |] ==> x - y \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    73
by (simp add: diff_minus SComplex_add) 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    74
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    75
lemma SComplex_add_cancel:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    76
     "[| x + y \<in> SComplex; y \<in> SComplex |] ==> x \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    77
by (drule SComplex_diff, assumption, simp)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    78
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    79
lemma SReal_hcmod_hcomplex_of_complex [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    80
     "hcmod (hcomplex_of_complex r) \<in> Reals"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    81
by (simp add: hcomplex_of_complex_def hcmod SReal_def hypreal_of_real_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    82
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    83
lemma SReal_hcmod_number_of [simp]: "hcmod (number_of w ::hcomplex) \<in> Reals"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    84
apply (subst hcomplex_number_of [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    85
apply (rule SReal_hcmod_hcomplex_of_complex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    86
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    87
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    88
lemma SReal_hcmod_SComplex: "x \<in> SComplex ==> hcmod x \<in> Reals"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    89
by (auto simp add: SComplex_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    90
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    91
lemma SComplex_hcomplex_of_complex [simp]: "hcomplex_of_complex x \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    92
by (simp add: SComplex_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    93
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    94
lemma SComplex_number_of [simp]: "(number_of w ::hcomplex) \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    95
apply (subst hcomplex_number_of [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    96
apply (rule SComplex_hcomplex_of_complex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    97
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    98
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
    99
lemma SComplex_divide_number_of:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   100
     "r \<in> SComplex ==> r/(number_of w::hcomplex) \<in> SComplex"
14430
5cb24165a2e1 new material from Avigad, and simplified treatment of division by 0
paulson
parents: 14408
diff changeset
   101
apply (simp only: divide_inverse)
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   102
apply (blast intro!: SComplex_number_of SComplex_mult SComplex_inverse)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   103
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   104
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   105
lemma SComplex_UNIV_complex:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   106
     "{x. hcomplex_of_complex x \<in> SComplex} = (UNIV::complex set)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   107
by (simp add: SComplex_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   108
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   109
lemma SComplex_iff: "(x \<in> SComplex) = (\<exists>y. x = hcomplex_of_complex y)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   110
by (simp add: SComplex_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   111
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   112
lemma hcomplex_of_complex_image:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   113
     "hcomplex_of_complex `(UNIV::complex set) = SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   114
by (auto simp add: SComplex_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   115
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   116
lemma inv_hcomplex_of_complex_image: "inv hcomplex_of_complex `SComplex = UNIV"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   117
apply (auto simp add: SComplex_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   118
apply (rule inj_hcomplex_of_complex [THEN inv_f_f, THEN subst], blast)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   119
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   120
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   121
lemma SComplex_hcomplex_of_complex_image: 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   122
      "[| \<exists>x. x: P; P \<le> SComplex |] ==> \<exists>Q. P = hcomplex_of_complex ` Q"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   123
apply (simp add: SComplex_def, blast)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   124
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   125
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   126
lemma SComplex_SReal_dense:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   127
     "[| x \<in> SComplex; y \<in> SComplex; hcmod x < hcmod y  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   128
      |] ==> \<exists>r \<in> Reals. hcmod x< r & r < hcmod y"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   129
apply (auto intro: SReal_dense simp add: SReal_hcmod_SComplex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   130
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   131
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   132
lemma SComplex_hcmod_SReal: 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   133
      "z \<in> SComplex ==> hcmod z \<in> Reals"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   134
apply (simp add: SComplex_def SReal_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   135
apply (rule_tac z = z in eq_Abs_hcomplex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   136
apply (auto simp add: hcmod hypreal_of_real_def hcomplex_of_complex_def cmod_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   137
apply (rule_tac x = "cmod r" in exI)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   138
apply (simp add: cmod_def, ultra)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   139
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   140
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   141
lemma SComplex_zero [simp]: "0 \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   142
by (simp add: SComplex_def hcomplex_of_complex_zero_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   143
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   144
lemma SComplex_one [simp]: "1 \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   145
by (simp add: SComplex_def hcomplex_of_complex_def hcomplex_one_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   146
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   147
(*
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   148
Goalw [SComplex_def,SReal_def] "hcmod z \<in> Reals ==> z \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   149
by (res_inst_tac [("z","z")] eq_Abs_hcomplex 1);
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   150
by (auto_tac (claset(),simpset() addsimps [hcmod,hypreal_of_real_def,
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   151
    hcomplex_of_complex_def,cmod_def]));
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   152
*)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   153
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   154
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   155
subsection{*The Finite Elements form a Subring*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   156
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   157
lemma CFinite_add: "[|x \<in> CFinite; y \<in> CFinite|] ==> (x+y) \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   158
apply (simp add: CFinite_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   159
apply (blast intro!: SReal_add hcmod_add_less)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   160
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   161
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   162
lemma CFinite_mult: "[|x \<in> CFinite; y \<in> CFinite|] ==> x*y \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   163
apply (simp add: CFinite_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   164
apply (blast intro!: SReal_mult hcmod_mult_less)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   165
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   166
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   167
lemma CFinite_minus_iff [simp]: "(-x \<in> CFinite) = (x \<in> CFinite)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   168
by (simp add: CFinite_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   169
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   170
lemma SComplex_subset_CFinite [simp]: "SComplex \<le> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   171
apply (auto simp add: SComplex_def CFinite_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   172
apply (rule_tac x = "1 + hcmod (hcomplex_of_complex r) " in bexI)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   173
apply (auto intro: SReal_add)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   174
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   175
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   176
lemma HFinite_hcmod_hcomplex_of_complex [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   177
     "hcmod (hcomplex_of_complex r) \<in> HFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   178
by (auto intro!: SReal_subset_HFinite [THEN subsetD])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   179
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   180
lemma CFinite_hcomplex_of_complex [simp]: "hcomplex_of_complex x \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   181
by (auto intro!: SComplex_subset_CFinite [THEN subsetD])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   182
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   183
lemma CFiniteD: "x \<in> CFinite ==> \<exists>t \<in> Reals. hcmod x < t"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   184
by (simp add: CFinite_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   185
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   186
lemma CFinite_hcmod_iff: "(x \<in> CFinite) = (hcmod x \<in> HFinite)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   187
by (simp add: CFinite_def HFinite_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   188
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   189
lemma CFinite_number_of [simp]: "number_of w \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   190
by (rule SComplex_number_of [THEN SComplex_subset_CFinite [THEN subsetD]])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   191
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   192
lemma CFinite_bounded: "[|x \<in> CFinite; y \<le> hcmod x; 0 \<le> y |] ==> y: HFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   193
by (auto intro: HFinite_bounded simp add: CFinite_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   194
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   195
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   196
subsection{*The Complex Infinitesimals form a Subring*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   197
	 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   198
lemma CInfinitesimal_zero [iff]: "0 \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   199
by (simp add: CInfinitesimal_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   200
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   201
lemma hcomplex_sum_of_halves: "x/(2::hcomplex) + x/(2::hcomplex) = x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   202
by auto
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   203
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   204
lemma CInfinitesimal_hcmod_iff: 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   205
   "(z \<in> CInfinitesimal) = (hcmod z \<in> Infinitesimal)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   206
by (simp add: CInfinitesimal_def Infinitesimal_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   207
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   208
lemma one_not_CInfinitesimal [simp]: "1 \<notin> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   209
by (simp add: CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   210
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   211
lemma CInfinitesimal_add:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   212
     "[| x \<in> CInfinitesimal; y \<in> CInfinitesimal |] ==> (x+y) \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   213
apply (auto simp add: CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   214
apply (rule hrabs_le_Infinitesimal)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   215
apply (rule_tac y = "hcmod y" in Infinitesimal_add, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   216
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   217
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   218
lemma CInfinitesimal_minus_iff [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   219
     "(-x:CInfinitesimal) = (x:CInfinitesimal)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   220
by (simp add: CInfinitesimal_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   221
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   222
lemma CInfinitesimal_diff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   223
     "[| x \<in> CInfinitesimal;  y \<in> CInfinitesimal |] ==> x-y \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   224
by (simp add: diff_minus CInfinitesimal_add)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   225
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   226
lemma CInfinitesimal_mult:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   227
     "[| x \<in> CInfinitesimal; y \<in> CInfinitesimal |] ==> x * y \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   228
by (auto intro: Infinitesimal_mult simp add: CInfinitesimal_hcmod_iff hcmod_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   229
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   230
lemma CInfinitesimal_CFinite_mult:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   231
     "[| x \<in> CInfinitesimal; y \<in> CFinite |] ==> (x * y) \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   232
by (auto intro: Infinitesimal_HFinite_mult simp add: CInfinitesimal_hcmod_iff CFinite_hcmod_iff hcmod_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   233
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   234
lemma CInfinitesimal_CFinite_mult2:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   235
     "[| x \<in> CInfinitesimal; y \<in> CFinite |] ==> (y * x) \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   236
by (auto dest: CInfinitesimal_CFinite_mult simp add: hcomplex_mult_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   237
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   238
lemma CInfinite_hcmod_iff: "(z \<in> CInfinite) = (hcmod z \<in> HInfinite)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   239
by (simp add: CInfinite_def HInfinite_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   240
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   241
lemma CInfinite_inverse_CInfinitesimal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   242
     "x \<in> CInfinite ==> inverse x \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   243
by (auto intro: HInfinite_inverse_Infinitesimal simp add: CInfinitesimal_hcmod_iff CInfinite_hcmod_iff hcmod_hcomplex_inverse)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   244
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   245
lemma CInfinite_mult: "[|x \<in> CInfinite; y \<in> CInfinite|] ==> (x*y): CInfinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   246
by (auto intro: HInfinite_mult simp add: CInfinite_hcmod_iff hcmod_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   247
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   248
lemma CInfinite_minus_iff [simp]: "(-x \<in> CInfinite) = (x \<in> CInfinite)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   249
by (simp add: CInfinite_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   250
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   251
lemma CFinite_sum_squares:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   252
     "[|a \<in> CFinite; b \<in> CFinite; c \<in> CFinite|]   
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   253
      ==> a*a + b*b + c*c \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   254
by (auto intro: CFinite_mult CFinite_add)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   255
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   256
lemma not_CInfinitesimal_not_zero: "x \<notin> CInfinitesimal ==> x \<noteq> 0"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   257
by auto
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   258
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   259
lemma not_CInfinitesimal_not_zero2: "x \<in> CFinite - CInfinitesimal ==> x \<noteq> 0"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   260
by auto
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   261
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   262
lemma CFinite_diff_CInfinitesimal_hcmod:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   263
     "x \<in> CFinite - CInfinitesimal ==> hcmod x \<in> HFinite - Infinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   264
by (simp add: CFinite_hcmod_iff CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   265
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   266
lemma hcmod_less_CInfinitesimal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   267
     "[| e \<in> CInfinitesimal; hcmod x < hcmod e |] ==> x \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   268
by (auto intro: hrabs_less_Infinitesimal simp add: CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   269
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   270
lemma hcmod_le_CInfinitesimal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   271
     "[| e \<in> CInfinitesimal; hcmod x \<le> hcmod e |] ==> x \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   272
by (auto intro: hrabs_le_Infinitesimal simp add: CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   273
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   274
lemma CInfinitesimal_interval:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   275
     "[| e \<in> CInfinitesimal;  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   276
          e' \<in> CInfinitesimal;  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   277
          hcmod e' < hcmod x ; hcmod x < hcmod e  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   278
       |] ==> x \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   279
by (auto intro: Infinitesimal_interval simp add: CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   280
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   281
lemma CInfinitesimal_interval2:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   282
     "[| e \<in> CInfinitesimal;  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   283
         e' \<in> CInfinitesimal;  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   284
         hcmod e' \<le> hcmod x ; hcmod x \<le> hcmod e  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   285
      |] ==> x \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   286
by (auto intro: Infinitesimal_interval2 simp add: CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   287
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   288
lemma not_CInfinitesimal_mult:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   289
     "[| x \<notin> CInfinitesimal;  y \<notin> CInfinitesimal|] ==> (x*y) \<notin> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   290
apply (auto simp add: CInfinitesimal_hcmod_iff hcmod_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   291
apply (drule not_Infinitesimal_mult, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   292
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   293
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   294
lemma CInfinitesimal_mult_disj:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   295
     "x*y \<in> CInfinitesimal ==> x \<in> CInfinitesimal | y \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   296
by (auto dest: Infinitesimal_mult_disj simp add: CInfinitesimal_hcmod_iff hcmod_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   297
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   298
lemma CFinite_CInfinitesimal_diff_mult:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   299
     "[| x \<in> CFinite - CInfinitesimal; y \<in> CFinite - CInfinitesimal |] 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   300
      ==> x*y \<in> CFinite - CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   301
by (blast dest: CFinite_mult not_CInfinitesimal_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   302
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   303
lemma CInfinitesimal_subset_CFinite: "CInfinitesimal \<le> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   304
by (auto intro: Infinitesimal_subset_HFinite [THEN subsetD]
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   305
         simp add: CInfinitesimal_hcmod_iff CFinite_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   306
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   307
lemma CInfinitesimal_hcomplex_of_complex_mult:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   308
     "x \<in> CInfinitesimal ==> x * hcomplex_of_complex r \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   309
by (auto intro!: Infinitesimal_HFinite_mult simp add: CInfinitesimal_hcmod_iff hcmod_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   310
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   311
lemma CInfinitesimal_hcomplex_of_complex_mult2:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   312
     "x \<in> CInfinitesimal ==> hcomplex_of_complex r * x \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   313
by (auto intro!: Infinitesimal_HFinite_mult2 simp add: CInfinitesimal_hcmod_iff hcmod_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   314
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   315
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   316
subsection{*The ``Infinitely Close'' Relation*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   317
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   318
(*
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   319
Goalw [capprox_def,approx_def] "(z @c= w) = (hcmod z @= hcmod w)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   320
by (auto_tac (claset(),simpset() addsimps [CInfinitesimal_hcmod_iff]));
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   321
*)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   322
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   323
lemma mem_cinfmal_iff: "x:CInfinitesimal = (x @c= 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   324
by (simp add: CInfinitesimal_hcmod_iff capprox_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   325
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   326
lemma capprox_minus_iff: "(x @c= y) = (x + -y @c= 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   327
by (simp add: capprox_def diff_minus)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   328
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   329
lemma capprox_minus_iff2: "(x @c= y) = (-y + x @c= 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   330
by (simp add: capprox_def diff_minus add_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   331
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   332
lemma capprox_refl [simp]: "x @c= x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   333
by (simp add: capprox_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   334
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   335
lemma capprox_sym: "x @c= y ==> y @c= x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   336
by (simp add: capprox_def CInfinitesimal_def hcmod_diff_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   337
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   338
lemma capprox_trans: "[| x @c= y; y @c= z |] ==> x @c= z"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   339
apply (simp add: capprox_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   340
apply (drule CInfinitesimal_add, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   341
apply (simp add: diff_minus)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   342
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   343
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   344
lemma capprox_trans2: "[| r @c= x; s @c= x |] ==> r @c= s"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   345
by (blast intro: capprox_sym capprox_trans)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   346
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   347
lemma capprox_trans3: "[| x @c= r; x @c= s|] ==> r @c= s"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   348
by (blast intro: capprox_sym capprox_trans)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   349
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   350
lemma number_of_capprox_reorient [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   351
     "(number_of w @c= x) = (x @c= number_of w)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   352
by (blast intro: capprox_sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   353
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   354
lemma CInfinitesimal_capprox_minus: "(x-y \<in> CInfinitesimal) = (x @c= y)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   355
by (simp add: diff_minus capprox_minus_iff [symmetric] mem_cinfmal_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   356
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   357
lemma capprox_monad_iff: "(x @c= y) = (cmonad(x)=cmonad(y))"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   358
by (auto simp add: cmonad_def dest: capprox_sym elim!: capprox_trans equalityCE)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   359
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   360
lemma Infinitesimal_capprox:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   361
     "[| x \<in> CInfinitesimal; y \<in> CInfinitesimal |] ==> x @c= y"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   362
apply (simp add: mem_cinfmal_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   363
apply (blast intro: capprox_trans capprox_sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   364
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   365
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   366
lemma capprox_add: "[| a @c= b; c @c= d |] ==> a+c @c= b+d"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   367
apply (simp add: capprox_def diff_minus) 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   368
apply (rule minus_add_distrib [THEN ssubst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   369
apply (rule add_assoc [THEN ssubst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   370
apply (rule_tac b1 = c in add_left_commute [THEN subst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   371
apply (rule add_assoc [THEN subst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   372
apply (blast intro: CInfinitesimal_add)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   373
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   374
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   375
lemma capprox_minus: "a @c= b ==> -a @c= -b"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   376
apply (rule capprox_minus_iff [THEN iffD2, THEN capprox_sym])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   377
apply (drule capprox_minus_iff [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   378
apply (simp add: add_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   379
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   380
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   381
lemma capprox_minus2: "-a @c= -b ==> a @c= b"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   382
by (auto dest: capprox_minus)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   383
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   384
lemma capprox_minus_cancel [simp]: "(-a @c= -b) = (a @c= b)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   385
by (blast intro: capprox_minus capprox_minus2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   386
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   387
lemma capprox_add_minus: "[| a @c= b; c @c= d |] ==> a + -c @c= b + -d"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   388
by (blast intro!: capprox_add capprox_minus)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   389
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   390
lemma capprox_mult1: 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   391
      "[| a @c= b; c \<in> CFinite|] ==> a*c @c= b*c"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   392
apply (simp add: capprox_def diff_minus)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   393
apply (simp only: CInfinitesimal_CFinite_mult minus_mult_left hcomplex_add_mult_distrib [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   394
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   395
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   396
lemma capprox_mult2: "[|a @c= b; c \<in> CFinite|] ==> c*a @c= c*b"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   397
by (simp add: capprox_mult1 hcomplex_mult_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   398
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   399
lemma capprox_mult_subst:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   400
     "[|u @c= v*x; x @c= y; v \<in> CFinite|] ==> u @c= v*y"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   401
by (blast intro: capprox_mult2 capprox_trans)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   402
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   403
lemma capprox_mult_subst2:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   404
     "[| u @c= x*v; x @c= y; v \<in> CFinite |] ==> u @c= y*v"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   405
by (blast intro: capprox_mult1 capprox_trans)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   406
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   407
lemma capprox_mult_subst_SComplex:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   408
     "[| u @c= x*hcomplex_of_complex v; x @c= y |] 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   409
      ==> u @c= y*hcomplex_of_complex v"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   410
by (auto intro: capprox_mult_subst2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   411
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   412
lemma capprox_eq_imp: "a = b ==> a @c= b"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   413
by (simp add: capprox_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   414
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   415
lemma CInfinitesimal_minus_capprox: "x \<in> CInfinitesimal ==> -x @c= x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   416
by (blast intro: CInfinitesimal_minus_iff [THEN iffD2] mem_cinfmal_iff [THEN iffD1] capprox_trans2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   417
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   418
lemma bex_CInfinitesimal_iff: "(\<exists>y \<in> CInfinitesimal. x - z = y) = (x @c= z)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   419
by (unfold capprox_def, blast)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   420
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   421
lemma bex_CInfinitesimal_iff2: "(\<exists>y \<in> CInfinitesimal. x = z + y) = (x @c= z)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   422
by (simp add: bex_CInfinitesimal_iff [symmetric], force)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   423
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   424
lemma CInfinitesimal_add_capprox:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   425
     "[| y \<in> CInfinitesimal; x + y = z |] ==> x @c= z"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   426
apply (rule bex_CInfinitesimal_iff [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   427
apply (drule CInfinitesimal_minus_iff [THEN iffD2])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   428
apply (simp add: eq_commute compare_rls)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   429
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   430
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   431
lemma CInfinitesimal_add_capprox_self: "y \<in> CInfinitesimal ==> x @c= x + y"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   432
apply (rule bex_CInfinitesimal_iff [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   433
apply (drule CInfinitesimal_minus_iff [THEN iffD2])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   434
apply (simp add: eq_commute compare_rls)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   435
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   436
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   437
lemma CInfinitesimal_add_capprox_self2: "y \<in> CInfinitesimal ==> x @c= y + x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   438
by (auto dest: CInfinitesimal_add_capprox_self simp add: add_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   439
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   440
lemma CInfinitesimal_add_minus_capprox_self:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   441
     "y \<in> CInfinitesimal ==> x @c= x + -y"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   442
by (blast intro!: CInfinitesimal_add_capprox_self CInfinitesimal_minus_iff [THEN iffD2])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   443
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   444
lemma CInfinitesimal_add_cancel:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   445
     "[| y \<in> CInfinitesimal; x+y @c= z|] ==> x @c= z"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   446
apply (drule_tac x = x in CInfinitesimal_add_capprox_self [THEN capprox_sym])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   447
apply (erule capprox_trans3 [THEN capprox_sym], assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   448
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   449
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   450
lemma CInfinitesimal_add_right_cancel:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   451
     "[| y \<in> CInfinitesimal; x @c= z + y|] ==> x @c= z"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   452
apply (drule_tac x = z in CInfinitesimal_add_capprox_self2 [THEN capprox_sym])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   453
apply (erule capprox_trans3 [THEN capprox_sym])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   454
apply (simp add: add_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   455
apply (erule capprox_sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   456
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   457
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   458
lemma capprox_add_left_cancel: "d + b  @c= d + c ==> b @c= c"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   459
apply (drule capprox_minus_iff [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   460
apply (simp add: minus_add_distrib capprox_minus_iff [symmetric] add_ac)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   461
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   462
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   463
lemma capprox_add_right_cancel: "b + d @c= c + d ==> b @c= c"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   464
apply (rule capprox_add_left_cancel)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   465
apply (simp add: add_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   466
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   467
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   468
lemma capprox_add_mono1: "b @c= c ==> d + b @c= d + c"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   469
apply (rule capprox_minus_iff [THEN iffD2])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   470
apply (simp add: capprox_minus_iff [symmetric] add_ac)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   471
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   472
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   473
lemma capprox_add_mono2: "b @c= c ==> b + a @c= c + a"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   474
apply (simp (no_asm_simp) add: add_commute capprox_add_mono1)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   475
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   476
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   477
lemma capprox_add_left_iff [iff]: "(a + b @c= a + c) = (b @c= c)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   478
by (fast elim: capprox_add_left_cancel capprox_add_mono1)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   479
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   480
lemma capprox_add_right_iff [iff]: "(b + a @c= c + a) = (b @c= c)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   481
by (simp add: add_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   482
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   483
lemma capprox_CFinite: "[| x \<in> CFinite; x @c= y |] ==> y \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   484
apply (drule bex_CInfinitesimal_iff2 [THEN iffD2], safe)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   485
apply (drule CInfinitesimal_subset_CFinite [THEN subsetD, THEN CFinite_minus_iff [THEN iffD2]])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   486
apply (drule CFinite_add)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   487
apply (assumption, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   488
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   489
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   490
lemma capprox_hcomplex_of_complex_CFinite:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   491
     "x @c= hcomplex_of_complex D ==> x \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   492
by (rule capprox_sym [THEN [2] capprox_CFinite], auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   493
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   494
lemma capprox_mult_CFinite:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   495
     "[|a @c= b; c @c= d; b \<in> CFinite; d \<in> CFinite|] ==> a*c @c= b*d"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   496
apply (rule capprox_trans)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   497
apply (rule_tac [2] capprox_mult2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   498
apply (rule capprox_mult1)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   499
prefer 2 apply (blast intro: capprox_CFinite capprox_sym, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   500
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   501
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   502
lemma capprox_mult_hcomplex_of_complex:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   503
     "[|a @c= hcomplex_of_complex b; c @c= hcomplex_of_complex d |]  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   504
      ==> a*c @c= hcomplex_of_complex b * hcomplex_of_complex d"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   505
apply (blast intro!: capprox_mult_CFinite capprox_hcomplex_of_complex_CFinite CFinite_hcomplex_of_complex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   506
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   507
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   508
lemma capprox_SComplex_mult_cancel_zero:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   509
     "[| a \<in> SComplex; a \<noteq> 0; a*x @c= 0 |] ==> x @c= 0"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   510
apply (drule SComplex_inverse [THEN SComplex_subset_CFinite [THEN subsetD]])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   511
apply (auto dest: capprox_mult2 simp add: hcomplex_mult_assoc [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   512
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   513
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   514
lemma capprox_mult_SComplex1: "[| a \<in> SComplex; x @c= 0 |] ==> x*a @c= 0"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   515
by (auto dest: SComplex_subset_CFinite [THEN subsetD] capprox_mult1)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   516
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   517
lemma capprox_mult_SComplex2: "[| a \<in> SComplex; x @c= 0 |] ==> a*x @c= 0"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   518
by (auto dest: SComplex_subset_CFinite [THEN subsetD] capprox_mult2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   519
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   520
lemma capprox_mult_SComplex_zero_cancel_iff [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   521
     "[|a \<in> SComplex; a \<noteq> 0 |] ==> (a*x @c= 0) = (x @c= 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   522
by (blast intro: capprox_SComplex_mult_cancel_zero capprox_mult_SComplex2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   523
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   524
lemma capprox_SComplex_mult_cancel:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   525
     "[| a \<in> SComplex; a \<noteq> 0; a* w @c= a*z |] ==> w @c= z"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   526
apply (drule SComplex_inverse [THEN SComplex_subset_CFinite [THEN subsetD]])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   527
apply (auto dest: capprox_mult2 simp add: hcomplex_mult_assoc [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   528
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   529
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   530
lemma capprox_SComplex_mult_cancel_iff1 [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   531
     "[| a \<in> SComplex; a \<noteq> 0|] ==> (a* w @c= a*z) = (w @c= z)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   532
by (auto intro!: capprox_mult2 SComplex_subset_CFinite [THEN subsetD]
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   533
            intro: capprox_SComplex_mult_cancel)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   534
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   535
lemma capprox_hcmod_approx_zero: "(x @c= y) = (hcmod (y - x) @= 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   536
apply (rule capprox_minus_iff [THEN ssubst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   537
apply (simp add: capprox_def CInfinitesimal_hcmod_iff mem_infmal_iff diff_minus [symmetric] hcmod_diff_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   538
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   539
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   540
lemma capprox_approx_zero_iff: "(x @c= 0) = (hcmod x @= 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   541
by (simp add: capprox_hcmod_approx_zero)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   542
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   543
lemma capprox_minus_zero_cancel_iff [simp]: "(-x @c= 0) = (x @c= 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   544
by (simp add: capprox_hcmod_approx_zero)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   545
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   546
lemma Infinitesimal_hcmod_add_diff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   547
     "u @c= 0 ==> hcmod(x + u) - hcmod x \<in> Infinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   548
apply (rule_tac e = "hcmod u" and e' = "- hcmod u" in Infinitesimal_interval2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   549
apply (auto dest: capprox_approx_zero_iff [THEN iffD1]
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   550
             simp add: mem_infmal_iff [symmetric] hypreal_diff_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   551
apply (rule_tac c1 = "hcmod x" in add_le_cancel_left [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   552
apply (auto simp add: diff_minus [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   553
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   554
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   555
lemma approx_hcmod_add_hcmod: "u @c= 0 ==> hcmod(x + u) @= hcmod x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   556
apply (rule approx_minus_iff [THEN iffD2])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   557
apply (auto intro: Infinitesimal_hcmod_add_diff simp add: mem_infmal_iff [symmetric] diff_minus [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   558
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   559
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   560
lemma capprox_hcmod_approx: "x @c= y ==> hcmod x @= hcmod y"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   561
by (auto intro: approx_hcmod_add_hcmod 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   562
         dest!: bex_CInfinitesimal_iff2 [THEN iffD2]
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   563
         simp add: mem_cinfmal_iff)
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   564
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   565
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   566
subsection{*Zero is the Only Infinitesimal Complex Number*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   567
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   568
lemma CInfinitesimal_less_SComplex:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   569
   "[| x \<in> SComplex; y \<in> CInfinitesimal; 0 < hcmod x |] ==> hcmod y < hcmod x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   570
by (auto intro!: Infinitesimal_less_SReal SComplex_hcmod_SReal simp add: CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   571
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   572
lemma SComplex_Int_CInfinitesimal_zero: "SComplex Int CInfinitesimal = {0}"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   573
apply (auto simp add: SComplex_def CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   574
apply (cut_tac r = r in SReal_hcmod_hcomplex_of_complex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   575
apply (drule_tac A = Reals in IntI, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   576
apply (subgoal_tac "hcmod (hcomplex_of_complex r) = 0")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   577
apply simp
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   578
apply (simp add: SReal_Int_Infinitesimal_zero) 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   579
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   580
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   581
lemma SComplex_CInfinitesimal_zero:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   582
     "[| x \<in> SComplex; x \<in> CInfinitesimal|] ==> x = 0"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   583
by (cut_tac SComplex_Int_CInfinitesimal_zero, blast)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   584
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   585
lemma SComplex_CFinite_diff_CInfinitesimal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   586
     "[| x \<in> SComplex; x \<noteq> 0 |] ==> x \<in> CFinite - CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   587
by (auto dest: SComplex_CInfinitesimal_zero SComplex_subset_CFinite [THEN subsetD])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   588
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   589
lemma hcomplex_of_complex_CFinite_diff_CInfinitesimal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   590
     "hcomplex_of_complex x \<noteq> 0 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   591
      ==> hcomplex_of_complex x \<in> CFinite - CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   592
by (rule SComplex_CFinite_diff_CInfinitesimal, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   593
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   594
lemma hcomplex_of_complex_CInfinitesimal_iff_0 [iff]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   595
     "(hcomplex_of_complex x \<in> CInfinitesimal) = (x=0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   596
apply (auto simp add: hcomplex_of_complex_zero)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   597
apply (rule ccontr)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   598
apply (rule hcomplex_of_complex_CFinite_diff_CInfinitesimal [THEN DiffD2], auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   599
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   600
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   601
lemma number_of_not_CInfinitesimal [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   602
     "number_of w \<noteq> (0::hcomplex) ==> number_of w \<notin> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   603
by (fast dest: SComplex_number_of [THEN SComplex_CInfinitesimal_zero])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   604
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   605
lemma capprox_SComplex_not_zero:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   606
     "[| y \<in> SComplex; x @c= y; y\<noteq> 0 |] ==> x \<noteq> 0"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   607
by (auto dest: SComplex_CInfinitesimal_zero capprox_sym [THEN mem_cinfmal_iff [THEN iffD2]])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   608
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   609
lemma CFinite_diff_CInfinitesimal_capprox:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   610
     "[| x @c= y; y \<in> CFinite - CInfinitesimal |]  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   611
      ==> x \<in> CFinite - CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   612
apply (auto intro: capprox_sym [THEN [2] capprox_CFinite] 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   613
            simp add: mem_cinfmal_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   614
apply (drule capprox_trans3, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   615
apply (blast dest: capprox_sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   616
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   617
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   618
lemma CInfinitesimal_ratio:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   619
     "[| y \<noteq> 0;  y \<in> CInfinitesimal;  x/y \<in> CFinite |] ==> x \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   620
apply (drule CInfinitesimal_CFinite_mult2, assumption)
14430
5cb24165a2e1 new material from Avigad, and simplified treatment of division by 0
paulson
parents: 14408
diff changeset
   621
apply (simp add: divide_inverse hcomplex_mult_assoc)
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   622
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   623
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   624
lemma SComplex_capprox_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   625
     "[|x \<in> SComplex; y \<in> SComplex|] ==> (x @c= y) = (x = y)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   626
apply auto
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   627
apply (simp add: capprox_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   628
apply (subgoal_tac "x-y = 0", simp) 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   629
apply (rule SComplex_CInfinitesimal_zero)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   630
apply (simp add: SComplex_diff, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   631
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   632
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   633
lemma number_of_capprox_iff [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   634
    "(number_of v @c= number_of w) = (number_of v = (number_of w :: hcomplex))"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   635
by (rule SComplex_capprox_iff, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   636
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   637
lemma number_of_CInfinitesimal_iff [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   638
     "(number_of w \<in> CInfinitesimal) = (number_of w = (0::hcomplex))"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   639
apply (rule iffI)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   640
apply (fast dest: SComplex_number_of [THEN SComplex_CInfinitesimal_zero])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   641
apply (simp (no_asm_simp))
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   642
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   643
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   644
lemma hcomplex_of_complex_approx_iff [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   645
     "(hcomplex_of_complex k @c= hcomplex_of_complex m) = (k = m)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   646
apply auto
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   647
apply (rule inj_hcomplex_of_complex [THEN injD])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   648
apply (rule SComplex_capprox_iff [THEN iffD1], auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   649
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   650
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   651
lemma hcomplex_of_complex_capprox_number_of_iff [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   652
     "(hcomplex_of_complex k @c= number_of w) = (k = number_of w)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   653
by (subst hcomplex_of_complex_approx_iff [symmetric], auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   654
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   655
lemma capprox_unique_complex:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   656
     "[| r \<in> SComplex; s \<in> SComplex; r @c= x; s @c= x|] ==> r = s"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   657
by (blast intro: SComplex_capprox_iff [THEN iffD1] capprox_trans2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   658
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   659
lemma hcomplex_capproxD1:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   660
     "Abs_hcomplex(hcomplexrel ``{%n. X n}) @c= Abs_hcomplex(hcomplexrel``{%n. Y n})  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   661
      ==> Abs_hypreal(hyprel `` {%n. Re(X n)}) @=  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   662
          Abs_hypreal(hyprel `` {%n. Re(Y n)})"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   663
apply (auto simp add: approx_FreeUltrafilterNat_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   664
apply (drule capprox_minus_iff [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   665
apply (auto simp add: hcomplex_minus hcomplex_add mem_cinfmal_iff [symmetric] CInfinitesimal_hcmod_iff hcmod Infinitesimal_FreeUltrafilterNat_iff2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   666
apply (drule_tac x = m in spec, ultra)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   667
apply (rename_tac Z x)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   668
apply (case_tac "X x")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   669
apply (case_tac "Y x")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   670
apply (auto simp add: complex_minus complex_add complex_mod
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   671
           simp del: realpow_Suc)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   672
apply (rule_tac y="abs(Z x)" in order_le_less_trans)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   673
apply (drule_tac t = "Z x" in sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   674
apply (auto simp add: abs_eqI1 simp del: realpow_Suc)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   675
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   676
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   677
(* same proof *)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   678
lemma hcomplex_capproxD2:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   679
     "Abs_hcomplex(hcomplexrel ``{%n. X n}) @c= Abs_hcomplex(hcomplexrel``{%n. Y n})  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   680
      ==> Abs_hypreal(hyprel `` {%n. Im(X n)}) @=  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   681
          Abs_hypreal(hyprel `` {%n. Im(Y n)})"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   682
apply (auto simp add: approx_FreeUltrafilterNat_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   683
apply (drule capprox_minus_iff [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   684
apply (auto simp add: hcomplex_minus hcomplex_add mem_cinfmal_iff [symmetric] CInfinitesimal_hcmod_iff hcmod Infinitesimal_FreeUltrafilterNat_iff2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   685
apply (drule_tac x = m in spec, ultra)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   686
apply (rename_tac Z x)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   687
apply (case_tac "X x")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   688
apply (case_tac "Y x")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   689
apply (auto simp add: complex_minus complex_add complex_mod simp del: realpow_Suc)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   690
apply (rule_tac y="abs(Z x)" in order_le_less_trans)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   691
apply (drule_tac t = "Z x" in sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   692
apply (auto simp add: abs_eqI1 simp del: realpow_Suc)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   693
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   694
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   695
lemma hcomplex_capproxI:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   696
     "[| Abs_hypreal(hyprel `` {%n. Re(X n)}) @=  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   697
         Abs_hypreal(hyprel `` {%n. Re(Y n)});  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   698
         Abs_hypreal(hyprel `` {%n. Im(X n)}) @=  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   699
         Abs_hypreal(hyprel `` {%n. Im(Y n)})  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   700
      |] ==> Abs_hcomplex(hcomplexrel ``{%n. X n}) @c= Abs_hcomplex(hcomplexrel``{%n. Y n})"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   701
apply (drule approx_minus_iff [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   702
apply (drule approx_minus_iff [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   703
apply (rule capprox_minus_iff [THEN iffD2])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   704
apply (auto simp add: mem_cinfmal_iff [symmetric] mem_infmal_iff [symmetric] hypreal_minus hypreal_add hcomplex_minus hcomplex_add CInfinitesimal_hcmod_iff hcmod Infinitesimal_FreeUltrafilterNat_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   705
apply (rule bexI, rule_tac [2] lemma_hyprel_refl, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   706
apply (drule_tac x = "u/2" in spec)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   707
apply (drule_tac x = "u/2" in spec, auto, ultra)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   708
apply (drule sym, drule sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   709
apply (case_tac "X x")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   710
apply (case_tac "Y x")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   711
apply (auto simp add: complex_minus complex_add complex_mod snd_conv fst_conv numeral_2_eq_2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   712
apply (rename_tac a b c d)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   713
apply (subgoal_tac "sqrt (abs (a + - c) ^ 2 + abs (b + - d) ^ 2) < u")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   714
apply (rule_tac [2] lemma_sqrt_hcomplex_capprox, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   715
apply (simp add: power2_eq_square)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   716
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   717
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   718
lemma capprox_approx_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   719
     "(Abs_hcomplex(hcomplexrel ``{%n. X n}) @c= Abs_hcomplex(hcomplexrel``{%n. Y n})) = 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   720
       (Abs_hypreal(hyprel `` {%n. Re(X n)}) @= Abs_hypreal(hyprel `` {%n. Re(Y n)}) &  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   721
        Abs_hypreal(hyprel `` {%n. Im(X n)}) @= Abs_hypreal(hyprel `` {%n. Im(Y n)}))"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   722
apply (blast intro: hcomplex_capproxI hcomplex_capproxD1 hcomplex_capproxD2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   723
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   724
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   725
lemma hcomplex_of_hypreal_capprox_iff [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   726
     "(hcomplex_of_hypreal x @c= hcomplex_of_hypreal z) = (x @= z)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   727
apply (rule eq_Abs_hypreal [of x])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   728
apply (rule eq_Abs_hypreal [of z])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   729
apply (simp add: hcomplex_of_hypreal capprox_approx_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   730
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   731
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   732
lemma CFinite_HFinite_Re:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   733
     "Abs_hcomplex(hcomplexrel ``{%n. X n}) \<in> CFinite  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   734
      ==> Abs_hypreal(hyprel `` {%n. Re(X n)}) \<in> HFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   735
apply (auto simp add: CFinite_hcmod_iff hcmod HFinite_FreeUltrafilterNat_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   736
apply (rule bexI, rule_tac [2] lemma_hyprel_refl)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   737
apply (rule_tac x = u in exI, ultra)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   738
apply (drule sym, case_tac "X x")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   739
apply (auto simp add: complex_mod numeral_2_eq_2 simp del: realpow_Suc)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   740
apply (rule ccontr, drule linorder_not_less [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   741
apply (drule order_less_le_trans, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   742
apply (drule real_sqrt_ge_abs1 [THEN [2] order_less_le_trans]) 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   743
apply (auto simp add: numeral_2_eq_2 [symmetric]) 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   744
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   745
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   746
lemma CFinite_HFinite_Im:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   747
     "Abs_hcomplex(hcomplexrel ``{%n. X n}) \<in> CFinite  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   748
      ==> Abs_hypreal(hyprel `` {%n. Im(X n)}) \<in> HFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   749
apply (auto simp add: CFinite_hcmod_iff hcmod HFinite_FreeUltrafilterNat_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   750
apply (rule bexI, rule_tac [2] lemma_hyprel_refl)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   751
apply (rule_tac x = u in exI, ultra)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   752
apply (drule sym, case_tac "X x")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   753
apply (auto simp add: complex_mod simp del: realpow_Suc)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   754
apply (rule ccontr, drule linorder_not_less [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   755
apply (drule order_less_le_trans, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   756
apply (drule real_sqrt_ge_abs2 [THEN [2] order_less_le_trans], auto) 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   757
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   758
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   759
lemma HFinite_Re_Im_CFinite:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   760
     "[| Abs_hypreal(hyprel `` {%n. Re(X n)}) \<in> HFinite;  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   761
         Abs_hypreal(hyprel `` {%n. Im(X n)}) \<in> HFinite  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   762
      |] ==> Abs_hcomplex(hcomplexrel ``{%n. X n}) \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   763
apply (auto simp add: CFinite_hcmod_iff hcmod HFinite_FreeUltrafilterNat_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   764
apply (rename_tac Y Z u v)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   765
apply (rule bexI, rule_tac [2] lemma_hyprel_refl)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   766
apply (rule_tac x = "2* (u + v) " in exI)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   767
apply ultra
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   768
apply (drule sym, case_tac "X x")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   769
apply (auto simp add: complex_mod numeral_2_eq_2 simp del: realpow_Suc)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   770
apply (subgoal_tac "0 < u")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   771
 prefer 2 apply arith
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   772
apply (subgoal_tac "0 < v")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   773
 prefer 2 apply arith
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   774
apply (subgoal_tac "sqrt (abs (Y x) ^ 2 + abs (Z x) ^ 2) < 2*u + 2*v")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   775
apply (rule_tac [2] lemma_sqrt_hcomplex_capprox, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   776
apply (simp add: power2_eq_square)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   777
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   778
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   779
lemma CFinite_HFinite_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   780
     "(Abs_hcomplex(hcomplexrel ``{%n. X n}) \<in> CFinite) =  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   781
      (Abs_hypreal(hyprel `` {%n. Re(X n)}) \<in> HFinite &  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   782
       Abs_hypreal(hyprel `` {%n. Im(X n)}) \<in> HFinite)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   783
by (blast intro: HFinite_Re_Im_CFinite CFinite_HFinite_Im CFinite_HFinite_Re)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   784
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   785
lemma SComplex_Re_SReal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   786
     "Abs_hcomplex(hcomplexrel ``{%n. X n}) \<in> SComplex  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   787
      ==> Abs_hypreal(hyprel `` {%n. Re(X n)}) \<in> Reals"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   788
apply (auto simp add: SComplex_def hcomplex_of_complex_def SReal_def hypreal_of_real_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   789
apply (rule_tac x = "Re r" in exI, ultra)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   790
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   791
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   792
lemma SComplex_Im_SReal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   793
     "Abs_hcomplex(hcomplexrel ``{%n. X n}) \<in> SComplex  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   794
      ==> Abs_hypreal(hyprel `` {%n. Im(X n)}) \<in> Reals"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   795
apply (auto simp add: SComplex_def hcomplex_of_complex_def SReal_def hypreal_of_real_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   796
apply (rule_tac x = "Im r" in exI, ultra)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   797
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   798
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   799
lemma Reals_Re_Im_SComplex:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   800
     "[| Abs_hypreal(hyprel `` {%n. Re(X n)}) \<in> Reals;  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   801
         Abs_hypreal(hyprel `` {%n. Im(X n)}) \<in> Reals  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   802
      |] ==> Abs_hcomplex(hcomplexrel ``{%n. X n}) \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   803
apply (auto simp add: SComplex_def hcomplex_of_complex_def SReal_def hypreal_of_real_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   804
apply (rule_tac x = "Complex r ra" in exI, ultra)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   805
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   806
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   807
lemma SComplex_SReal_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   808
     "(Abs_hcomplex(hcomplexrel ``{%n. X n}) \<in> SComplex) =  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   809
      (Abs_hypreal(hyprel `` {%n. Re(X n)}) \<in> Reals &  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   810
       Abs_hypreal(hyprel `` {%n. Im(X n)}) \<in> Reals)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   811
by (blast intro: SComplex_Re_SReal SComplex_Im_SReal Reals_Re_Im_SComplex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   812
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   813
lemma CInfinitesimal_Infinitesimal_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   814
     "(Abs_hcomplex(hcomplexrel ``{%n. X n}) \<in> CInfinitesimal) =  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   815
      (Abs_hypreal(hyprel `` {%n. Re(X n)}) \<in> Infinitesimal &  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   816
       Abs_hypreal(hyprel `` {%n. Im(X n)}) \<in> Infinitesimal)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   817
by (simp add: mem_cinfmal_iff mem_infmal_iff hcomplex_zero_num hypreal_zero_num capprox_approx_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   818
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   819
lemma eq_Abs_hcomplex_EX:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   820
     "(\<exists>t. P t) = (\<exists>X. P (Abs_hcomplex(hcomplexrel `` {X})))"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   821
apply auto
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   822
apply (rule_tac z = t in eq_Abs_hcomplex, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   823
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   824
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   825
lemma eq_Abs_hcomplex_Bex:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   826
     "(\<exists>t \<in> A. P t) = (\<exists>X. (Abs_hcomplex(hcomplexrel `` {X})) \<in> A &  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   827
                         P (Abs_hcomplex(hcomplexrel `` {X})))"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   828
apply auto
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   829
apply (rule_tac z = t in eq_Abs_hcomplex, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   830
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   831
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   832
(* Here we go - easy proof now!! *)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   833
lemma stc_part_Ex: "x:CFinite ==> \<exists>t \<in> SComplex. x @c= t"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   834
apply (rule_tac z = x in eq_Abs_hcomplex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   835
apply (auto simp add: CFinite_HFinite_iff eq_Abs_hcomplex_Bex SComplex_SReal_iff capprox_approx_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   836
apply (drule st_part_Ex, safe)+
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   837
apply (rule_tac z = t in eq_Abs_hypreal)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   838
apply (rule_tac z = ta in eq_Abs_hypreal, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   839
apply (rule_tac x = "%n. Complex (xa n) (xb n) " in exI)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   840
apply auto
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   841
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   842
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   843
lemma stc_part_Ex1: "x:CFinite ==> EX! t. t \<in> SComplex &  x @c= t"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   844
apply (drule stc_part_Ex, safe)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   845
apply (drule_tac [2] capprox_sym, drule_tac [2] capprox_sym, drule_tac [2] capprox_sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   846
apply (auto intro!: capprox_unique_complex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   847
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   848
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   849
lemma CFinite_Int_CInfinite_empty: "CFinite Int CInfinite = {}"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   850
by (simp add: CFinite_def CInfinite_def, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   851
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   852
lemma CFinite_not_CInfinite: "x \<in> CFinite ==> x \<notin> CInfinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   853
by (insert CFinite_Int_CInfinite_empty, blast)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   854
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   855
text{*Not sure this is a good idea!*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   856
declare CFinite_Int_CInfinite_empty [simp]
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   857
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   858
lemma not_CFinite_CInfinite: "x\<notin> CFinite ==> x \<in> CInfinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   859
by (auto intro: not_HFinite_HInfinite simp add: CFinite_hcmod_iff CInfinite_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   860
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   861
lemma CInfinite_CFinite_disj: "x \<in> CInfinite | x \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   862
by (blast intro: not_CFinite_CInfinite)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   863
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   864
lemma CInfinite_CFinite_iff: "(x \<in> CInfinite) = (x \<notin> CFinite)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   865
by (blast dest: CFinite_not_CInfinite not_CFinite_CInfinite)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   866
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   867
lemma CFinite_CInfinite_iff: "(x \<in> CFinite) = (x \<notin> CInfinite)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   868
by (simp add: CInfinite_CFinite_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   869
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   870
lemma CInfinite_diff_CFinite_CInfinitesimal_disj:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   871
     "x \<notin> CInfinitesimal ==> x \<in> CInfinite | x \<in> CFinite - CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   872
by (fast intro: not_CFinite_CInfinite)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   873
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   874
lemma CFinite_inverse:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   875
     "[| x \<in> CFinite; x \<notin> CInfinitesimal |] ==> inverse x \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   876
apply (cut_tac x = "inverse x" in CInfinite_CFinite_disj)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   877
apply (auto dest!: CInfinite_inverse_CInfinitesimal)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   878
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   879
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   880
lemma CFinite_inverse2: "x \<in> CFinite - CInfinitesimal ==> inverse x \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   881
by (blast intro: CFinite_inverse)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   882
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   883
lemma CInfinitesimal_inverse_CFinite:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   884
     "x \<notin> CInfinitesimal ==> inverse(x) \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   885
apply (drule CInfinite_diff_CFinite_CInfinitesimal_disj)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   886
apply (blast intro: CFinite_inverse CInfinite_inverse_CInfinitesimal CInfinitesimal_subset_CFinite [THEN subsetD])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   887
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   888
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   889
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   890
lemma CFinite_not_CInfinitesimal_inverse:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   891
     "x \<in> CFinite - CInfinitesimal ==> inverse x \<in> CFinite - CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   892
apply (auto intro: CInfinitesimal_inverse_CFinite)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   893
apply (drule CInfinitesimal_CFinite_mult2, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   894
apply (simp add: not_CInfinitesimal_not_zero)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   895
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   896
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   897
lemma capprox_inverse:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   898
     "[| x @c= y; y \<in>  CFinite - CInfinitesimal |] ==> inverse x @c= inverse y"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   899
apply (frule CFinite_diff_CInfinitesimal_capprox, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   900
apply (frule not_CInfinitesimal_not_zero2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   901
apply (frule_tac x = x in not_CInfinitesimal_not_zero2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   902
apply (drule CFinite_inverse2)+
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   903
apply (drule capprox_mult2, assumption, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   904
apply (drule_tac c = "inverse x" in capprox_mult1, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   905
apply (auto intro: capprox_sym simp add: hcomplex_mult_assoc)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   906
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   907
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   908
lemmas hcomplex_of_complex_capprox_inverse =  hcomplex_of_complex_CFinite_diff_CInfinitesimal [THEN [2] capprox_inverse]
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   909
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   910
lemma inverse_add_CInfinitesimal_capprox:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   911
     "[| x \<in> CFinite - CInfinitesimal;  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   912
         h \<in> CInfinitesimal |] ==> inverse(x + h) @c= inverse x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   913
by (auto intro: capprox_inverse capprox_sym CInfinitesimal_add_capprox_self)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   914
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   915
lemma inverse_add_CInfinitesimal_capprox2:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   916
     "[| x \<in> CFinite - CInfinitesimal;  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   917
         h \<in> CInfinitesimal |] ==> inverse(h + x) @c= inverse x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   918
apply (rule add_commute [THEN subst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   919
apply (blast intro: inverse_add_CInfinitesimal_capprox)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   920
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   921
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   922
lemma inverse_add_CInfinitesimal_approx_CInfinitesimal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   923
     "[| x \<in> CFinite - CInfinitesimal;  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   924
         h \<in> CInfinitesimal |] ==> inverse(x + h) - inverse x @c= h"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   925
apply (rule capprox_trans2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   926
apply (auto intro: inverse_add_CInfinitesimal_capprox 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   927
       simp add: mem_cinfmal_iff diff_minus capprox_minus_iff [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   928
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   929
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   930
lemma CInfinitesimal_square_iff [iff]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   931
     "(x*x \<in> CInfinitesimal) = (x \<in> CInfinitesimal)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   932
by (simp add: CInfinitesimal_hcmod_iff hcmod_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   933
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   934
lemma capprox_CFinite_mult_cancel:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   935
     "[| a \<in> CFinite-CInfinitesimal; a*w @c= a*z |] ==> w @c= z"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   936
apply safe
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   937
apply (frule CFinite_inverse, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   938
apply (drule not_CInfinitesimal_not_zero)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   939
apply (auto dest: capprox_mult2 simp add: hcomplex_mult_assoc [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   940
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   941
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   942
lemma capprox_CFinite_mult_cancel_iff1:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   943
     "a \<in> CFinite-CInfinitesimal ==> (a * w @c= a * z) = (w @c= z)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   944
by (auto intro: capprox_mult2 capprox_CFinite_mult_cancel)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   945
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   946
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   947
subsection{*Theorems About Monads*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   948
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   949
lemma capprox_cmonad_iff: "(x @c= y) = (cmonad(x)=cmonad(y))"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   950
apply (simp add: cmonad_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   951
apply (auto dest: capprox_sym elim!: capprox_trans equalityCE)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   952
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   953
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   954
lemma CInfinitesimal_cmonad_eq:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   955
     "e \<in> CInfinitesimal ==> cmonad (x+e) = cmonad x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   956
by (fast intro!: CInfinitesimal_add_capprox_self [THEN capprox_sym] capprox_cmonad_iff [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   957
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   958
lemma mem_cmonad_iff: "(u \<in> cmonad x) = (-u \<in> cmonad (-x))"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   959
by (simp add: cmonad_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   960
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   961
lemma CInfinitesimal_cmonad_zero_iff: "(x:CInfinitesimal) = (x \<in> cmonad 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   962
by (auto intro: capprox_sym simp add: mem_cinfmal_iff cmonad_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   963
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   964
lemma cmonad_zero_minus_iff: "(x \<in> cmonad 0) = (-x \<in> cmonad 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   965
by (simp add: CInfinitesimal_cmonad_zero_iff [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   966
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   967
lemma cmonad_zero_hcmod_iff: "(x \<in> cmonad 0) = (hcmod x:monad 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   968
by (simp add: CInfinitesimal_cmonad_zero_iff [symmetric] CInfinitesimal_hcmod_iff Infinitesimal_monad_zero_iff [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   969
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   970
lemma mem_cmonad_self [simp]: "x \<in> cmonad x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   971
by (simp add: cmonad_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   972
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   973
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   974
subsection{*Theorems About Standard Part*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   975
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   976
lemma stc_capprox_self: "x \<in> CFinite ==> stc x @c= x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   977
apply (simp add: stc_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   978
apply (frule stc_part_Ex, safe)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   979
apply (rule someI2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   980
apply (auto intro: capprox_sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   981
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   982
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   983
lemma stc_SComplex: "x \<in> CFinite ==> stc x \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   984
apply (simp add: stc_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   985
apply (frule stc_part_Ex, safe)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   986
apply (rule someI2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   987
apply (auto intro: capprox_sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   988
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   989
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   990
lemma stc_CFinite: "x \<in> CFinite ==> stc x \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   991
by (erule stc_SComplex [THEN SComplex_subset_CFinite [THEN subsetD]])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   992
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   993
lemma stc_SComplex_eq [simp]: "x \<in> SComplex ==> stc x = x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   994
apply (simp add: stc_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   995
apply (rule some_equality)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   996
apply (auto intro: SComplex_subset_CFinite [THEN subsetD])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   997
apply (blast dest: SComplex_capprox_iff [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   998
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
   999
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1000
lemma stc_hcomplex_of_complex:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1001
     "stc (hcomplex_of_complex x) = hcomplex_of_complex x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1002
by auto
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1003
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1004
lemma stc_eq_capprox:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1005
     "[| x \<in> CFinite; y \<in> CFinite; stc x = stc y |] ==> x @c= y"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1006
by (auto dest!: stc_capprox_self elim!: capprox_trans3)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1007
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1008
lemma capprox_stc_eq:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1009
     "[| x \<in> CFinite; y \<in> CFinite; x @c= y |] ==> stc x = stc y"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1010
by (blast intro: capprox_trans capprox_trans2 SComplex_capprox_iff [THEN iffD1]
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1011
          dest: stc_capprox_self stc_SComplex)
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1012
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1013
lemma stc_eq_capprox_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1014
     "[| x \<in> CFinite; y \<in> CFinite|] ==> (x @c= y) = (stc x = stc y)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1015
by (blast intro: capprox_stc_eq stc_eq_capprox)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1016
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1017
lemma stc_CInfinitesimal_add_SComplex:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1018
     "[| x \<in> SComplex; e \<in> CInfinitesimal |] ==> stc(x + e) = x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1019
apply (frule stc_SComplex_eq [THEN subst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1020
prefer 2 apply assumption
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1021
apply (frule SComplex_subset_CFinite [THEN subsetD])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1022
apply (frule CInfinitesimal_subset_CFinite [THEN subsetD])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1023
apply (drule stc_SComplex_eq)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1024
apply (rule capprox_stc_eq)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1025
apply (auto intro: CFinite_add simp add: CInfinitesimal_add_capprox_self [THEN capprox_sym])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1026
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1027
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1028
lemma stc_CInfinitesimal_add_SComplex2:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1029
     "[| x \<in> SComplex; e \<in> CInfinitesimal |] ==> stc(e + x) = x"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1030
apply (rule add_commute [THEN subst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1031
apply (blast intro!: stc_CInfinitesimal_add_SComplex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1032
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1033
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1034
lemma CFinite_stc_CInfinitesimal_add:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1035
     "x \<in> CFinite ==> \<exists>e \<in> CInfinitesimal. x = stc(x) + e"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1036
by (blast dest!: stc_capprox_self [THEN capprox_sym] bex_CInfinitesimal_iff2 [THEN iffD2])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1037
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1038
lemma stc_add:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1039
     "[| x \<in> CFinite; y \<in> CFinite |] ==> stc (x + y) = stc(x) + stc(y)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1040
apply (frule CFinite_stc_CInfinitesimal_add)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1041
apply (frule_tac x = y in CFinite_stc_CInfinitesimal_add, safe)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1042
apply (subgoal_tac "stc (x + y) = stc ((stc x + e) + (stc y + ea))")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1043
apply (drule_tac [2] sym, drule_tac [2] sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1044
 prefer 2 apply simp 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1045
apply (simp (no_asm_simp) add: add_ac)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1046
apply (drule stc_SComplex)+
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1047
apply (drule SComplex_add, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1048
apply (drule CInfinitesimal_add, assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1049
apply (rule add_assoc [THEN subst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1050
apply (blast intro!: stc_CInfinitesimal_add_SComplex2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1051
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1052
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1053
lemma stc_number_of [simp]: "stc (number_of w) = number_of w"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1054
by (rule SComplex_number_of [THEN stc_SComplex_eq])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1055
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1056
lemma stc_zero [simp]: "stc 0 = 0"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1057
by simp
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1058
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1059
lemma stc_one [simp]: "stc 1 = 1"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1060
by simp
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1061
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1062
lemma stc_minus: "y \<in> CFinite ==> stc(-y) = -stc(y)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1063
apply (frule CFinite_minus_iff [THEN iffD2])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1064
apply (rule hcomplex_add_minus_eq_minus)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1065
apply (drule stc_add [symmetric], assumption)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1066
apply (simp add: add_commute)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1067
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1068
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1069
lemma stc_diff: 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1070
     "[| x \<in> CFinite; y \<in> CFinite |] ==> stc (x-y) = stc(x) - stc(y)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1071
apply (simp add: diff_minus)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1072
apply (frule_tac y1 = y in stc_minus [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1073
apply (drule_tac x1 = y in CFinite_minus_iff [THEN iffD2])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1074
apply (auto intro: stc_add)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1075
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1076
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1077
lemma lemma_stc_mult:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1078
     "[| x \<in> CFinite; y \<in> CFinite;  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1079
         e \<in> CInfinitesimal;        
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1080
         ea: CInfinitesimal |]    
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1081
       ==> e*y + x*ea + e*ea: CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1082
apply (frule_tac x = e and y = y in CInfinitesimal_CFinite_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1083
apply (frule_tac [2] x = ea and y = x in CInfinitesimal_CFinite_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1084
apply (drule_tac [3] CInfinitesimal_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1085
apply (auto intro: CInfinitesimal_add simp add: add_ac mult_ac)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1086
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1087
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1088
lemma stc_mult:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1089
     "[| x \<in> CFinite; y \<in> CFinite |]  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1090
               ==> stc (x * y) = stc(x) * stc(y)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1091
apply (frule CFinite_stc_CInfinitesimal_add)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1092
apply (frule_tac x = y in CFinite_stc_CInfinitesimal_add, safe)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1093
apply (subgoal_tac "stc (x * y) = stc ((stc x + e) * (stc y + ea))")
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1094
apply (drule_tac [2] sym, drule_tac [2] sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1095
 prefer 2 apply simp 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1096
apply (erule_tac V = "x = stc x + e" in thin_rl)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1097
apply (erule_tac V = "y = stc y + ea" in thin_rl)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1098
apply (simp add: hcomplex_add_mult_distrib right_distrib)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1099
apply (drule stc_SComplex)+
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1100
apply (simp (no_asm_use) add: add_assoc)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1101
apply (rule stc_CInfinitesimal_add_SComplex)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1102
apply (blast intro!: SComplex_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1103
apply (drule SComplex_subset_CFinite [THEN subsetD])+
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1104
apply (rule add_assoc [THEN subst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1105
apply (blast intro!: lemma_stc_mult)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1106
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1107
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1108
lemma stc_CInfinitesimal: "x \<in> CInfinitesimal ==> stc x = 0"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1109
apply (rule stc_zero [THEN subst])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1110
apply (rule capprox_stc_eq)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1111
apply (auto intro: CInfinitesimal_subset_CFinite [THEN subsetD]
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1112
                 simp add: mem_cinfmal_iff [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1113
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1114
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1115
lemma stc_not_CInfinitesimal: "stc(x) \<noteq> 0 ==> x \<notin> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1116
by (fast intro: stc_CInfinitesimal)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1117
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1118
lemma stc_inverse:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1119
     "[| x \<in> CFinite; stc x \<noteq> 0 |]  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1120
      ==> stc(inverse x) = inverse (stc x)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1121
apply (rule_tac c1 = "stc x" in hcomplex_mult_left_cancel [THEN iffD1])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1122
apply (auto simp add: stc_mult [symmetric] stc_not_CInfinitesimal CFinite_inverse)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1123
apply (subst right_inverse, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1124
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1125
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1126
lemma stc_divide [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1127
     "[| x \<in> CFinite; y \<in> CFinite; stc y \<noteq> 0 |]  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1128
      ==> stc(x/y) = (stc x) / (stc y)"
14430
5cb24165a2e1 new material from Avigad, and simplified treatment of division by 0
paulson
parents: 14408
diff changeset
  1129
by (simp add: divide_inverse stc_mult stc_not_CInfinitesimal CFinite_inverse stc_inverse)
14408
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1130
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1131
lemma stc_idempotent [simp]: "x \<in> CFinite ==> stc(stc(x)) = stc(x)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1132
by (blast intro: stc_CFinite stc_capprox_self capprox_stc_eq)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1133
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1134
lemma CFinite_HFinite_hcomplex_of_hypreal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1135
     "z \<in> HFinite ==> hcomplex_of_hypreal z \<in> CFinite"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1136
apply (rule eq_Abs_hypreal [of z])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1137
apply (simp add: hcomplex_of_hypreal CFinite_HFinite_iff hypreal_zero_def [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1138
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1139
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1140
lemma SComplex_SReal_hcomplex_of_hypreal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1141
     "x \<in> Reals ==>  hcomplex_of_hypreal x \<in> SComplex"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1142
apply (rule eq_Abs_hypreal [of x])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1143
apply (simp add: hcomplex_of_hypreal SComplex_SReal_iff hypreal_zero_def [symmetric])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1144
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1145
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1146
lemma stc_hcomplex_of_hypreal: 
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1147
 "z \<in> HFinite ==> stc(hcomplex_of_hypreal z) = hcomplex_of_hypreal (st z)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1148
apply (simp add: st_def stc_def)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1149
apply (frule st_part_Ex, safe)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1150
apply (rule someI2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1151
apply (auto intro: approx_sym)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1152
apply (drule CFinite_HFinite_hcomplex_of_hypreal)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1153
apply (frule stc_part_Ex, safe)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1154
apply (rule someI2)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1155
apply (auto intro: capprox_sym intro!: capprox_unique_complex dest: SComplex_SReal_hcomplex_of_hypreal)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1156
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1157
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1158
(*
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1159
Goal "x \<in> CFinite ==> hcmod(stc x) = st(hcmod x)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1160
by (dtac stc_capprox_self 1)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1161
by (auto_tac (claset(),simpset() addsimps [bex_CInfinitesimal_iff2 RS sym]));
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1162
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1163
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1164
approx_hcmod_add_hcmod
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1165
*)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1166
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1167
lemma CInfinitesimal_hcnj_iff [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1168
     "(hcnj z \<in> CInfinitesimal) = (z \<in> CInfinitesimal)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1169
by (simp add: CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1170
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1171
lemma CInfinite_HInfinite_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1172
     "(Abs_hcomplex(hcomplexrel ``{%n. X n}) \<in> CInfinite) =  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1173
      (Abs_hypreal(hyprel `` {%n. Re(X n)}) \<in> HInfinite |  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1174
       Abs_hypreal(hyprel `` {%n. Im(X n)}) \<in> HInfinite)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1175
by (simp add: CInfinite_CFinite_iff HInfinite_HFinite_iff CFinite_HFinite_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1176
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1177
text{*These theorems should probably be deleted*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1178
lemma hcomplex_split_CInfinitesimal_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1179
     "(hcomplex_of_hypreal x + iii * hcomplex_of_hypreal y \<in> CInfinitesimal) =  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1180
      (x \<in> Infinitesimal & y \<in> Infinitesimal)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1181
apply (rule eq_Abs_hypreal [of x])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1182
apply (rule eq_Abs_hypreal [of y])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1183
apply (simp add: iii_def hcomplex_add hcomplex_mult hcomplex_of_hypreal CInfinitesimal_Infinitesimal_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1184
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1185
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1186
lemma hcomplex_split_CFinite_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1187
     "(hcomplex_of_hypreal x + iii * hcomplex_of_hypreal y \<in> CFinite) =  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1188
      (x \<in> HFinite & y \<in> HFinite)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1189
apply (rule eq_Abs_hypreal [of x])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1190
apply (rule eq_Abs_hypreal [of y])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1191
apply (simp add: iii_def hcomplex_add hcomplex_mult hcomplex_of_hypreal CFinite_HFinite_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1192
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1193
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1194
lemma hcomplex_split_SComplex_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1195
     "(hcomplex_of_hypreal x + iii * hcomplex_of_hypreal y \<in> SComplex) =  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1196
      (x \<in> Reals & y \<in> Reals)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1197
apply (rule eq_Abs_hypreal [of x])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1198
apply (rule eq_Abs_hypreal [of y])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1199
apply (simp add: iii_def hcomplex_add hcomplex_mult hcomplex_of_hypreal SComplex_SReal_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1200
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1201
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1202
lemma hcomplex_split_CInfinite_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1203
     "(hcomplex_of_hypreal x + iii * hcomplex_of_hypreal y \<in> CInfinite) =  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1204
      (x \<in> HInfinite | y \<in> HInfinite)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1205
apply (rule eq_Abs_hypreal [of x])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1206
apply (rule eq_Abs_hypreal [of y])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1207
apply (simp add: iii_def hcomplex_add hcomplex_mult hcomplex_of_hypreal CInfinite_HInfinite_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1208
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1209
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1210
lemma hcomplex_split_capprox_iff:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1211
     "(hcomplex_of_hypreal x + iii * hcomplex_of_hypreal y @c=  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1212
       hcomplex_of_hypreal x' + iii * hcomplex_of_hypreal y') =  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1213
      (x @= x' & y @= y')"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1214
apply (rule eq_Abs_hypreal [of x])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1215
apply (rule eq_Abs_hypreal [of y])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1216
apply (rule eq_Abs_hypreal [of x'])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1217
apply (rule eq_Abs_hypreal [of y'])
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1218
apply (simp add: iii_def hcomplex_add hcomplex_mult hcomplex_of_hypreal capprox_approx_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1219
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1220
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1221
lemma complex_seq_to_hcomplex_CInfinitesimal:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1222
     "\<forall>n. cmod (X n - x) < inverse (real (Suc n)) ==>  
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1223
      Abs_hcomplex(hcomplexrel``{X}) - hcomplex_of_complex x \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1224
apply (simp add: hcomplex_diff CInfinitesimal_hcmod_iff hcomplex_of_complex_def Infinitesimal_FreeUltrafilterNat_iff hcmod)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1225
apply (rule bexI, auto)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1226
apply (auto dest: FreeUltrafilterNat_inverse_real_of_posnat FreeUltrafilterNat_all FreeUltrafilterNat_Int intro: order_less_trans FreeUltrafilterNat_subset)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1227
done
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1228
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1229
lemma CInfinitesimal_hcomplex_of_hypreal_epsilon [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1230
     "hcomplex_of_hypreal epsilon \<in> CInfinitesimal"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1231
by (simp add: CInfinitesimal_hcmod_iff)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1232
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1233
lemma hcomplex_of_complex_approx_zero_iff [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1234
     "(hcomplex_of_complex z @c= 0) = (z = 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1235
by (simp add: hcomplex_of_complex_zero [symmetric]
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1236
         del: hcomplex_of_complex_zero)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1237
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1238
lemma hcomplex_of_complex_approx_zero_iff2 [simp]:
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1239
     "(0 @c= hcomplex_of_complex z) = (z = 0)"
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1240
by (simp add: hcomplex_of_complex_zero [symmetric]
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1241
         del: hcomplex_of_complex_zero)
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1242
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1243
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1244
ML
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1245
{*
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1246
val SComplex_add = thm "SComplex_add";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1247
val SComplex_mult = thm "SComplex_mult";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1248
val SComplex_inverse = thm "SComplex_inverse";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1249
val SComplex_divide = thm "SComplex_divide";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1250
val SComplex_minus = thm "SComplex_minus";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1251
val SComplex_minus_iff = thm "SComplex_minus_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1252
val SComplex_diff = thm "SComplex_diff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1253
val SComplex_add_cancel = thm "SComplex_add_cancel";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1254
val SReal_hcmod_hcomplex_of_complex = thm "SReal_hcmod_hcomplex_of_complex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1255
val SReal_hcmod_number_of = thm "SReal_hcmod_number_of";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1256
val SReal_hcmod_SComplex = thm "SReal_hcmod_SComplex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1257
val SComplex_hcomplex_of_complex = thm "SComplex_hcomplex_of_complex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1258
val SComplex_number_of = thm "SComplex_number_of";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1259
val SComplex_divide_number_of = thm "SComplex_divide_number_of";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1260
val SComplex_UNIV_complex = thm "SComplex_UNIV_complex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1261
val SComplex_iff = thm "SComplex_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1262
val hcomplex_of_complex_image = thm "hcomplex_of_complex_image";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1263
val inv_hcomplex_of_complex_image = thm "inv_hcomplex_of_complex_image";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1264
val SComplex_hcomplex_of_complex_image = thm "SComplex_hcomplex_of_complex_image";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1265
val SComplex_SReal_dense = thm "SComplex_SReal_dense";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1266
val SComplex_hcmod_SReal = thm "SComplex_hcmod_SReal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1267
val SComplex_zero = thm "SComplex_zero";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1268
val SComplex_one = thm "SComplex_one";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1269
val CFinite_add = thm "CFinite_add";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1270
val CFinite_mult = thm "CFinite_mult";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1271
val CFinite_minus_iff = thm "CFinite_minus_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1272
val SComplex_subset_CFinite = thm "SComplex_subset_CFinite";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1273
val HFinite_hcmod_hcomplex_of_complex = thm "HFinite_hcmod_hcomplex_of_complex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1274
val CFinite_hcomplex_of_complex = thm "CFinite_hcomplex_of_complex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1275
val CFiniteD = thm "CFiniteD";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1276
val CFinite_hcmod_iff = thm "CFinite_hcmod_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1277
val CFinite_number_of = thm "CFinite_number_of";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1278
val CFinite_bounded = thm "CFinite_bounded";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1279
val CInfinitesimal_zero = thm "CInfinitesimal_zero";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1280
val hcomplex_sum_of_halves = thm "hcomplex_sum_of_halves";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1281
val CInfinitesimal_hcmod_iff = thm "CInfinitesimal_hcmod_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1282
val one_not_CInfinitesimal = thm "one_not_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1283
val CInfinitesimal_add = thm "CInfinitesimal_add";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1284
val CInfinitesimal_minus_iff = thm "CInfinitesimal_minus_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1285
val CInfinitesimal_diff = thm "CInfinitesimal_diff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1286
val CInfinitesimal_mult = thm "CInfinitesimal_mult";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1287
val CInfinitesimal_CFinite_mult = thm "CInfinitesimal_CFinite_mult";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1288
val CInfinitesimal_CFinite_mult2 = thm "CInfinitesimal_CFinite_mult2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1289
val CInfinite_hcmod_iff = thm "CInfinite_hcmod_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1290
val CInfinite_inverse_CInfinitesimal = thm "CInfinite_inverse_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1291
val CInfinite_mult = thm "CInfinite_mult";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1292
val CInfinite_minus_iff = thm "CInfinite_minus_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1293
val CFinite_sum_squares = thm "CFinite_sum_squares";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1294
val not_CInfinitesimal_not_zero = thm "not_CInfinitesimal_not_zero";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1295
val not_CInfinitesimal_not_zero2 = thm "not_CInfinitesimal_not_zero2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1296
val CFinite_diff_CInfinitesimal_hcmod = thm "CFinite_diff_CInfinitesimal_hcmod";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1297
val hcmod_less_CInfinitesimal = thm "hcmod_less_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1298
val hcmod_le_CInfinitesimal = thm "hcmod_le_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1299
val CInfinitesimal_interval = thm "CInfinitesimal_interval";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1300
val CInfinitesimal_interval2 = thm "CInfinitesimal_interval2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1301
val not_CInfinitesimal_mult = thm "not_CInfinitesimal_mult";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1302
val CInfinitesimal_mult_disj = thm "CInfinitesimal_mult_disj";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1303
val CFinite_CInfinitesimal_diff_mult = thm "CFinite_CInfinitesimal_diff_mult";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1304
val CInfinitesimal_subset_CFinite = thm "CInfinitesimal_subset_CFinite";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1305
val CInfinitesimal_hcomplex_of_complex_mult = thm "CInfinitesimal_hcomplex_of_complex_mult";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1306
val CInfinitesimal_hcomplex_of_complex_mult2 = thm "CInfinitesimal_hcomplex_of_complex_mult2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1307
val mem_cinfmal_iff = thm "mem_cinfmal_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1308
val capprox_minus_iff = thm "capprox_minus_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1309
val capprox_minus_iff2 = thm "capprox_minus_iff2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1310
val capprox_refl = thm "capprox_refl";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1311
val capprox_sym = thm "capprox_sym";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1312
val capprox_trans = thm "capprox_trans";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1313
val capprox_trans2 = thm "capprox_trans2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1314
val capprox_trans3 = thm "capprox_trans3";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1315
val number_of_capprox_reorient = thm "number_of_capprox_reorient";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1316
val CInfinitesimal_capprox_minus = thm "CInfinitesimal_capprox_minus";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1317
val capprox_monad_iff = thm "capprox_monad_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1318
val Infinitesimal_capprox = thm "Infinitesimal_capprox";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1319
val capprox_add = thm "capprox_add";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1320
val capprox_minus = thm "capprox_minus";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1321
val capprox_minus2 = thm "capprox_minus2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1322
val capprox_minus_cancel = thm "capprox_minus_cancel";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1323
val capprox_add_minus = thm "capprox_add_minus";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1324
val capprox_mult1 = thm "capprox_mult1";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1325
val capprox_mult2 = thm "capprox_mult2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1326
val capprox_mult_subst = thm "capprox_mult_subst";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1327
val capprox_mult_subst2 = thm "capprox_mult_subst2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1328
val capprox_mult_subst_SComplex = thm "capprox_mult_subst_SComplex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1329
val capprox_eq_imp = thm "capprox_eq_imp";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1330
val CInfinitesimal_minus_capprox = thm "CInfinitesimal_minus_capprox";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1331
val bex_CInfinitesimal_iff = thm "bex_CInfinitesimal_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1332
val bex_CInfinitesimal_iff2 = thm "bex_CInfinitesimal_iff2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1333
val CInfinitesimal_add_capprox = thm "CInfinitesimal_add_capprox";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1334
val CInfinitesimal_add_capprox_self = thm "CInfinitesimal_add_capprox_self";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1335
val CInfinitesimal_add_capprox_self2 = thm "CInfinitesimal_add_capprox_self2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1336
val CInfinitesimal_add_minus_capprox_self = thm "CInfinitesimal_add_minus_capprox_self";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1337
val CInfinitesimal_add_cancel = thm "CInfinitesimal_add_cancel";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1338
val CInfinitesimal_add_right_cancel = thm "CInfinitesimal_add_right_cancel";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1339
val capprox_add_left_cancel = thm "capprox_add_left_cancel";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1340
val capprox_add_right_cancel = thm "capprox_add_right_cancel";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1341
val capprox_add_mono1 = thm "capprox_add_mono1";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1342
val capprox_add_mono2 = thm "capprox_add_mono2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1343
val capprox_add_left_iff = thm "capprox_add_left_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1344
val capprox_add_right_iff = thm "capprox_add_right_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1345
val capprox_CFinite = thm "capprox_CFinite";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1346
val capprox_hcomplex_of_complex_CFinite = thm "capprox_hcomplex_of_complex_CFinite";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1347
val capprox_mult_CFinite = thm "capprox_mult_CFinite";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1348
val capprox_mult_hcomplex_of_complex = thm "capprox_mult_hcomplex_of_complex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1349
val capprox_SComplex_mult_cancel_zero = thm "capprox_SComplex_mult_cancel_zero";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1350
val capprox_mult_SComplex1 = thm "capprox_mult_SComplex1";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1351
val capprox_mult_SComplex2 = thm "capprox_mult_SComplex2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1352
val capprox_mult_SComplex_zero_cancel_iff = thm "capprox_mult_SComplex_zero_cancel_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1353
val capprox_SComplex_mult_cancel = thm "capprox_SComplex_mult_cancel";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1354
val capprox_SComplex_mult_cancel_iff1 = thm "capprox_SComplex_mult_cancel_iff1";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1355
val capprox_hcmod_approx_zero = thm "capprox_hcmod_approx_zero";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1356
val capprox_approx_zero_iff = thm "capprox_approx_zero_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1357
val capprox_minus_zero_cancel_iff = thm "capprox_minus_zero_cancel_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1358
val Infinitesimal_hcmod_add_diff = thm "Infinitesimal_hcmod_add_diff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1359
val approx_hcmod_add_hcmod = thm "approx_hcmod_add_hcmod";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1360
val capprox_hcmod_approx = thm "capprox_hcmod_approx";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1361
val CInfinitesimal_less_SComplex = thm "CInfinitesimal_less_SComplex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1362
val SComplex_Int_CInfinitesimal_zero = thm "SComplex_Int_CInfinitesimal_zero";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1363
val SComplex_CInfinitesimal_zero = thm "SComplex_CInfinitesimal_zero";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1364
val SComplex_CFinite_diff_CInfinitesimal = thm "SComplex_CFinite_diff_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1365
val hcomplex_of_complex_CFinite_diff_CInfinitesimal = thm "hcomplex_of_complex_CFinite_diff_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1366
val hcomplex_of_complex_CInfinitesimal_iff_0 = thm "hcomplex_of_complex_CInfinitesimal_iff_0";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1367
val number_of_not_CInfinitesimal = thm "number_of_not_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1368
val capprox_SComplex_not_zero = thm "capprox_SComplex_not_zero";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1369
val CFinite_diff_CInfinitesimal_capprox = thm "CFinite_diff_CInfinitesimal_capprox";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1370
val CInfinitesimal_ratio = thm "CInfinitesimal_ratio";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1371
val SComplex_capprox_iff = thm "SComplex_capprox_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1372
val number_of_capprox_iff = thm "number_of_capprox_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1373
val number_of_CInfinitesimal_iff = thm "number_of_CInfinitesimal_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1374
val hcomplex_of_complex_approx_iff = thm "hcomplex_of_complex_approx_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1375
val hcomplex_of_complex_capprox_number_of_iff = thm "hcomplex_of_complex_capprox_number_of_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1376
val capprox_unique_complex = thm "capprox_unique_complex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1377
val hcomplex_capproxD1 = thm "hcomplex_capproxD1";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1378
val hcomplex_capproxD2 = thm "hcomplex_capproxD2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1379
val hcomplex_capproxI = thm "hcomplex_capproxI";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1380
val capprox_approx_iff = thm "capprox_approx_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1381
val hcomplex_of_hypreal_capprox_iff = thm "hcomplex_of_hypreal_capprox_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1382
val CFinite_HFinite_Re = thm "CFinite_HFinite_Re";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1383
val CFinite_HFinite_Im = thm "CFinite_HFinite_Im";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1384
val HFinite_Re_Im_CFinite = thm "HFinite_Re_Im_CFinite";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1385
val CFinite_HFinite_iff = thm "CFinite_HFinite_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1386
val SComplex_Re_SReal = thm "SComplex_Re_SReal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1387
val SComplex_Im_SReal = thm "SComplex_Im_SReal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1388
val Reals_Re_Im_SComplex = thm "Reals_Re_Im_SComplex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1389
val SComplex_SReal_iff = thm "SComplex_SReal_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1390
val CInfinitesimal_Infinitesimal_iff = thm "CInfinitesimal_Infinitesimal_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1391
val eq_Abs_hcomplex_Bex = thm "eq_Abs_hcomplex_Bex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1392
val stc_part_Ex = thm "stc_part_Ex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1393
val stc_part_Ex1 = thm "stc_part_Ex1";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1394
val CFinite_Int_CInfinite_empty = thm "CFinite_Int_CInfinite_empty";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1395
val CFinite_not_CInfinite = thm "CFinite_not_CInfinite";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1396
val not_CFinite_CInfinite = thm "not_CFinite_CInfinite";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1397
val CInfinite_CFinite_disj = thm "CInfinite_CFinite_disj";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1398
val CInfinite_CFinite_iff = thm "CInfinite_CFinite_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1399
val CFinite_CInfinite_iff = thm "CFinite_CInfinite_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1400
val CInfinite_diff_CFinite_CInfinitesimal_disj = thm "CInfinite_diff_CFinite_CInfinitesimal_disj";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1401
val CFinite_inverse = thm "CFinite_inverse";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1402
val CFinite_inverse2 = thm "CFinite_inverse2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1403
val CInfinitesimal_inverse_CFinite = thm "CInfinitesimal_inverse_CFinite";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1404
val CFinite_not_CInfinitesimal_inverse = thm "CFinite_not_CInfinitesimal_inverse";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1405
val capprox_inverse = thm "capprox_inverse";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1406
val hcomplex_of_complex_capprox_inverse = thms "hcomplex_of_complex_capprox_inverse";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1407
val inverse_add_CInfinitesimal_capprox = thm "inverse_add_CInfinitesimal_capprox";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1408
val inverse_add_CInfinitesimal_capprox2 = thm "inverse_add_CInfinitesimal_capprox2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1409
val inverse_add_CInfinitesimal_approx_CInfinitesimal = thm "inverse_add_CInfinitesimal_approx_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1410
val CInfinitesimal_square_iff = thm "CInfinitesimal_square_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1411
val capprox_CFinite_mult_cancel = thm "capprox_CFinite_mult_cancel";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1412
val capprox_CFinite_mult_cancel_iff1 = thm "capprox_CFinite_mult_cancel_iff1";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1413
val capprox_cmonad_iff = thm "capprox_cmonad_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1414
val CInfinitesimal_cmonad_eq = thm "CInfinitesimal_cmonad_eq";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1415
val mem_cmonad_iff = thm "mem_cmonad_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1416
val CInfinitesimal_cmonad_zero_iff = thm "CInfinitesimal_cmonad_zero_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1417
val cmonad_zero_minus_iff = thm "cmonad_zero_minus_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1418
val cmonad_zero_hcmod_iff = thm "cmonad_zero_hcmod_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1419
val mem_cmonad_self = thm "mem_cmonad_self";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1420
val stc_capprox_self = thm "stc_capprox_self";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1421
val stc_SComplex = thm "stc_SComplex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1422
val stc_CFinite = thm "stc_CFinite";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1423
val stc_SComplex_eq = thm "stc_SComplex_eq";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1424
val stc_hcomplex_of_complex = thm "stc_hcomplex_of_complex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1425
val stc_eq_capprox = thm "stc_eq_capprox";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1426
val capprox_stc_eq = thm "capprox_stc_eq";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1427
val stc_eq_capprox_iff = thm "stc_eq_capprox_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1428
val stc_CInfinitesimal_add_SComplex = thm "stc_CInfinitesimal_add_SComplex";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1429
val stc_CInfinitesimal_add_SComplex2 = thm "stc_CInfinitesimal_add_SComplex2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1430
val CFinite_stc_CInfinitesimal_add = thm "CFinite_stc_CInfinitesimal_add";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1431
val stc_add = thm "stc_add";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1432
val stc_number_of = thm "stc_number_of";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1433
val stc_zero = thm "stc_zero";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1434
val stc_one = thm "stc_one";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1435
val stc_minus = thm "stc_minus";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1436
val stc_diff = thm "stc_diff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1437
val lemma_stc_mult = thm "lemma_stc_mult";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1438
val stc_mult = thm "stc_mult";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1439
val stc_CInfinitesimal = thm "stc_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1440
val stc_not_CInfinitesimal = thm "stc_not_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1441
val stc_inverse = thm "stc_inverse";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1442
val stc_divide = thm "stc_divide";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1443
val stc_idempotent = thm "stc_idempotent";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1444
val CFinite_HFinite_hcomplex_of_hypreal = thm "CFinite_HFinite_hcomplex_of_hypreal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1445
val SComplex_SReal_hcomplex_of_hypreal = thm "SComplex_SReal_hcomplex_of_hypreal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1446
val stc_hcomplex_of_hypreal = thm "stc_hcomplex_of_hypreal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1447
val CInfinitesimal_hcnj_iff = thm "CInfinitesimal_hcnj_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1448
val CInfinite_HInfinite_iff = thm "CInfinite_HInfinite_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1449
val hcomplex_split_CInfinitesimal_iff = thm "hcomplex_split_CInfinitesimal_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1450
val hcomplex_split_CFinite_iff = thm "hcomplex_split_CFinite_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1451
val hcomplex_split_SComplex_iff = thm "hcomplex_split_SComplex_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1452
val hcomplex_split_CInfinite_iff = thm "hcomplex_split_CInfinite_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1453
val hcomplex_split_capprox_iff = thm "hcomplex_split_capprox_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1454
val complex_seq_to_hcomplex_CInfinitesimal = thm "complex_seq_to_hcomplex_CInfinitesimal";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1455
val CInfinitesimal_hcomplex_of_hypreal_epsilon = thm "CInfinitesimal_hcomplex_of_hypreal_epsilon";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1456
val hcomplex_of_complex_approx_zero_iff = thm "hcomplex_of_complex_approx_zero_iff";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1457
val hcomplex_of_complex_approx_zero_iff2 = thm "hcomplex_of_complex_approx_zero_iff2";
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1458
*}
0cc42bb96330 converted HOL/Complex/NSCA to Isar script
paulson
parents: 14387
diff changeset
  1459
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1460
 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1461
end