src/HOL/Real/Complex_Numbers.thy
author wenzelm
Fri, 08 Mar 2002 16:24:06 +0100
changeset 13049 ce180e5b7fa0
parent 12740 4e45fb10c811
child 14263 a431e0aa34c9
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
     1
(*  Title:      HOL/Real/Complex_Numbers.thy
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
     3
    Author:     Gertrud Bauer and Markus Wenzel, TU München
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
     4
    License:    GPL (GNU GENERAL PUBLIC LICENSE)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
     5
*)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
     6
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
     7
header {* Complex numbers *}
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
     8
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
     9
theory Complex_Numbers = RealPow + Ring_and_Field:
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    10
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    11
subsection {* The field of real numbers *}  (* FIXME move *)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    12
12740
wenzelm
parents: 12733
diff changeset
    13
instance real :: field
wenzelm
parents: 12733
diff changeset
    14
  by intro_classes (simp_all add: real_add_mult_distrib real_divide_def)
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    15
12740
wenzelm
parents: 12733
diff changeset
    16
lemma real_power_two: "(r::real)\<twosuperior> = r * r"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    17
  by (simp add: numeral_2_eq_2)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    18
12740
wenzelm
parents: 12733
diff changeset
    19
lemma real_sqr_ge_zero [iff]: "0 \<le> (r::real)\<twosuperior>"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    20
  by (simp add: real_power_two)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    21
12740
wenzelm
parents: 12733
diff changeset
    22
lemma real_sqr_gt_zero: "(r::real) \<noteq> 0 ==> 0 < r\<twosuperior>"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    23
proof -
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    24
  assume "r \<noteq> 0"
12740
wenzelm
parents: 12733
diff changeset
    25
  hence "0 \<noteq> r\<twosuperior>" by simp
wenzelm
parents: 12733
diff changeset
    26
  also have "0 \<le> r\<twosuperior>" by (simp add: real_sqr_ge_zero)
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    27
  finally show ?thesis .
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    28
qed
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    29
12740
wenzelm
parents: 12733
diff changeset
    30
lemma real_sqr_not_zero: "r \<noteq> 0 ==> (r::real)\<twosuperior> \<noteq> 0"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    31
  by simp
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    32
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    33
12740
wenzelm
parents: 12733
diff changeset
    34
subsection {* Representation of complex numbers *}
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    35
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    36
datatype complex = Complex real real
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    37
12740
wenzelm
parents: 12733
diff changeset
    38
consts Re :: "complex => real"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    39
primrec "Re (Complex x y) = x"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    40
12740
wenzelm
parents: 12733
diff changeset
    41
consts Im :: "complex => real"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    42
primrec "Im (Complex x y) = y"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    43
12740
wenzelm
parents: 12733
diff changeset
    44
lemma complex_surj [simp]: "Complex (Re z) (Im z) = z"
wenzelm
parents: 12733
diff changeset
    45
  by (induct z) simp
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    46
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    47
instance complex :: zero ..
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    48
instance complex :: one ..
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    49
instance complex :: number ..
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    50
instance complex :: plus ..
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    51
instance complex :: minus ..
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    52
instance complex :: times ..
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    53
instance complex :: inverse ..
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    54
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    55
defs (overloaded)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    56
  zero_complex_def: "0 == Complex 0 0"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    57
  one_complex_def: "1 == Complex 1 0"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    58
  number_of_complex_def: "number_of b == Complex (number_of b) 0"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    59
  add_complex_def: "z + w == Complex (Re z + Re w) (Im z + Im w)"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    60
  minus_complex_def: "z - w == Complex (Re z - Re w) (Im z - Im w)"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    61
  uminus_complex_def: "- z == Complex (- Re z) (- Im z)"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    62
  mult_complex_def: "z * w ==
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    63
    Complex (Re z * Re w - Im z * Im w) (Re z * Im w + Im z * Re w)"
12740
wenzelm
parents: 12733
diff changeset
    64
  inverse_complex_def: "(z::complex) \<noteq> 0 ==> inverse z ==
wenzelm
parents: 12733
diff changeset
    65
    Complex (Re z / ((Re z)\<twosuperior> + (Im z)\<twosuperior>)) (- Im z / ((Re z)\<twosuperior> + (Im z)\<twosuperior>))"
wenzelm
parents: 12733
diff changeset
    66
  divide_complex_def: "(w::complex) \<noteq> 0 ==> z / (w::complex) == z * inverse w"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    67
