| author | haftmann | 
| Wed, 25 Dec 2013 15:52:25 +0100 | |
| changeset 54861 | 00d551179872 | 
| parent 54489 | 03ff4d1e6784 | 
| child 55734 | 3f5b2745d659 | 
| 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 = | |
| 53015 
a1119cf551e8
standardized symbols via "isabelle update_sub_sup", excluding src/Pure and src/Tools/WWW_Find;
 wenzelm parents: 
51002diff
changeset | 106 | Complex (Re x / ((Re x)\<^sup>2 + (Im x)\<^sup>2)) (- Im x / ((Re x)\<^sup>2 + (Im x)\<^sup>2))" | 
| 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 | |
| 54489 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 111 | lemma Complex_eq_1 [simp]: | 
| 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 112 | "Complex a b = 1 \<longleftrightarrow> a = 1 \<and> b = 0" | 
| 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 113 | by (simp add: complex_one_def) | 
| 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 114 | |
| 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 115 | lemma Complex_eq_neg_1 [simp]: | 
| 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 116 | "Complex a b = - 1 \<longleftrightarrow> a = - 1 \<and> b = 0" | 
| 25712 | 117 | by (simp add: complex_one_def) | 
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 118 | |
| 14374 | 119 | lemma complex_Re_one [simp]: "Re 1 = 1" | 
| 25712 | 120 | by (simp add: complex_one_def) | 
| 14323 | 121 | |
| 14374 | 122 | lemma complex_Im_one [simp]: "Im 1 = 0" | 
| 25712 | 123 | by (simp add: complex_one_def) | 
| 14323 | 124 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 125 | lemma complex_mult [simp]: | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 126 | "Complex a b * Complex c d = Complex (a * c - b * d) (a * d + b * c)" | 
| 25712 | 127 | by (simp add: complex_mult_def) | 
| 14323 | 128 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 129 | lemma complex_Re_mult [simp]: "Re (x * y) = Re x * Re y - Im x * Im y" | 
| 25712 | 130 | by (simp add: complex_mult_def) | 
| 14323 | 131 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 132 | lemma complex_Im_mult [simp]: "Im (x * y) = Re x * Im y + Im x * Re y" | 
| 25712 | 133 | by (simp add: complex_mult_def) | 
| 14323 | 134 | |
| 14377 | 135 | lemma complex_inverse [simp]: | 
| 53015 
a1119cf551e8
standardized symbols via "isabelle update_sub_sup", excluding src/Pure and src/Tools/WWW_Find;
 wenzelm parents: 
51002diff
changeset | 136 | "inverse (Complex a b) = Complex (a / (a\<^sup>2 + b\<^sup>2)) (- b / (a\<^sup>2 + b\<^sup>2))" | 
| 25712 | 137 | by (simp add: complex_inverse_def) | 
| 14335 | 138 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 139 | lemma complex_Re_inverse: | 
| 53015 
a1119cf551e8
standardized symbols via "isabelle update_sub_sup", excluding src/Pure and src/Tools/WWW_Find;
 wenzelm parents: 
51002diff
changeset | 140 | "Re (inverse x) = Re x / ((Re x)\<^sup>2 + (Im x)\<^sup>2)" | 
| 25712 | 141 | by (simp add: complex_inverse_def) | 
| 14323 | 142 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 143 | lemma complex_Im_inverse: | 
| 53015 
a1119cf551e8
standardized symbols via "isabelle update_sub_sup", excluding src/Pure and src/Tools/WWW_Find;
 wenzelm parents: 
51002diff
changeset | 144 | "Im (inverse x) = - Im x / ((Re x)\<^sup>2 + (Im x)\<^sup>2)" | 
| 25712 | 145 | by (simp add: complex_inverse_def) | 
| 14335 | 146 | |
| 25712 | 147 | instance | 
| 148 | by intro_classes (simp_all add: complex_mult_def | |
| 49962 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 webertj parents: 
47108diff
changeset | 149 | distrib_left distrib_right right_diff_distrib left_diff_distrib | 
| 44724 | 150 | complex_inverse_def complex_divide_def | 
| 151 | power2_eq_square add_divide_distrib [symmetric] | |
| 152 | complex_eq_iff) | |
| 14335 | 153 | |
| 25712 | 154 | end | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 155 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 156 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 157 | subsection {* Numerals and Arithmetic *}
 | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 158 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 159 | lemma complex_Re_of_nat [simp]: "Re (of_nat n) = of_nat n" | 
