| author | hoelzl | 
| Tue, 04 Dec 2012 18:00:37 +0100 | |
| changeset 50347 | 77e3effa50b6 | 
| parent 49962 | a8cc904a6820 | 
| child 51002 | 496013a6eb38 | 
| permissions | -rw-r--r-- | 
| 41959 | 1 | (* Title: HOL/Complex.thy | 
| 13957 | 2 | Author: Jacques D. Fleuriot | 
| 3 | Copyright: 2001 University of Edinburgh | |
| 14387 
e96d5c42c4b0
Polymorphic treatment of binary arithmetic using axclasses
 paulson parents: 
14377diff
changeset | 4 | Conversion to Isar and new proofs by Lawrence C Paulson, 2003/4 | 
| 13957 | 5 | *) | 
| 6 | ||
| 14377 | 7 | header {* Complex Numbers: Rectangular and Polar Representations *}
 | 
| 14373 | 8 | |
| 15131 | 9 | theory Complex | 
| 28952 
15a4b2cf8c34
made repository layout more coherent with logical distribution structure; stripped some $Id$s
 haftmann parents: 
28944diff
changeset | 10 | imports Transcendental | 
| 15131 | 11 | begin | 
| 13957 | 12 | |
| 14373 | 13 | datatype complex = Complex real real | 
| 13957 | 14 | |
| 44724 | 15 | primrec Re :: "complex \<Rightarrow> real" | 
| 16 | where Re: "Re (Complex x y) = x" | |
| 14373 | 17 | |
| 44724 | 18 | primrec Im :: "complex \<Rightarrow> real" | 
| 19 | where Im: "Im (Complex x y) = y" | |
| 14373 | 20 | |
| 21 | lemma complex_surj [simp]: "Complex (Re z) (Im z) = z" | |
| 22 | by (induct z) simp | |
| 13957 | 23 | |
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 24 | lemma complex_eqI [intro?]: "\<lbrakk>Re x = Re y; Im x = Im y\<rbrakk> \<Longrightarrow> x = y" | 
| 25712 | 25 | by (induct x, induct y) simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 26 | |
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 27 | lemma complex_eq_iff: "x = y \<longleftrightarrow> Re x = Re y \<and> Im x = Im y" | 
| 25712 | 28 | by (induct x, induct y) simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 29 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 30 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 31 | subsection {* Addition and Subtraction *}
 | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 32 | |
