| author | wenzelm | 
| Mon, 20 Sep 2021 13:51:32 +0200 | |
| changeset 74324 | 308e74afab83 | 
| parent 73795 | 8893e0ed263a | 
| child 76876 | c9ffd9cf58db | 
| permissions | -rw-r--r-- | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1 | section \<open>Contour integration\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2 | theory Contour_Integration | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3 | imports "HOL-Analysis.Analysis" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4 | begin | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 5 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 6 | lemma lhopital_complex_simple: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 7 | assumes "(f has_field_derivative f') (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 8 | assumes "(g has_field_derivative g') (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 9 | assumes "f z = 0" "g z = 0" "g' \<noteq> 0" "f' / g' = c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 10 | shows "((\<lambda>w. f w / g w) \<longlongrightarrow> c) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 11 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 12 | have "eventually (\<lambda>w. w \<noteq> z) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 13 | by (auto simp: eventually_at_filter) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 14 | hence "eventually (\<lambda>w. ((f w - f z) / (w - z)) / ((g w - g z) / (w - z)) = f w / g w) (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 15 | by eventually_elim (simp add: assms field_split_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 16 | moreover have "((\<lambda>w. ((f w - f z) / (w - z)) / ((g w - g z) / (w - z))) \<longlongrightarrow> f' / g') (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 17 | by (intro tendsto_divide has_field_derivativeD assms) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 18 | ultimately have "((\<lambda>w. f w / g w) \<longlongrightarrow> f' / g') (at z)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 19 | by (blast intro: Lim_transform_eventually) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 20 | with assms show ?thesis by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 21 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 22 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 23 | subsection\<open>Definition\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 24 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 25 | text\<open> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 26 | This definition is for complex numbers only, and does not generalise to | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 27 | line integrals in a vector field | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 28 | \<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 29 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 30 | definition\<^marker>\<open>tag important\<close> has_contour_integral :: "(complex \<Rightarrow> complex) \<Rightarrow> complex \<Rightarrow> (real \<Rightarrow> complex) \<Rightarrow> bool" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 31 | (infixr "has'_contour'_integral" 50) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 32 | where "(f has_contour_integral i) g \<equiv> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 33 |            ((\<lambda>x. f(g x) * vector_derivative g (at x within {0..1}))
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 34 |             has_integral i) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 35 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 36 | definition\<^marker>\<open>tag important\<close> contour_integrable_on | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 37 | (infixr "contour'_integrable'_on" 50) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 38 | where "f contour_integrable_on g \<equiv> \<exists>i. (f has_contour_integral i) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 39 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 40 | definition\<^marker>\<open>tag important\<close> contour_integral | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 41 | where "contour_integral g f \<equiv> SOME i. (f has_contour_integral i) g \<or> \<not> f contour_integrable_on g \<and> i=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 42 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 43 | lemma not_integrable_contour_integral: "\<not> f contour_integrable_on g \<Longrightarrow> contour_integral g f = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 44 | unfolding contour_integrable_on_def contour_integral_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 45 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 46 | lemma contour_integral_unique: "(f has_contour_integral i) g \<Longrightarrow> contour_integral g f = i" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 47 | apply (simp add: contour_integral_def has_contour_integral_def contour_integrable_on_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 48 | using has_integral_unique by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 49 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 50 | lemma has_contour_integral_eqpath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 51 | "\<lbrakk>(f has_contour_integral y) p; f contour_integrable_on \<gamma>; | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 52 | contour_integral p f = contour_integral \<gamma> f\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 53 | \<Longrightarrow> (f has_contour_integral y) \<gamma>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 54 | using contour_integrable_on_def contour_integral_unique by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 55 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 56 | lemma has_contour_integral_integral: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 57 | "f contour_integrable_on i \<Longrightarrow> (f has_contour_integral (contour_integral i f)) i" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 58 | by (metis contour_integral_unique contour_integrable_on_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 59 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 60 | lemma has_contour_integral_unique: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 61 | "(f has_contour_integral i) g \<Longrightarrow> (f has_contour_integral j) g \<Longrightarrow> i = j" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 62 | using has_integral_unique | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 63 | by (auto simp: has_contour_integral_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 64 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 65 | lemma has_contour_integral_integrable: "(f has_contour_integral i) g \<Longrightarrow> f contour_integrable_on g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 66 | using contour_integrable_on_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 67 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 68 | text\<open>Show that we can forget about the localized derivative.\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 69 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 70 | lemma has_integral_localized_vector_derivative: | 
| 73795 | 71 |     "((\<lambda>x. f (g x) * vector_derivative p (at x within {a..b})) has_integral i) {a..b} \<longleftrightarrow>
 | 
| 72 |      ((\<lambda>x. f (g x) * vector_derivative p (at x)) has_integral i) {a..b}"
 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 73 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 74 |   have *: "{a..b} - {a,b} = interior {a..b}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 75 | by (simp add: atLeastAtMost_diff_ends) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 76 | show ?thesis | 
| 72270 | 77 |     by (rule has_integral_spike_eq [of "{a,b}"]) (auto simp: at_within_interior [of _ "{a..b}"])
 | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 78 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 79 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 80 | lemma integrable_on_localized_vector_derivative: | 
| 73795 | 81 |     "(\<lambda>x. f (g x) * vector_derivative p (at x within {a..b})) integrable_on {a..b} \<longleftrightarrow>
 | 
| 82 |      (\<lambda>x. f (g x) * vector_derivative p (at x)) integrable_on {a..b}"
 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 83 | by (simp add: integrable_on_def has_integral_localized_vector_derivative) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 84 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 85 | lemma has_contour_integral: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 86 | "(f has_contour_integral i) g \<longleftrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 87 |       ((\<lambda>x. f (g x) * vector_derivative g (at x)) has_integral i) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 88 | by (simp add: has_integral_localized_vector_derivative has_contour_integral_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 89 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 90 | lemma contour_integrable_on: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 91 | "f contour_integrable_on g \<longleftrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 92 |       (\<lambda>t. f(g t) * vector_derivative g (at t)) integrable_on {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 93 | by (simp add: has_contour_integral integrable_on_def contour_integrable_on_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 94 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 95 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Reversing a path\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 96 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 97 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 98 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 99 | lemma has_contour_integral_reversepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 100 | assumes "valid_path g" and f: "(f has_contour_integral i) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 101 | shows "(f has_contour_integral (-i)) (reversepath g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 102 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 103 |   { fix S x
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 104 |     assume xs: "g C1_differentiable_on ({0..1} - S)" "x \<notin> (-) 1 ` S" "0 \<le> x" "x \<le> 1"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 105 |     have "vector_derivative (\<lambda>x. g (1 - x)) (at x within {0..1}) =
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 106 |             - vector_derivative g (at (1 - x) within {0..1})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 107 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 108 | obtain f' where f': "(g has_vector_derivative f') (at (1 - x))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 109 | using xs | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 110 | by (force simp: has_vector_derivative_def C1_differentiable_on_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 111 | have "(g \<circ> (\<lambda>x. 1 - x) has_vector_derivative -1 *\<^sub>R f') (at x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 112 | by (intro vector_diff_chain_within has_vector_derivative_at_within [OF f'] derivative_eq_intros | simp)+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 113 | then have mf': "((\<lambda>x. g (1 - x)) has_vector_derivative -f') (at x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 114 | by (simp add: o_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 115 | show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 116 | using xs | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 117 | by (auto simp: vector_derivative_at_within_ivl [OF mf'] vector_derivative_at_within_ivl [OF f']) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 118 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 119 | } note * = this | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 120 |   obtain S where S: "continuous_on {0..1} g" "finite S" "g C1_differentiable_on {0..1} - S"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 121 | using assms by (auto simp: valid_path_def piecewise_C1_differentiable_on_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 122 |   have "((\<lambda>x. - (f (g (1 - x)) * vector_derivative g (at (1 - x) within {0..1}))) has_integral -i)
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 123 |        {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 124 | using has_integral_affinity01 [where m= "-1" and c=1, OF f [unfolded has_contour_integral_def]] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 125 | by (simp add: has_integral_neg) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 126 | then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 127 | using S | 
| 72270 | 128 | unfolding reversepath_def has_contour_integral_def | 
| 129 | by (rule_tac S = "(\<lambda>x. 1 - x) ` S" in has_integral_spike_finite) (auto simp: *) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 130 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 131 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 132 | lemma contour_integrable_reversepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 133 | "valid_path g \<Longrightarrow> f contour_integrable_on g \<Longrightarrow> f contour_integrable_on (reversepath g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 134 | using has_contour_integral_reversepath contour_integrable_on_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 135 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 136 | lemma contour_integrable_reversepath_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 137 | "valid_path g \<Longrightarrow> (f contour_integrable_on (reversepath g) \<longleftrightarrow> f contour_integrable_on g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 138 | using contour_integrable_reversepath valid_path_reversepath by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 139 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 140 | lemma contour_integral_reversepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 141 | assumes "valid_path g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 142 | shows "contour_integral (reversepath g) f = - (contour_integral g f)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 143 | proof (cases "f contour_integrable_on g") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 144 | case True then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 145 | by (simp add: assms contour_integral_unique has_contour_integral_integral has_contour_integral_reversepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 146 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 147 | case False then have "\<not> f contour_integrable_on (reversepath g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 148 | by (simp add: assms contour_integrable_reversepath_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 149 | with False show ?thesis by (simp add: not_integrable_contour_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 150 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 151 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 152 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 153 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Joining two paths together\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 154 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 155 | lemma has_contour_integral_join: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 156 | assumes "(f has_contour_integral i1) g1" "(f has_contour_integral i2) g2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 157 | "valid_path g1" "valid_path g2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 158 | shows "(f has_contour_integral (i1 + i2)) (g1 +++ g2)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 159 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 160 | obtain s1 s2 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 161 |     where s1: "finite s1" "\<forall>x\<in>{0..1} - s1. g1 differentiable at x"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 162 |       and s2: "finite s2" "\<forall>x\<in>{0..1} - s2. g2 differentiable at x"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 163 | using assms | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 164 | by (auto simp: valid_path_def piecewise_C1_differentiable_on_def C1_differentiable_on_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 165 |   have 1: "((\<lambda>x. f (g1 x) * vector_derivative g1 (at x)) has_integral i1) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 166 |    and 2: "((\<lambda>x. f (g2 x) * vector_derivative g2 (at x)) has_integral i2) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 167 | using assms | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 168 | by (auto simp: has_contour_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 169 |   have i1: "((\<lambda>x. (2*f (g1 (2*x))) * vector_derivative g1 (at (2*x))) has_integral i1) {0..1/2}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 170 |    and i2: "((\<lambda>x. (2*f (g2 (2*x - 1))) * vector_derivative g2 (at (2*x - 1))) has_integral i2) {1/2..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 171 | using has_integral_affinity01 [OF 1, where m= 2 and c=0, THEN has_integral_cmul [where c=2]] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 172 | has_integral_affinity01 [OF 2, where m= 2 and c="-1", THEN has_integral_cmul [where c=2]] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 173 | by (simp_all only: image_affinity_atLeastAtMost_div_diff, simp_all add: scaleR_conv_of_real mult_ac) | 
| 72270 | 174 | have g1: "vector_derivative (\<lambda>x. if x*2 \<le> 1 then g1 (2*x) else g2 (2*x - 1)) (at z) = | 
| 175 | 2 *\<^sub>R vector_derivative g1 (at (z*2))" | |
| 176 | if "0 \<le> z" "z*2 < 1" "z*2 \<notin> s1" for z | |
| 177 | proof (rule vector_derivative_at [OF has_vector_derivative_transform_within]) | |
| 178 | show "0 < \<bar>z - 1/2\<bar>" | |
| 179 | using that by auto | |
| 180 | have "((*) 2 has_vector_derivative 2) (at z)" | |
| 181 | by (simp add: has_vector_derivative_def has_derivative_def bounded_linear_mult_left) | |
| 182 | moreover have "(g1 has_vector_derivative vector_derivative g1 (at (z * 2))) (at (2 * z))" | |
| 183 | using s1 that by (auto simp: algebra_simps vector_derivative_works) | |
| 184 | ultimately | |
| 185 | show "((\<lambda>x. g1 (2 * x)) has_vector_derivative 2 *\<^sub>R vector_derivative g1 (at (z * 2))) (at z)" | |
| 186 | by (intro vector_diff_chain_at [simplified o_def]) | |
| 187 | qed (use that in \<open>simp_all add: dist_real_def abs_if split: if_split_asm\<close>) | |
| 188 | ||
| 189 | have g2: "vector_derivative (\<lambda>x. if x*2 \<le> 1 then g1 (2*x) else g2 (2*x - 1)) (at z) = | |
| 190 | 2 *\<^sub>R vector_derivative g2 (at (z*2 - 1))" | |
| 191 | if "1 < z*2" "z \<le> 1" "z*2 - 1 \<notin> s2" for z | |
| 192 | proof (rule vector_derivative_at [OF has_vector_derivative_transform_within]) | |
| 193 | show "0 < \<bar>z - 1/2\<bar>" | |
| 194 | using that by auto | |
| 195 | have "((\<lambda>x. 2 * x - 1) has_vector_derivative 2) (at z)" | |
| 196 | by (simp add: has_vector_derivative_def has_derivative_def bounded_linear_mult_left) | |
| 197 | moreover have "(g2 has_vector_derivative vector_derivative g2 (at (z * 2 - 1))) (at (2 * z - 1))" | |
| 198 | using s2 that by (auto simp: algebra_simps vector_derivative_works) | |
| 199 | ultimately | |
| 200 | show "((\<lambda>x. g2 (2 * x - 1)) has_vector_derivative 2 *\<^sub>R vector_derivative g2 (at (z * 2 - 1))) (at z)" | |
| 201 | by (intro vector_diff_chain_at [simplified o_def]) | |
| 202 | qed (use that in \<open>simp_all add: dist_real_def abs_if split: if_split_asm\<close>) | |
| 203 | ||
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 204 |   have "((\<lambda>x. f ((g1 +++ g2) x) * vector_derivative (g1 +++ g2) (at x)) has_integral i1) {0..1/2}"
 | 
| 72270 | 205 | proof (rule has_integral_spike_finite [OF _ _ i1]) | 
| 206 | show "finite (insert (1/2) ((*) 2 -` s1))" | |
| 207 | using s1 by (force intro: finite_vimageI [where h = "(*)2"] inj_onI) | |
| 208 | qed (auto simp add: joinpaths_def scaleR_conv_of_real mult_ac g1) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 209 |   moreover have "((\<lambda>x. f ((g1 +++ g2) x) * vector_derivative (g1 +++ g2) (at x)) has_integral i2) {1/2..1}"
 | 
| 72270 | 210 | proof (rule has_integral_spike_finite [OF _ _ i2]) | 
| 211 | show "finite (insert (1/2) ((\<lambda>x. 2 * x - 1) -` s2))" | |
| 212 | using s2 by (force intro: finite_vimageI [where h = "\<lambda>x. 2*x-1"] inj_onI) | |
| 213 | qed (auto simp add: joinpaths_def scaleR_conv_of_real mult_ac g2) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 214 | ultimately | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 215 | show ?thesis | 
| 72270 | 216 | by (simp add: has_contour_integral has_integral_combine [where c = "1/2"]) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 217 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 218 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 219 | lemma contour_integrable_joinI: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 220 | assumes "f contour_integrable_on g1" "f contour_integrable_on g2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 221 | "valid_path g1" "valid_path g2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 222 | shows "f contour_integrable_on (g1 +++ g2)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 223 | using assms | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 224 | by (meson has_contour_integral_join contour_integrable_on_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 225 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 226 | lemma contour_integrable_joinD1: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 227 | assumes "f contour_integrable_on (g1 +++ g2)" "valid_path g1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 228 | shows "f contour_integrable_on g1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 229 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 230 | obtain s1 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 231 |     where s1: "finite s1" "\<forall>x\<in>{0..1} - s1. g1 differentiable at x"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 232 | using assms by (auto simp: valid_path_def piecewise_C1_differentiable_on_def C1_differentiable_on_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 233 |   have "(\<lambda>x. f ((g1 +++ g2) (x/2)) * vector_derivative (g1 +++ g2) (at (x/2))) integrable_on {0..1}"
 | 
| 72270 | 234 | using assms integrable_affinity [of _ 0 "1/2" "1/2" 0] integrable_on_subcbox [where a=0 and b="1/2"] | 
| 235 | by (fastforce simp: contour_integrable_on) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 236 |   then have *: "(\<lambda>x. (f ((g1 +++ g2) (x/2))/2) * vector_derivative (g1 +++ g2) (at (x/2))) integrable_on {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 237 | by (auto dest: integrable_cmul [where c="1/2"] simp: scaleR_conv_of_real) | 
| 72270 | 238 | have g1: "vector_derivative (\<lambda>x. if x*2 \<le> 1 then g1 (2*x) else g2 (2*x - 1)) (at (z/2)) = | 
| 239 | 2 *\<^sub>R vector_derivative g1 (at z)" | |
| 240 | if "0 < z" "z < 1" "z \<notin> s1" for z | |
| 241 | proof (rule vector_derivative_at [OF has_vector_derivative_transform_within]) | |
| 242 | show "0 < \<bar>(z - 1)/2\<bar>" | |
| 243 | using that by auto | |
| 244 | have \<section>: "((\<lambda>x. x * 2) has_vector_derivative 2) (at (z/2))" | |
| 245 | using s1 by (auto simp: has_vector_derivative_def has_derivative_def bounded_linear_mult_left) | |
| 246 | have "(g1 has_vector_derivative vector_derivative g1 (at z)) (at z)" | |
| 247 | using s1 that by (auto simp: vector_derivative_works) | |
| 248 | then show "((\<lambda>x. g1 (2 * x)) has_vector_derivative 2 *\<^sub>R vector_derivative g1 (at z)) (at (z/2))" | |
| 249 | using vector_diff_chain_at [OF \<section>] by (auto simp: field_simps o_def) | |
| 250 | qed (use that in \<open>simp_all add: field_simps dist_real_def abs_if split: if_split_asm\<close>) | |
| 251 |   have fin01: "finite ({0, 1} \<union> s1)"
 | |
| 252 | by (simp add: s1) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 253 | show ?thesis | 
| 72270 | 254 | unfolding contour_integrable_on | 
| 255 | by (intro integrable_spike_finite [OF fin01 _ *]) (auto simp: joinpaths_def scaleR_conv_of_real g1) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 256 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 257 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 258 | lemma contour_integrable_joinD2: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 259 | assumes "f contour_integrable_on (g1 +++ g2)" "valid_path g2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 260 | shows "f contour_integrable_on g2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 261 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 262 | obtain s2 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 263 |     where s2: "finite s2" "\<forall>x\<in>{0..1} - s2. g2 differentiable at x"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 264 | using assms by (auto simp: valid_path_def piecewise_C1_differentiable_on_def C1_differentiable_on_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 265 |   have "(\<lambda>x. f ((g1 +++ g2) (x/2 + 1/2)) * vector_derivative (g1 +++ g2) (at (x/2 + 1/2))) integrable_on {0..1}"
 | 
| 72270 | 266 | using assms integrable_affinity [of _ "1/2::real" 1 "1/2" "1/2"] | 
| 267 | integrable_on_subcbox [where a="1/2" and b=1] | |
| 268 | by (fastforce simp: contour_integrable_on image_affinity_atLeastAtMost_diff) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 269 | then have *: "(\<lambda>x. (f ((g1 +++ g2) (x/2 + 1/2))/2) * vector_derivative (g1 +++ g2) (at (x/2 + 1/2))) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 270 |                 integrable_on {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 271 | by (auto dest: integrable_cmul [where c="1/2"] simp: scaleR_conv_of_real) | 
| 72270 | 272 | have g2: "vector_derivative (\<lambda>x. if x*2 \<le> 1 then g1 (2*x) else g2 (2*x - 1)) (at (z/2+1/2)) = | 
| 273 | 2 *\<^sub>R vector_derivative g2 (at z)" | |
| 274 | if "0 < z" "z < 1" "z \<notin> s2" for z | |
| 275 | proof (rule vector_derivative_at [OF has_vector_derivative_transform_within]) | |
| 276 | show "0 < \<bar>z/2\<bar>" | |
| 277 | using that by auto | |
| 278 | have \<section>: "((\<lambda>x. x * 2 - 1) has_vector_derivative 2) (at ((1 + z)/2))" | |
| 279 | using s2 by (auto simp: has_vector_derivative_def has_derivative_def bounded_linear_mult_left) | |
| 280 | have "(g2 has_vector_derivative vector_derivative g2 (at z)) (at z)" | |
| 281 | using s2 that by (auto simp: vector_derivative_works) | |
| 282 | then show "((\<lambda>x. g2 (2*x - 1)) has_vector_derivative 2 *\<^sub>R vector_derivative g2 (at z)) (at (z/2 + 1/2))" | |
| 283 | using vector_diff_chain_at [OF \<section>] by (auto simp: field_simps o_def) | |
| 284 | qed (use that in \<open>simp_all add: field_simps dist_real_def abs_if split: if_split_asm\<close>) | |
| 285 |   have fin01: "finite ({0, 1} \<union> s2)"
 | |
| 286 | by (simp add: s2) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 287 | show ?thesis | 
| 72270 | 288 | unfolding contour_integrable_on | 
| 289 | by (intro integrable_spike_finite [OF fin01 _ *]) (auto simp: joinpaths_def scaleR_conv_of_real g2) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 290 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 291 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 292 | lemma contour_integrable_join [simp]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 293 | "\<lbrakk>valid_path g1; valid_path g2\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 294 | \<Longrightarrow> f contour_integrable_on (g1 +++ g2) \<longleftrightarrow> f contour_integrable_on g1 \<and> f contour_integrable_on g2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 295 | using contour_integrable_joinD1 contour_integrable_joinD2 contour_integrable_joinI by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 296 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 297 | lemma contour_integral_join [simp]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 298 | "\<lbrakk>f contour_integrable_on g1; f contour_integrable_on g2; valid_path g1; valid_path g2\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 299 | \<Longrightarrow> contour_integral (g1 +++ g2) f = contour_integral g1 f + contour_integral g2 f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 300 | by (simp add: has_contour_integral_integral has_contour_integral_join contour_integral_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 301 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 302 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 303 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Shifting the starting point of a (closed) path\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 304 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 305 | lemma has_contour_integral_shiftpath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 306 | assumes f: "(f has_contour_integral i) g" "valid_path g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 307 |       and a: "a \<in> {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 308 | shows "(f has_contour_integral i) (shiftpath a g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 309 | proof - | 
| 72270 | 310 | obtain S | 
| 311 |     where S: "finite S" and g: "\<forall>x\<in>{0..1} - S. g differentiable at x"
 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 312 | using assms by (auto simp: valid_path_def piecewise_C1_differentiable_on_def C1_differentiable_on_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 313 |   have *: "((\<lambda>x. f (g x) * vector_derivative g (at x)) has_integral i) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 314 | using assms by (auto simp: has_contour_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 315 |   then have i: "i = integral {a..1} (\<lambda>x. f (g x) * vector_derivative g (at x)) +
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 316 |                     integral {0..a} (\<lambda>x. f (g x) * vector_derivative g (at x))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 317 | apply (rule has_integral_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 318 | apply (subst add.commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 319 | apply (subst Henstock_Kurzweil_Integration.integral_combine) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 320 | using assms * integral_unique by auto | 
| 72270 | 321 | |
| 322 | have vd1: "vector_derivative (shiftpath a g) (at x) = vector_derivative g (at (x + a))" | |
| 323 | if "0 \<le> x" "x + a < 1" "x \<notin> (\<lambda>x. x - a) ` S" for x | |
| 324 | unfolding shiftpath_def | |
| 325 | proof (rule vector_derivative_at [OF has_vector_derivative_transform_within]) | |
| 326 | have "((\<lambda>x. g (x + a)) has_vector_derivative vector_derivative g (at (a + x))) (at x)" | |
| 327 | proof (rule vector_diff_chain_at [of _ 1, simplified o_def scaleR_one]) | |
| 328 | show "((\<lambda>x. x + a) has_vector_derivative 1) (at x)" | |
| 329 | by (rule derivative_eq_intros | simp)+ | |
| 330 | have "g differentiable at (x + a)" | |
| 331 | using g a that by force | |
| 332 | then show "(g has_vector_derivative vector_derivative g (at (a + x))) (at (x + a))" | |
| 333 | by (metis add.commute vector_derivative_works) | |
| 334 | qed | |
| 335 | then | |
| 336 | show "((\<lambda>x. g (a + x)) has_vector_derivative vector_derivative g (at (x + a))) (at x)" | |
| 337 | by (auto simp: field_simps) | |
| 338 | show "0 < dist (1 - a) x" | |
| 339 | using that by auto | |
| 340 | qed (use that in \<open>auto simp: dist_real_def\<close>) | |
| 341 | ||
| 342 | have vd2: "vector_derivative (shiftpath a g) (at x) = vector_derivative g (at (x + a - 1))" | |
| 343 | if "x \<le> 1" "1 < x + a" "x \<notin> (\<lambda>x. x - a + 1) ` S" for x | |
| 344 | unfolding shiftpath_def | |
| 345 | proof (rule vector_derivative_at [OF has_vector_derivative_transform_within]) | |
| 346 | have "((\<lambda>x. g (x + a - 1)) has_vector_derivative vector_derivative g (at (a+x-1))) (at x)" | |
| 347 | proof (rule vector_diff_chain_at [of _ 1, simplified o_def scaleR_one]) | |
| 348 | show "((\<lambda>x. x + a - 1) has_vector_derivative 1) (at x)" | |
| 349 | by (rule derivative_eq_intros | simp)+ | |
| 350 | have "g differentiable at (x+a-1)" | |
| 351 | using g a that by force | |
| 352 | then show "(g has_vector_derivative vector_derivative g (at (a+x-1))) (at (x + a - 1))" | |
| 353 | by (metis add.commute vector_derivative_works) | |
| 354 | qed | |
| 355 | then show "((\<lambda>x. g (a + x - 1)) has_vector_derivative vector_derivative g (at (x + a - 1))) (at x)" | |
| 356 | by (auto simp: field_simps) | |
| 357 | show "0 < dist (1 - a) x" | |
| 358 | using that by auto | |
| 359 | qed (use that in \<open>auto simp: dist_real_def\<close>) | |
| 360 | ||
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 361 |   have va1: "(\<lambda>x. f (g x) * vector_derivative g (at x)) integrable_on ({a..1})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 362 | using * a by (fastforce intro: integrable_subinterval_real) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 363 |   have v0a: "(\<lambda>x. f (g x) * vector_derivative g (at x)) integrable_on ({0..a})"
 | 
| 72270 | 364 | using * a by (force intro: integrable_subinterval_real) | 
| 365 |   have "finite ({1 - a} \<union> (\<lambda>x. x - a) ` S)"
 | |
| 366 | using S by blast | |
| 367 | then have "((\<lambda>x. f (shiftpath a g x) * vector_derivative (shiftpath a g) (at x)) | |
| 368 |         has_integral integral {a..1} (\<lambda>x. f (g x) * vector_derivative g (at x)))  {0..1 - a}"
 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 369 | apply (rule has_integral_spike_finite | 
| 72270 | 370 | [where f = "\<lambda>x. f(g(a+x)) * vector_derivative g (at(a+x))"]) | 
| 371 | subgoal | |
| 372 | using a by (simp add: vd1) (force simp: shiftpath_def add.commute) | |
| 373 | subgoal | |
| 374 | using has_integral_affinity [where m=1 and c=a] integrable_integral [OF va1] | |
| 375 | by (force simp add: add.commute) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 376 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 377 | moreover | 
| 72270 | 378 |   have "finite ({1 - a} \<union> (\<lambda>x. x - a + 1) ` S)"
 | 
| 379 | using S by blast | |
| 380 | then have "((\<lambda>x. f (shiftpath a g x) * vector_derivative (shiftpath a g) (at x)) | |
| 381 |              has_integral  integral {0..a} (\<lambda>x. f (g x) * vector_derivative g (at x)))  {1 - a..1}"
 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 382 | apply (rule has_integral_spike_finite | 
| 72270 | 383 | [where f = "\<lambda>x. f(g(a+x-1)) * vector_derivative g (at(a+x-1))"]) | 
| 384 | subgoal | |
| 385 | using a by (simp add: vd2) (force simp: shiftpath_def add.commute) | |
| 386 | subgoal | |
| 387 | using has_integral_affinity [where m=1 and c="a-1", simplified, OF integrable_integral [OF v0a]] | |
| 388 | by (force simp add: algebra_simps) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 389 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 390 | ultimately show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 391 | using a | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 392 | by (auto simp: i has_contour_integral intro: has_integral_combine [where c = "1-a"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 393 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 394 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 395 | lemma has_contour_integral_shiftpath_D: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 396 | assumes "(f has_contour_integral i) (shiftpath a g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 397 |           "valid_path g" "pathfinish g = pathstart g" "a \<in> {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 398 | shows "(f has_contour_integral i) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 399 | proof - | 
| 72270 | 400 | obtain S | 
| 401 |     where S: "finite S" and g: "\<forall>x\<in>{0..1} - S. g differentiable at x"
 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 402 | using assms by (auto simp: valid_path_def piecewise_C1_differentiable_on_def C1_differentiable_on_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 403 |   { fix x
 | 
| 72270 | 404 | assume x: "0 < x" "x < 1" "x \<notin> S" | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 405 | then have gx: "g differentiable at x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 406 | using g by auto | 
| 72270 | 407 | have \<section>: "shiftpath (1 - a) (shiftpath a g) differentiable at x" | 
| 408 | using assms x | |
| 409 | by (intro differentiable_transform_within [OF gx, of "min x (1-x)"]) | |
| 410 | (auto simp: dist_real_def shiftpath_shiftpath abs_if split: if_split_asm) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 411 |     have "vector_derivative g (at x within {0..1}) =
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 412 |           vector_derivative (shiftpath (1 - a) (shiftpath a g)) (at x within {0..1})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 413 | apply (rule vector_derivative_at_within_ivl | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 414 | [OF has_vector_derivative_transform_within_open | 
| 72270 | 415 |                       [where f = "(shiftpath (1 - a) (shiftpath a g))" and S = "{0<..<1}-S"]])
 | 
| 416 | using S assms x \<section> | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 417 | apply (auto simp: finite_imp_closed open_Diff shiftpath_shiftpath | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 418 |                         at_within_interior [of _ "{0..1}"] vector_derivative_works [symmetric])
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 419 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 420 | } note vd = this | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 421 | have fi: "(f has_contour_integral i) (shiftpath (1 - a) (shiftpath a g))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 422 | using assms by (auto intro!: has_contour_integral_shiftpath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 423 | show ?thesis | 
| 72270 | 424 | unfolding has_contour_integral_def | 
| 425 |   proof (rule has_integral_spike_finite [of "{0,1} \<union> S", OF _ _  fi [unfolded has_contour_integral_def]])
 | |
| 426 |     show "finite ({0, 1} \<union> S)"
 | |
| 427 | by (simp add: S) | |
| 428 | qed (use S assms vd in \<open>auto simp: shiftpath_shiftpath\<close>) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 429 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 430 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 431 | lemma has_contour_integral_shiftpath_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 432 |   assumes "valid_path g" "pathfinish g = pathstart g" "a \<in> {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 433 | shows "(f has_contour_integral i) (shiftpath a g) \<longleftrightarrow> (f has_contour_integral i) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 434 | using assms has_contour_integral_shiftpath has_contour_integral_shiftpath_D by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 435 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 436 | lemma contour_integrable_on_shiftpath_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 437 |   assumes "valid_path g" "pathfinish g = pathstart g" "a \<in> {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 438 | shows "f contour_integrable_on (shiftpath a g) \<longleftrightarrow> f contour_integrable_on g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 439 | using assms contour_integrable_on_def has_contour_integral_shiftpath_eq by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 440 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 441 | lemma contour_integral_shiftpath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 442 |   assumes "valid_path g" "pathfinish g = pathstart g" "a \<in> {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 443 | shows "contour_integral (shiftpath a g) f = contour_integral g f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 444 | using assms | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 445 | by (simp add: contour_integral_def contour_integrable_on_def has_contour_integral_shiftpath_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 446 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 447 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 448 | subsection\<^marker>\<open>tag unimportant\<close> \<open>More about straight-line paths\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 449 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 450 | lemma has_contour_integral_linepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 451 | shows "(f has_contour_integral i) (linepath a b) \<longleftrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 452 |          ((\<lambda>x. f(linepath a b x) * (b - a)) has_integral i) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 453 | by (simp add: has_contour_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 454 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 455 | lemma has_contour_integral_trivial [iff]: "(f has_contour_integral 0) (linepath a a)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 456 | by (simp add: has_contour_integral_linepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 457 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 458 | lemma has_contour_integral_trivial_iff [simp]: "(f has_contour_integral i) (linepath a a) \<longleftrightarrow> i=0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 459 | using has_contour_integral_unique by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 460 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 461 | lemma contour_integral_trivial [simp]: "contour_integral (linepath a a) f = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 462 | using has_contour_integral_trivial contour_integral_unique by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 463 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 464 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 465 | subsection\<open>Relation to subpath construction\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 466 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 467 | lemma has_contour_integral_subpath_refl [iff]: "(f has_contour_integral 0) (subpath u u g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 468 | by (simp add: has_contour_integral subpath_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 469 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 470 | lemma contour_integrable_subpath_refl [iff]: "f contour_integrable_on (subpath u u g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 471 | using has_contour_integral_subpath_refl contour_integrable_on_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 472 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 473 | lemma contour_integral_subpath_refl [simp]: "contour_integral (subpath u u g) f = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 474 | by (simp add: contour_integral_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 475 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 476 | lemma has_contour_integral_subpath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 477 | assumes f: "f contour_integrable_on g" and g: "valid_path g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 478 |       and uv: "u \<in> {0..1}" "v \<in> {0..1}" "u \<le> v"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 479 |     shows "(f has_contour_integral  integral {u..v} (\<lambda>x. f(g x) * vector_derivative g (at x)))
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 480 | (subpath u v g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 481 | proof (cases "v=u") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 482 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 483 | then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 484 | using f by (simp add: contour_integrable_on_def subpath_def has_contour_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 485 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 486 | case False | 
| 72270 | 487 |   obtain S where S: "\<And>x. x \<in> {0..1} - S \<Longrightarrow> g differentiable at x" and fs: "finite S"
 | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 488 | using g unfolding piecewise_C1_differentiable_on_def C1_differentiable_on_eq valid_path_def by blast | 
| 72270 | 489 |   have \<section>: "(\<lambda>t. f (g t) * vector_derivative g (at t)) integrable_on {u..v}"
 | 
| 490 | using contour_integrable_on f integrable_on_subinterval uv by fastforce | |
| 491 | then have *: "((\<lambda>x. f (g ((v - u) * x + u)) * vector_derivative g (at ((v - u) * x + u))) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 492 |             has_integral (1 / (v - u)) * integral {u..v} (\<lambda>t. f (g t) * vector_derivative g (at t)))
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 493 |            {0..1}"
 | 
| 72270 | 494 | using uv False unfolding has_integral_integral | 
| 495 | apply simp | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 496 | apply (drule has_integral_affinity [where m="v-u" and c=u, simplified]) | 
| 72270 | 497 | apply (simp_all add: image_affinity_atLeastAtMost_div_diff scaleR_conv_of_real) | 
| 498 | apply (simp add: divide_simps) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 499 | done | 
| 72270 | 500 | |
| 501 | have vd: "vector_derivative (\<lambda>x. g ((v-u) * x + u)) (at x) = (v-u) *\<^sub>R vector_derivative g (at ((v-u) * x + u))" | |
| 502 |     if "x \<in> {0..1}"  "x \<notin> (\<lambda>t. (v-u) *\<^sub>R t + u) -` S" for x
 | |
| 503 | proof (rule vector_derivative_at [OF vector_diff_chain_at [simplified o_def]]) | |
| 504 | show "((\<lambda>x. (v - u) * x + u) has_vector_derivative v - u) (at x)" | |
| 505 | by (intro derivative_eq_intros | simp)+ | |
| 506 | qed (use S uv mult_left_le [of x "v-u"] that in \<open>auto simp: vector_derivative_works\<close>) | |
| 507 | ||
| 508 | have fin: "finite ((\<lambda>t. (v - u) *\<^sub>R t + u) -` S)" | |
| 509 | using fs by (auto simp: inj_on_def False finite_vimageI) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 510 | show ?thesis | 
| 72270 | 511 | unfolding subpath_def has_contour_integral | 
| 512 | apply (rule has_integral_spike_finite [OF fin]) | |
| 513 | using has_integral_cmul [OF *, where c = "v-u"] fs assms | |
| 514 | by (auto simp: False vd scaleR_conv_of_real) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 515 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 516 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 517 | lemma contour_integrable_subpath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 518 |   assumes "f contour_integrable_on g" "valid_path g" "u \<in> {0..1}" "v \<in> {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 519 | shows "f contour_integrable_on (subpath u v g)" | 
| 72270 | 520 | proof (cases u v rule: linorder_class.le_cases) | 
| 521 | case le | |
| 522 | then show ?thesis | |
| 523 | by (metis contour_integrable_on_def has_contour_integral_subpath [OF assms]) | |
| 524 | next | |
| 525 | case ge | |
| 526 | with assms show ?thesis | |
| 527 | by (metis (no_types, lifting) contour_integrable_on_def contour_integrable_reversepath_eq has_contour_integral_subpath reversepath_subpath valid_path_subpath) | |
| 528 | qed | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 529 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 530 | lemma has_integral_contour_integral_subpath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 531 |   assumes "f contour_integrable_on g" "valid_path g" "u \<in> {0..1}" "v \<in> {0..1}" "u \<le> v"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 532 | shows "(((\<lambda>x. f(g x) * vector_derivative g (at x))) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 533 |             has_integral  contour_integral (subpath u v g) f) {u..v}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 534 | using assms | 
| 72270 | 535 | proof - | 
| 536 |   have "(\<lambda>r. f (g r) * vector_derivative g (at r)) integrable_on {u..v}"
 | |
| 537 | by (metis (full_types) assms(1) assms(3) assms(4) atLeastAtMost_iff atLeastatMost_subset_iff contour_integrable_on integrable_on_subinterval) | |
| 538 |   then have "((\<lambda>r. f (g r) * vector_derivative g (at r)) has_integral integral {u..v} (\<lambda>r. f (g r) * vector_derivative g (at r))) {u..v}"
 | |
| 539 | by blast | |
| 540 | then show ?thesis | |
| 541 | by (metis (full_types) assms contour_integral_unique has_contour_integral_subpath) | |
| 542 | qed | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 543 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 544 | lemma contour_integral_subcontour_integral: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 545 |   assumes "f contour_integrable_on g" "valid_path g" "u \<in> {0..1}" "v \<in> {0..1}" "u \<le> v"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 546 | shows "contour_integral (subpath u v g) f = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 547 |            integral {u..v} (\<lambda>x. f(g x) * vector_derivative g (at x))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 548 | using assms has_contour_integral_subpath contour_integral_unique by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 549 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 550 | lemma contour_integral_subpath_combine_less: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 551 |   assumes "f contour_integrable_on g" "valid_path g" "u \<in> {0..1}" "v \<in> {0..1}" "w \<in> {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 552 | "u<v" "v<w" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 553 | shows "contour_integral (subpath u v g) f + contour_integral (subpath v w g) f = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 554 | contour_integral (subpath u w g) f" | 
| 72270 | 555 | proof - | 
| 556 |   have "(\<lambda>x. f (g x) * vector_derivative g (at x)) integrable_on {u..w}"
 | |
| 557 |     using integrable_on_subcbox [where a=u and b=w and S = "{0..1}"] assms
 | |
| 558 | by (auto simp: contour_integrable_on) | |
| 559 | with assms show ?thesis | |
| 560 | by (auto simp: contour_integral_subcontour_integral Henstock_Kurzweil_Integration.integral_combine) | |
| 561 | qed | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 562 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 563 | lemma contour_integral_subpath_combine: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 564 |   assumes "f contour_integrable_on g" "valid_path g" "u \<in> {0..1}" "v \<in> {0..1}" "w \<in> {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 565 | shows "contour_integral (subpath u v g) f + contour_integral (subpath v w g) f = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 566 | contour_integral (subpath u w g) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 567 | proof (cases "u\<noteq>v \<and> v\<noteq>w \<and> u\<noteq>w") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 568 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 569 | have *: "subpath v u g = reversepath(subpath u v g) \<and> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 570 | subpath w u g = reversepath(subpath u w g) \<and> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 571 | subpath w v g = reversepath(subpath v w g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 572 | by (auto simp: reversepath_subpath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 573 | have "u < v \<and> v < w \<or> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 574 | u < w \<and> w < v \<or> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 575 | v < u \<and> u < w \<or> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 576 | v < w \<and> w < u \<or> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 577 | w < u \<and> u < v \<or> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 578 | w < v \<and> v < u" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 579 | using True assms by linarith | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 580 | with assms show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 581 | using contour_integral_subpath_combine_less [of f g u v w] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 582 | contour_integral_subpath_combine_less [of f g u w v] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 583 | contour_integral_subpath_combine_less [of f g v u w] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 584 | contour_integral_subpath_combine_less [of f g v w u] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 585 | contour_integral_subpath_combine_less [of f g w u v] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 586 | contour_integral_subpath_combine_less [of f g w v u] | 
| 72270 | 587 | by (elim disjE) (auto simp: * contour_integral_reversepath contour_integrable_subpath | 
| 588 | valid_path_subpath algebra_simps) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 589 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 590 | case False | 
| 72270 | 591 | with assms show ?thesis | 
| 592 | by (metis add.right_neutral contour_integral_reversepath contour_integral_subpath_refl diff_0 eq_diff_eq add_0 reversepath_subpath valid_path_subpath) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 593 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 594 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 595 | lemma contour_integral_integral: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 596 |      "contour_integral g f = integral {0..1} (\<lambda>x. f (g x) * vector_derivative g (at x))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 597 | by (simp add: contour_integral_def integral_def has_contour_integral contour_integrable_on) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 598 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 599 | lemma contour_integral_cong: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 600 | assumes "g = g'" "\<And>x. x \<in> path_image g \<Longrightarrow> f x = f' x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 601 | shows "contour_integral g f = contour_integral g' f'" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 602 | unfolding contour_integral_integral using assms | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 603 | by (intro integral_cong) (auto simp: path_image_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 604 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 605 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 606 | text \<open>Contour integral along a segment on the real axis\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 607 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 608 | lemma has_contour_integral_linepath_Reals_iff: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 609 | fixes a b :: complex and f :: "complex \<Rightarrow> complex" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 610 | assumes "a \<in> Reals" "b \<in> Reals" "Re a < Re b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 611 | shows "(f has_contour_integral I) (linepath a b) \<longleftrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 612 |              ((\<lambda>x. f (of_real x)) has_integral I) {Re a..Re b}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 613 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 614 | from assms have [simp]: "of_real (Re a) = a" "of_real (Re b) = b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 615 | by (simp_all add: complex_eq_iff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 616 | from assms have "a \<noteq> b" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 617 | have "((\<lambda>x. f (of_real x)) has_integral I) (cbox (Re a) (Re b)) \<longleftrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 618 |           ((\<lambda>x. f (a + b * of_real x - a * of_real x)) has_integral I /\<^sub>R (Re b - Re a)) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 619 | by (subst has_integral_affinity_iff [of "Re b - Re a" _ "Re a", symmetric]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 620 | (insert assms, simp_all add: field_simps scaleR_conv_of_real) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 621 | also have "(\<lambda>x. f (a + b * of_real x - a * of_real x)) = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 622 | (\<lambda>x. (f (a + b * of_real x - a * of_real x) * (b - a)) /\<^sub>R (Re b - Re a))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 623 | using \<open>a \<noteq> b\<close> by (auto simp: field_simps fun_eq_iff scaleR_conv_of_real) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 624 |   also have "(\<dots> has_integral I /\<^sub>R (Re b - Re a)) {0..1} \<longleftrightarrow> 
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 625 |                ((\<lambda>x. f (linepath a b x) * (b - a)) has_integral I) {0..1}" using assms
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 626 | by (subst has_integral_cmul_iff) (auto simp: linepath_def scaleR_conv_of_real algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 627 | also have "\<dots> \<longleftrightarrow> (f has_contour_integral I) (linepath a b)" unfolding has_contour_integral_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 628 | by (intro has_integral_cong) (simp add: vector_derivative_linepath_within) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 629 | finally show ?thesis by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 630 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 631 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 632 | lemma contour_integrable_linepath_Reals_iff: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 633 | fixes a b :: complex and f :: "complex \<Rightarrow> complex" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 634 | assumes "a \<in> Reals" "b \<in> Reals" "Re a < Re b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 635 | shows "(f contour_integrable_on linepath a b) \<longleftrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 636 |              (\<lambda>x. f (of_real x)) integrable_on {Re a..Re b}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 637 | using has_contour_integral_linepath_Reals_iff[OF assms, of f] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 638 | by (auto simp: contour_integrable_on_def integrable_on_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 639 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 640 | lemma contour_integral_linepath_Reals_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 641 | fixes a b :: complex and f :: "complex \<Rightarrow> complex" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 642 | assumes "a \<in> Reals" "b \<in> Reals" "Re a < Re b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 643 |   shows   "contour_integral (linepath a b) f = integral {Re a..Re b} (\<lambda>x. f (of_real x))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 644 | proof (cases "f contour_integrable_on linepath a b") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 645 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 646 | thus ?thesis using has_contour_integral_linepath_Reals_iff[OF assms, of f] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 647 | using has_contour_integral_integral has_contour_integral_unique by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 648 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 649 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 650 | thus ?thesis using contour_integrable_linepath_Reals_iff[OF assms, of f] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 651 | by (simp add: not_integrable_contour_integral not_integrable_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 652 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 653 | |
| 72270 | 654 | subsection \<open>Cauchy's theorem where there's a primitive\<close> | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 655 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 656 | lemma contour_integral_primitive_lemma: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 657 | fixes f :: "complex \<Rightarrow> complex" and g :: "real \<Rightarrow> complex" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 658 | assumes "a \<le> b" | 
| 72270 | 659 | and "\<And>x. x \<in> S \<Longrightarrow> (f has_field_derivative f' x) (at x within S)" | 
| 660 |       and "g piecewise_differentiable_on {a..b}"  "\<And>x. x \<in> {a..b} \<Longrightarrow> g x \<in> S"
 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 661 |     shows "((\<lambda>x. f'(g x) * vector_derivative g (at x within {a..b}))
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 662 |              has_integral (f(g b) - f(g a))) {a..b}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 663 | proof - | 
| 72270 | 664 |   obtain K where "finite K" and K: "\<forall>x\<in>{a..b} - K. g differentiable (at x within {a..b})" and cg: "continuous_on {a..b} g"
 | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 665 | using assms by (auto simp: piecewise_differentiable_on_def) | 
| 72270 | 666 |   have "continuous_on (g ` {a..b}) f"
 | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 667 | using assms | 
| 72270 | 668 | by (metis field_differentiable_def field_differentiable_imp_continuous_at continuous_on_eq_continuous_within continuous_on_subset image_subset_iff) | 
| 669 |   then have cfg: "continuous_on {a..b} (\<lambda>x. f (g x))"
 | |
| 670 | by (rule continuous_on_compose [OF cg, unfolded o_def]) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 671 |   { fix x::real
 | 
| 72270 | 672 | assume a: "a < x" and b: "x < b" and xk: "x \<notin> K" | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 673 |     then have "g differentiable at x within {a..b}"
 | 
| 72270 | 674 | using K by (simp add: differentiable_at_withinI) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 675 |     then have "(g has_vector_derivative vector_derivative g (at x within {a..b})) (at x within {a..b})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 676 | by (simp add: vector_derivative_works has_field_derivative_def scaleR_conv_of_real) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 677 |     then have gdiff: "(g has_derivative (\<lambda>u. u * vector_derivative g (at x within {a..b}))) (at x within {a..b})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 678 | by (simp add: has_vector_derivative_def scaleR_conv_of_real) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 679 |     have "(f has_field_derivative (f' (g x))) (at (g x) within g ` {a..b})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 680 | using assms by (metis a atLeastAtMost_iff b DERIV_subset image_subset_iff less_eq_real_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 681 |     then have fdiff: "(f has_derivative (*) (f' (g x))) (at (g x) within g ` {a..b})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 682 | by (simp add: has_field_derivative_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 683 |     have "((\<lambda>x. f (g x)) has_vector_derivative f' (g x) * vector_derivative g (at x within {a..b})) (at x within {a..b})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 684 | using diff_chain_within [OF gdiff fdiff] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 685 | by (simp add: has_vector_derivative_def scaleR_conv_of_real o_def mult_ac) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 686 | } note * = this | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 687 | show ?thesis | 
| 72270 | 688 | using assms cfg * | 
| 689 | by (force simp: at_within_Icc_at intro: fundamental_theorem_of_calculus_interior_strong [OF \<open>finite K\<close>]) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 690 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 691 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 692 | lemma contour_integral_primitive: | 
| 72270 | 693 | assumes "\<And>x. x \<in> S \<Longrightarrow> (f has_field_derivative f' x) (at x within S)" | 
| 694 | and "valid_path g" "path_image g \<subseteq> S" | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 695 | shows "(f' has_contour_integral (f(pathfinish g) - f(pathstart g))) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 696 | using assms | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 697 | apply (simp add: valid_path_def path_image_def pathfinish_def pathstart_def has_contour_integral_def) | 
| 72270 | 698 | apply (auto intro!: piecewise_C1_imp_differentiable contour_integral_primitive_lemma [of 0 1 S]) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 699 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 700 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 701 | corollary Cauchy_theorem_primitive: | 
| 72270 | 702 | assumes "\<And>x. x \<in> S \<Longrightarrow> (f has_field_derivative f' x) (at x within S)" | 
| 703 | and "valid_path g" "path_image g \<subseteq> S" "pathfinish g = pathstart g" | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 704 | shows "(f' has_contour_integral 0) g" | 
| 72270 | 705 | using assms by (metis diff_self contour_integral_primitive) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 706 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 707 | text\<open>Existence of path integral for continuous function\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 708 | lemma contour_integrable_continuous_linepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 709 | assumes "continuous_on (closed_segment a b) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 710 | shows "f contour_integrable_on (linepath a b)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 711 | proof - | 
| 72270 | 712 | have "continuous_on (closed_segment a b) (\<lambda>x. f x * (b - a))" | 
| 713 | by (rule continuous_intros | simp add: assms)+ | |
| 714 |   then have "continuous_on {0..1} (\<lambda>x. f (linepath a b x) * (b - a))"
 | |
| 715 | by (metis (no_types, lifting) continuous_on_compose continuous_on_cong continuous_on_linepath linepath_image_01 o_apply) | |
| 716 | then have "(\<lambda>x. f (linepath a b x) * | |
| 717 | vector_derivative (linepath a b) | |
| 718 |           (at x within {0..1})) integrable_on
 | |
| 719 |     {0..1}"
 | |
| 720 | by (metis (no_types, lifting) continuous_on_cong integrable_continuous_real vector_derivative_linepath_within) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 721 | then show ?thesis | 
| 72270 | 722 | by (simp add: contour_integrable_on_def has_contour_integral_def integrable_on_def [symmetric]) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 723 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 724 | |
| 72270 | 725 | lemma has_field_der_id: "((\<lambda>x. x\<^sup>2/2) has_field_derivative x) (at x)" | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 726 | by (rule has_derivative_imp_has_field_derivative) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 727 | (rule derivative_intros | simp)+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 728 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 729 | lemma contour_integral_id [simp]: "contour_integral (linepath a b) (\<lambda>y. y) = (b^2 - a^2)/2" | 
| 72270 | 730 | using contour_integral_primitive [of UNIV "\<lambda>x. x^2/2" "\<lambda>x. x" "linepath a b"] contour_integral_unique | 
| 731 | by (simp add: has_field_der_id) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 732 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 733 | lemma contour_integrable_on_const [iff]: "(\<lambda>x. c) contour_integrable_on (linepath a b)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 734 | by (simp add: contour_integrable_continuous_linepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 735 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 736 | lemma contour_integrable_on_id [iff]: "(\<lambda>x. x) contour_integrable_on (linepath a b)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 737 | by (simp add: contour_integrable_continuous_linepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 738 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 739 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Arithmetical combining theorems\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 740 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 741 | lemma has_contour_integral_neg: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 742 | "(f has_contour_integral i) g \<Longrightarrow> ((\<lambda>x. -(f x)) has_contour_integral (-i)) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 743 | by (simp add: has_integral_neg has_contour_integral_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 744 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 745 | lemma has_contour_integral_add: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 746 | "\<lbrakk>(f1 has_contour_integral i1) g; (f2 has_contour_integral i2) g\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 747 | \<Longrightarrow> ((\<lambda>x. f1 x + f2 x) has_contour_integral (i1 + i2)) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 748 | by (simp add: has_integral_add has_contour_integral_def algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 749 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 750 | lemma has_contour_integral_diff: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 751 | "\<lbrakk>(f1 has_contour_integral i1) g; (f2 has_contour_integral i2) g\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 752 | \<Longrightarrow> ((\<lambda>x. f1 x - f2 x) has_contour_integral (i1 - i2)) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 753 | by (simp add: has_integral_diff has_contour_integral_def algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 754 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 755 | lemma has_contour_integral_lmul: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 756 | "(f has_contour_integral i) g \<Longrightarrow> ((\<lambda>x. c * (f x)) has_contour_integral (c*i)) g" | 
| 72270 | 757 | by (simp add: has_contour_integral_def algebra_simps has_integral_mult_right) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 758 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 759 | lemma has_contour_integral_rmul: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 760 | "(f has_contour_integral i) g \<Longrightarrow> ((\<lambda>x. (f x) * c) has_contour_integral (i*c)) g" | 
| 72270 | 761 | by (simp add: mult.commute has_contour_integral_lmul) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 762 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 763 | lemma has_contour_integral_div: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 764 | "(f has_contour_integral i) g \<Longrightarrow> ((\<lambda>x. f x/c) has_contour_integral (i/c)) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 765 | by (simp add: field_class.field_divide_inverse) (metis has_contour_integral_rmul) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 766 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 767 | lemma has_contour_integral_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 768 | "\<lbrakk>(f has_contour_integral y) p; \<And>x. x \<in> path_image p \<Longrightarrow> f x = g x\<rbrakk> \<Longrightarrow> (g has_contour_integral y) p" | 
| 72270 | 769 | by (metis (mono_tags, lifting) has_contour_integral_def has_integral_eq image_eqI path_image_def) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 770 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 771 | lemma has_contour_integral_bound_linepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 772 | assumes "(f has_contour_integral i) (linepath a b)" | 
| 72270 | 773 | "0 \<le> B" and B: "\<And>x. x \<in> closed_segment a b \<Longrightarrow> norm(f x) \<le> B" | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 774 | shows "norm i \<le> B * norm(b - a)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 775 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 776 | have "norm i \<le> (B * norm (b - a)) * content (cbox 0 (1::real))" | 
| 72270 | 777 | proof (rule has_integral_bound | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 778 |        [of _ "\<lambda>x. f (linepath a b x) * vector_derivative (linepath a b) (at x within {0..1})"])
 | 
| 72270 | 779 |     show  "cmod (f (linepath a b x) * vector_derivative (linepath a b) (at x within {0..1}))
 | 
| 780 | \<le> B * cmod (b - a)" | |
| 781 | if "x \<in> cbox 0 1" for x::real | |
| 782 | using that box_real(2) norm_mult | |
| 783 | by (metis B linepath_in_path mult_right_mono norm_ge_zero vector_derivative_linepath_within) | |
| 784 | qed (use assms has_contour_integral_def in auto) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 785 | then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 786 | by (auto simp: content_real) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 787 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 788 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 789 | lemma has_contour_integral_const_linepath: "((\<lambda>x. c) has_contour_integral c*(b - a))(linepath a b)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 790 | unfolding has_contour_integral_linepath | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 791 | by (metis content_real diff_0_right has_integral_const_real lambda_one of_real_1 scaleR_conv_of_real zero_le_one) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 792 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 793 | lemma has_contour_integral_0: "((\<lambda>x. 0) has_contour_integral 0) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 794 | by (simp add: has_contour_integral_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 795 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 796 | lemma has_contour_integral_is_0: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 797 | "(\<And>z. z \<in> path_image g \<Longrightarrow> f z = 0) \<Longrightarrow> (f has_contour_integral 0) g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 798 | by (rule has_contour_integral_eq [OF has_contour_integral_0]) auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 799 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 800 | lemma has_contour_integral_sum: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 801 | "\<lbrakk>finite s; \<And>a. a \<in> s \<Longrightarrow> (f a has_contour_integral i a) p\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 802 | \<Longrightarrow> ((\<lambda>x. sum (\<lambda>a. f a x) s) has_contour_integral sum i s) p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 803 | by (induction s rule: finite_induct) (auto simp: has_contour_integral_0 has_contour_integral_add) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 804 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 805 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Operations on path integrals\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 806 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 807 | lemma contour_integral_const_linepath [simp]: "contour_integral (linepath a b) (\<lambda>x. c) = c*(b - a)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 808 | by (rule contour_integral_unique [OF has_contour_integral_const_linepath]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 809 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 810 | lemma contour_integral_neg: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 811 | "f contour_integrable_on g \<Longrightarrow> contour_integral g (\<lambda>x. -(f x)) = -(contour_integral g f)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 812 | by (simp add: contour_integral_unique has_contour_integral_integral has_contour_integral_neg) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 813 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 814 | lemma contour_integral_add: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 815 | "f1 contour_integrable_on g \<Longrightarrow> f2 contour_integrable_on g \<Longrightarrow> contour_integral g (\<lambda>x. f1 x + f2 x) = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 816 | contour_integral g f1 + contour_integral g f2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 817 | by (simp add: contour_integral_unique has_contour_integral_integral has_contour_integral_add) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 818 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 819 | lemma contour_integral_diff: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 820 | "f1 contour_integrable_on g \<Longrightarrow> f2 contour_integrable_on g \<Longrightarrow> contour_integral g (\<lambda>x. f1 x - f2 x) = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 821 | contour_integral g f1 - contour_integral g f2" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 822 | by (simp add: contour_integral_unique has_contour_integral_integral has_contour_integral_diff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 823 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 824 | lemma contour_integral_lmul: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 825 | shows "f contour_integrable_on g | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 826 | \<Longrightarrow> contour_integral g (\<lambda>x. c * f x) = c*contour_integral g f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 827 | by (simp add: contour_integral_unique has_contour_integral_integral has_contour_integral_lmul) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 828 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 829 | lemma contour_integral_rmul: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 830 | shows "f contour_integrable_on g | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 831 | \<Longrightarrow> contour_integral g (\<lambda>x. f x * c) = contour_integral g f * c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 832 | by (simp add: contour_integral_unique has_contour_integral_integral has_contour_integral_rmul) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 833 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 834 | lemma contour_integral_div: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 835 | shows "f contour_integrable_on g | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 836 | \<Longrightarrow> contour_integral g (\<lambda>x. f x / c) = contour_integral g f / c" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 837 | by (simp add: contour_integral_unique has_contour_integral_integral has_contour_integral_div) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 838 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 839 | lemma contour_integral_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 840 | "(\<And>x. x \<in> path_image p \<Longrightarrow> f x = g x) \<Longrightarrow> contour_integral p f = contour_integral p g" | 
| 72270 | 841 | using contour_integral_cong contour_integral_def by fastforce | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 842 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 843 | lemma contour_integral_eq_0: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 844 | "(\<And>z. z \<in> path_image g \<Longrightarrow> f z = 0) \<Longrightarrow> contour_integral g f = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 845 | by (simp add: has_contour_integral_is_0 contour_integral_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 846 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 847 | lemma contour_integral_bound_linepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 848 | shows | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 849 | "\<lbrakk>f contour_integrable_on (linepath a b); | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 850 | 0 \<le> B; \<And>x. x \<in> closed_segment a b \<Longrightarrow> norm(f x) \<le> B\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 851 | \<Longrightarrow> norm(contour_integral (linepath a b) f) \<le> B*norm(b - a)" | 
| 72270 | 852 | using has_contour_integral_bound_linepath [of f] | 
| 853 | by (auto simp: has_contour_integral_integral) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 854 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 855 | lemma contour_integral_0 [simp]: "contour_integral g (\<lambda>x. 0) = 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 856 | by (simp add: contour_integral_unique has_contour_integral_0) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 857 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 858 | lemma contour_integral_sum: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 859 | "\<lbrakk>finite s; \<And>a. a \<in> s \<Longrightarrow> (f a) contour_integrable_on p\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 860 | \<Longrightarrow> contour_integral p (\<lambda>x. sum (\<lambda>a. f a x) s) = sum (\<lambda>a. contour_integral p (f a)) s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 861 | by (auto simp: contour_integral_unique has_contour_integral_sum has_contour_integral_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 862 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 863 | lemma contour_integrable_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 864 | "\<lbrakk>f contour_integrable_on p; \<And>x. x \<in> path_image p \<Longrightarrow> f x = g x\<rbrakk> \<Longrightarrow> g contour_integrable_on p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 865 | unfolding contour_integrable_on_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 866 | by (metis has_contour_integral_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 867 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 868 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 869 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Arithmetic theorems for path integrability\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 870 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 871 | lemma contour_integrable_neg: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 872 | "f contour_integrable_on g \<Longrightarrow> (\<lambda>x. -(f x)) contour_integrable_on g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 873 | using has_contour_integral_neg contour_integrable_on_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 874 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 875 | lemma contour_integrable_add: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 876 | "\<lbrakk>f1 contour_integrable_on g; f2 contour_integrable_on g\<rbrakk> \<Longrightarrow> (\<lambda>x. f1 x + f2 x) contour_integrable_on g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 877 | using has_contour_integral_add contour_integrable_on_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 878 | by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 879 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 880 | lemma contour_integrable_diff: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 881 | "\<lbrakk>f1 contour_integrable_on g; f2 contour_integrable_on g\<rbrakk> \<Longrightarrow> (\<lambda>x. f1 x - f2 x) contour_integrable_on g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 882 | using has_contour_integral_diff contour_integrable_on_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 883 | by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 884 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 885 | lemma contour_integrable_lmul: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 886 | "f contour_integrable_on g \<Longrightarrow> (\<lambda>x. c * f x) contour_integrable_on g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 887 | using has_contour_integral_lmul contour_integrable_on_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 888 | by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 889 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 890 | lemma contour_integrable_rmul: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 891 | "f contour_integrable_on g \<Longrightarrow> (\<lambda>x. f x * c) contour_integrable_on g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 892 | using has_contour_integral_rmul contour_integrable_on_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 893 | by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 894 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 895 | lemma contour_integrable_div: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 896 | "f contour_integrable_on g \<Longrightarrow> (\<lambda>x. f x / c) contour_integrable_on g" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 897 | using has_contour_integral_div contour_integrable_on_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 898 | by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 899 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 900 | lemma contour_integrable_sum: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 901 | "\<lbrakk>finite s; \<And>a. a \<in> s \<Longrightarrow> (f a) contour_integrable_on p\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 902 | \<Longrightarrow> (\<lambda>x. sum (\<lambda>a. f a x) s) contour_integrable_on p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 903 | unfolding contour_integrable_on_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 904 | by (metis has_contour_integral_sum) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 905 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 906 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 907 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Reversing a path integral\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 908 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 909 | lemma has_contour_integral_reverse_linepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 910 | "(f has_contour_integral i) (linepath a b) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 911 | \<Longrightarrow> (f has_contour_integral (-i)) (linepath b a)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 912 | using has_contour_integral_reversepath valid_path_linepath by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 913 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 914 | lemma contour_integral_reverse_linepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 915 | "continuous_on (closed_segment a b) f | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 916 | \<Longrightarrow> contour_integral (linepath a b) f = - (contour_integral(linepath b a) f)" | 
| 72270 | 917 | by (metis contour_integrable_continuous_linepath contour_integral_unique has_contour_integral_integral has_contour_integral_reverse_linepath) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 918 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 919 | |
| 72270 | 920 | text \<open>Splitting a path integral in a flat way.*)\<close> | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 921 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 922 | lemma has_contour_integral_split: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 923 | assumes f: "(f has_contour_integral i) (linepath a c)" "(f has_contour_integral j) (linepath c b)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 924 | and k: "0 \<le> k" "k \<le> 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 925 | and c: "c - a = k *\<^sub>R (b - a)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 926 | shows "(f has_contour_integral (i + j)) (linepath a b)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 927 | proof (cases "k = 0 \<or> k = 1") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 928 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 929 | then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 930 | using assms by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 931 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 932 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 933 | then have k: "0 < k" "k < 1" "complex_of_real k \<noteq> 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 934 | using assms by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 935 | have c': "c = k *\<^sub>R (b - a) + a" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 936 | by (metis diff_add_cancel c) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 937 | have bc: "(b - c) = (1 - k) *\<^sub>R (b - a)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 938 | by (simp add: algebra_simps c') | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 939 |   { assume *: "((\<lambda>x. f ((1 - x) *\<^sub>R a + x *\<^sub>R c) * (c - a)) has_integral i) {0..1}"
 | 
| 72270 | 940 | have "\<And>x. (x / k) *\<^sub>R a + ((k - x) / k) *\<^sub>R a = a" | 
| 941 | using False by (simp add: field_split_simps flip: real_vector.scale_left_distrib) | |
| 942 | then have "\<And>x. ((k - x) / k) *\<^sub>R a + (x / k) *\<^sub>R c = (1 - x) *\<^sub>R a + x *\<^sub>R b" | |
| 943 | using False by (simp add: c' algebra_simps) | |
| 944 |     then have "((\<lambda>x. f ((1 - x) *\<^sub>R a + x *\<^sub>R b) * (b - a)) has_integral i) {0..k}"
 | |
| 945 | using k has_integral_affinity01 [OF *, of "inverse k" "0"] | |
| 946 | by (force dest: has_integral_cmul [where c = "inverse k"] | |
| 947 | simp add: divide_simps mult.commute [of _ "k"] image_affinity_atLeastAtMost c) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 948 | } note fi = this | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 949 |   { assume *: "((\<lambda>x. f ((1 - x) *\<^sub>R c + x *\<^sub>R b) * (b - c)) has_integral j) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 950 | have **: "\<And>x. (((1 - x) / (1 - k)) *\<^sub>R c + ((x - k) / (1 - k)) *\<^sub>R b) = ((1 - x) *\<^sub>R a + x *\<^sub>R b)" | 
| 72270 | 951 | using k unfolding c' scaleR_conv_of_real | 
| 952 | apply (simp add: divide_simps) | |
| 953 | apply (simp add: distrib_right distrib_left right_diff_distrib left_diff_distrib) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 954 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 955 |     have "((\<lambda>x. f ((1 - x) *\<^sub>R a + x *\<^sub>R b) * (b - a)) has_integral j) {k..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 956 | using k has_integral_affinity01 [OF *, of "inverse(1 - k)" "-(k/(1 - k))"] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 957 | apply (simp add: divide_simps mult.commute [of _ "1-k"] image_affinity_atLeastAtMost ** bc) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 958 | apply (auto dest: has_integral_cmul [where k = "(1 - k) *\<^sub>R j" and c = "inverse (1 - k)"]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 959 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 960 | } note fj = this | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 961 | show ?thesis | 
| 72270 | 962 | using f k unfolding has_contour_integral_linepath | 
| 963 | by (simp add: linepath_def has_integral_combine [OF _ _ fi fj]) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 964 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 965 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 966 | lemma continuous_on_closed_segment_transform: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 967 | assumes f: "continuous_on (closed_segment a b) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 968 | and k: "0 \<le> k" "k \<le> 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 969 | and c: "c - a = k *\<^sub>R (b - a)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 970 | shows "continuous_on (closed_segment a c) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 971 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 972 | have c': "c = (1 - k) *\<^sub>R a + k *\<^sub>R b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 973 | using c by (simp add: algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 974 | have "closed_segment a c \<subseteq> closed_segment a b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 975 | by (metis c' ends_in_segment(1) in_segment(1) k subset_closed_segment) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 976 | then show "continuous_on (closed_segment a c) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 977 | by (rule continuous_on_subset [OF f]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 978 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 979 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 980 | lemma contour_integral_split: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 981 | assumes f: "continuous_on (closed_segment a b) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 982 | and k: "0 \<le> k" "k \<le> 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 983 | and c: "c - a = k *\<^sub>R (b - a)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 984 | shows "contour_integral(linepath a b) f = contour_integral(linepath a c) f + contour_integral(linepath c b) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 985 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 986 | have c': "c = (1 - k) *\<^sub>R a + k *\<^sub>R b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 987 | using c by (simp add: algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 988 | have "closed_segment a c \<subseteq> closed_segment a b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 989 | by (metis c' ends_in_segment(1) in_segment(1) k subset_closed_segment) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 990 | moreover have "closed_segment c b \<subseteq> closed_segment a b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 991 | by (metis c' ends_in_segment(2) in_segment(1) k subset_closed_segment) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 992 | ultimately | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 993 | have *: "continuous_on (closed_segment a c) f" "continuous_on (closed_segment c b) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 994 | by (auto intro: continuous_on_subset [OF f]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 995 | show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 996 | by (rule contour_integral_unique) (meson "*" c contour_integrable_continuous_linepath has_contour_integral_integral has_contour_integral_split k) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 997 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 998 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 999 | lemma contour_integral_split_linepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1000 | assumes f: "continuous_on (closed_segment a b) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1001 | and c: "c \<in> closed_segment a b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1002 | shows "contour_integral(linepath a b) f = contour_integral(linepath a c) f + contour_integral(linepath c b) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1003 | using c by (auto simp: closed_segment_def algebra_simps intro!: contour_integral_split [OF f]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1004 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1005 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1006 | subsection\<open>Reversing the order in a double path integral\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1007 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1008 | text\<open>The condition is stronger than needed but it's often true in typical situations\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1009 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1010 | lemma fst_im_cbox [simp]: "cbox c d \<noteq> {} \<Longrightarrow> (fst ` cbox (a,c) (b,d)) = cbox a b"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1011 | by (auto simp: cbox_Pair_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1012 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1013 | lemma snd_im_cbox [simp]: "cbox a b \<noteq> {} \<Longrightarrow> (snd ` cbox (a,c) (b,d)) = cbox c d"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1014 | by (auto simp: cbox_Pair_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1015 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1016 | proposition contour_integral_swap: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1017 | assumes fcon: "continuous_on (path_image g \<times> path_image h) (\<lambda>(y1,y2). f y1 y2)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1018 | and vp: "valid_path g" "valid_path h" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1019 |       and gvcon: "continuous_on {0..1} (\<lambda>t. vector_derivative g (at t))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1020 |       and hvcon: "continuous_on {0..1} (\<lambda>t. vector_derivative h (at t))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1021 | shows "contour_integral g (\<lambda>w. contour_integral h (f w)) = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1022 | contour_integral h (\<lambda>z. contour_integral g (\<lambda>w. f w z))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1023 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1024 |   have gcon: "continuous_on {0..1} g" and hcon: "continuous_on {0..1} h"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1025 | using assms by (auto simp: valid_path_def piecewise_C1_differentiable_on_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1026 | have fgh1: "\<And>x. (\<lambda>t. f (g x) (h t)) = (\<lambda>(y1,y2). f y1 y2) \<circ> (\<lambda>t. (g x, h t))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1027 | by (rule ext) simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1028 | have fgh2: "\<And>x. (\<lambda>t. f (g t) (h x)) = (\<lambda>(y1,y2). f y1 y2) \<circ> (\<lambda>t. (g t, h x))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1029 | by (rule ext) simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1030 |   have fcon_im1: "\<And>x. 0 \<le> x \<Longrightarrow> x \<le> 1 \<Longrightarrow> continuous_on ((\<lambda>t. (g x, h t)) ` {0..1}) (\<lambda>(x, y). f x y)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1031 | by (rule continuous_on_subset [OF fcon]) (auto simp: path_image_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1032 |   have fcon_im2: "\<And>x. 0 \<le> x \<Longrightarrow> x \<le> 1 \<Longrightarrow> continuous_on ((\<lambda>t. (g t, h x)) ` {0..1}) (\<lambda>(x, y). f x y)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1033 | by (rule continuous_on_subset [OF fcon]) (auto simp: path_image_def) | 
| 72270 | 1034 | have "continuous_on (cbox (0, 0) (1, 1::real)) ((\<lambda>x. vector_derivative g (at x)) \<circ> fst)" | 
| 1035 | "continuous_on (cbox (0, 0) (1::real, 1)) ((\<lambda>x. vector_derivative h (at x)) \<circ> snd)" | |
| 1036 | by (rule continuous_intros | simp add: gvcon hvcon)+ | |
| 1037 | then have gvcon': "continuous_on (cbox (0, 0) (1, 1::real)) (\<lambda>z. vector_derivative g (at (fst z)))" | |
| 1038 | and hvcon': "continuous_on (cbox (0, 0) (1::real, 1)) (\<lambda>x. vector_derivative h (at (snd x)))" | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1039 | by auto | 
| 72270 | 1040 | have "continuous_on (cbox (0, 0) (1, 1)) ((\<lambda>(y1, y2). f y1 y2) \<circ> (\<lambda>w. ((g \<circ> fst) w, (h \<circ> snd) w)))" | 
| 1041 | apply (intro gcon hcon continuous_intros | simp)+ | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1042 | apply (auto simp: path_image_def intro: continuous_on_subset [OF fcon]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1043 | done | 
| 72270 | 1044 | then have fgh: "continuous_on (cbox (0, 0) (1, 1)) (\<lambda>x. f (g (fst x)) (h (snd x)))" | 
| 1045 | by auto | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1046 |   have "integral {0..1} (\<lambda>x. contour_integral h (f (g x)) * vector_derivative g (at x)) =
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1047 |         integral {0..1} (\<lambda>x. contour_integral h (\<lambda>y. f (g x) y * vector_derivative g (at x)))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1048 | proof (rule integral_cong [OF contour_integral_rmul [symmetric]]) | 
| 72270 | 1049 |     have "\<And>x. x \<in> {0..1} \<Longrightarrow>
 | 
| 1050 |          continuous_on {0..1} (\<lambda>xa. f (g x) (h xa))"
 | |
| 1051 | by (subst fgh1) (rule fcon_im1 hcon continuous_intros | simp)+ | |
| 1052 |     then show "\<And>x. x \<in> {0..1} \<Longrightarrow> f (g x) contour_integrable_on h"
 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1053 | unfolding contour_integrable_on | 
| 72270 | 1054 | using continuous_on_mult hvcon integrable_continuous_real by blast | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1055 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1056 |   also have "\<dots> = integral {0..1}
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1057 | (\<lambda>y. contour_integral g (\<lambda>x. f x (h y) * vector_derivative h (at y)))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1058 | unfolding contour_integral_integral | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1059 | apply (subst integral_swap_continuous [where 'a = real and 'b = real, of 0 0 1 1, simplified]) | 
| 72270 | 1060 | subgoal | 
| 1061 | by (rule fgh gvcon' hvcon' continuous_intros | simp add: split_def)+ | |
| 1062 | subgoal | |
| 1063 | unfolding integral_mult_left [symmetric] | |
| 1064 | by (simp only: mult_ac) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1065 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1066 | also have "\<dots> = contour_integral h (\<lambda>z. contour_integral g (\<lambda>w. f w z))" | 
| 72270 | 1067 | unfolding contour_integral_integral integral_mult_left [symmetric] | 
| 1068 | by (simp add: algebra_simps) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1069 | finally show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1070 | by (simp add: contour_integral_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1071 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1072 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1073 | lemma valid_path_negatepath: "valid_path \<gamma> \<Longrightarrow> valid_path (uminus \<circ> \<gamma>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1074 | unfolding o_def using piecewise_C1_differentiable_neg valid_path_def by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1075 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1076 | lemma has_contour_integral_negatepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1077 | assumes \<gamma>: "valid_path \<gamma>" and cint: "((\<lambda>z. f (- z)) has_contour_integral - i) \<gamma>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1078 | shows "(f has_contour_integral i) (uminus \<circ> \<gamma>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1079 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1080 |   obtain S where cont: "continuous_on {0..1} \<gamma>" and "finite S" and diff: "\<gamma> C1_differentiable_on {0..1} - S"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1081 | using \<gamma> by (auto simp: valid_path_def piecewise_C1_differentiable_on_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1082 |   have "((\<lambda>x. - (f (- \<gamma> x) * vector_derivative \<gamma> (at x within {0..1}))) has_integral i) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1083 | using cint by (auto simp: has_contour_integral_def dest: has_integral_neg) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1084 | then | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1085 |   have "((\<lambda>x. f (- \<gamma> x) * vector_derivative (uminus \<circ> \<gamma>) (at x within {0..1})) has_integral i) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1086 | proof (rule rev_iffD1 [OF _ has_integral_spike_eq]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1087 | show "negligible S" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1088 | by (simp add: \<open>finite S\<close> negligible_finite) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1089 |     show "f (- \<gamma> x) * vector_derivative (uminus \<circ> \<gamma>) (at x within {0..1}) =
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1090 |          - (f (- \<gamma> x) * vector_derivative \<gamma> (at x within {0..1}))"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1091 |       if "x \<in> {0..1} - S" for x
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1092 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1093 | have "vector_derivative (uminus \<circ> \<gamma>) (at x within cbox 0 1) = - vector_derivative \<gamma> (at x within cbox 0 1)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1094 | proof (rule vector_derivative_within_cbox) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1095 | show "(uminus \<circ> \<gamma> has_vector_derivative - vector_derivative \<gamma> (at x within cbox 0 1)) (at x within cbox 0 1)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1096 | using that unfolding o_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1097 | by (metis C1_differentiable_on_eq UNIV_I diff differentiable_subset has_vector_derivative_minus subsetI that vector_derivative_works) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1098 | qed (use that in auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1099 | then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1100 | by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1101 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1102 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1103 | then show ?thesis by (simp add: has_contour_integral_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1104 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1105 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1106 | lemma contour_integrable_negatepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1107 | assumes \<gamma>: "valid_path \<gamma>" and pi: "(\<lambda>z. f (- z)) contour_integrable_on \<gamma>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1108 | shows "f contour_integrable_on (uminus \<circ> \<gamma>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1109 | by (metis \<gamma> add.inverse_inverse contour_integrable_on_def has_contour_integral_negatepath pi) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1110 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1111 | lemma C1_differentiable_polynomial_function: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1112 | fixes p :: "real \<Rightarrow> 'a::euclidean_space" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1113 | shows "polynomial_function p \<Longrightarrow> p C1_differentiable_on S" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1114 | by (metis continuous_on_polymonial_function C1_differentiable_on_def has_vector_derivative_polynomial_function) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1115 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1116 | lemma valid_path_polynomial_function: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1117 | fixes p :: "real \<Rightarrow> 'a::euclidean_space" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1118 | shows "polynomial_function p \<Longrightarrow> valid_path p" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1119 | by (force simp: valid_path_def piecewise_C1_differentiable_on_def continuous_on_polymonial_function C1_differentiable_polynomial_function) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1120 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1121 | lemma valid_path_subpath_trivial [simp]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1122 | fixes g :: "real \<Rightarrow> 'a::euclidean_space" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1123 | shows "z \<noteq> g x \<Longrightarrow> valid_path (subpath x x g)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1124 | by (simp add: subpath_def valid_path_polynomial_function) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1125 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1126 | subsection\<open>Partial circle path\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1127 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1128 | definition\<^marker>\<open>tag important\<close> part_circlepath :: "[complex, real, real, real, real] \<Rightarrow> complex" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1129 | where "part_circlepath z r s t \<equiv> \<lambda>x. z + of_real r * exp (\<i> * of_real (linepath s t x))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1130 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1131 | lemma pathstart_part_circlepath [simp]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1132 | "pathstart(part_circlepath z r s t) = z + r*exp(\<i> * s)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1133 | by (metis part_circlepath_def pathstart_def pathstart_linepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1134 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1135 | lemma pathfinish_part_circlepath [simp]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1136 | "pathfinish(part_circlepath z r s t) = z + r*exp(\<i>*t)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1137 | by (metis part_circlepath_def pathfinish_def pathfinish_linepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1138 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1139 | lemma reversepath_part_circlepath[simp]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1140 | "reversepath (part_circlepath z r s t) = part_circlepath z r t s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1141 | unfolding part_circlepath_def reversepath_def linepath_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1142 | by (auto simp:algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1143 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1144 | lemma has_vector_derivative_part_circlepath [derivative_intros]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1145 | "((part_circlepath z r s t) has_vector_derivative | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1146 | (\<i> * r * (of_real t - of_real s) * exp(\<i> * linepath s t x))) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1147 | (at x within X)" | 
| 72270 | 1148 | unfolding part_circlepath_def linepath_def scaleR_conv_of_real | 
| 1149 | by (rule has_vector_derivative_real_field derivative_eq_intros | simp)+ | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1150 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1151 | lemma differentiable_part_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1152 | "part_circlepath c r a b differentiable at x within A" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1153 | using has_vector_derivative_part_circlepath[of c r a b x A] differentiableI_vector by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1154 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1155 | lemma vector_derivative_part_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1156 | "vector_derivative (part_circlepath z r s t) (at x) = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1157 | \<i> * r * (of_real t - of_real s) * exp(\<i> * linepath s t x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1158 | using has_vector_derivative_part_circlepath vector_derivative_at by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1159 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1160 | lemma vector_derivative_part_circlepath01: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1161 | "\<lbrakk>0 \<le> x; x \<le> 1\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1162 |      \<Longrightarrow> vector_derivative (part_circlepath z r s t) (at x within {0..1}) =
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1163 | \<i> * r * (of_real t - of_real s) * exp(\<i> * linepath s t x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1164 | using has_vector_derivative_part_circlepath | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1165 | by (auto simp: vector_derivative_at_within_ivl) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1166 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1167 | lemma valid_path_part_circlepath [simp]: "valid_path (part_circlepath z r s t)" | 
| 72270 | 1168 | unfolding valid_path_def | 
| 1169 | by (auto simp: C1_differentiable_on_eq vector_derivative_works vector_derivative_part_circlepath has_vector_derivative_part_circlepath | |
| 1170 | intro!: C1_differentiable_imp_piecewise continuous_intros) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1171 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1172 | lemma path_part_circlepath [simp]: "path (part_circlepath z r s t)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1173 | by (simp add: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1174 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1175 | proposition path_image_part_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1176 | assumes "s \<le> t" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1177 |     shows "path_image (part_circlepath z r s t) = {z + r * exp(\<i> * of_real x) | x. s \<le> x \<and> x \<le> t}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1178 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1179 |   { fix z::real
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1180 | assume "0 \<le> z" "z \<le> 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1181 | with \<open>s \<le> t\<close> have "\<exists>x. (exp (\<i> * linepath s t z) = exp (\<i> * of_real x)) \<and> s \<le> x \<and> x \<le> t" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1182 | apply (rule_tac x="(1 - z) * s + z * t" in exI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1183 | apply (simp add: linepath_def scaleR_conv_of_real algebra_simps) | 
| 72270 | 1184 | by (metis (no_types) affine_ineq mult.commute mult_left_mono) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1185 | } | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1186 | moreover | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1187 |   { fix z
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1188 | assume "s \<le> z" "z \<le> t" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1189 |     then have "z + of_real r * exp (\<i> * of_real z) \<in> (\<lambda>x. z + of_real r * exp (\<i> * linepath s t x)) ` {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1190 | apply (rule_tac x="(z - s)/(t - s)" in image_eqI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1191 | apply (simp add: linepath_def scaleR_conv_of_real divide_simps exp_eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1192 | apply (auto simp: field_split_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1193 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1194 | } | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1195 | ultimately show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1196 | by (fastforce simp add: path_image_def part_circlepath_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1197 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1198 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1199 | lemma path_image_part_circlepath': | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1200 | "path_image (part_circlepath z r s t) = (\<lambda>x. z + r * cis x) ` closed_segment s t" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1201 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1202 | have "path_image (part_circlepath z r s t) = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1203 |           (\<lambda>x. z + r * exp(\<i> * of_real x)) ` linepath s t ` {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1204 | by (simp add: image_image path_image_def part_circlepath_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1205 |   also have "linepath s t ` {0..1} = closed_segment s t"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1206 | by (rule linepath_image_01) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1207 | finally show ?thesis by (simp add: cis_conv_exp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1208 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1209 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1210 | lemma path_image_part_circlepath_subset: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1211 | "\<lbrakk>s \<le> t; 0 \<le> r\<rbrakk> \<Longrightarrow> path_image(part_circlepath z r s t) \<subseteq> sphere z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1212 | by (auto simp: path_image_part_circlepath sphere_def dist_norm algebra_simps norm_mult) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1213 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1214 | lemma in_path_image_part_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1215 | assumes "w \<in> path_image(part_circlepath z r s t)" "s \<le> t" "0 \<le> r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1216 | shows "norm(w - z) = r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1217 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1218 |   have "w \<in> {c. dist z c = r}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1219 | by (metis (no_types) path_image_part_circlepath_subset sphere_def subset_eq assms) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1220 | thus ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1221 | by (simp add: dist_norm norm_minus_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1222 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1223 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1224 | lemma path_image_part_circlepath_subset': | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1225 | assumes "r \<ge> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1226 | shows "path_image (part_circlepath z r s t) \<subseteq> sphere z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1227 | proof (cases "s \<le> t") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1228 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1229 | thus ?thesis using path_image_part_circlepath_subset[of s t r z] assms by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1230 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1231 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1232 | thus ?thesis using path_image_part_circlepath_subset[of t s r z] assms | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1233 | by (subst reversepath_part_circlepath [symmetric], subst path_image_reversepath) simp_all | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1234 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1235 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1236 | lemma part_circlepath_cnj: "cnj (part_circlepath c r a b x) = part_circlepath (cnj c) r (-a) (-b) x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1237 | by (simp add: part_circlepath_def exp_cnj linepath_def algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1238 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1239 | lemma contour_integral_bound_part_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1240 | assumes "f contour_integrable_on part_circlepath c r a b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1241 | assumes "B \<ge> 0" "r \<ge> 0" "\<And>x. x \<in> path_image (part_circlepath c r a b) \<Longrightarrow> norm (f x) \<le> B" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1242 | shows "norm (contour_integral (part_circlepath c r a b) f) \<le> B * r * \<bar>b - a\<bar>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1243 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1244 |   let ?I = "integral {0..1} (\<lambda>x. f (part_circlepath c r a b x) * \<i> * of_real (r * (b - a)) *
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1245 | exp (\<i> * linepath a b x))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1246 |   have "norm ?I \<le> integral {0..1} (\<lambda>x::real. B * 1 * (r * \<bar>b - a\<bar>) * 1)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1247 | proof (rule integral_norm_bound_integral, goal_cases) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1248 | case 1 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1249 | with assms(1) show ?case | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1250 | by (simp add: contour_integrable_on vector_derivative_part_circlepath mult_ac) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1251 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1252 | case (3 x) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1253 | with assms(2-) show ?case unfolding norm_mult norm_of_real abs_mult | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1254 | by (intro mult_mono) (auto simp: path_image_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1255 | qed auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1256 | also have "?I = contour_integral (part_circlepath c r a b) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1257 | by (simp add: contour_integral_integral vector_derivative_part_circlepath mult_ac) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1258 | finally show ?thesis by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1259 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1260 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1261 | lemma has_contour_integral_part_circlepath_iff: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1262 | assumes "a < b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1263 | shows "(f has_contour_integral I) (part_circlepath c r a b) \<longleftrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1264 |            ((\<lambda>t. f (c + r * cis t) * r * \<i> * cis t) has_integral I) {a..b}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1265 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1266 | have "(f has_contour_integral I) (part_circlepath c r a b) \<longleftrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1267 | ((\<lambda>x. f (part_circlepath c r a b x) * vector_derivative (part_circlepath c r a b) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1268 |            (at x within {0..1})) has_integral I) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1269 | unfolding has_contour_integral_def .. | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1270 | also have "\<dots> \<longleftrightarrow> ((\<lambda>x. f (part_circlepath c r a b x) * r * (b - a) * \<i> * | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1271 |                             cis (linepath a b x)) has_integral I) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1272 | by (intro has_integral_cong, subst vector_derivative_part_circlepath01) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1273 | (simp_all add: cis_conv_exp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1274 | also have "\<dots> \<longleftrightarrow> ((\<lambda>x. f (c + r * exp (\<i> * linepath (of_real a) (of_real b) x)) * | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1275 | r * \<i> * exp (\<i> * linepath (of_real a) (of_real b) x) * | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1276 | vector_derivative (linepath (of_real a) (of_real b)) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1277 |                          (at x within {0..1})) has_integral I) {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1278 | by (intro has_integral_cong, subst vector_derivative_linepath_within) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1279 | (auto simp: part_circlepath_def cis_conv_exp of_real_linepath [symmetric]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1280 | also have "\<dots> \<longleftrightarrow> ((\<lambda>z. f (c + r * exp (\<i> * z)) * r * \<i> * exp (\<i> * z)) has_contour_integral I) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1281 | (linepath (of_real a) (of_real b))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1282 | by (simp add: has_contour_integral_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1283 |   also have "\<dots> \<longleftrightarrow> ((\<lambda>t. f (c + r * cis t) * r * \<i> * cis t) has_integral I) {a..b}" using assms
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1284 | by (subst has_contour_integral_linepath_Reals_iff) (simp_all add: cis_conv_exp) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1285 | finally show ?thesis . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1286 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1287 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1288 | lemma contour_integrable_part_circlepath_iff: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1289 | assumes "a < b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1290 | shows "f contour_integrable_on (part_circlepath c r a b) \<longleftrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1291 |            (\<lambda>t. f (c + r * cis t) * r * \<i> * cis t) integrable_on {a..b}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1292 | using assms by (auto simp: contour_integrable_on_def integrable_on_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1293 | has_contour_integral_part_circlepath_iff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1294 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1295 | lemma contour_integral_part_circlepath_eq: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1296 | assumes "a < b" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1297 | shows "contour_integral (part_circlepath c r a b) f = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1298 |            integral {a..b} (\<lambda>t. f (c + r * cis t) * r * \<i> * cis t)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1299 | proof (cases "f contour_integrable_on part_circlepath c r a b") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1300 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1301 |   hence "(\<lambda>t. f (c + r * cis t) * r * \<i> * cis t) integrable_on {a..b}" 
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1302 | using assms by (simp add: contour_integrable_part_circlepath_iff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1303 | with True show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1304 | using has_contour_integral_part_circlepath_iff[OF assms] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1305 | contour_integral_unique has_integral_integrable_integral by blast | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1306 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1307 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1308 |   hence "\<not>(\<lambda>t. f (c + r * cis t) * r * \<i> * cis t) integrable_on {a..b}" 
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1309 | using assms by (simp add: contour_integrable_part_circlepath_iff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1310 | with False show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1311 | by (simp add: not_integrable_contour_integral not_integrable_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1312 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1313 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1314 | lemma contour_integral_part_circlepath_reverse: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1315 | "contour_integral (part_circlepath c r a b) f = -contour_integral (part_circlepath c r b a) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1316 | by (subst reversepath_part_circlepath [symmetric], subst contour_integral_reversepath) simp_all | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1317 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1318 | lemma contour_integral_part_circlepath_reverse': | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1319 | "b < a \<Longrightarrow> contour_integral (part_circlepath c r a b) f = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1320 | -contour_integral (part_circlepath c r b a) f" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1321 | by (rule contour_integral_part_circlepath_reverse) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1322 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1323 | lemma finite_bounded_log: "finite {z::complex. norm z \<le> b \<and> exp z = w}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1324 | proof (cases "w = 0") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1325 | case True then show ?thesis by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1326 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1327 | case False | 
| 72270 | 1328 |   have *: "finite {x. cmod ((2 * real_of_int x * pi) * \<i>) \<le> b + cmod (Ln w)}"
 | 
| 1329 | proof (simp add: norm_mult finite_int_iff_bounded_le) | |
| 1330 |     show "\<exists>k. abs ` {x. 2 * \<bar>of_int x\<bar> * pi \<le> b + cmod (Ln w)} \<subseteq> {..k}"
 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1331 | apply (rule_tac x="\<lfloor>(b + cmod (Ln w)) / (2*pi)\<rfloor>" in exI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1332 | apply (auto simp: field_split_simps le_floor_iff) | 
| 72270 | 1333 | done | 
| 1334 | qed | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1335 |   have [simp]: "\<And>P f. {z. P z \<and> (\<exists>n. z = f n)} = f ` {n. P (f n)}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1336 | by blast | 
| 72270 | 1337 |   have "finite {z. cmod z \<le> b \<and> exp z = exp (Ln w)}"
 | 
| 1338 | using norm_add_leD by (fastforce intro: finite_subset [OF _ *] simp: exp_eq) | |
| 1339 | then show ?thesis | |
| 1340 | using False by auto | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1341 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1342 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1343 | lemma finite_bounded_log2: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1344 | fixes a::complex | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1345 | assumes "a \<noteq> 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1346 |     shows "finite {z. norm z \<le> b \<and> exp(a*z) = w}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1347 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1348 |   have *: "finite ((\<lambda>z. z / a) ` {z. cmod z \<le> b * cmod a \<and> exp z = w})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1349 | by (rule finite_imageI [OF finite_bounded_log]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1350 | show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1351 | by (rule finite_subset [OF _ *]) (force simp: assms norm_mult) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1352 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1353 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1354 | lemma has_contour_integral_bound_part_circlepath_strong: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1355 | assumes fi: "(f has_contour_integral i) (part_circlepath z r s t)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1356 | and "finite k" and le: "0 \<le> B" "0 < r" "s \<le> t" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1357 | and B: "\<And>x. x \<in> path_image(part_circlepath z r s t) - k \<Longrightarrow> norm(f x) \<le> B" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1358 | shows "cmod i \<le> B * r * (t - s)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1359 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1360 | consider "s = t" | "s < t" using \<open>s \<le> t\<close> by linarith | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1361 | then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1362 | proof cases | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1363 | case 1 with fi [unfolded has_contour_integral] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1364 | have "i = 0" by (simp add: vector_derivative_part_circlepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1365 | with assms show ?thesis by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1366 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1367 | case 2 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1368 | have [simp]: "\<bar>r\<bar> = r" using \<open>r > 0\<close> by linarith | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1369 | have [simp]: "cmod (complex_of_real t - complex_of_real s) = t-s" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1370 | by (metis "2" abs_of_pos diff_gt_0_iff_gt norm_of_real of_real_diff) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1371 |     have "finite (part_circlepath z r s t -` {y} \<inter> {0..1})" if "y \<in> k" for y
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1372 | proof - | 
| 72270 | 1373 | let ?w = "(y - z)/of_real r / exp(\<i> * of_real s)" | 
| 1374 |       have fin: "finite (of_real -` {z. cmod z \<le> 1 \<and> exp (\<i> * complex_of_real (t - s) * z) = ?w})"
 | |
| 1375 | using \<open>s < t\<close> | |
| 1376 | by (intro finite_vimageI [OF finite_bounded_log2]) (auto simp: inj_of_real) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1377 | show ?thesis | 
| 72270 | 1378 | unfolding part_circlepath_def linepath_def vimage_def | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1379 | using le | 
| 72270 | 1380 | by (intro finite_subset [OF _ fin]) (auto simp: algebra_simps scaleR_conv_of_real exp_add exp_diff) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1381 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1382 |     then have fin01: "finite ((part_circlepath z r s t) -` k \<inter> {0..1})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1383 | by (rule finite_finite_vimage_IntI [OF \<open>finite k\<close>]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1384 | have **: "((\<lambda>x. if (part_circlepath z r s t x) \<in> k then 0 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1385 | else f(part_circlepath z r s t x) * | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1386 |                        vector_derivative (part_circlepath z r s t) (at x)) has_integral i)  {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1387 | by (rule has_integral_spike [OF negligible_finite [OF fin01]]) (use fi has_contour_integral in auto) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1388 | have *: "\<And>x. \<lbrakk>0 \<le> x; x \<le> 1; part_circlepath z r s t x \<notin> k\<rbrakk> \<Longrightarrow> cmod (f (part_circlepath z r s t x)) \<le> B" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1389 | by (auto intro!: B [unfolded path_image_def image_def, simplified]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1390 | show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1391 | apply (rule has_integral_bound [where 'a=real, simplified, OF _ **, simplified]) | 
| 72270 | 1392 | using assms le * "2" \<open>r > 0\<close> by (auto simp add: norm_mult vector_derivative_part_circlepath) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1393 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1394 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1395 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1396 | lemma has_contour_integral_bound_part_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1397 | "\<lbrakk>(f has_contour_integral i) (part_circlepath z r s t); | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1398 | 0 \<le> B; 0 < r; s \<le> t; | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1399 | \<And>x. x \<in> path_image(part_circlepath z r s t) \<Longrightarrow> norm(f x) \<le> B\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1400 | \<Longrightarrow> norm i \<le> B*r*(t - s)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1401 | by (auto intro: has_contour_integral_bound_part_circlepath_strong) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1402 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1403 | lemma contour_integrable_continuous_part_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1404 | "continuous_on (path_image (part_circlepath z r s t)) f | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1405 | \<Longrightarrow> f contour_integrable_on (part_circlepath z r s t)" | 
| 72270 | 1406 | unfolding contour_integrable_on has_contour_integral_def vector_derivative_part_circlepath path_image_def | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1407 | apply (rule integrable_continuous_real) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1408 | apply (fast intro: path_part_circlepath [unfolded path_def] continuous_intros continuous_on_compose2 [where g=f, OF _ _ order_refl]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1409 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1410 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1411 | lemma simple_path_part_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1412 | "simple_path(part_circlepath z r s t) \<longleftrightarrow> (r \<noteq> 0 \<and> s \<noteq> t \<and> \<bar>s - t\<bar> \<le> 2*pi)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1413 | proof (cases "r = 0 \<or> s = t") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1414 | case True | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1415 | then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1416 | unfolding part_circlepath_def simple_path_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1417 | by (rule disjE) (force intro: bexI [where x = "1/4"] bexI [where x = "1/3"])+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1418 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1419 | case False then have "r \<noteq> 0" "s \<noteq> t" by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1420 | have *: "\<And>x y z s t. \<i>*((1 - x) * s + x * t) = \<i>*(((1 - y) * s + y * t)) + z \<longleftrightarrow> \<i>*(x - y) * (t - s) = z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1421 | by (simp add: algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1422 | have abs01: "\<And>x y::real. 0 \<le> x \<and> x \<le> 1 \<and> 0 \<le> y \<and> y \<le> 1 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1423 |                       \<Longrightarrow> (x = y \<or> x = 0 \<and> y = 1 \<or> x = 1 \<and> y = 0 \<longleftrightarrow> \<bar>x - y\<bar> \<in> {0,1})"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1424 | by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1425 | have **: "\<And>x y. (\<exists>n. (complex_of_real x - of_real y) * (of_real t - of_real s) = 2 * (of_int n * of_real pi)) \<longleftrightarrow> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1426 | (\<exists>n. \<bar>x - y\<bar> * (t - s) = 2 * (of_int n * pi))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1427 | by (force simp: algebra_simps abs_if dest: arg_cong [where f=Re] arg_cong [where f=complex_of_real] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1428 | intro: exI [where x = "-n" for n]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1429 | have 1: "\<bar>s - t\<bar> \<le> 2 * pi" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1430 | if "\<And>x. 0 \<le> x \<and> x \<le> 1 \<Longrightarrow> (\<exists>n. x * (t - s) = 2 * (real_of_int n * pi)) \<longrightarrow> x = 0 \<or> x = 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1431 | proof (rule ccontr) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1432 | assume "\<not> \<bar>s - t\<bar> \<le> 2 * pi" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1433 | then have *: "\<And>n. t - s \<noteq> of_int n * \<bar>s - t\<bar>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1434 | using False that [of "2*pi / \<bar>t - s\<bar>"] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1435 | by (simp add: abs_minus_commute divide_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1436 | show False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1437 | using * [of 1] * [of "-1"] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1438 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1439 | have 2: "\<bar>s - t\<bar> = \<bar>2 * (real_of_int n * pi) / x\<bar>" if "x \<noteq> 0" "x * (t - s) = 2 * (real_of_int n * pi)" for x n | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1440 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1441 | have "t-s = 2 * (real_of_int n * pi)/x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1442 | using that by (simp add: field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1443 | then show ?thesis by (metis abs_minus_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1444 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1445 |   have abs_away: "\<And>P. (\<forall>x\<in>{0..1}. \<forall>y\<in>{0..1}. P \<bar>x - y\<bar>) \<longleftrightarrow> (\<forall>x::real. 0 \<le> x \<and> x \<le> 1 \<longrightarrow> P x)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1446 | by force | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1447 | show ?thesis using False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1448 | apply (simp add: simple_path_def) | 
| 72270 | 1449 | apply (simp add: part_circlepath_def linepath_def exp_eq * ** abs01 del: Set.insert_iff) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1450 | apply (subst abs_away) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1451 | apply (auto simp: 1) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1452 | apply (rule ccontr) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1453 | apply (auto simp: 2 field_split_simps abs_mult dest: of_int_leD) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1454 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1455 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1456 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1457 | lemma arc_part_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1458 | assumes "r \<noteq> 0" "s \<noteq> t" "\<bar>s - t\<bar> < 2*pi" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1459 | shows "arc (part_circlepath z r s t)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1460 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1461 | have *: "x = y" if eq: "\<i> * (linepath s t x) = \<i> * (linepath s t y) + 2 * of_int n * complex_of_real pi * \<i>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1462 |     and x: "x \<in> {0..1}" and y: "y \<in> {0..1}" for x y n
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1463 | proof (rule ccontr) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1464 | assume "x \<noteq> y" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1465 | have "(linepath s t x) = (linepath s t y) + 2 * of_int n * complex_of_real pi" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1466 | by (metis add_divide_eq_iff complex_i_not_zero mult.commute nonzero_mult_div_cancel_left eq) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1467 | then have "s*y + t*x = s*x + (t*y + of_int n * (pi * 2))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1468 | by (force simp: algebra_simps linepath_def dest: arg_cong [where f=Re]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1469 | with \<open>x \<noteq> y\<close> have st: "s-t = (of_int n * (pi * 2) / (y-x))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1470 | by (force simp: field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1471 | have "\<bar>real_of_int n\<bar> < \<bar>y - x\<bar>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1472 | using assms \<open>x \<noteq> y\<close> by (simp add: st abs_mult field_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1473 | then show False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1474 | using assms x y st by (auto dest: of_int_lessD) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1475 | qed | 
| 72270 | 1476 |   then have "inj_on (part_circlepath z r s t) {0..1}"
 | 
| 1477 | using assms by (force simp add: part_circlepath_def inj_on_def exp_eq) | |
| 1478 | then show ?thesis | |
| 1479 | by (simp add: arc_def) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1480 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1481 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1482 | subsection\<open>Special case of one complete circle\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1483 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1484 | definition\<^marker>\<open>tag important\<close> circlepath :: "[complex, real, real] \<Rightarrow> complex" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1485 | where "circlepath z r \<equiv> part_circlepath z r 0 (2*pi)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1486 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1487 | lemma circlepath: "circlepath z r = (\<lambda>x. z + r * exp(2 * of_real pi * \<i> * of_real x))" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1488 | by (simp add: circlepath_def part_circlepath_def linepath_def algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1489 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1490 | lemma pathstart_circlepath [simp]: "pathstart (circlepath z r) = z + r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1491 | by (simp add: circlepath_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1492 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1493 | lemma pathfinish_circlepath [simp]: "pathfinish (circlepath z r) = z + r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1494 | by (simp add: circlepath_def) (metis exp_two_pi_i mult.commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1495 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1496 | lemma circlepath_minus: "circlepath z (-r) x = circlepath z r (x + 1/2)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1497 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1498 | have "z + of_real r * exp (2 * pi * \<i> * (x + 1/2)) = | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1499 | z + of_real r * exp (2 * pi * \<i> * x + pi * \<i>)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1500 | by (simp add: divide_simps) (simp add: algebra_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1501 | also have "\<dots> = z - r * exp (2 * pi * \<i> * x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1502 | by (simp add: exp_add) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1503 | finally show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1504 | by (simp add: circlepath path_image_def sphere_def dist_norm) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1505 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1506 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1507 | lemma circlepath_add1: "circlepath z r (x+1) = circlepath z r x" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1508 | using circlepath_minus [of z r "x+1/2"] circlepath_minus [of z "-r" x] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1509 | by (simp add: add.commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1510 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1511 | lemma circlepath_add_half: "circlepath z r (x + 1/2) = circlepath z r (x - 1/2)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1512 | using circlepath_add1 [of z r "x-1/2"] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1513 | by (simp add: add.commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1514 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1515 | lemma path_image_circlepath_minus_subset: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1516 | "path_image (circlepath z (-r)) \<subseteq> path_image (circlepath z r)" | 
| 72270 | 1517 | proof - | 
| 1518 |   have "\<exists>x\<in>{0..1}. circlepath z r (y + 1/2) = circlepath z r x"
 | |
| 1519 | if "0 \<le> y" "y \<le> 1" for y | |
| 1520 | proof (cases "y \<le> 1/2") | |
| 1521 | case False | |
| 1522 | with that show ?thesis | |
| 1523 | by (force simp: circlepath_add_half) | |
| 1524 | qed (use that in force) | |
| 1525 | then show ?thesis | |
| 1526 | by (auto simp add: path_image_def image_def circlepath_minus) | |
| 1527 | qed | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1528 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1529 | lemma path_image_circlepath_minus: "path_image (circlepath z (-r)) = path_image (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1530 | using path_image_circlepath_minus_subset by fastforce | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1531 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1532 | lemma has_vector_derivative_circlepath [derivative_intros]: | 
| 72270 | 1533 | "((circlepath z r) has_vector_derivative (2 * pi * \<i> * r * exp (2 * of_real pi * \<i> * x))) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1534 | (at x within X)" | 
| 72270 | 1535 | unfolding circlepath_def scaleR_conv_of_real | 
| 1536 | by (rule derivative_eq_intros) (simp add: algebra_simps) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1537 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1538 | lemma vector_derivative_circlepath: | 
| 72270 | 1539 | "vector_derivative (circlepath z r) (at x) = | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1540 | 2 * pi * \<i> * r * exp(2 * of_real pi * \<i> * x)" | 
| 72270 | 1541 | using has_vector_derivative_circlepath vector_derivative_at by blast | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1542 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1543 | lemma vector_derivative_circlepath01: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1544 | "\<lbrakk>0 \<le> x; x \<le> 1\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1545 |      \<Longrightarrow> vector_derivative (circlepath z r) (at x within {0..1}) =
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1546 | 2 * pi * \<i> * r * exp(2 * of_real pi * \<i> * x)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1547 | using has_vector_derivative_circlepath | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1548 | by (auto simp: vector_derivative_at_within_ivl) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1549 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1550 | lemma valid_path_circlepath [simp]: "valid_path (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1551 | by (simp add: circlepath_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1552 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1553 | lemma path_circlepath [simp]: "path (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1554 | by (simp add: valid_path_imp_path) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1555 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1556 | lemma path_image_circlepath_nonneg: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1557 | assumes "0 \<le> r" shows "path_image (circlepath z r) = sphere z r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1558 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1559 |   have *: "x \<in> (\<lambda>u. z + (cmod (x - z)) * exp (\<i> * (of_real u * (of_real pi * 2)))) ` {0..1}" for x
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1560 | proof (cases "x = z") | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1561 | case True then show ?thesis by force | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1562 | next | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1563 | case False | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1564 | define w where "w = x - z" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1565 | then have "w \<noteq> 0" by (simp add: False) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1566 | have **: "\<And>t. \<lbrakk>Re w = cos t * cmod w; Im w = sin t * cmod w\<rbrakk> \<Longrightarrow> w = of_real (cmod w) * exp (\<i> * t)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1567 | using cis_conv_exp complex_eq_iff by auto | 
| 72270 | 1568 | obtain t where "0 \<le> t" "t < 2*pi" "Re(w/norm w) = cos t" "Im(w/norm w) = sin t" | 
| 1569 | apply (rule sincos_total_2pi [of "Re(w/(norm w))" "Im(w/(norm w))"]) | |
| 1570 | by (auto simp add: divide_simps \<open>w \<noteq> 0\<close> cmod_power2 [symmetric]) | |
| 1571 | then | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1572 | show ?thesis | 
| 72270 | 1573 | using False ** w_def \<open>w \<noteq> 0\<close> | 
| 1574 | by (rule_tac x="t / (2*pi)" in image_eqI) (auto simp add: field_simps) | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1575 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1576 | show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1577 | unfolding circlepath path_image_def sphere_def dist_norm | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1578 | by (force simp: assms algebra_simps norm_mult norm_minus_commute intro: *) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1579 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1580 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1581 | lemma path_image_circlepath [simp]: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1582 | "path_image (circlepath z r) = sphere z \<bar>r\<bar>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1583 | using path_image_circlepath_minus | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1584 | by (force simp: path_image_circlepath_nonneg abs_if) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1585 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1586 | lemma has_contour_integral_bound_circlepath_strong: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1587 | "\<lbrakk>(f has_contour_integral i) (circlepath z r); | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1588 | finite k; 0 \<le> B; 0 < r; | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1589 | \<And>x. \<lbrakk>norm(x - z) = r; x \<notin> k\<rbrakk> \<Longrightarrow> norm(f x) \<le> B\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1590 | \<Longrightarrow> norm i \<le> B*(2*pi*r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1591 | unfolding circlepath_def | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1592 | by (auto simp: algebra_simps in_path_image_part_circlepath dest!: has_contour_integral_bound_part_circlepath_strong) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1593 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1594 | lemma has_contour_integral_bound_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1595 | "\<lbrakk>(f has_contour_integral i) (circlepath z r); | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1596 | 0 \<le> B; 0 < r; \<And>x. norm(x - z) = r \<Longrightarrow> norm(f x) \<le> B\<rbrakk> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1597 | \<Longrightarrow> norm i \<le> B*(2*pi*r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1598 | by (auto intro: has_contour_integral_bound_circlepath_strong) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1599 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1600 | lemma contour_integrable_continuous_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1601 | "continuous_on (path_image (circlepath z r)) f | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1602 | \<Longrightarrow> f contour_integrable_on (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1603 | by (simp add: circlepath_def contour_integrable_continuous_part_circlepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1604 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1605 | lemma simple_path_circlepath: "simple_path(circlepath z r) \<longleftrightarrow> (r \<noteq> 0)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1606 | by (simp add: circlepath_def simple_path_part_circlepath) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1607 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1608 | lemma notin_path_image_circlepath [simp]: "cmod (w - z) < r \<Longrightarrow> w \<notin> path_image (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1609 | by (simp add: sphere_def dist_norm norm_minus_commute) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1610 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1611 | lemma contour_integral_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1612 | assumes "r > 0" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1613 | shows "contour_integral (circlepath z r) (\<lambda>w. 1 / (w - z)) = 2 * complex_of_real pi * \<i>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1614 | proof (rule contour_integral_unique) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1615 | show "((\<lambda>w. 1 / (w - z)) has_contour_integral 2 * complex_of_real pi * \<i>) (circlepath z r)" | 
| 72270 | 1616 | unfolding has_contour_integral_def using assms has_integral_const_real [of _ 0 1] | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1617 | apply (subst has_integral_cong) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1618 | apply (simp add: vector_derivative_circlepath01) | 
| 72270 | 1619 | apply (force simp: circlepath) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1620 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1621 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1622 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1623 | subsection\<open> Uniform convergence of path integral\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1624 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1625 | text\<open>Uniform convergence when the derivative of the path is bounded, and in particular for the special case of a circle.\<close> | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1626 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1627 | proposition contour_integral_uniform_limit: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1628 | assumes ev_fint: "eventually (\<lambda>n::'a. (f n) contour_integrable_on \<gamma>) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1629 | and ul_f: "uniform_limit (path_image \<gamma>) f l F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1630 |       and noleB: "\<And>t. t \<in> {0..1} \<Longrightarrow> norm (vector_derivative \<gamma> (at t)) \<le> B"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1631 | and \<gamma>: "valid_path \<gamma>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1632 | and [simp]: "\<not> trivial_limit F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1633 | shows "l contour_integrable_on \<gamma>" "((\<lambda>n. contour_integral \<gamma> (f n)) \<longlongrightarrow> contour_integral \<gamma> l) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1634 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1635 | have "0 \<le> B" by (meson noleB [of 0] atLeastAtMost_iff norm_ge_zero order_refl order_trans zero_le_one) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1636 |   { fix e::real
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1637 | assume "0 < e" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1638 | then have "0 < e / (\<bar>B\<bar> + 1)" by simp | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1639 | then have "\<forall>\<^sub>F n in F. \<forall>x\<in>path_image \<gamma>. cmod (f n x - l x) < e / (\<bar>B\<bar> + 1)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1640 | using ul_f [unfolded uniform_limit_iff dist_norm] by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1641 | with ev_fint | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1642 |     obtain a where fga: "\<And>x. x \<in> {0..1} \<Longrightarrow> cmod (f a (\<gamma> x) - l (\<gamma> x)) < e / (\<bar>B\<bar> + 1)"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1643 |                and inta: "(\<lambda>t. f a (\<gamma> t) * vector_derivative \<gamma> (at t)) integrable_on {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1644 | using eventually_happens [OF eventually_conj] | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1645 | by (fastforce simp: contour_integrable_on path_image_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1646 | have Ble: "B * e / (\<bar>B\<bar> + 1) \<le> e" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1647 | using \<open>0 \<le> B\<close> \<open>0 < e\<close> by (simp add: field_split_simps) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1648 |     have "\<exists>h. (\<forall>x\<in>{0..1}. cmod (l (\<gamma> x) * vector_derivative \<gamma> (at x) - h x) \<le> e) \<and> h integrable_on {0..1}"
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1649 | proof (intro exI conjI ballI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1650 | show "cmod (l (\<gamma> x) * vector_derivative \<gamma> (at x) - f a (\<gamma> x) * vector_derivative \<gamma> (at x)) \<le> e" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1651 |         if "x \<in> {0..1}" for x
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1652 | apply (rule order_trans [OF _ Ble]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1653 | using noleB [OF that] fga [OF that] \<open>0 \<le> B\<close> \<open>0 < e\<close> | 
| 72270 | 1654 | apply (fastforce simp: mult_ac dest: mult_mono [OF less_imp_le] simp add: norm_mult left_diff_distrib [symmetric] norm_minus_commute divide_simps) | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1655 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1656 | qed (rule inta) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1657 | } | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1658 | then show lintg: "l contour_integrable_on \<gamma>" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1659 | unfolding contour_integrable_on by (metis (mono_tags, lifting)integrable_uniform_limit_real) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1660 |   { fix e::real
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1661 | define B' where "B' = B + 1" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1662 | have B': "B' > 0" "B' > B" using \<open>0 \<le> B\<close> by (auto simp: B'_def) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1663 | assume "0 < e" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1664 | then have ev_no': "\<forall>\<^sub>F n in F. \<forall>x\<in>path_image \<gamma>. 2 * cmod (f n x - l x) < e / B'" | 
| 72270 | 1665 | using ul_f [unfolded uniform_limit_iff dist_norm, rule_format, of "e / B'/2"] B' | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1666 | by (simp add: field_simps) | 
| 72270 | 1667 |     have ie: "integral {0..1::real} (\<lambda>x. e/2) < e" using \<open>0 < e\<close> by simp
 | 
| 1668 | have *: "cmod (f x (\<gamma> t) * vector_derivative \<gamma> (at t) - l (\<gamma> t) * vector_derivative \<gamma> (at t)) \<le> e/2" | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1669 |              if t: "t\<in>{0..1}" and leB': "2 * cmod (f x (\<gamma> t) - l (\<gamma> t)) < e / B'" for x t
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1670 | proof - | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1671 | have "2 * cmod (f x (\<gamma> t) - l (\<gamma> t)) * cmod (vector_derivative \<gamma> (at t)) \<le> e * (B/ B')" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1672 | using mult_mono [OF less_imp_le [OF leB'] noleB] B' \<open>0 < e\<close> t by auto | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1673 | also have "\<dots> < e" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1674 | by (simp add: B' \<open>0 < e\<close> mult_imp_div_pos_less) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1675 | finally have "2 * cmod (f x (\<gamma> t) - l (\<gamma> t)) * cmod (vector_derivative \<gamma> (at t)) < e" . | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1676 | then show ?thesis | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1677 | by (simp add: left_diff_distrib [symmetric] norm_mult) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1678 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1679 |     have le_e: "\<And>x. \<lbrakk>\<forall>xa\<in>{0..1}. 2 * cmod (f x (\<gamma> xa) - l (\<gamma> xa)) < e / B'; f x contour_integrable_on \<gamma>\<rbrakk>
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1680 |          \<Longrightarrow> cmod (integral {0..1}
 | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1681 | (\<lambda>u. f x (\<gamma> u) * vector_derivative \<gamma> (at u) - l (\<gamma> u) * vector_derivative \<gamma> (at u))) < e" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1682 | apply (rule le_less_trans [OF integral_norm_bound_integral ie]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1683 | apply (simp add: lintg integrable_diff contour_integrable_on [symmetric]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1684 | apply (blast intro: *)+ | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1685 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1686 | have "\<forall>\<^sub>F x in F. dist (contour_integral \<gamma> (f x)) (contour_integral \<gamma> l) < e" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1687 | apply (rule eventually_mono [OF eventually_conj [OF ev_no' ev_fint]]) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1688 | apply (simp add: dist_norm contour_integrable_on path_image_def contour_integral_integral) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1689 | apply (simp add: lintg integral_diff [symmetric] contour_integrable_on [symmetric] le_e) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1690 | done | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1691 | } | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1692 | then show "((\<lambda>n. contour_integral \<gamma> (f n)) \<longlongrightarrow> contour_integral \<gamma> l) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1693 | by (rule tendstoI) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1694 | qed | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1695 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1696 | corollary\<^marker>\<open>tag unimportant\<close> contour_integral_uniform_limit_circlepath: | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1697 | assumes "\<forall>\<^sub>F n::'a in F. (f n) contour_integrable_on (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1698 | and "uniform_limit (sphere z r) f l F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1699 | and "\<not> trivial_limit F" "0 < r" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1700 | shows "l contour_integrable_on (circlepath z r)" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1701 | "((\<lambda>n. contour_integral (circlepath z r) (f n)) \<longlongrightarrow> contour_integral (circlepath z r) l) F" | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1702 | using assms by (auto simp: vector_derivative_circlepath norm_mult intro!: contour_integral_uniform_limit) | 
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1703 | |
| 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1704 | end |