| 44724 | 160 | by (induct n) simp_all | 
| 20556 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 161 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 162 | lemma complex_Im_of_nat [simp]: "Im (of_nat n) = 0" | 
| 44724 | 163 | by (induct n) simp_all | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 164 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 165 | lemma complex_Re_of_int [simp]: "Re (of_int z) = of_int z" | 
| 44724 | 166 | by (cases z rule: int_diff_cases) simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 167 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 168 | lemma complex_Im_of_int [simp]: "Im (of_int z) = 0" | 
| 44724 | 169 | by (cases z rule: int_diff_cases) simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 170 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 171 | lemma complex_Re_numeral [simp]: "Re (numeral v) = numeral v" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 172 | using complex_Re_of_int [of "numeral v"] by simp | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 173 | |
| 54489 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 174 | lemma complex_Re_neg_numeral [simp]: "Re (- numeral v) = - numeral v" | 
| 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 175 | using complex_Re_of_int [of "- numeral v"] by simp | 
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 176 | |
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 177 | lemma complex_Im_numeral [simp]: "Im (numeral v) = 0" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 178 | 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 | 179 | |
| 54489 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 180 | lemma complex_Im_neg_numeral [simp]: "Im (- numeral v) = 0" | 
| 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 181 | using complex_Im_of_int [of "- numeral v"] by simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 182 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 183 | lemma Complex_eq_numeral [simp]: | 
| 54489 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 184 | "Complex a b = numeral w \<longleftrightarrow> a = numeral w \<and> b = 0" | 
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 185 | by (simp add: complex_eq_iff) | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 186 | |
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 187 | lemma Complex_eq_neg_numeral [simp]: | 
| 54489 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 188 | "Complex a b = - numeral w \<longleftrightarrow> a = - numeral w \<and> b = 0" | 
| 44724 | 189 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 190 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 191 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 192 | subsection {* Scalar Multiplication *}
 | 
| 20556 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 193 | |
| 25712 | 194 | instantiation complex :: real_field | 
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 195 | begin | 
| 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 196 | |
| 44724 | 197 | definition complex_scaleR_def: | 
| 198 | "scaleR r x = Complex (r * Re x) (r * Im x)" | |
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 199 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 200 | lemma complex_scaleR [simp]: | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 201 | "scaleR r (Complex a b) = Complex (r * a) (r * b)" | 
| 25712 | 202 | unfolding complex_scaleR_def by simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 203 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 204 | lemma complex_Re_scaleR [simp]: "Re (scaleR r x) = r * Re x" | 
| 25712 | 205 | unfolding complex_scaleR_def by simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 206 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 207 | lemma complex_Im_scaleR [simp]: "Im (scaleR r x) = r * Im x" | 
| 25712 | 208 | unfolding complex_scaleR_def by simp | 
| 22972 
3e96b98d37c6
generalized sgn function to work on any real normed vector space
 huffman parents: 
22968diff
changeset | 209 | |
| 25712 | 210 | instance | 
| 20556 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 211 | proof | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 212 | fix a b :: real and x y :: complex | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 213 | 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 | 214 | by (simp add: complex_eq_iff distrib_left) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 215 | 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 | 216 | by (simp add: complex_eq_iff distrib_right) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 217 | 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 | 218 | by (simp add: complex_eq_iff mult_assoc) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 219 | show "scaleR 1 x = x" | 
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 220 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 221 | show "scaleR a x * y = scaleR a (x * y)" | 
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 222 | by (simp add: complex_eq_iff algebra_simps) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 223 | show "x * scaleR a y = scaleR a (x * y)" | 
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 224 | 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 | 225 | qed | 
| 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 226 | |
| 25712 | 227 | end | 
| 228 | ||
| 20556 
2e8227b81bf1
add instance for real_algebra_1 and real_normed_div_algebra
 huffman parents: 
20485diff
changeset | 229 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 230 | subsection{* Properties of Embedding from Reals *}
 | 
| 14323 | 231 | |
| 44724 | 232 | abbreviation complex_of_real :: "real \<Rightarrow> complex" | 
| 233 | where "complex_of_real \<equiv> of_real" | |
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 234 | |
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 235 | lemma complex_of_real_def: "complex_of_real r = Complex r 0" | 
| 44724 | 236 | by (simp add: of_real_def complex_scaleR_def) | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 237 | |
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 238 | lemma Re_complex_of_real [simp]: "Re (complex_of_real z) = z" | 
| 44724 | 239 | by (simp add: complex_of_real_def) | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 240 | |
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 241 | lemma Im_complex_of_real [simp]: "Im (complex_of_real z) = 0" | 
| 44724 | 242 | by (simp add: complex_of_real_def) | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 243 | |
| 14377 | 244 | lemma Complex_add_complex_of_real [simp]: | 
| 44724 | 245 | shows "Complex x y + complex_of_real r = Complex (x+r) y" | 
| 246 | by (simp add: complex_of_real_def) | |
| 14377 | 247 | |
| 248 | lemma complex_of_real_add_Complex [simp]: | |
| 44724 | 249 | shows "complex_of_real r + Complex x y = Complex (r+x) y" | 
| 250 | by (simp add: complex_of_real_def) | |
| 14377 | 251 | |
| 252 | lemma Complex_mult_complex_of_real: | |
| 44724 | 253 | shows "Complex x y * complex_of_real r = Complex (x*r) (y*r)" | 
| 254 | by (simp add: complex_of_real_def) | |
| 14377 | 255 | |
| 256 | lemma complex_of_real_mult_Complex: | |
| 44724 | 257 | shows "complex_of_real r * Complex x y = Complex (r*x) (r*y)" | 
| 258 | by (simp add: complex_of_real_def) | |
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 259 | |
| 44841 | 260 | lemma complex_eq_cancel_iff2 [simp]: | 
| 261 | shows "(Complex x y = complex_of_real xa) = (x = xa & y = 0)" | |
| 262 | by (simp add: complex_of_real_def) | |
| 263 | ||
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 264 | lemma complex_split_polar: | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 265 | "\<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 | 266 | by (simp add: complex_eq_iff polar_Ex) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 267 | |
| 14377 | 268 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 269 | subsection {* Vector Norm *}
 | 