| 25599 | 33 | instantiation complex :: ab_group_add | 
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 34 | begin | 
| 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 35 | |
| 44724 | 36 | definition complex_zero_def: | 
| 37 | "0 = Complex 0 0" | |
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 38 | |
| 44724 | 39 | definition complex_add_def: | 
| 40 | "x + y = Complex (Re x + Re y) (Im x + Im y)" | |
| 23124 | 41 | |
| 44724 | 42 | definition complex_minus_def: | 
| 43 | "- x = Complex (- Re x) (- Im x)" | |
| 14323 | 44 | |
| 44724 | 45 | definition complex_diff_def: | 
| 46 | "x - (y\<Colon>complex) = x + - y" | |
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 47 | |
| 25599 | 48 | lemma Complex_eq_0 [simp]: "Complex a b = 0 \<longleftrightarrow> a = 0 \<and> b = 0" | 
| 49 | by (simp add: complex_zero_def) | |
| 14323 | 50 | |
| 14374 | 51 | lemma complex_Re_zero [simp]: "Re 0 = 0" | 
| 25599 | 52 | by (simp add: complex_zero_def) | 
| 14374 | 53 | |
| 54 | lemma complex_Im_zero [simp]: "Im 0 = 0" | |
| 25599 | 55 | by (simp add: complex_zero_def) | 
| 56 | ||
| 25712 | 57 | lemma complex_add [simp]: | 
| 58 | "Complex a b + Complex c d = Complex (a + c) (b + d)" | |
| 59 | by (simp add: complex_add_def) | |
| 60 | ||
| 25599 | 61 | lemma complex_Re_add [simp]: "Re (x + y) = Re x + Re y" | 
| 62 | by (simp add: complex_add_def) | |
| 63 | ||
| 64 | lemma complex_Im_add [simp]: "Im (x + y) = Im x + Im y" | |
| 65 | by (simp add: complex_add_def) | |
| 14323 | 66 | |
| 25712 | 67 | lemma complex_minus [simp]: | 
| 68 | "- (Complex a b) = Complex (- a) (- b)" | |
| 25599 | 69 | by (simp add: complex_minus_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 70 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 71 | lemma complex_Re_minus [simp]: "Re (- x) = - Re x" | 
| 25599 | 72 | by (simp add: complex_minus_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 73 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 74 | lemma complex_Im_minus [simp]: "Im (- x) = - Im x" | 
| 25599 | 75 | by (simp add: complex_minus_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 76 | |
| 23275 | 77 | lemma complex_diff [simp]: | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 78 | "Complex a b - Complex c d = Complex (a - c) (b - d)" | 
| 25599 | 79 | by (simp add: complex_diff_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 80 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 81 | lemma complex_Re_diff [simp]: "Re (x - y) = Re x - Re y" | 
| 25599 | 82 | by (simp add: complex_diff_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 83 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 84 | lemma complex_Im_diff [simp]: "Im (x - y) = Im x - Im y" | 
| 25599 | 85 | by (simp add: complex_diff_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 86 | |
| 25712 | 87 | instance | 
| 88 | by intro_classes (simp_all add: complex_add_def complex_diff_def) | |
| 89 | ||
| 90 | end | |
| 91 | ||
| 92 | ||
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 93 | subsection {* Multiplication and Division *}
 | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 94 | |
| 36409 | 95 | instantiation complex :: field_inverse_zero | 
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 96 | begin | 
| 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 97 | |
| 44724 | 98 | definition complex_one_def: | 
| 99 | "1 = Complex 1 0" | |
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 100 | |
| 44724 | 101 | definition complex_mult_def: | 
| 102 | "x * y = Complex (Re x * Re y - Im x * Im y) (Re x * Im y + Im x * Re y)" | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 103 | |
| 44724 | 104 | definition complex_inverse_def: | 
| 105 | "inverse x = | |
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 106 | Complex (Re x / ((Re x)\<twosuperior> + (Im x)\<twosuperior>)) (- Im x / ((Re x)\<twosuperior> + (Im x)\<twosuperior>))" | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 107 | |
| 44724 | 108 | definition complex_divide_def: | 
| 109 | "x / (y\<Colon>complex) = x * inverse y" | |
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 110 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 111 | lemma Complex_eq_1 [simp]: "(Complex a b = 1) = (a = 1 \<and> b = 0)" | 
| 25712 | 112 | by (simp add: complex_one_def) | 
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 113 | |
| 14374 | 114 | lemma complex_Re_one [simp]: "Re 1 = 1" | 
| 25712 | 115 | by (simp add: complex_one_def) | 
| 14323 | 116 | |
| 14374 | 117 | lemma complex_Im_one [simp]: "Im 1 = 0" | 
| 25712 | 118 | by (simp add: complex_one_def) | 
| 14323 | 119 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 120 | lemma complex_mult [simp]: | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 121 | "Complex a b * Complex c d = Complex (a * c - b * d) (a * d + b * c)" | 
| 25712 | 122 | by (simp add: complex_mult_def) | 
| 14323 | 123 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 124 | lemma complex_Re_mult [simp]: "Re (x * y) = Re x * Re y - Im x * Im y" | 
| 25712 | 125 | by (simp add: complex_mult_def) | 
| 14323 | 126 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 127 | lemma complex_Im_mult [simp]: "Im (x * y) = Re x * Im y + Im x * Re y" | 
| 25712 | 128 | by (simp add: complex_mult_def) | 
| 14323 | 129 | |
| 14377 | 130 | lemma complex_inverse [simp]: | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 131 | "inverse (Complex a b) = Complex (a / (a\<twosuperior> + b\<twosuperior>)) (- b / (a\<twosuperior> + b\<twosuperior>))" | 
| 25712 | 132 | by (simp add: complex_inverse_def) | 
| 14335 | 133 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 134 | lemma complex_Re_inverse: | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 135 | "Re (inverse x) = Re x / ((Re x)\<twosuperior> + (Im x)\<twosuperior>)" | 
| 25712 | 136 | by (simp add: complex_inverse_def) | 
| 14323 | 137 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 138 | lemma complex_Im_inverse: | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 139 | "Im (inverse x) = - Im x / ((Re x)\<twosuperior> + (Im x)\<twosuperior>)" | 
| 25712 | 140 | by (simp add: complex_inverse_def) | 
| 14335 | 141 | |
| 25712 | 142 | instance | 
| 143 | by intro_classes (simp_all add: complex_mult_def | |
| 49962 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 webertj parents: 
47108diff
changeset | 144 | distrib_left distrib_right right_diff_distrib left_diff_distrib | 
| 44724 | 145 | complex_inverse_def complex_divide_def | 
| 146 | power2_eq_square add_divide_distrib [symmetric] | |
| 147 | complex_eq_iff) | |
| 14335 | 148 | |
| 25712 | 149 | end | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 150 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 151 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 152 | subsection {* Numerals and Arithmetic *}
 | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 153 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 154 | lemma complex_Re_of_nat [simp]: "Re (of_nat n) = of_nat n" | 
| 44724 | 155 | by (induct n) simp_all | 
| 20556 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 156 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 157 | lemma complex_Im_of_nat [simp]: "Im (of_nat n) = 0" | 
| 44724 | 158 | by (induct n) simp_all | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 159 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 160 | lemma complex_Re_of_int [simp]: "Re (of_int z) = of_int z" | 
| 44724 | 161 | by (cases z rule: int_diff_cases) simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 162 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 163 | lemma complex_Im_of_int [simp]: "Im (of_int z) = 0" | 
| 44724 | 164 | by (cases z rule: int_diff_cases) simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 165 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 166 | lemma complex_Re_numeral [simp]: "Re (numeral v) = numeral v" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 167 | using complex_Re_of_int [of "numeral v"] by simp | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 168 | |
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 169 | lemma complex_Re_neg_numeral [simp]: "Re (neg_numeral v) = neg_numeral v" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 170 | using complex_Re_of_int [of "neg_numeral v"] by simp | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 171 | |
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 172 | lemma complex_Im_numeral [simp]: "Im (numeral v) = 0" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 173 | using complex_Im_of_int [of "numeral v"] by simp | 
| 20556 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 174 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 175 | lemma complex_Im_neg_numeral [simp]: "Im (neg_numeral v) = 0" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 176 | using complex_Im_of_int [of "neg_numeral v"] by simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 177 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 178 | lemma Complex_eq_numeral [simp]: | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 179 | "(Complex a b = numeral w) = (a = numeral w \<and> b = 0)" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 180 | by (simp add: complex_eq_iff) | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 181 | |
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 182 | lemma Complex_eq_neg_numeral [simp]: | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 183 | "(Complex a b = neg_numeral w) = (a = neg_numeral w \<and> b = 0)" | 
| 44724 | 184 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 185 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 186 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 187 | subsection {* Scalar Multiplication *}
 | 
| 20556 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 188 | |
| 25712 | 189 | instantiation complex :: real_field | 
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 190 | begin | 
| 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 191 | |
| 44724 | 192 | definition complex_scaleR_def: | 
| 193 | "scaleR r x = Complex (r * Re x) (r * Im x)" | |
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 194 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 195 | lemma complex_scaleR [simp]: | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 196 | "scaleR r (Complex a b) = Complex (r * a) (r * b)" | 
| 25712 | 197 | unfolding complex_scaleR_def by simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 198 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 199 | lemma complex_Re_scaleR [simp]: "Re (scaleR r x) = r * Re x" | 
| 25712 | 200 | unfolding complex_scaleR_def by simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 201 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 202 | lemma complex_Im_scaleR [simp]: "Im (scaleR r x) = r * Im x" | 
| 25712 | 203 | unfolding complex_scaleR_def by simp | 
| 22972 
3e96b98d37c6
generalized sgn function to work on any real normed vector space
 huffman parents: 
22968diff
changeset | 204 | |
| 25712 | 205 | instance | 
| 20556 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 206 | proof | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 207 | fix a b :: real and x y :: complex | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 208 | show "scaleR a (x + y) = scaleR a x + scaleR a y" | 
| 49962 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 webertj parents: 
47108diff
changeset | 209 | by (simp add: complex_eq_iff distrib_left) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 210 | show "scaleR (a + b) x = scaleR a x + scaleR b x" | 
| 49962 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 webertj parents: 
47108diff
changeset | 211 | by (simp add: complex_eq_iff distrib_right) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 212 | show "scaleR a (scaleR b x) = scaleR (a * b) x" | 
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 213 | by (simp add: complex_eq_iff mult_assoc) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 214 | show "scaleR 1 x = x" | 
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 215 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 216 | show "scaleR a x * y = scaleR a (x * y)" | 
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 217 | by (simp add: complex_eq_iff algebra_simps) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 218 | show "x * scaleR a y = scaleR a (x * y)" | 
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 219 | by (simp add: complex_eq_iff algebra_simps) | 
| 20556 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 220 | qed | 
| 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 221 | |
| 25712 | 222 | end | 
| 223 | ||
| 20556 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 224 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 225 | subsection{* Properties of Embedding from Reals *}
 | 
| 14323 | 226 | |
| 44724 | 227 | abbreviation complex_of_real :: "real \<Rightarrow> complex" | 
| 228 | where "complex_of_real \<equiv> of_real" | |
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 229 | |
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 230 | lemma complex_of_real_def: "complex_of_real r = Complex r 0" | 
| 44724 | 231 | by (simp add: of_real_def complex_scaleR_def) | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 232 | |
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 233 | lemma Re_complex_of_real [simp]: "Re (complex_of_real z) = z" | 
| 44724 | 234 | by (simp add: complex_of_real_def) | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 235 | |
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 236 | lemma Im_complex_of_real [simp]: "Im (complex_of_real z) = 0" | 
| 44724 | 237 | by (simp add: complex_of_real_def) | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 238 | |
| 14377 | 239 | lemma Complex_add_complex_of_real [simp]: | 
| 44724 | 240 | shows "Complex x y + complex_of_real r = Complex (x+r) y" | 
| 241 | by (simp add: complex_of_real_def) | |
| 14377 | 242 | |
| 243 | lemma complex_of_real_add_Complex [simp]: | |
| 44724 | 244 | shows "complex_of_real r + Complex x y = Complex (r+x) y" | 
| 245 | by (simp add: complex_of_real_def) | |
| 14377 | 246 | |
| 247 | lemma Complex_mult_complex_of_real: | |
| 44724 | 248 | shows "Complex x y * complex_of_real r = Complex (x*r) (y*r)" | 
| 249 | by (simp add: complex_of_real_def) | |
| 14377 | 250 | |
| 251 | lemma complex_of_real_mult_Complex: | |
| 44724 | 252 | shows "complex_of_real r * Complex x y = Complex (r*x) (r*y)" | 
| 253 | by (simp add: complex_of_real_def) | |
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 254 | |
| 44841 | 255 | lemma complex_eq_cancel_iff2 [simp]: | 
| 256 | shows "(Complex x y = complex_of_real xa) = (x = xa & y = 0)" | |
| 257 | by (simp add: complex_of_real_def) | |
| 258 | ||
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 259 | lemma complex_split_polar: | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 260 | "\<exists>r a. z = complex_of_real r * (Complex (cos a) (sin a))" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 261 | by (simp add: complex_eq_iff polar_Ex) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 262 | |
| 14377 | 263 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 264 | subsection {* Vector Norm *}
 | 
| 14323 | 265 | |
| 25712 | 266 | instantiation complex :: real_normed_field | 
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 267 | begin | 
| 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 268 | |
| 31413 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 269 | definition complex_norm_def: | 
| 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 270 | "norm z = sqrt ((Re z)\<twosuperior> + (Im z)\<twosuperior>)" | 
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 271 | |
| 44724 | 272 | abbreviation cmod :: "complex \<Rightarrow> real" | 
| 273 | where "cmod \<equiv> norm" | |
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 274 | |
| 31413 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 275 | definition complex_sgn_def: | 
| 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 276 | "sgn x = x /\<^sub>R cmod x" | 
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 277 | |
| 31413 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 278 | definition dist_complex_def: | 
| 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 279 | "dist x y = cmod (x - y)" | 
| 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 280 | |
| 37767 | 281 | definition open_complex_def: | 
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31419diff
changeset | 282 | "open (S :: complex set) \<longleftrightarrow> (\<forall>x\<in>S. \<exists>e>0. \<forall>y. dist y x < e \<longrightarrow> y \<in> S)" | 
| 31292 | 283 | |
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 284 | lemmas cmod_def = complex_norm_def | 
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 285 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 286 | lemma complex_norm [simp]: "cmod (Complex x y) = sqrt (x\<twosuperior> + y\<twosuperior>)" | 
| 25712 | 287 | by (simp add: complex_norm_def) | 
| 22852 | 288 | |
| 31413 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 289 | instance proof | 
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31419diff
changeset | 290 | fix r :: real and x y :: complex and S :: "complex set" | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 291 | show "0 \<le> norm x" | 
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 292 | by (induct x) simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 293 | show "(norm x = 0) = (x = 0)" | 
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 294 | by (induct x) simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 295 | show "norm (x + y) \<le> norm x + norm y" | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 296 | by (induct x, induct y) | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 297 | (simp add: real_sqrt_sum_squares_triangle_ineq) | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 298 | show "norm (scaleR r x) = \<bar>r\<bar> * norm x" | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 299 | by (induct x) | 
| 49962 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 webertj parents: 
47108diff
changeset | 300 | (simp add: power_mult_distrib distrib_left [symmetric] real_sqrt_mult) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 301 | show "norm (x * y) = norm x * norm y" | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 302 | by (induct x, induct y) | 
| 29667 | 303 | (simp add: real_sqrt_mult [symmetric] power2_eq_square algebra_simps) | 
| 31292 | 304 | show "sgn x = x /\<^sub>R cmod x" | 
| 305 | by (rule complex_sgn_def) | |
| 306 | show "dist x y = cmod (x - y)" | |
| 307 | by (rule dist_complex_def) | |
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31419diff
changeset | 308 | show "open S \<longleftrightarrow> (\<forall>x\<in>S. \<exists>e>0. \<forall>y. dist y x < e \<longrightarrow> y \<in> S)" | 
| 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31419diff
changeset | 309 | by (rule open_complex_def) | 
| 24520 | 310 | qed | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 311 | |
| 25712 | 312 | end | 
| 313 | ||
| 44761 | 314 | lemma cmod_unit_one: "cmod (Complex (cos a) (sin a)) = 1" | 
| 44724 | 315 | by simp | 
| 14323 | 316 | |
| 44761 | 317 | lemma cmod_complex_polar: | 
| 44724 | 318 | "cmod (complex_of_real r * Complex (cos a) (sin a)) = abs r" | 
| 319 | by (simp add: norm_mult) | |
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 320 | |
| 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 321 | lemma complex_Re_le_cmod: "Re x \<le> cmod x" | 
| 44724 | 322 | unfolding complex_norm_def | 
| 323 | by (rule real_sqrt_sum_squares_ge1) | |
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 324 | |
| 44761 | 325 | lemma complex_mod_minus_le_complex_mod: "- cmod x \<le> cmod x" | 
| 44724 | 326 | by (rule order_trans [OF _ norm_ge_zero], simp) | 
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 327 | |
| 44761 | 328 | lemma complex_mod_triangle_ineq2: "cmod(b + a) - cmod b \<le> cmod a" | 
| 44724 | 329 | by (rule ord_le_eq_trans [OF norm_triangle_ineq2], simp) | 
| 14323 | 330 | |
| 26117 | 331 | lemma abs_Re_le_cmod: "\<bar>Re x\<bar> \<le> cmod x" | 
| 44724 | 332 | by (cases x) simp | 
| 26117 | 333 | |
| 334 | lemma abs_Im_le_cmod: "\<bar>Im x\<bar> \<le> cmod x" | |
| 44724 | 335 | by (cases x) simp | 
| 336 | ||
| 44843 | 337 | text {* Properties of complex signum. *}
 | 
| 338 | ||
| 339 | lemma sgn_eq: "sgn z = z / complex_of_real (cmod z)" | |
| 340 | by (simp add: sgn_div_norm divide_inverse scaleR_conv_of_real mult_commute) | |
| 341 | ||
| 342 | lemma Re_sgn [simp]: "Re(sgn z) = Re(z)/cmod z" | |
| 343 | by (simp add: complex_sgn_def divide_inverse) | |
| 344 | ||
| 345 | lemma Im_sgn [simp]: "Im(sgn z) = Im(z)/cmod z" | |
| 346 | by (simp add: complex_sgn_def divide_inverse) | |
| 347 | ||
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 348 | |
| 23123 | 349 | subsection {* Completeness of the Complexes *}
 | 
| 350 | ||
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 351 | lemma bounded_linear_Re: "bounded_linear Re" | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 352 | by (rule bounded_linear_intro [where K=1], simp_all add: complex_norm_def) | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 353 | |
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 354 | lemma bounded_linear_Im: "bounded_linear Im" | 
| 44127 | 355 | by (rule bounded_linear_intro [where K=1], simp_all add: complex_norm_def) | 
| 23123 | 356 | |
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 357 | lemmas tendsto_Re [tendsto_intros] = | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 358 | bounded_linear.tendsto [OF bounded_linear_Re] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 359 | |
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 360 | lemmas tendsto_Im [tendsto_intros] = | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 361 | bounded_linear.tendsto [OF bounded_linear_Im] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 362 | |
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 363 | lemmas isCont_Re [simp] = bounded_linear.isCont [OF bounded_linear_Re] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 364 | lemmas isCont_Im [simp] = bounded_linear.isCont [OF bounded_linear_Im] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 365 | lemmas Cauchy_Re = bounded_linear.Cauchy [OF bounded_linear_Re] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 366 | lemmas Cauchy_Im = bounded_linear.Cauchy [OF bounded_linear_Im] | 
| 23123 | 367 | |
| 36825 | 368 | lemma tendsto_Complex [tendsto_intros]: | 
| 44724 | 369 | assumes "(f ---> a) F" and "(g ---> b) F" | 
| 370 | shows "((\<lambda>x. Complex (f x) (g x)) ---> Complex a b) F" | |
| 36825 | 371 | proof (rule tendstoI) | 
| 372 | fix r :: real assume "0 < r" | |
| 373 | hence "0 < r / sqrt 2" by (simp add: divide_pos_pos) | |
| 44724 | 374 | have "eventually (\<lambda>x. dist (f x) a < r / sqrt 2) F" | 
| 375 | using `(f ---> a) F` and `0 < r / sqrt 2` by (rule tendstoD) | |
| 36825 | 376 | moreover | 
| 44724 | 377 | have "eventually (\<lambda>x. dist (g x) b < r / sqrt 2) F" | 
| 378 | using `(g ---> b) F` and `0 < r / sqrt 2` by (rule tendstoD) | |
| 36825 | 379 | ultimately | 
| 44724 | 380 | show "eventually (\<lambda>x. dist (Complex (f x) (g x)) (Complex a b) < r) F" | 
| 36825 | 381 | by (rule eventually_elim2) | 
| 382 | (simp add: dist_norm real_sqrt_sum_squares_less) | |
| 383 | qed | |
| 384 | ||
| 23123 | 385 | instance complex :: banach | 
| 386 | proof | |
| 387 | fix X :: "nat \<Rightarrow> complex" | |
| 388 | assume X: "Cauchy X" | |
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 389 | from Cauchy_Re [OF X] have 1: "(\<lambda>n. Re (X n)) ----> lim (\<lambda>n. Re (X n))" | 
| 23123 | 390 | by (simp add: Cauchy_convergent_iff convergent_LIMSEQ_iff) | 
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 391 | from Cauchy_Im [OF X] have 2: "(\<lambda>n. Im (X n)) ----> lim (\<lambda>n. Im (X n))" | 
| 23123 | 392 | by (simp add: Cauchy_convergent_iff convergent_LIMSEQ_iff) | 
| 393 | have "X ----> Complex (lim (\<lambda>n. Re (X n))) (lim (\<lambda>n. Im (X n)))" | |
| 44748 
7f6838b3474a
remove redundant lemma LIMSEQ_Complex in favor of tendsto_Complex
 huffman parents: 
44724diff
changeset | 394 | using tendsto_Complex [OF 1 2] by simp | 
| 23123 | 395 | thus "convergent X" | 
| 396 | by (rule convergentI) | |
| 397 | qed | |
| 398 | ||
| 399 | ||
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 400 | subsection {* The Complex Number $i$ *}
 | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 401 | |
| 44724 | 402 | definition "ii" :: complex  ("\<i>")
 | 
| 403 | where i_def: "ii \<equiv> Complex 0 1" | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 404 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 405 | lemma complex_Re_i [simp]: "Re ii = 0" | 
| 44724 | 406 | by (simp add: i_def) | 
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 407 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 408 | lemma complex_Im_i [simp]: "Im ii = 1" | 
| 44724 | 409 | by (simp add: i_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 410 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 411 | lemma Complex_eq_i [simp]: "(Complex x y = ii) = (x = 0 \<and> y = 1)" | 
| 44724 | 412 | by (simp add: i_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 413 | |
| 44902 
9ba11d41cd1f
move lemmas about complex number 'i' to Complex.thy and Library/Inner_Product.thy
 huffman parents: 
44846diff
changeset | 414 | lemma norm_ii [simp]: "norm ii = 1" | 
| 
9ba11d41cd1f
move lemmas about complex number 'i' to Complex.thy and Library/Inner_Product.thy
 huffman parents: 
44846diff
changeset | 415 | by (simp add: i_def) | 
| 
9ba11d41cd1f
move lemmas about complex number 'i' to Complex.thy and Library/Inner_Product.thy
 huffman parents: 
44846diff
changeset | 416 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 417 | lemma complex_i_not_zero [simp]: "ii \<noteq> 0" | 
| 44724 | 418 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 419 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 420 | lemma complex_i_not_one [simp]: "ii \<noteq> 1" | 
| 44724 | 421 | by (simp add: complex_eq_iff) | 
| 23124 | 422 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 423 | lemma complex_i_not_numeral [simp]: "ii \<noteq> numeral w" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 424 | by (simp add: complex_eq_iff) | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 425 | |
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 426 | lemma complex_i_not_neg_numeral [simp]: "ii \<noteq> neg_numeral w" | 
| 44724 | 427 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 428 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 429 | lemma i_mult_Complex [simp]: "ii * Complex a b = Complex (- b) a" | 
| 44724 | 430 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 431 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 432 | lemma Complex_mult_i [simp]: "Complex a b * ii = Complex (- b) a" | 
| 44724 | 433 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 434 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 435 | lemma i_complex_of_real [simp]: "ii * complex_of_real r = Complex 0 r" | 
| 44724 | 436 | by (simp add: i_def complex_of_real_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 437 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 438 | lemma complex_of_real_i [simp]: "complex_of_real r * ii = Complex 0 r" | 
| 44724 | 439 | by (simp add: i_def complex_of_real_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 440 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 441 | lemma i_squared [simp]: "ii * ii = -1" | 
| 44724 | 442 | by (simp add: i_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 443 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 444 | lemma power2_i [simp]: "ii\<twosuperior> = -1" | 
| 44724 | 445 | by (simp add: power2_eq_square) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 446 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 447 | lemma inverse_i [simp]: "inverse ii = - ii" | 
| 44724 | 448 | by (rule inverse_unique, simp) | 
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 449 | |
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 450 | lemma complex_i_mult_minus [simp]: "ii * (ii * x) = - x" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 451 | by (simp add: mult_assoc [symmetric]) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 452 | |
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 453 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 454 | subsection {* Complex Conjugation *}
 | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 455 | |
| 44724 | 456 | definition cnj :: "complex \<Rightarrow> complex" where | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 457 | "cnj z = Complex (Re z) (- Im z)" | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 458 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 459 | lemma complex_cnj [simp]: "cnj (Complex a b) = Complex a (- b)" | 
| 44724 | 460 | by (simp add: cnj_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 461 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 462 | lemma complex_Re_cnj [simp]: "Re (cnj x) = Re x" | 
| 44724 | 463 | by (simp add: cnj_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 464 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 465 | lemma complex_Im_cnj [simp]: "Im (cnj x) = - Im x" | 
| 44724 | 466 | by (simp add: cnj_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 467 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 468 | lemma complex_cnj_cancel_iff [simp]: "(cnj x = cnj y) = (x = y)" | 
| 44724 | 469 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 470 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 471 | lemma complex_cnj_cnj [simp]: "cnj (cnj z) = z" | 
| 44724 | 472 | by (simp add: cnj_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 473 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 474 | lemma complex_cnj_zero [simp]: "cnj 0 = 0" | 
| 44724 | 475 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 476 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 477 | lemma complex_cnj_zero_iff [iff]: "(cnj z = 0) = (z = 0)" | 
| 44724 | 478 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 479 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 480 | lemma complex_cnj_add: "cnj (x + y) = cnj x + cnj y" | 
| 44724 | 481 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 482 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 483 | lemma complex_cnj_diff: "cnj (x - y) = cnj x - cnj y" | 
| 44724 | 484 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 485 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 486 | lemma complex_cnj_minus: "cnj (- x) = - cnj x" | 
| 44724 | 487 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 488 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 489 | lemma complex_cnj_one [simp]: "cnj 1 = 1" | 
| 44724 | 490 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 491 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 492 | lemma complex_cnj_mult: "cnj (x * y) = cnj x * cnj y" | 
| 44724 | 493 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 494 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 495 | lemma complex_cnj_inverse: "cnj (inverse x) = inverse (cnj x)" | 
| 44724 | 496 | by (simp add: complex_inverse_def) | 
| 14323 | 497 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 498 | lemma complex_cnj_divide: "cnj (x / y) = cnj x / cnj y" | 
| 44724 | 499 | by (simp add: complex_divide_def complex_cnj_mult complex_cnj_inverse) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 500 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 501 | lemma complex_cnj_power: "cnj (x ^ n) = cnj x ^ n" | 
| 44724 | 502 | by (induct n, simp_all add: complex_cnj_mult) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 503 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 504 | lemma complex_cnj_of_nat [simp]: "cnj (of_nat n) = of_nat n" | 
| 44724 | 505 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 506 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 507 | lemma complex_cnj_of_int [simp]: "cnj (of_int z) = of_int z" | 
| 44724 | 508 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 509 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 510 | lemma complex_cnj_numeral [simp]: "cnj (numeral w) = numeral w" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 511 | by (simp add: complex_eq_iff) | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 512 | |
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 513 | lemma complex_cnj_neg_numeral [simp]: "cnj (neg_numeral w) = neg_numeral w" | 
| 44724 | 514 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 515 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 516 | lemma complex_cnj_scaleR: "cnj (scaleR r x) = scaleR r (cnj x)" | 
| 44724 | 517 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 518 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 519 | lemma complex_mod_cnj [simp]: "cmod (cnj z) = cmod z" | 
| 44724 | 520 | by (simp add: complex_norm_def) | 
| 14323 | 521 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 522 | lemma complex_cnj_complex_of_real [simp]: "cnj (of_real x) = of_real x" | 
| 44724 | 523 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 524 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 525 | lemma complex_cnj_i [simp]: "cnj ii = - ii" | 
| 44724 | 526 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 527 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 528 | lemma complex_add_cnj: "z + cnj z = complex_of_real (2 * Re z)" | 
| 44724 | 529 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 530 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 531 | lemma complex_diff_cnj: "z - cnj z = complex_of_real (2 * Im z) * ii" | 
| 44724 | 532 | by (simp add: complex_eq_iff) | 
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 533 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 534 | lemma complex_mult_cnj: "z * cnj z = complex_of_real ((Re z)\<twosuperior> + (Im z)\<twosuperior>)" | 
| 44724 | 535 | by (simp add: complex_eq_iff power2_eq_square) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 536 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 537 | lemma complex_mod_mult_cnj: "cmod (z * cnj z) = (cmod z)\<twosuperior>" | 
| 44724 | 538 | by (simp add: norm_mult power2_eq_square) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 539 | |
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 540 | lemma complex_mod_sqrt_Re_mult_cnj: "cmod z = sqrt (Re (z * cnj z))" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 541 | by (simp add: cmod_def power2_eq_square) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 542 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 543 | lemma complex_In_mult_cnj_zero [simp]: "Im (z * cnj z) = 0" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 544 | by simp | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 545 | |
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 546 | lemma bounded_linear_cnj: "bounded_linear cnj" | 
| 44127 | 547 | using complex_cnj_add complex_cnj_scaleR | 
| 548 | by (rule bounded_linear_intro [where K=1], simp) | |
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 549 | |
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 550 | lemmas tendsto_cnj [tendsto_intros] = | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 551 | bounded_linear.tendsto [OF bounded_linear_cnj] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 552 | |
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 553 | lemmas isCont_cnj [simp] = | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 554 | bounded_linear.isCont [OF bounded_linear_cnj] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 555 | |
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 556 | |
| 14323 | 557 | subsection{*Finally! Polar Form for Complex Numbers*}
 | 
| 558 | ||
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 559 | subsubsection {* $\cos \theta + i \sin \theta$ *}
 | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 560 | |
| 44715 | 561 | definition cis :: "real \<Rightarrow> complex" where | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 562 | "cis a = Complex (cos a) (sin a)" | 
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 563 | |
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 564 | lemma Re_cis [simp]: "Re (cis a) = cos a" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 565 | by (simp add: cis_def) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 566 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 567 | lemma Im_cis [simp]: "Im (cis a) = sin a" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 568 | by (simp add: cis_def) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 569 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 570 | lemma cis_zero [simp]: "cis 0 = 1" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 571 | by (simp add: cis_def) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 572 | |
| 44828 | 573 | lemma norm_cis [simp]: "norm (cis a) = 1" | 
| 574 | by (simp add: cis_def) | |
| 575 | ||
| 576 | lemma sgn_cis [simp]: "sgn (cis a) = cis a" | |
| 577 | by (simp add: sgn_div_norm) | |
| 578 | ||
| 579 | lemma cis_neq_zero [simp]: "cis a \<noteq> 0" | |
| 580 | by (metis norm_cis norm_zero zero_neq_one) | |
| 581 | ||
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 582 | lemma cis_mult: "cis a * cis b = cis (a + b)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 583 | by (simp add: cis_def cos_add sin_add) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 584 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 585 | lemma DeMoivre: "(cis a) ^ n = cis (real n * a)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 586 | by (induct n, simp_all add: real_of_nat_Suc algebra_simps cis_mult) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 587 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 588 | lemma cis_inverse [simp]: "inverse(cis a) = cis (-a)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 589 | by (simp add: cis_def) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 590 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 591 | lemma cis_divide: "cis a / cis b = cis (a - b)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 592 | by (simp add: complex_divide_def cis_mult diff_minus) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 593 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 594 | lemma cos_n_Re_cis_pow_n: "cos (real n * a) = Re(cis a ^ n)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 595 | by (auto simp add: DeMoivre) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 596 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 597 | lemma sin_n_Im_cis_pow_n: "sin (real n * a) = Im(cis a ^ n)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 598 | by (auto simp add: DeMoivre) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 599 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 600 | subsubsection {* $r(\cos \theta + i \sin \theta)$ *}
 | 
| 44715 | 601 | |
| 602 | definition rcis :: "[real, real] \<Rightarrow> complex" where | |
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 603 | "rcis r a = complex_of_real r * cis a" | 
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 604 | |
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 605 | lemma Re_rcis [simp]: "Re(rcis r a) = r * cos a" | 
| 44828 | 606 | by (simp add: rcis_def) | 
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 607 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 608 | lemma Im_rcis [simp]: "Im(rcis r a) = r * sin a" | 
| 44828 | 609 | by (simp add: rcis_def) | 
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 610 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 611 | lemma rcis_Ex: "\<exists>r a. z = rcis r a" | 
| 44828 | 612 | by (simp add: complex_eq_iff polar_Ex) | 
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 613 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 614 | lemma complex_mod_rcis [simp]: "cmod(rcis r a) = abs r" | 
| 44828 | 615 | by (simp add: rcis_def norm_mult) | 
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 616 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 617 | lemma cis_rcis_eq: "cis a = rcis 1 a" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 618 | by (simp add: rcis_def) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 619 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 620 | lemma rcis_mult: "rcis r1 a * rcis r2 b = rcis (r1*r2) (a + b)" | 
| 44828 | 621 | by (simp add: rcis_def cis_mult) | 
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 622 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 623 | lemma rcis_zero_mod [simp]: "rcis 0 a = 0" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 624 | by (simp add: rcis_def) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 625 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 626 | lemma rcis_zero_arg [simp]: "rcis r 0 = complex_of_real r" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 627 | by (simp add: rcis_def) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 628 | |
| 44828 | 629 | lemma rcis_eq_zero_iff [simp]: "rcis r a = 0 \<longleftrightarrow> r = 0" | 
| 630 | by (simp add: rcis_def) | |
| 631 | ||
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 632 | lemma DeMoivre2: "(rcis r a) ^ n = rcis (r ^ n) (real n * a)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 633 | by (simp add: rcis_def power_mult_distrib DeMoivre) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 634 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 635 | lemma rcis_inverse: "inverse(rcis r a) = rcis (1/r) (-a)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 636 | by (simp add: divide_inverse rcis_def) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 637 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 638 | lemma rcis_divide: "rcis r1 a / rcis r2 b = rcis (r1/r2) (a - b)" | 
| 44828 | 639 | by (simp add: rcis_def cis_divide [symmetric]) | 
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 640 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 641 | subsubsection {* Complex exponential *}
 | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 642 | |
| 44291 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 643 | abbreviation expi :: "complex \<Rightarrow> complex" | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 644 | where "expi \<equiv> exp" | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 645 | |
| 44712 
1e490e891c88
replace lemma expi_imaginary with reoriented lemma cis_conv_exp
 huffman parents: 
44711diff
changeset | 646 | lemma cis_conv_exp: "cis b = exp (Complex 0 b)" | 
| 44291 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 647 | proof (rule complex_eqI) | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 648 |   { fix n have "Complex 0 b ^ n =
 | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 649 | real (fact n) *\<^sub>R Complex (cos_coeff n * b ^ n) (sin_coeff n * b ^ n)" | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 650 | apply (induct n) | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 651 | apply (simp add: cos_coeff_def sin_coeff_def) | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 652 | apply (simp add: sin_coeff_Suc cos_coeff_Suc del: mult_Suc) | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 653 | done } note * = this | 
| 44712 
1e490e891c88
replace lemma expi_imaginary with reoriented lemma cis_conv_exp
 huffman parents: 
44711diff
changeset | 654 | show "Re (cis b) = Re (exp (Complex 0 b))" | 
| 44291 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 655 | unfolding exp_def cis_def cos_def | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 656 | by (subst bounded_linear.suminf[OF bounded_linear_Re summable_exp_generic], | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 657 | simp add: * mult_assoc [symmetric]) | 
| 44712 
1e490e891c88
replace lemma expi_imaginary with reoriented lemma cis_conv_exp
 huffman parents: 
44711diff
changeset | 658 | show "Im (cis b) = Im (exp (Complex 0 b))" | 
| 44291 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 659 | unfolding exp_def cis_def sin_def | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 660 | by (subst bounded_linear.suminf[OF bounded_linear_Im summable_exp_generic], | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 661 | simp add: * mult_assoc [symmetric]) | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 662 | qed | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 663 | |
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 664 | lemma expi_def: "expi z = complex_of_real (exp (Re z)) * cis (Im z)" | 
| 44712 
1e490e891c88
replace lemma expi_imaginary with reoriented lemma cis_conv_exp
 huffman parents: 
44711diff
changeset | 665 | unfolding cis_conv_exp exp_of_real [symmetric] mult_exp_exp by simp | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 666 | |
| 44828 | 667 | lemma Re_exp: "Re (exp z) = exp (Re z) * cos (Im z)" | 
| 668 | unfolding expi_def by simp | |
| 669 | ||
| 670 | lemma Im_exp: "Im (exp z) = exp (Re z) * sin (Im z)" | |
| 671 | unfolding expi_def by simp | |
| 672 | ||
| 14374 | 673 | lemma complex_expi_Ex: "\<exists>a r. z = complex_of_real r * expi a" | 
| 14373 | 674 | apply (insert rcis_Ex [of z]) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 675 | apply (auto simp add: expi_def rcis_def mult_assoc [symmetric]) | 
| 14334 | 676 | apply (rule_tac x = "ii * complex_of_real a" in exI, auto) | 
| 14323 | 677 | done | 
| 678 | ||
| 14387 
e96d5c42c4b0
Polymorphic treatment of binary arithmetic using axclasses
 paulson parents: 
14377diff
changeset | 679 | lemma expi_two_pi_i [simp]: "expi((2::complex) * complex_of_real pi * ii) = 1" | 
| 44724 | 680 | by (simp add: expi_def cis_def) | 
| 14387 
e96d5c42c4b0
Polymorphic treatment of binary arithmetic using axclasses
 paulson parents: 
14377diff
changeset | 681 | |
| 44844 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 682 | subsubsection {* Complex argument *}
 | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 683 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 684 | definition arg :: "complex \<Rightarrow> real" where | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 685 | "arg z = (if z = 0 then 0 else (SOME a. sgn z = cis a \<and> -pi < a \<and> a \<le> pi))" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 686 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 687 | lemma arg_zero: "arg 0 = 0" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 688 | by (simp add: arg_def) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 689 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 690 | lemma of_nat_less_of_int_iff: (* TODO: move *) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 691 | "(of_nat n :: 'a::linordered_idom) < of_int x \<longleftrightarrow> int n < x" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 692 | by (metis of_int_of_nat_eq of_int_less_iff) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 693 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 694 | lemma real_of_nat_less_numeral_iff [simp]: (* TODO: move *) | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 695 | "real (n::nat) < numeral w \<longleftrightarrow> n < numeral w" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 696 | using of_nat_less_of_int_iff [of n "numeral w", where 'a=real] | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 697 | by (simp add: real_of_nat_def zless_nat_eq_int_zless [symmetric]) | 
| 44844 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 698 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 699 | lemma arg_unique: | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 700 | assumes "sgn z = cis x" and "-pi < x" and "x \<le> pi" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 701 | shows "arg z = x" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 702 | proof - | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 703 | from assms have "z \<noteq> 0" by auto | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 704 | have "(SOME a. sgn z = cis a \<and> -pi < a \<and> a \<le> pi) = x" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 705 | proof | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 706 | fix a def d \<equiv> "a - x" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 707 | assume a: "sgn z = cis a \<and> - pi < a \<and> a \<le> pi" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 708 | from a assms have "- (2*pi) < d \<and> d < 2*pi" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 709 | unfolding d_def by simp | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 710 | moreover from a assms have "cos a = cos x" and "sin a = sin x" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 711 | by (simp_all add: complex_eq_iff) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 712 | hence "cos d = 1" unfolding d_def cos_diff by simp | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 713 | moreover hence "sin d = 0" by (rule cos_one_sin_zero) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 714 | ultimately have "d = 0" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 715 | unfolding sin_zero_iff even_mult_two_ex | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 716 | by (safe, auto simp add: numeral_2_eq_2 less_Suc_eq) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 717 | thus "a = x" unfolding d_def by simp | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 718 | qed (simp add: assms del: Re_sgn Im_sgn) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 719 | with `z \<noteq> 0` show "arg z = x" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 720 | unfolding arg_def by simp | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 721 | qed | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 722 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 723 | lemma arg_correct: | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 724 | assumes "z \<noteq> 0" shows "sgn z = cis (arg z) \<and> -pi < arg z \<and> arg z \<le> pi" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 725 | proof (simp add: arg_def assms, rule someI_ex) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 726 | obtain r a where z: "z = rcis r a" using rcis_Ex by fast | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 727 | with assms have "r \<noteq> 0" by auto | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 728 | def b \<equiv> "if 0 < r then a else a + pi" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 729 | have b: "sgn z = cis b" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 730 | unfolding z b_def rcis_def using `r \<noteq> 0` | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 731 | by (simp add: of_real_def sgn_scaleR sgn_if, simp add: cis_def) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 732 | have cis_2pi_nat: "\<And>n. cis (2 * pi * real_of_nat n) = 1" | 
| 49962 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 webertj parents: 
47108diff
changeset | 733 | by (induct_tac n, simp_all add: distrib_left cis_mult [symmetric], | 
| 44844 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 734 | simp add: cis_def) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 735 | have cis_2pi_int: "\<And>x. cis (2 * pi * real_of_int x) = 1" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 736 | by (case_tac x rule: int_diff_cases, | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 737 | simp add: right_diff_distrib cis_divide [symmetric] cis_2pi_nat) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 738 | def c \<equiv> "b - 2*pi * of_int \<lceil>(b - pi) / (2*pi)\<rceil>" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 739 | have "sgn z = cis c" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 740 | unfolding b c_def | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 741 | by (simp add: cis_divide [symmetric] cis_2pi_int) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 742 | moreover have "- pi < c \<and> c \<le> pi" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 743 | using ceiling_correct [of "(b - pi) / (2*pi)"] | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 744 | by (simp add: c_def less_divide_eq divide_le_eq algebra_simps) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 745 | ultimately show "\<exists>a. sgn z = cis a \<and> -pi < a \<and> a \<le> pi" by fast | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 746 | qed | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 747 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 748 | lemma arg_bounded: "- pi < arg z \<and> arg z \<le> pi" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 749 | by (cases "z = 0", simp_all add: arg_zero arg_correct) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 750 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 751 | lemma cis_arg: "z \<noteq> 0 \<Longrightarrow> cis (arg z) = sgn z" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 752 | by (simp add: arg_correct) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 753 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 754 | lemma rcis_cmod_arg: "rcis (cmod z) (arg z) = z" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 755 | by (cases "z = 0", simp_all add: rcis_def cis_arg sgn_div_norm of_real_def) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 756 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 757 | lemma cos_arg_i_mult_zero [simp]: | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 758 | "y \<noteq> 0 ==> cos (arg(Complex 0 y)) = 0" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 759 | using cis_arg [of "Complex 0 y"] by (simp add: complex_eq_iff) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 760 | |
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 761 | text {* Legacy theorem names *}
 | 
| 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 762 | |
| 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 763 | lemmas expand_complex_eq = complex_eq_iff | 
| 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 764 | lemmas complex_Re_Im_cancel_iff = complex_eq_iff | 
| 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 765 | lemmas complex_equality = complex_eqI | 
| 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 766 | |
| 13957 | 767 | end |