12740
wenzelm
parents: 12733
diff changeset
    68
lemma complex_equality [intro?]: "Re z = Re w ==> Im z = Im w ==> z = w"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    69
  by (induct z, induct w) simp
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    70
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    71
lemma Re_zero [simp]: "Re 0 = 0"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    72
  and Im_zero [simp]: "Im 0 = 0"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    73
  by (simp_all add: zero_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    74
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    75
lemma Re_one [simp]: "Re 1 = 1"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    76
  and Im_one [simp]: "Im 1 = 0"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    77
  by (simp_all add: one_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    78
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    79
lemma Re_add [simp]: "Re (z + w) = Re z + Re w"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    80
  by (simp add: add_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    81
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    82
lemma Im_add [simp]: "Im (z + w) = Im z + Im w"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    83
  by (simp add: add_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    84
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    85
lemma Re_diff [simp]: "Re (z - w) = Re z - Re w"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    86
  by (simp add: minus_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    87
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    88
lemma Im_diff [simp]: "Im (z - w) = Im z - Im w"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    89
  by (simp add: minus_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    90
12740
wenzelm
parents: 12733
diff changeset
    91
lemma Re_uminus [simp]: "Re (-z) = - Re z"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    92
  by (simp add: uminus_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    93
12740
wenzelm
parents: 12733
diff changeset
    94
lemma Im_uminus [simp]: "Im (-z) = - Im z"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    95
  by (simp add: uminus_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    96
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    97
lemma Re_mult [simp]: "Re (z * w) = Re z * Re w - Im z * Im w"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    98
  by (simp add: mult_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
    99
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   100
lemma Im_mult [simp]: "Im (z * w) = Re z * Im w + Im z * Re w"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   101
  by (simp add: mult_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   102
12740
wenzelm
parents: 12733
diff changeset
   103
lemma zero_complex_iff: "(z = 0) = (Re z = 0 \<and> Im z = 0)"
wenzelm
parents: 12733
diff changeset
   104
  and one_complex_iff: "(z = 1) = (Re z = 1 \<and> Im z = 0)"
wenzelm
parents: 12733
diff changeset
   105
  by (auto simp add: complex_equality)
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   106
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   107
12740
wenzelm
parents: 12733
diff changeset
   108
subsection {* The field of complex numbers *}
wenzelm
parents: 12733
diff changeset
   109
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   110
instance complex :: field
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   111
proof
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   112
  fix z u v w :: complex
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   113
  show "(u + v) + w = u + (v + w)"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   114
    by (simp add: add_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   115
  show "z + w = w + z"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   116
    by (simp add: add_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   117
  show "0 + z = z"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   118
    by (simp add: add_complex_def zero_complex_def)
12740
wenzelm
parents: 12733
diff changeset
   119
  show "-z + z = 0"
wenzelm
parents: 12733
diff changeset
   120
    by (simp add: complex_equality minus_complex_def)
wenzelm
parents: 12733
diff changeset
   121
  show "z - w = z + -w"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   122
    by (simp add: add_complex_def minus_complex_def uminus_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   123
  show "(u * v) * w = u * (v * w)"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   124
    by (simp add: mult_complex_def ring_mult_ac ring_distrib real_diff_def)  (* FIXME *)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   125
  show "z * w = w * z"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   126
    by (simp add: mult_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   127
  show "1 * z = z"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   128
    by (simp add: one_complex_def mult_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   129
  show "(u + v) * w = u * w + v * w"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   130
    by (simp add: add_complex_def mult_complex_def ring_distrib)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   131
  assume neq: "w \<noteq> 0"
12740
wenzelm
parents: 12733
diff changeset
   132
  thus "z / w = z * inverse w"
wenzelm
parents: 12733
diff changeset
   133
    by (simp add: divide_complex_def)
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   134
  show "inverse w * w = 1"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   135
  proof
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   136
    have neq': "Re w * Re w + Im w * Im w \<noteq> 0"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   137
    proof -
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   138
      have ge: "0 \<le> Re w * Re w"  "0 \<le> Im w * Im w" by simp_all
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   139
      from neq have "Re w \<noteq> 0 \<or> Im w \<noteq> 0" by (simp add: zero_complex_iff)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   140
      hence "Re w * Re w \<noteq> 0 \<or> Im w * Im w \<noteq> 0" by simp
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   141
      thus ?thesis by rule (insert ge, arith+)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   142
    qed
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   143
    with neq show "Re (inverse w * w) = Re 1"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   144
      by (simp add: inverse_complex_def real_power_two real_add_divide_distrib [symmetric])
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   145
    from neq show "Im (inverse w * w) = Im 1"
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   146
      by (simp add: inverse_complex_def real_power_two
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   147
        real_mult_ac real_add_divide_distrib [symmetric])
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   148
  qed
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   149
qed
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   150
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   151
12740
wenzelm
parents: 12733
diff changeset
   152
subsection {* Basic operations *}
wenzelm
parents: 12733
diff changeset
   153
wenzelm
parents: 12733
diff changeset
   154
instance complex :: power ..
wenzelm
parents: 12733
diff changeset
   155
primrec (power_complex)
wenzelm
parents: 12733
diff changeset
   156
  "z ^ 0 = 1"
wenzelm
parents: 12733
diff changeset
   157
  "z ^ Suc n = (z::complex) * (z ^ n)"
wenzelm
parents: 12733
diff changeset
   158
wenzelm
parents: 12733
diff changeset
   159
lemma complex_power_two: "z\<twosuperior> = z * (z::complex)"
wenzelm
parents: 12733
diff changeset
   160
  by (simp add: complex_equality numeral_2_eq_2)
wenzelm
parents: 12733
diff changeset
   161
wenzelm
parents: 12733
diff changeset
   162
wenzelm
parents: 12733
diff changeset
   163
constdefs
wenzelm
parents: 12733
diff changeset
   164
  im_unit :: complex    ("\<i>")
wenzelm
parents: 12733
diff changeset
   165
  "\<i> == Complex 0 1"
wenzelm
parents: 12733
diff changeset
   166
wenzelm
parents: 12733
diff changeset
   167
lemma im_unit_square: "\<i>\<twosuperior> = -1"
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   168
  by (simp add: im_unit_def complex_power_two mult_complex_def number_of_complex_def)
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   169
12740
wenzelm
parents: 12733
diff changeset
   170
wenzelm
parents: 12733
diff changeset
   171
constdefs
wenzelm
parents: 12733
diff changeset
   172
  conjg :: "complex => complex"
wenzelm
parents: 12733
diff changeset
   173
  "conjg z == Complex (Re z) (- Im z)"
wenzelm
parents: 12733
diff changeset
   174
wenzelm
parents: 12733
diff changeset
   175
lemma Re_cong [simp]: "Re (conjg z) = Re z"
wenzelm
parents: 12733
diff changeset
   176
  by (simp add: conjg_def)
wenzelm
parents: 12733
diff changeset
   177
wenzelm
parents: 12733
diff changeset
   178
lemma Im_cong [simp]: "Im (conjg z) = - Im z"
wenzelm
parents: 12733
diff changeset
   179
  by (simp add: conjg_def)
wenzelm
parents: 12733
diff changeset
   180
wenzelm
parents: 12733
diff changeset
   181
lemma Re_conjg_self: "Re (z * conjg z) = (Re z)\<twosuperior> + (Im z)\<twosuperior>"
wenzelm
parents: 12733
diff changeset
   182
  by (simp add: real_power_two)
wenzelm
parents: 12733
diff changeset
   183
wenzelm
parents: 12733
diff changeset
   184
lemma Im_conjg_self: "Im (z * conjg z) = 0"
wenzelm
parents: 12733
diff changeset
   185
  by simp
wenzelm
parents: 12733
diff changeset
   186
wenzelm
parents: 12733
diff changeset
   187
wenzelm
parents: 12733
diff changeset
   188
subsection {* Embedding other number domains *}
wenzelm
parents: 12733
diff changeset
   189
wenzelm
parents: 12733
diff changeset
   190
constdefs
wenzelm
parents: 12733
diff changeset
   191
  complex :: "'a => complex"
wenzelm
parents: 12733
diff changeset
   192
  "complex x == Complex (real x) 0";
wenzelm
parents: 12733
diff changeset
   193
wenzelm
parents: 12733
diff changeset
   194
lemma Re_complex [simp]: "Re (complex x) = real x"
wenzelm
parents: 12733
diff changeset
   195
  by (simp add: complex_def)
wenzelm
parents: 12733
diff changeset
   196
12733
611ab32b2176 Real/Complex_Numbers.thy;
wenzelm
parents:
diff changeset
   197
end