| 14323 | 270 | |
| 25712 | 271 | instantiation complex :: real_normed_field | 
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 272 | begin | 
| 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 273 | |
| 31413 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 274 | definition complex_norm_def: | 
| 53015 
a1119cf551e8
standardized symbols via "isabelle update_sub_sup", excluding src/Pure and src/Tools/WWW_Find;
 wenzelm parents: 
51002diff
changeset | 275 | "norm z = sqrt ((Re z)\<^sup>2 + (Im z)\<^sup>2)" | 
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 276 | |
| 44724 | 277 | abbreviation cmod :: "complex \<Rightarrow> real" | 
| 278 | where "cmod \<equiv> norm" | |
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 279 | |
| 31413 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 280 | definition complex_sgn_def: | 
| 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 281 | "sgn x = x /\<^sub>R cmod x" | 
| 25571 
c9e39eafc7a0
instantiation target rather than legacy instance
 haftmann parents: 
25502diff
changeset | 282 | |
| 31413 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 283 | definition dist_complex_def: | 
| 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 284 | "dist x y = cmod (x - y)" | 
| 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 285 | |
| 37767 | 286 | definition open_complex_def: | 
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31419diff
changeset | 287 | "open (S :: complex set) \<longleftrightarrow> (\<forall>x\<in>S. \<exists>e>0. \<forall>y. dist y x < e \<longrightarrow> y \<in> S)" | 
| 31292 | 288 | |
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 289 | lemmas cmod_def = complex_norm_def | 
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 290 | |
| 53015 
a1119cf551e8
standardized symbols via "isabelle update_sub_sup", excluding src/Pure and src/Tools/WWW_Find;
 wenzelm parents: 
51002diff
changeset | 291 | lemma complex_norm [simp]: "cmod (Complex x y) = sqrt (x\<^sup>2 + y\<^sup>2)" | 
| 25712 | 292 | by (simp add: complex_norm_def) | 
| 22852 | 293 | |
| 31413 
729d90a531e4
introduce class topological_space as a superclass of metric_space
 huffman parents: 
31292diff
changeset | 294 | instance proof | 
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31419diff
changeset | 295 | 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 | 296 | show "(norm x = 0) = (x = 0)" | 
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 297 | by (induct x) simp | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 298 | show "norm (x + y) \<le> norm x + norm y" | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 299 | by (induct x, induct y) | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 300 | (simp add: real_sqrt_sum_squares_triangle_ineq) | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 301 | show "norm (scaleR r x) = \<bar>r\<bar> * norm x" | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 302 | by (induct x) | 
| 49962 
a8cc904a6820
Renamed {left,right}_distrib to distrib_{right,left}.
 webertj parents: 
47108diff
changeset | 303 | (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 | 304 | show "norm (x * y) = norm x * norm y" | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 305 | by (induct x, induct y) | 
| 29667 | 306 | (simp add: real_sqrt_mult [symmetric] power2_eq_square algebra_simps) | 
| 31292 | 307 | show "sgn x = x /\<^sub>R cmod x" | 
| 308 | by (rule complex_sgn_def) | |
| 309 | show "dist x y = cmod (x - y)" | |
| 310 | by (rule dist_complex_def) | |
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31419diff
changeset | 311 | 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 | 312 | by (rule open_complex_def) | 
| 24520 | 313 | qed | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 314 | |
| 25712 | 315 | end | 
| 316 | ||
| 44761 | 317 | lemma cmod_unit_one: "cmod (Complex (cos a) (sin a)) = 1" | 
| 44724 | 318 | by simp | 
| 14323 | 319 | |
| 44761 | 320 | lemma cmod_complex_polar: | 
| 44724 | 321 | "cmod (complex_of_real r * Complex (cos a) (sin a)) = abs r" | 
| 322 | by (simp add: norm_mult) | |
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 323 | |
| 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 324 | lemma complex_Re_le_cmod: "Re x \<le> cmod x" | 
| 44724 | 325 | unfolding complex_norm_def | 
| 326 | by (rule real_sqrt_sum_squares_ge1) | |
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 327 | |
| 44761 | 328 | lemma complex_mod_minus_le_complex_mod: "- cmod x \<le> cmod x" | 
| 44724 | 329 | by (rule order_trans [OF _ norm_ge_zero], simp) | 
| 22861 
8ec47039614e
clean up complex norm proofs, remove redundant lemmas
 huffman parents: 
22852diff
changeset | 330 | |
| 44761 | 331 | lemma complex_mod_triangle_ineq2: "cmod(b + a) - cmod b \<le> cmod a" | 
| 44724 | 332 | by (rule ord_le_eq_trans [OF norm_triangle_ineq2], simp) | 
| 14323 | 333 | |
| 26117 | 334 | lemma abs_Re_le_cmod: "\<bar>Re x\<bar> \<le> cmod x" | 
| 44724 | 335 | by (cases x) simp | 
| 26117 | 336 | |
| 337 | lemma abs_Im_le_cmod: "\<bar>Im x\<bar> \<le> cmod x" | |
| 44724 | 338 | by (cases x) simp | 
| 339 | ||
| 44843 | 340 | text {* Properties of complex signum. *}
 | 
| 341 | ||
| 342 | lemma sgn_eq: "sgn z = z / complex_of_real (cmod z)" | |
| 343 | by (simp add: sgn_div_norm divide_inverse scaleR_conv_of_real mult_commute) | |
| 344 | ||
| 345 | lemma Re_sgn [simp]: "Re(sgn z) = Re(z)/cmod z" | |
| 346 | by (simp add: complex_sgn_def divide_inverse) | |
| 347 | ||
| 348 | lemma Im_sgn [simp]: "Im(sgn z) = Im(z)/cmod z" | |
| 349 | by (simp add: complex_sgn_def divide_inverse) | |
| 350 | ||
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 351 | |
| 23123 | 352 | subsection {* Completeness of the Complexes *}
 | 
| 353 | ||
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 354 | lemma bounded_linear_Re: "bounded_linear Re" | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 355 | 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 | 356 | |
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 357 | lemma bounded_linear_Im: "bounded_linear Im" | 
| 44127 | 358 | by (rule bounded_linear_intro [where K=1], simp_all add: complex_norm_def) | 
| 23123 | 359 | |
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 360 | lemmas tendsto_Re [tendsto_intros] = | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 361 | bounded_linear.tendsto [OF bounded_linear_Re] | 
| 
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 tendsto_Im [tendsto_intros] = | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 364 | bounded_linear.tendsto [OF bounded_linear_Im] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 365 | |
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 366 | lemmas isCont_Re [simp] = bounded_linear.isCont [OF bounded_linear_Re] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 367 | lemmas isCont_Im [simp] = bounded_linear.isCont [OF bounded_linear_Im] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 368 | lemmas Cauchy_Re = bounded_linear.Cauchy [OF bounded_linear_Re] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 369 | lemmas Cauchy_Im = bounded_linear.Cauchy [OF bounded_linear_Im] | 
| 23123 | 370 | |
| 36825 | 371 | lemma tendsto_Complex [tendsto_intros]: | 
| 44724 | 372 | assumes "(f ---> a) F" and "(g ---> b) F" | 
| 373 | shows "((\<lambda>x. Complex (f x) (g x)) ---> Complex a b) F" | |
| 36825 | 374 | proof (rule tendstoI) | 
| 375 | fix r :: real assume "0 < r" | |
| 376 | hence "0 < r / sqrt 2" by (simp add: divide_pos_pos) | |
| 44724 | 377 | have "eventually (\<lambda>x. dist (f x) a < r / sqrt 2) F" | 
| 378 | using `(f ---> a) F` and `0 < r / sqrt 2` by (rule tendstoD) | |
| 36825 | 379 | moreover | 
| 44724 | 380 | have "eventually (\<lambda>x. dist (g x) b < r / sqrt 2) F" | 
| 381 | using `(g ---> b) F` and `0 < r / sqrt 2` by (rule tendstoD) | |
| 36825 | 382 | ultimately | 
| 44724 | 383 | show "eventually (\<lambda>x. dist (Complex (f x) (g x)) (Complex a b) < r) F" | 
| 36825 | 384 | by (rule eventually_elim2) | 
| 385 | (simp add: dist_norm real_sqrt_sum_squares_less) | |
| 386 | qed | |
| 387 | ||
| 23123 | 388 | instance complex :: banach | 
| 389 | proof | |
| 390 | fix X :: "nat \<Rightarrow> complex" | |
| 391 | assume X: "Cauchy X" | |
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 392 | from Cauchy_Re [OF X] have 1: "(\<lambda>n. Re (X n)) ----> lim (\<lambda>n. Re (X n))" | 
| 23123 | 393 | by (simp add: Cauchy_convergent_iff convergent_LIMSEQ_iff) | 
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 394 | from Cauchy_Im [OF X] have 2: "(\<lambda>n. Im (X n)) ----> lim (\<lambda>n. Im (X n))" | 
| 23123 | 395 | by (simp add: Cauchy_convergent_iff convergent_LIMSEQ_iff) | 
| 396 | 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 | 397 | using tendsto_Complex [OF 1 2] by simp | 
| 23123 | 398 | thus "convergent X" | 
| 399 | by (rule convergentI) | |
| 400 | qed | |
| 401 | ||
| 402 | ||
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 403 | subsection {* The Complex Number $i$ *}
 | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 404 | |
| 44724 | 405 | definition "ii" :: complex  ("\<i>")
 | 
| 406 | where i_def: "ii \<equiv> Complex 0 1" | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 407 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 408 | lemma complex_Re_i [simp]: "Re ii = 0" | 
| 44724 | 409 | by (simp add: i_def) | 
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 410 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 411 | lemma complex_Im_i [simp]: "Im ii = 1" | 
| 44724 | 412 | by (simp add: i_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 413 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 414 | lemma Complex_eq_i [simp]: "(Complex x y = ii) = (x = 0 \<and> y = 1)" | 
| 44724 | 415 | by (simp add: i_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 416 | |
| 44902 
9ba11d41cd1f
move lemmas about complex number 'i' to Complex.thy and Library/Inner_Product.thy
 huffman parents: 
44846diff
changeset | 417 | 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 | 418 | by (simp add: i_def) | 
| 
9ba11d41cd1f
move lemmas about complex number 'i' to Complex.thy and Library/Inner_Product.thy
 huffman parents: 
44846diff
changeset | 419 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 420 | lemma complex_i_not_zero [simp]: "ii \<noteq> 0" | 
| 44724 | 421 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 422 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 423 | lemma complex_i_not_one [simp]: "ii \<noteq> 1" | 
| 44724 | 424 | by (simp add: complex_eq_iff) | 
| 23124 | 425 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 426 | lemma complex_i_not_numeral [simp]: "ii \<noteq> numeral w" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 427 | by (simp add: complex_eq_iff) | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 428 | |
| 54489 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 429 | lemma complex_i_not_neg_numeral [simp]: "ii \<noteq> - numeral w" | 
| 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 i_mult_Complex [simp]: "ii * Complex a b = 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 Complex_mult_i [simp]: "Complex a b * ii = Complex (- b) a" | 
| 44724 | 436 | by (simp add: complex_eq_iff) | 
| 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 i_complex_of_real [simp]: "ii * complex_of_real r = 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 complex_of_real_i [simp]: "complex_of_real r * ii = Complex 0 r" | 
| 44724 | 442 | by (simp add: i_def complex_of_real_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 i_squared [simp]: "ii * ii = -1" | 
| 44724 | 445 | by (simp add: i_def) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 446 | |
| 53015 
a1119cf551e8
standardized symbols via "isabelle update_sub_sup", excluding src/Pure and src/Tools/WWW_Find;
 wenzelm parents: 
51002diff
changeset | 447 | lemma power2_i [simp]: "ii\<^sup>2 = -1" | 
| 44724 | 448 | by (simp add: power2_eq_square) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 449 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 450 | lemma inverse_i [simp]: "inverse ii = - ii" | 
| 44724 | 451 | by (rule inverse_unique, simp) | 
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 452 | |
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 453 | lemma complex_i_mult_minus [simp]: "ii * (ii * x) = - x" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 454 | by (simp add: mult_assoc [symmetric]) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 455 | |
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 456 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 457 | subsection {* Complex Conjugation *}
 | 
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 458 | |
| 44724 | 459 | definition cnj :: "complex \<Rightarrow> complex" where | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 460 | "cnj z = Complex (Re z) (- Im z)" | 
| 
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_cnj [simp]: "cnj (Complex a b) = Complex a (- b)" | 
| 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_Re_cnj [simp]: "Re (cnj x) = Re 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_Im_cnj [simp]: "Im (cnj x) = - Im x" | 
| 44724 | 469 | by (simp add: cnj_def) | 
| 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_cancel_iff [simp]: "(cnj x = cnj y) = (x = y)" | 
| 44724 | 472 | by (simp add: complex_eq_iff) | 
| 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_cnj [simp]: "cnj (cnj z) = z" | 
| 44724 | 475 | by (simp add: cnj_def) | 
| 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 [simp]: "cnj 0 = 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_zero_iff [iff]: "(cnj z = 0) = (z = 0)" | 
| 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_add: "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_diff: "cnj (x - y) = cnj x - cnj y" | 
| 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_minus: "cnj (- x) = - cnj x" | 
| 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_one [simp]: "cnj 1 = 1" | 
| 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_mult: "cnj (x * y) = cnj x * cnj y" | 
| 44724 | 496 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 497 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 498 | lemma complex_cnj_inverse: "cnj (inverse x) = inverse (cnj x)" | 
| 44724 | 499 | by (simp add: complex_inverse_def) | 
| 14323 | 500 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 501 | lemma complex_cnj_divide: "cnj (x / y) = cnj x / cnj y" | 
| 44724 | 502 | 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 | 503 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 504 | lemma complex_cnj_power: "cnj (x ^ n) = cnj x ^ n" | 
| 44724 | 505 | by (induct n, simp_all add: complex_cnj_mult) | 
| 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_nat [simp]: "cnj (of_nat n) = of_nat n" | 
| 44724 | 508 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 509 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 510 | lemma complex_cnj_of_int [simp]: "cnj (of_int z) = of_int z" | 
| 44724 | 511 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 512 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 513 | lemma complex_cnj_numeral [simp]: "cnj (numeral w) = numeral w" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 514 | by (simp add: complex_eq_iff) | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 515 | |
| 54489 
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
 haftmann parents: 
54230diff
changeset | 516 | lemma complex_cnj_neg_numeral [simp]: "cnj (- numeral w) = - numeral w" | 
| 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_cnj_scaleR: "cnj (scaleR r x) = scaleR r (cnj x)" | 
| 44724 | 520 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 521 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 522 | lemma complex_mod_cnj [simp]: "cmod (cnj z) = cmod z" | 
| 44724 | 523 | by (simp add: complex_norm_def) | 
| 14323 | 524 | |
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 525 | lemma complex_cnj_complex_of_real [simp]: "cnj (of_real x) = of_real x" | 
| 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_cnj_i [simp]: "cnj ii = - ii" | 
| 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_add_cnj: "z + cnj z = complex_of_real (2 * Re z)" | 
| 44724 | 532 | by (simp add: complex_eq_iff) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 533 | |
| 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 534 | lemma complex_diff_cnj: "z - cnj z = complex_of_real (2 * Im z) * ii" | 
| 44724 | 535 | by (simp add: complex_eq_iff) | 
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 536 | |
| 53015 
a1119cf551e8
standardized symbols via "isabelle update_sub_sup", excluding src/Pure and src/Tools/WWW_Find;
 wenzelm parents: 
51002diff
changeset | 537 | lemma complex_mult_cnj: "z * cnj z = complex_of_real ((Re z)\<^sup>2 + (Im z)\<^sup>2)" | 
| 44724 | 538 | by (simp add: complex_eq_iff power2_eq_square) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 539 | |
| 53015 
a1119cf551e8
standardized symbols via "isabelle update_sub_sup", excluding src/Pure and src/Tools/WWW_Find;
 wenzelm parents: 
51002diff
changeset | 540 | lemma complex_mod_mult_cnj: "cmod (z * cnj z) = (cmod z)\<^sup>2" | 
| 44724 | 541 | by (simp add: norm_mult power2_eq_square) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 542 | |
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 543 | 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 | 544 | by (simp add: cmod_def power2_eq_square) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 545 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 546 | lemma complex_In_mult_cnj_zero [simp]: "Im (z * cnj z) = 0" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 547 | by simp | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 548 | |
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 549 | lemma bounded_linear_cnj: "bounded_linear cnj" | 
| 44127 | 550 | using complex_cnj_add complex_cnj_scaleR | 
| 551 | 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 | 552 | |
| 44290 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 553 | lemmas tendsto_cnj [tendsto_intros] = | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 554 | bounded_linear.tendsto [OF bounded_linear_cnj] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 555 | |
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 556 | lemmas isCont_cnj [simp] = | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 557 | bounded_linear.isCont [OF bounded_linear_cnj] | 
| 
23a5137162ea
remove more bounded_linear locale interpretations (cf. f0de18b62d63)
 huffman parents: 
44127diff
changeset | 558 | |
| 14354 
988aa4648597
types complex and hcomplex are now instances of class ringpower:
 paulson parents: 
14353diff
changeset | 559 | |
| 14323 | 560 | subsection{*Finally! Polar Form for Complex Numbers*}
 | 
| 561 | ||
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 562 | subsubsection {* $\cos \theta + i \sin \theta$ *}
 | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 563 | |
| 44715 | 564 | definition cis :: "real \<Rightarrow> complex" where | 
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 565 | "cis a = Complex (cos a) (sin a)" | 
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 566 | |
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 567 | lemma Re_cis [simp]: "Re (cis a) = cos 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 Im_cis [simp]: "Im (cis a) = sin a" | 
| 
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 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 573 | lemma cis_zero [simp]: "cis 0 = 1" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 574 | by (simp add: cis_def) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 575 | |
| 44828 | 576 | lemma norm_cis [simp]: "norm (cis a) = 1" | 
| 577 | by (simp add: cis_def) | |
| 578 | ||
| 579 | lemma sgn_cis [simp]: "sgn (cis a) = cis a" | |
| 580 | by (simp add: sgn_div_norm) | |
| 581 | ||
| 582 | lemma cis_neq_zero [simp]: "cis a \<noteq> 0" | |
| 583 | by (metis norm_cis norm_zero zero_neq_one) | |
| 584 | ||
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 585 | lemma cis_mult: "cis a * cis b = cis (a + b)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 586 | by (simp add: cis_def cos_add sin_add) | 
| 
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 DeMoivre: "(cis a) ^ n = cis (real n * a)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 589 | 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 | 590 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 591 | lemma cis_inverse [simp]: "inverse(cis a) = cis (-a)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 592 | by (simp add: cis_def) | 
| 
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 cis_divide: "cis a / cis b = cis (a - b)" | 
| 54230 
b1d955791529
more simplification rules on unary and binary minus
 haftmann parents: 
53374diff
changeset | 595 | by (simp add: complex_divide_def cis_mult) | 
| 44827 
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 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 | 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 | 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 | 601 | by (auto simp add: DeMoivre) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 602 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 603 | subsubsection {* $r(\cos \theta + i \sin \theta)$ *}
 | 
| 44715 | 604 | |
| 605 | definition rcis :: "[real, real] \<Rightarrow> complex" where | |
| 20557 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 606 | "rcis r a = complex_of_real r * cis a" | 
| 
81dd3679f92c
complex_of_real abbreviates of_real::real=>complex;
 huffman parents: 
20556diff
changeset | 607 | |
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 608 | lemma Re_rcis [simp]: "Re(rcis r a) = r * cos 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 Im_rcis [simp]: "Im(rcis r a) = r * sin a" | 
| 44828 | 612 | by (simp add: rcis_def) | 
| 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 rcis_Ex: "\<exists>r a. z = rcis r a" | 
| 44828 | 615 | by (simp add: complex_eq_iff polar_Ex) | 
| 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 complex_mod_rcis [simp]: "cmod(rcis r a) = abs r" | 
| 44828 | 618 | by (simp add: rcis_def norm_mult) | 
| 44827 
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 cis_rcis_eq: "cis a = rcis 1 a" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 621 | by (simp add: rcis_def) | 
| 
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_mult: "rcis r1 a * rcis r2 b = rcis (r1*r2) (a + b)" | 
| 44828 | 624 | by (simp add: rcis_def cis_mult) | 
| 44827 
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_mod [simp]: "rcis 0 a = 0" | 
| 
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 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 629 | lemma rcis_zero_arg [simp]: "rcis r 0 = complex_of_real r" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 630 | by (simp add: rcis_def) | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 631 | |
| 44828 | 632 | lemma rcis_eq_zero_iff [simp]: "rcis r a = 0 \<longleftrightarrow> r = 0" | 
| 633 | by (simp add: rcis_def) | |
| 634 | ||
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 635 | lemma DeMoivre2: "(rcis r a) ^ n = rcis (r ^ n) (real n * a)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 636 | by (simp add: rcis_def power_mult_distrib DeMoivre) | 
| 
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_inverse: "inverse(rcis r a) = rcis (1/r) (-a)" | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 639 | by (simp add: divide_inverse rcis_def) | 
| 
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 | lemma rcis_divide: "rcis r1 a / rcis r2 b = rcis (r1/r2) (a - b)" | 
| 44828 | 642 | by (simp add: rcis_def cis_divide [symmetric]) | 
| 44827 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 643 | |
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 644 | subsubsection {* Complex exponential *}
 | 
| 
4d1384a1fc82
Complex.thy: move theorems into appropriate subsections
 huffman parents: 
44825diff
changeset | 645 | |
| 44291 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 646 | abbreviation expi :: "complex \<Rightarrow> complex" | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 647 | where "expi \<equiv> exp" | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 648 | |
| 44712 
1e490e891c88
replace lemma expi_imaginary with reoriented lemma cis_conv_exp
 huffman parents: 
44711diff
changeset | 649 | lemma cis_conv_exp: "cis b = exp (Complex 0 b)" | 
| 44291 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 650 | proof (rule complex_eqI) | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 651 |   { fix n have "Complex 0 b ^ n =
 | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 652 | 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 | 653 | apply (induct n) | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 654 | apply (simp add: cos_coeff_def sin_coeff_def) | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 655 | 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 | 656 | done } note * = this | 
| 44712 
1e490e891c88
replace lemma expi_imaginary with reoriented lemma cis_conv_exp
 huffman parents: 
44711diff
changeset | 657 | show "Re (cis b) = Re (exp (Complex 0 b))" | 
| 44291 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 658 | unfolding exp_def cis_def cos_def | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 659 | 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 | 660 | simp add: * mult_assoc [symmetric]) | 
| 44712 
1e490e891c88
replace lemma expi_imaginary with reoriented lemma cis_conv_exp
 huffman parents: 
44711diff
changeset | 661 | show "Im (cis b) = Im (exp (Complex 0 b))" | 
| 44291 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 662 | unfolding exp_def cis_def sin_def | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 663 | 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 | 664 | simp add: * mult_assoc [symmetric]) | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 665 | qed | 
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 666 | |
| 
dbd9965745fd
define complex exponential 'expi' as abbreviation for 'exp'
 huffman parents: 
44290diff
changeset | 667 | 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 | 668 | 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 | 669 | |
| 44828 | 670 | lemma Re_exp: "Re (exp z) = exp (Re z) * cos (Im z)" | 
| 671 | unfolding expi_def by simp | |
| 672 | ||
| 673 | lemma Im_exp: "Im (exp z) = exp (Re z) * sin (Im z)" | |
| 674 | unfolding expi_def by simp | |
| 675 | ||
| 14374 | 676 | lemma complex_expi_Ex: "\<exists>a r. z = complex_of_real r * expi a" | 
| 14373 | 677 | apply (insert rcis_Ex [of z]) | 
| 23125 
6f7b5b96241f
cleaned up proofs; reorganized sections; removed redundant lemmas
 huffman parents: 
23124diff
changeset | 678 | apply (auto simp add: expi_def rcis_def mult_assoc [symmetric]) | 
| 14334 | 679 | apply (rule_tac x = "ii * complex_of_real a" in exI, auto) | 
| 14323 | 680 | done | 
| 681 | ||
| 14387 
e96d5c42c4b0
Polymorphic treatment of binary arithmetic using axclasses
 paulson parents: 
14377diff
changeset | 682 | lemma expi_two_pi_i [simp]: "expi((2::complex) * complex_of_real pi * ii) = 1" | 
| 44724 | 683 | by (simp add: expi_def cis_def) | 
| 14387 
e96d5c42c4b0
Polymorphic treatment of binary arithmetic using axclasses
 paulson parents: 
14377diff
changeset | 684 | |
| 44844 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 685 | subsubsection {* Complex argument *}
 | 
| 
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 | definition arg :: "complex \<Rightarrow> real" where | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 688 | "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 | 689 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 690 | lemma arg_zero: "arg 0 = 0" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 691 | by (simp add: arg_def) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 692 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 693 | lemma of_nat_less_of_int_iff: (* TODO: move *) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 694 | "(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 | 695 | 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 | 696 | |
| 47108 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 697 | lemma real_of_nat_less_numeral_iff [simp]: (* TODO: move *) | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 698 | "real (n::nat) < numeral w \<longleftrightarrow> n < numeral w" | 
| 
2a1953f0d20d
merged fork with new numeral representation (see NEWS)
 huffman parents: 
44902diff
changeset | 699 | 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 | 700 | 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 | 701 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 702 | lemma arg_unique: | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 703 | 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 | 704 | shows "arg z = 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 | from assms have "z \<noteq> 0" by auto | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 707 | 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 | 708 | proof | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 709 | fix a def d \<equiv> "a - x" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 710 | 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 | 711 | 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 | 712 | unfolding d_def by simp | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 713 | 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 | 714 | by (simp_all add: complex_eq_iff) | 
| 53374 
a14d2a854c02
tuned proofs -- clarified flow of facts wrt. calculation;
 wenzelm parents: 
53015diff
changeset | 715 | hence cos: "cos d = 1" unfolding d_def cos_diff by simp | 
| 
a14d2a854c02
tuned proofs -- clarified flow of facts wrt. calculation;
 wenzelm parents: 
53015diff
changeset | 716 | moreover from cos have "sin d = 0" by (rule cos_one_sin_zero) | 
| 44844 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 717 | ultimately have "d = 0" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 718 | unfolding sin_zero_iff even_mult_two_ex | 
| 53374 
a14d2a854c02
tuned proofs -- clarified flow of facts wrt. calculation;
 wenzelm parents: 
53015diff
changeset | 719 | by (auto simp add: numeral_2_eq_2 less_Suc_eq) | 
| 44844 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 720 | thus "a = x" unfolding d_def by simp | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 721 | qed (simp add: assms del: Re_sgn Im_sgn) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 722 | with `z \<noteq> 0` show "arg z = x" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 723 | unfolding arg_def by simp | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 724 | qed | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 725 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 726 | lemma arg_correct: | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 727 | 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 | 728 | proof (simp add: arg_def assms, rule someI_ex) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 729 | 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 | 730 | with assms have "r \<noteq> 0" by auto | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 731 | 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 | 732 | have b: "sgn z = cis b" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 733 | 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 | 734 | 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 | 735 | 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 | 736 | 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 | 737 | simp add: cis_def) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 738 | 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 | 739 | by (case_tac x rule: int_diff_cases, | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 740 | 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 | 741 | 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 | 742 | have "sgn z = cis c" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 743 | unfolding b c_def | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 744 | by (simp add: cis_divide [symmetric] cis_2pi_int) | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 745 | moreover have "- pi < c \<and> c \<le> pi" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 746 | using ceiling_correct [of "(b - pi) / (2*pi)"] | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 747 | 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 | 748 | 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 | 749 | qed | 
| 
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 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 | 752 | 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 | 753 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 754 | 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 | 755 | by (simp add: arg_correct) | 
| 
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 rcis_cmod_arg: "rcis (cmod z) (arg z) = z" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 758 | 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 | 759 | |
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 760 | lemma cos_arg_i_mult_zero [simp]: | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 761 | "y \<noteq> 0 ==> cos (arg(Complex 0 y)) = 0" | 
| 
f74a4175a3a8
prove existence, uniqueness, and other properties of complex arg function
 huffman parents: 
44843diff
changeset | 762 | 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 | 763 | |
| 44065 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 764 | text {* Legacy theorem names *}
 | 
| 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 765 | |
| 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 766 | lemmas expand_complex_eq = complex_eq_iff | 
| 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 767 | lemmas complex_Re_Im_cancel_iff = complex_eq_iff | 
| 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 768 | lemmas complex_equality = complex_eqI | 
| 
eb64ffccfc75
standard theorem naming scheme: complex_eqI, complex_eq_iff
 huffman parents: 
41959diff
changeset | 769 | |
| 13957 | 770 | end |