| author | wenzelm | 
| Thu, 08 Jul 2021 22:21:31 +0200 | |
| changeset 73950 | cc49da3003aa | 
| parent 72629 | a995071b8e6d | 
| child 78517 | 28c1f4f5335f | 
| permissions | -rw-r--r-- | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1 | section \<open>Complex Path Integrals and Cauchy's Integral Theorem\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3 | text\<open>By John Harrison et al. Ported from HOL Light by L C Paulson (2015)\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 5 | theory Cauchy_Integral_Theorem | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 6 | imports | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 7 | "HOL-Analysis.Analysis" | 
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71189diff
changeset | 8 | Contour_Integration | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 9 | begin | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 10 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 11 | lemma leibniz_rule_holomorphic: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 12 | fixes f::"complex \<Rightarrow> 'b::euclidean_space \<Rightarrow> complex" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 13 | assumes "\<And>x t. x \<in> U \<Longrightarrow> t \<in> cbox a b \<Longrightarrow> ((\<lambda>x. f x t) has_field_derivative fx x t) (at x within U)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 14 | assumes "\<And>x. x \<in> U \<Longrightarrow> (f x) integrable_on cbox a b" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 15 | assumes "continuous_on (U \<times> (cbox a b)) (\<lambda>(x, t). fx x t)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 16 | assumes "convex U" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 17 | shows "(\<lambda>x. integral (cbox a b) (f x)) holomorphic_on U" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 18 | using leibniz_rule_field_differentiable[OF assms(1-3) _ assms(4)] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 19 | by (auto simp: holomorphic_on_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 20 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 21 | lemma Ln_measurable [measurable]: "Ln \<in> measurable borel borel" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 22 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 23 | have *: "Ln (-of_real x) = of_real (ln x) + \<i> * pi" if "x > 0" for x | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 24 | using that by (subst Ln_minus) (auto simp: Ln_of_real) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 25 | have **: "Ln (of_real x) = of_real (ln (-x)) + \<i> * pi" if "x < 0" for x | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 26 | using *[of "-x"] that by simp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 27 | have cont: "(\<lambda>x. indicat_real (- \<real>\<^sub>\<le>\<^sub>0) x *\<^sub>R Ln x) \<in> borel_measurable borel" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 28 | by (intro borel_measurable_continuous_on_indicator continuous_intros) auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 29 | have "(\<lambda>x. if x \<in> \<real>\<^sub>\<le>\<^sub>0 then ln (-Re x) + \<i> * pi else indicator (-\<real>\<^sub>\<le>\<^sub>0) x *\<^sub>R Ln x) \<in> borel \<rightarrow>\<^sub>M borel" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 30 | (is "?f \<in> _") by (rule measurable_If_set[OF _ cont]) auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 31 | hence "(\<lambda>x. if x = 0 then Ln 0 else ?f x) \<in> borel \<rightarrow>\<^sub>M borel" by measurable | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 32 | also have "(\<lambda>x. if x = 0 then Ln 0 else ?f x) = Ln" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 33 | by (auto simp: fun_eq_iff ** nonpos_Reals_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 34 | finally show ?thesis . | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 35 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 36 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 37 | lemma powr_complex_measurable [measurable]: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 38 | assumes [measurable]: "f \<in> measurable M borel" "g \<in> measurable M borel" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 39 | shows "(\<lambda>x. f x powr g x :: complex) \<in> measurable M borel" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 40 | using assms by (simp add: powr_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 41 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 42 | text\<open>The special case of midpoints used in the main quadrisection\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 43 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 44 | lemma has_contour_integral_midpoint: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 45 | assumes "(f has_contour_integral i) (linepath a (midpoint a b))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 46 | "(f has_contour_integral j) (linepath (midpoint a b) b)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 47 | shows "(f has_contour_integral (i + j)) (linepath a b)" | 
| 72629 | 48 | proof (rule has_contour_integral_split) | 
| 49 | show "midpoint a b - a = (1/2) *\<^sub>R (b - a)" | |
| 50 | using assms by (auto simp: midpoint_def scaleR_conv_of_real) | |
| 51 | qed (use assms in auto) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 52 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 53 | lemma contour_integral_midpoint: | 
| 72629 | 54 | assumes "continuous_on (closed_segment a b) f" | 
| 55 | shows "contour_integral (linepath a b) f = | |
| 56 | contour_integral (linepath a (midpoint a b)) f + contour_integral (linepath (midpoint a b) b) f" | |
| 57 | proof (rule contour_integral_split) | |
| 58 | show "midpoint a b - a = (1/2) *\<^sub>R (b - a)" | |
| 59 | using assms by (auto simp: midpoint_def scaleR_conv_of_real) | |
| 60 | qed (use assms in auto) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 61 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 62 | text\<open>A couple of special case lemmas that are useful below\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 63 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 64 | lemma triangle_linear_has_chain_integral: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 65 | "((\<lambda>x. m*x + d) has_contour_integral 0) (linepath a b +++ linepath b c +++ linepath c a)" | 
| 72629 | 66 | proof (rule Cauchy_theorem_primitive) | 
| 67 | show "\<And>x. x \<in> UNIV \<Longrightarrow> ((\<lambda>x. m / 2 * x\<^sup>2 + d * x) has_field_derivative m * x + d) (at x)" | |
| 68 | by (auto intro!: derivative_eq_intros) | |
| 69 | qed auto | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 70 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 71 | lemma has_chain_integral_chain_integral3: | 
| 72629 | 72 | assumes "(f has_contour_integral i) (linepath a b +++ linepath b c +++ linepath c d)" | 
| 73 | (is "(f has_contour_integral i) ?g") | |
| 74 | shows "contour_integral (linepath a b) f + contour_integral (linepath b c) f + contour_integral (linepath c d) f = i" | |
| 75 | (is "?lhs = _") | |
| 76 | proof - | |
| 77 | have "f contour_integrable_on ?g" | |
| 78 | using assms contour_integrable_on_def by blast | |
| 79 | then have "?lhs = contour_integral ?g f" | |
| 80 | by (simp add: valid_path_join has_contour_integral_integrable) | |
| 81 | then show ?thesis | |
| 82 | using assms contour_integral_unique by blast | |
| 83 | qed | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 84 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 85 | lemma has_chain_integral_chain_integral4: | 
| 72629 | 86 | assumes "(f has_contour_integral i) (linepath a b +++ linepath b c +++ linepath c d +++ linepath d e)" | 
| 87 | (is "(f has_contour_integral i) ?g") | |
| 88 | shows "contour_integral (linepath a b) f + contour_integral (linepath b c) f + contour_integral (linepath c d) f + contour_integral (linepath d e) f = i" | |
| 89 | (is "?lhs = _") | |
| 90 | proof - | |
| 91 | have "f contour_integrable_on ?g" | |
| 92 | using assms contour_integrable_on_def by blast | |
| 93 | then have "?lhs = contour_integral ?g f" | |
| 94 | by (simp add: valid_path_join has_contour_integral_integrable) | |
| 95 | then show ?thesis | |
| 96 | using assms contour_integral_unique by blast | |
| 97 | qed | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 98 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 99 | subsection\<^marker>\<open>tag unimportant\<close> \<open>The key quadrisection step\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 100 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 101 | lemma norm_sum_half: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 102 | assumes "norm(a + b) \<ge> e" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 103 | shows "norm a \<ge> e/2 \<or> norm b \<ge> e/2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 104 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 105 | have "e \<le> norm (- a - b)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 106 | by (simp add: add.commute assms norm_minus_commute) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 107 | thus ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 108 | using norm_triangle_ineq4 order_trans by fastforce | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 109 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 110 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 111 | lemma norm_sum_lemma: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 112 | assumes "e \<le> norm (a + b + c + d)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 113 | shows "e / 4 \<le> norm a \<or> e / 4 \<le> norm b \<or> e / 4 \<le> norm c \<or> e / 4 \<le> norm d" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 114 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 115 | have "e \<le> norm ((a + b) + (c + d))" using assms | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 116 | by (simp add: algebra_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 117 | then show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 118 | by (auto dest!: norm_sum_half) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 119 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 120 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 121 | lemma Cauchy_theorem_quadrisection: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 122 |   assumes f: "continuous_on (convex hull {a,b,c}) f"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 123 | and dist: "dist a b \<le> K" "dist b c \<le> K" "dist c a \<le> K" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 124 | and e: "e * K^2 \<le> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 125 | norm (contour_integral(linepath a b) f + contour_integral(linepath b c) f + contour_integral(linepath c a) f)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 126 | shows "\<exists>a' b' c'. | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 127 |            a' \<in> convex hull {a,b,c} \<and> b' \<in> convex hull {a,b,c} \<and> c' \<in> convex hull {a,b,c} \<and>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 128 | dist a' b' \<le> K/2 \<and> dist b' c' \<le> K/2 \<and> dist c' a' \<le> K/2 \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 129 | e * (K/2)^2 \<le> norm(contour_integral(linepath a' b') f + contour_integral(linepath b' c') f + contour_integral(linepath c' a') f)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 130 | (is "\<exists>x y z. ?\<Phi> x y z") | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 131 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 132 | note divide_le_eq_numeral1 [simp del] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 133 | define a' where "a' = midpoint b c" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 134 | define b' where "b' = midpoint c a" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 135 | define c' where "c' = midpoint a b" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 136 | have fabc: "continuous_on (closed_segment a b) f" "continuous_on (closed_segment b c) f" "continuous_on (closed_segment c a) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 137 | using f continuous_on_subset segments_subset_convex_hull by metis+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 138 | have fcont': "continuous_on (closed_segment c' b') f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 139 | "continuous_on (closed_segment a' c') f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 140 | "continuous_on (closed_segment b' a') f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 141 | unfolding a'_def b'_def c'_def | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 142 | by (rule continuous_on_subset [OF f], | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 143 | metis midpoints_in_convex_hull convex_hull_subset hull_subset insert_subset segment_convex_hull)+ | 
| 72629 | 144 | define pathint where "pathint x y \<equiv> contour_integral(linepath x y) f" for x y | 
| 145 | have *: "pathint a b + pathint b c + pathint c a = | |
| 146 | (pathint a c' + pathint c' b' + pathint b' a) + | |
| 147 | (pathint a' c' + pathint c' b + pathint b a') + | |
| 148 | (pathint a' c + pathint c b' + pathint b' a') + | |
| 149 | (pathint a' b' + pathint b' c' + pathint c' a')" | |
| 150 | unfolding pathint_def | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 151 | by (simp add: fcont' contour_integral_reverse_linepath) (simp add: a'_def b'_def c'_def contour_integral_midpoint fabc) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 152 | have [simp]: "\<And>x y. cmod (x * 2 - y * 2) = cmod (x - y) * 2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 153 | by (metis left_diff_distrib mult.commute norm_mult_numeral1) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 154 | have [simp]: "\<And>x y. cmod (x - y) = cmod (y - x)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 155 | by (simp add: norm_minus_commute) | 
| 72629 | 156 | consider "e * K\<^sup>2 / 4 \<le> cmod (pathint a c' + pathint c' b' + pathint b' a)" | | 
| 157 | "e * K\<^sup>2 / 4 \<le> cmod (pathint a' c' + pathint c' b + pathint b a')" | | |
| 158 | "e * K\<^sup>2 / 4 \<le> cmod (pathint a' c + pathint c b' + pathint b' a')" | | |
| 159 | "e * K\<^sup>2 / 4 \<le> cmod (pathint a' b' + pathint b' c' + pathint c' a')" | |
| 160 | using assms by (metis "*" norm_sum_lemma pathint_def) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 161 | then show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 162 | proof cases | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 163 | case 1 then have "?\<Phi> a c' b'" | 
| 72629 | 164 | using assms unfolding pathint_def [symmetric] | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 165 | apply (clarsimp simp: c'_def b'_def midpoints_in_convex_hull hull_subset [THEN subsetD]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 166 | apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real field_split_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 167 | done | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 168 | then show ?thesis by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 169 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 170 | case 2 then have "?\<Phi> a' c' b" | 
| 72629 | 171 | using assms unfolding pathint_def [symmetric] | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 172 | apply (clarsimp simp: a'_def c'_def midpoints_in_convex_hull hull_subset [THEN subsetD]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 173 | apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real field_split_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 174 | done | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 175 | then show ?thesis by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 176 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 177 | case 3 then have "?\<Phi> a' c b'" | 
| 72629 | 178 | using assms unfolding pathint_def [symmetric] | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 179 | apply (clarsimp simp: a'_def b'_def midpoints_in_convex_hull hull_subset [THEN subsetD]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 180 | apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real field_split_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 181 | done | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 182 | then show ?thesis by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 183 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 184 | case 4 then have "?\<Phi> a' b' c'" | 
| 72629 | 185 | using assms unfolding pathint_def [symmetric] | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 186 | apply (clarsimp simp: a'_def c'_def b'_def midpoints_in_convex_hull hull_subset [THEN subsetD]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 187 | apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real field_split_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 188 | done | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 189 | then show ?thesis by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 190 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 191 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 192 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 193 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Cauchy's theorem for triangles\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 194 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 195 | lemma triangle_points_closer: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 196 | fixes a::complex | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 197 |   shows "\<lbrakk>x \<in> convex hull {a,b,c};  y \<in> convex hull {a,b,c}\<rbrakk>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 198 | \<Longrightarrow> norm(x - y) \<le> norm(a - b) \<or> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 199 | norm(x - y) \<le> norm(b - c) \<or> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 200 | norm(x - y) \<le> norm(c - a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 201 |   using simplex_extremal_le [of "{a,b,c}"]
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 202 | by (auto simp: norm_minus_commute) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 203 | |
| 72629 | 204 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 205 | lemma holomorphic_point_small_triangle: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 206 | assumes x: "x \<in> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 207 | and f: "continuous_on S f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 208 | and cd: "f field_differentiable (at x within S)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 209 | and e: "0 < e" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 210 | shows "\<exists>k>0. \<forall>a b c. dist a b \<le> k \<and> dist b c \<le> k \<and> dist c a \<le> k \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 211 |               x \<in> convex hull {a,b,c} \<and> convex hull {a,b,c} \<subseteq> S
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 212 | \<longrightarrow> norm(contour_integral(linepath a b) f + contour_integral(linepath b c) f + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 213 | contour_integral(linepath c a) f) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 214 | \<le> e*(dist a b + dist b c + dist c a)^2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 215 | (is "\<exists>k>0. \<forall>a b c. _ \<longrightarrow> ?normle a b c") | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 216 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 217 | have le_of_3: "\<And>a x y z. \<lbrakk>0 \<le> x*y; 0 \<le> x*z; 0 \<le> y*z; a \<le> (e*(x + y + z))*x + (e*(x + y + z))*y + (e*(x + y + z))*z\<rbrakk> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 218 | \<Longrightarrow> a \<le> e*(x + y + z)^2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 219 | by (simp add: algebra_simps power2_eq_square) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 220 | have disj_le: "\<lbrakk>x \<le> a \<or> x \<le> b \<or> x \<le> c; 0 \<le> a; 0 \<le> b; 0 \<le> c\<rbrakk> \<Longrightarrow> x \<le> a + b + c" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 221 | for x::real and a b c | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 222 | by linarith | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 223 | have fabc: "f contour_integrable_on linepath a b" "f contour_integrable_on linepath b c" "f contour_integrable_on linepath c a" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 224 |               if "convex hull {a, b, c} \<subseteq> S" for a b c
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 225 | using segments_subset_convex_hull that | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 226 | by (metis continuous_on_subset f contour_integrable_continuous_linepath)+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 227 | note path_bound = has_contour_integral_bound_linepath [simplified norm_minus_commute, OF has_contour_integral_integral] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 228 |   { fix f' a b c d
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 229 | assume d: "0 < d" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 230 | and f': "\<And>y. \<lbrakk>cmod (y - x) \<le> d; y \<in> S\<rbrakk> \<Longrightarrow> cmod (f y - f x - f' * (y - x)) \<le> e * cmod (y - x)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 231 | and le: "cmod (a - b) \<le> d" "cmod (b - c) \<le> d" "cmod (c - a) \<le> d" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 232 |        and xc: "x \<in> convex hull {a, b, c}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 233 |        and S: "convex hull {a, b, c} \<subseteq> S"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 234 | have pa: "contour_integral (linepath a b) f + contour_integral (linepath b c) f + contour_integral (linepath c a) f = | 
| 72629 | 235 | contour_integral (linepath a b) (\<lambda>y. f y - f x - f' * (y-x)) + | 
| 236 | contour_integral (linepath b c) (\<lambda>y. f y - f x - f' * (y-x)) + | |
| 237 | contour_integral (linepath c a) (\<lambda>y. f y - f x - f' * (y-x))" | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 238 | apply (simp add: contour_integral_diff contour_integral_lmul contour_integrable_lmul contour_integrable_diff fabc [OF S]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 239 | apply (simp add: field_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 240 | done | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 241 |     { fix y
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 242 |       assume yc: "y \<in> convex hull {a,b,c}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 243 | have "cmod (f y - f x - f' * (y - x)) \<le> e*norm(y - x)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 244 | proof (rule f') | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 245 | show "cmod (y - x) \<le> d" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 246 | by (metis triangle_points_closer [OF xc yc] le norm_minus_commute order_trans) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 247 | qed (use S yc in blast) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 248 | also have "\<dots> \<le> e * (cmod (a - b) + cmod (b - c) + cmod (c - a))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 249 | by (simp add: yc e xc disj_le [OF triangle_points_closer]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 250 | finally have "cmod (f y - f x - f' * (y - x)) \<le> e * (cmod (a - b) + cmod (b - c) + cmod (c - a))" . | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 251 | } note cm_le = this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 252 | have "?normle a b c" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 253 | unfolding dist_norm pa | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 254 | using f' xc S e | 
| 72629 | 255 | apply (intro le_of_3 norm_triangle_le add_mono path_bound) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 256 | apply (simp_all add: contour_integral_diff contour_integral_lmul contour_integrable_lmul contour_integrable_diff fabc) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 257 | apply (blast intro: cm_le elim: dest: segments_subset_convex_hull [THEN subsetD])+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 258 | done | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 259 | } note * = this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 260 | show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 261 | using cd e | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 262 | apply (simp add: field_differentiable_def has_field_derivative_def has_derivative_within_alt approachable_lt_le2 Ball_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 263 | apply (clarify dest!: spec mp) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 264 | using * unfolding dist_norm | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 265 | apply blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 266 | done | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 267 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 268 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 269 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 270 | text\<open>Hence the most basic theorem for a triangle.\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 271 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 272 | locale Chain = | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 273 | fixes x0 At Follows | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 274 | assumes At0: "At x0 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 275 | and AtSuc: "\<And>x n. At x n \<Longrightarrow> \<exists>x'. At x' (Suc n) \<and> Follows x' x" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 276 | begin | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 277 | primrec f where | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 278 | "f 0 = x0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 279 | | "f (Suc n) = (SOME x. At x (Suc n) \<and> Follows x (f n))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 280 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 281 | lemma At: "At (f n) n" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 282 | proof (induct n) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 283 | case 0 show ?case | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 284 | by (simp add: At0) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 285 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 286 | case (Suc n) show ?case | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 287 | by (metis (no_types, lifting) AtSuc [OF Suc] f.simps(2) someI_ex) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 288 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 289 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 290 | lemma Follows: "Follows (f(Suc n)) (f n)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 291 | by (metis (no_types, lifting) AtSuc [OF At [of n]] f.simps(2) someI_ex) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 292 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 293 | declare f.simps(2) [simp del] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 294 | end | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 295 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 296 | lemma Chain3: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 297 | assumes At0: "At x0 y0 z0 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 298 | and AtSuc: "\<And>x y z n. At x y z n \<Longrightarrow> \<exists>x' y' z'. At x' y' z' (Suc n) \<and> Follows x' y' z' x y z" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 299 | obtains f g h where | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 300 | "f 0 = x0" "g 0 = y0" "h 0 = z0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 301 | "\<And>n. At (f n) (g n) (h n) n" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 302 | "\<And>n. Follows (f(Suc n)) (g(Suc n)) (h(Suc n)) (f n) (g n) (h n)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 303 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 304 | interpret three: Chain "(x0,y0,z0)" "\<lambda>(x,y,z). At x y z" "\<lambda>(x',y',z'). \<lambda>(x,y,z). Follows x' y' z' x y z" | 
| 72629 | 305 | proof qed (use At0 AtSuc in auto) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 306 | show ?thesis | 
| 72629 | 307 | proof | 
| 308 | show "\<And>n. Follows (fst (three.f (Suc n))) (fst (snd (three.f (Suc n)))) | |
| 309 | (snd (snd (three.f (Suc n)))) (fst (three.f n)) | |
| 310 | (fst (snd (three.f n))) (snd (snd (three.f n)))" | |
| 311 | "\<And>n. At (fst (three.f n)) (fst (snd (three.f n))) (snd (snd (three.f n))) n" | |
| 312 | using three.At three.Follows | |
| 313 | by (simp_all add: split_beta') | |
| 314 | qed auto | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 315 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 316 | |
| 72629 | 317 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 318 | proposition\<^marker>\<open>tag unimportant\<close> Cauchy_theorem_triangle: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 319 |   assumes "f holomorphic_on (convex hull {a,b,c})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 320 | shows "(f has_contour_integral 0) (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 321 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 322 |   have contf: "continuous_on (convex hull {a,b,c}) f"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 323 | by (metis assms holomorphic_on_imp_continuous_on) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 324 | let ?pathint = "\<lambda>x y. contour_integral(linepath x y) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 325 |   { fix y::complex
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 326 | assume fy: "(f has_contour_integral y) (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 327 | and ynz: "y \<noteq> 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 328 | define K where "K = 1 + max (dist a b) (max (dist b c) (dist c a))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 329 | define e where "e = norm y / K^2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 330 | have K1: "K \<ge> 1" by (simp add: K_def max.coboundedI1) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 331 | then have K: "K > 0" by linarith | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 332 | have [iff]: "dist a b \<le> K" "dist b c \<le> K" "dist c a \<le> K" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 333 | by (simp_all add: K_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 334 | have e: "e > 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 335 | unfolding e_def using ynz K1 by simp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 336 | define At where "At x y z n \<longleftrightarrow> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 337 |         convex hull {x,y,z} \<subseteq> convex hull {a,b,c} \<and>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 338 | dist x y \<le> K/2^n \<and> dist y z \<le> K/2^n \<and> dist z x \<le> K/2^n \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 339 | norm(?pathint x y + ?pathint y z + ?pathint z x) \<ge> e*(K/2^n)^2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 340 | for x y z n | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 341 | have At0: "At a b c 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 342 | using fy | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 343 | by (simp add: At_def e_def has_chain_integral_chain_integral3) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 344 |     { fix x y z n
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 345 | assume At: "At x y z n" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 346 |       then have contf': "continuous_on (convex hull {x,y,z}) f"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 347 | using contf At_def continuous_on_subset by metis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 348 |       have "\<exists>x' y' z'. At x' y' z' (Suc n) \<and> convex hull {x',y',z'} \<subseteq> convex hull {x,y,z}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 349 | using At Cauchy_theorem_quadrisection [OF contf', of "K/2^n" e] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 350 | apply (simp add: At_def algebra_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 351 | apply (meson convex_hull_subset empty_subsetI insert_subset subsetCE) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 352 | done | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 353 | } note AtSuc = this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 354 | obtain fa fb fc | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 355 | where f0 [simp]: "fa 0 = a" "fb 0 = b" "fc 0 = c" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 356 |         and cosb: "\<And>n. convex hull {fa n, fb n, fc n} \<subseteq> convex hull {a,b,c}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 357 | and dist: "\<And>n. dist (fa n) (fb n) \<le> K/2^n" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 358 | "\<And>n. dist (fb n) (fc n) \<le> K/2^n" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 359 | "\<And>n. dist (fc n) (fa n) \<le> K/2^n" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 360 | and no: "\<And>n. norm(?pathint (fa n) (fb n) + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 361 | ?pathint (fb n) (fc n) + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 362 | ?pathint (fc n) (fa n)) \<ge> e * (K/2^n)^2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 363 |         and conv_le: "\<And>n. convex hull {fa(Suc n), fb(Suc n), fc(Suc n)} \<subseteq> convex hull {fa n, fb n, fc n}"
 | 
| 72629 | 364 | by (rule Chain3 [of At, OF At0 AtSuc]) (auto simp: At_def) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 365 |     obtain x where x: "\<And>n. x \<in> convex hull {fa n, fb n, fc n}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 366 | proof (rule bounded_closed_nest) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 367 |       show "\<And>n. closed (convex hull {fa n, fb n, fc n})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 368 | by (simp add: compact_imp_closed finite_imp_compact_convex_hull) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 369 |       show "\<And>m n. m \<le> n \<Longrightarrow> convex hull {fa n, fb n, fc n} \<subseteq> convex hull {fa m, fb m, fc m}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 370 | by (erule transitive_stepwise_le) (auto simp: conv_le) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 371 | qed (fastforce intro: finite_imp_bounded_convex_hull)+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 372 |     then have xin: "x \<in> convex hull {a,b,c}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 373 | using assms f0 by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 374 |     then have fx: "f field_differentiable at x within (convex hull {a,b,c})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 375 | using assms holomorphic_on_def by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 376 |     { fix k n
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 377 | assume k: "0 < k" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 378 | and le: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 379 | "\<And>x' y' z'. | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 380 | \<lbrakk>dist x' y' \<le> k; dist y' z' \<le> k; dist z' x' \<le> k; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 381 |                 x \<in> convex hull {x',y',z'};
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 382 |                 convex hull {x',y',z'} \<subseteq> convex hull {a,b,c}\<rbrakk>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 383 | \<Longrightarrow> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 384 | cmod (?pathint x' y' + ?pathint y' z' + ?pathint z' x') * 10 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 385 | \<le> e * (dist x' y' + dist y' z' + dist z' x')\<^sup>2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 386 | and Kk: "K / k < 2 ^ n" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 387 | have "K / 2 ^ n < k" using Kk k | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 388 | by (auto simp: field_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 389 | then have DD: "dist (fa n) (fb n) \<le> k" "dist (fb n) (fc n) \<le> k" "dist (fc n) (fa n) \<le> k" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 390 | using dist [of n] k | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 391 | by linarith+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 392 | have dle: "(dist (fa n) (fb n) + dist (fb n) (fc n) + dist (fc n) (fa n))\<^sup>2 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 393 | \<le> (3 * K / 2 ^ n)\<^sup>2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 394 | using dist [of n] e K | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 395 | by (simp add: abs_le_square_iff [symmetric]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 396 | have less10: "\<And>x y::real. 0 < x \<Longrightarrow> y \<le> 9*x \<Longrightarrow> y < x*10" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 397 | by linarith | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 398 | have "e * (dist (fa n) (fb n) + dist (fb n) (fc n) + dist (fc n) (fa n))\<^sup>2 \<le> e * (3 * K / 2 ^ n)\<^sup>2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 399 | using ynz dle e mult_le_cancel_left_pos by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 400 | also have "\<dots> < | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 401 | cmod (?pathint (fa n) (fb n) + ?pathint (fb n) (fc n) + ?pathint (fc n) (fa n)) * 10" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 402 | using no [of n] e K | 
| 72629 | 403 | by (simp add: e_def field_simps) (simp only: zero_less_norm_iff [symmetric]) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 404 | finally have False | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 405 | using le [OF DD x cosb] by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 406 | } then | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 407 | have ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 408 | using holomorphic_point_small_triangle [OF xin contf fx, of "e/10"] e | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 409 | apply clarsimp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 410 | apply (rule_tac y1="K/k" in exE [OF real_arch_pow[of 2]], force+) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 411 | done | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 412 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 413 | moreover have "f contour_integrable_on (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 414 | by simp (meson contf continuous_on_subset contour_integrable_continuous_linepath segments_subset_convex_hull(1) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 415 | segments_subset_convex_hull(3) segments_subset_convex_hull(5)) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 416 | ultimately show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 417 | using has_contour_integral_integral by fastforce | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 418 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 419 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 420 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Version needing function holomorphic in interior only\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 421 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 422 | lemma Cauchy_theorem_flat_lemma: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 423 |   assumes f: "continuous_on (convex hull {a,b,c}) f"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 424 | and c: "c - a = k *\<^sub>R (b - a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 425 | and k: "0 \<le> k" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 426 | shows "contour_integral (linepath a b) f + contour_integral (linepath b c) f + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 427 | contour_integral (linepath c a) f = 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 428 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 429 | have fabc: "continuous_on (closed_segment a b) f" "continuous_on (closed_segment b c) f" "continuous_on (closed_segment c a) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 430 | using f continuous_on_subset segments_subset_convex_hull by metis+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 431 | show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 432 | proof (cases "k \<le> 1") | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 433 | case True show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 434 | by (simp add: contour_integral_split [OF fabc(1) k True c] contour_integral_reverse_linepath fabc) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 435 | next | 
| 72629 | 436 | case False | 
| 437 | show ?thesis | |
| 438 | proof (subst contour_integral_split [symmetric]) | |
| 439 | show "b - a = (1/k) *\<^sub>R (c - a)" | |
| 440 | using False c by force | |
| 441 | show "contour_integral (linepath a c) f + contour_integral (linepath c a) f = 0" | |
| 442 | by (simp add: contour_integral_reverse_linepath fabc(3)) | |
| 443 | show "continuous_on (closed_segment a c) f" | |
| 444 | by (metis closed_segment_commute fabc(3)) | |
| 445 | qed (use False in auto) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 446 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 447 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 448 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 449 | lemma Cauchy_theorem_flat: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 450 |   assumes f: "continuous_on (convex hull {a,b,c}) f"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 451 | and c: "c - a = k *\<^sub>R (b - a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 452 | shows "contour_integral (linepath a b) f + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 453 | contour_integral (linepath b c) f + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 454 | contour_integral (linepath c a) f = 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 455 | proof (cases "0 \<le> k") | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 456 | case True with assms show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 457 | by (blast intro: Cauchy_theorem_flat_lemma) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 458 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 459 | case False | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 460 | have "continuous_on (closed_segment a b) f" "continuous_on (closed_segment b c) f" "continuous_on (closed_segment c a) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 461 | using f continuous_on_subset segments_subset_convex_hull by metis+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 462 | moreover have "contour_integral (linepath b a) f + contour_integral (linepath a c) f + | 
| 72629 | 463 | contour_integral (linepath c b) f = 0" | 
| 464 | proof (rule Cauchy_theorem_flat_lemma [of b a c f "1-k"]) | |
| 465 |     show "continuous_on (convex hull {b, a, c}) f"
 | |
| 466 | by (simp add: f insert_commute) | |
| 467 | show "c - b = (1 - k) *\<^sub>R (a - b)" | |
| 468 | using c by (auto simp: algebra_simps) | |
| 469 | qed (use False in auto) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 470 | ultimately show ?thesis | 
| 72629 | 471 | by (metis (no_types, lifting) contour_integral_reverse_linepath eq_neg_iff_add_eq_0 minus_add_cancel) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 472 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 473 | |
| 72629 | 474 | |
| 475 | proposition Cauchy_theorem_triangle_interior: | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 476 |   assumes contf: "continuous_on (convex hull {a,b,c}) f"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 477 |       and holf:  "f holomorphic_on interior (convex hull {a,b,c})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 478 | shows "(f has_contour_integral 0) (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 479 | proof - | 
| 72629 | 480 | define pathint where "pathint \<equiv> \<lambda>x y. contour_integral(linepath x y) f" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 481 | have fabc: "continuous_on (closed_segment a b) f" "continuous_on (closed_segment b c) f" "continuous_on (closed_segment c a) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 482 | using contf continuous_on_subset segments_subset_convex_hull by metis+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 483 |   have "bounded (f ` (convex hull {a,b,c}))"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 484 | by (simp add: compact_continuous_image compact_convex_hull compact_imp_bounded contf) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 485 |   then obtain B where "0 < B" and Bnf: "\<And>x. x \<in> convex hull {a,b,c} \<Longrightarrow> norm (f x) \<le> B"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 486 | by (auto simp: dest!: bounded_pos [THEN iffD1]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 487 |   have "bounded (convex hull {a,b,c})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 488 | by (simp add: bounded_convex_hull) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 489 |   then obtain C where C: "0 < C" and Cno: "\<And>y. y \<in> convex hull {a,b,c} \<Longrightarrow> norm y < C"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 490 | using bounded_pos_less by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 491 | then have diff_2C: "norm(x - y) \<le> 2*C" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 492 |            if x: "x \<in> convex hull {a, b, c}" and y: "y \<in> convex hull {a, b, c}" for x y
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 493 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 494 | have "cmod x \<le> C" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 495 | using x by (meson Cno not_le not_less_iff_gr_or_eq) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 496 | hence "cmod (x - y) \<le> C + C" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 497 | using y by (meson Cno add_mono_thms_linordered_field(4) less_eq_real_def norm_triangle_ineq4 order_trans) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 498 | thus "cmod (x - y) \<le> 2 * C" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 499 | by (metis mult_2) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 500 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 501 |   have contf': "continuous_on (convex hull {b,a,c}) f"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 502 | using contf by (simp add: insert_commute) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 503 |   { fix y::complex
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 504 | assume fy: "(f has_contour_integral y) (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 505 | and ynz: "y \<noteq> 0" | 
| 72629 | 506 | have pi_eq_y: "pathint a b + pathint b c + pathint c a= y" | 
| 507 | unfolding pathint_def by (rule has_chain_integral_chain_integral3 [OF fy]) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 508 | have ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 509 | proof (cases "c=a \<or> a=b \<or> b=c") | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 510 | case True then show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 511 | using Cauchy_theorem_flat [OF contf, of 0] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 512 | using has_chain_integral_chain_integral3 [OF fy] ynz | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 513 | by (force simp: fabc contour_integral_reverse_linepath) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 514 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 515 | case False | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 516 |       then have car3: "card {a, b, c} = Suc (DIM(complex))"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 517 | by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 518 |       { assume "interior(convex hull {a,b,c}) = {}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 519 |         then have "collinear{a,b,c}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 520 | using interior_convex_hull_eq_empty [OF car3] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 521 | by (simp add: collinear_3_eq_affine_dependent) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 522 | with False obtain d where "c \<noteq> a" "a \<noteq> b" "b \<noteq> c" "c - b = d *\<^sub>R (a - b)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 523 | by (auto simp: collinear_3 collinear_lemma) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 524 | then have "False" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 525 | using False Cauchy_theorem_flat [OF contf'] pi_eq_y ynz | 
| 72629 | 526 | by (simp add: fabc add_eq_0_iff contour_integral_reverse_linepath pathint_def) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 527 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 528 |       then obtain d where d: "d \<in> interior (convex hull {a, b, c})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 529 | by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 530 |       { fix d1
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 531 | assume d1_pos: "0 < d1" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 532 |            and d1: "\<And>x x'. \<lbrakk>x\<in>convex hull {a, b, c}; x'\<in>convex hull {a, b, c}; cmod (x' - x) < d1\<rbrakk>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 533 | \<Longrightarrow> cmod (f x' - f x) < cmod y / (24 * C)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 534 | define e where "e = min 1 (min (d1/(4*C)) ((norm y / 24 / C) / B))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 535 | define shrink where "shrink x = x - e *\<^sub>R (x - d)" for x | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 536 | have e: "0 < e" "e \<le> 1" "e \<le> d1 / (4 * C)" "e \<le> cmod y / 24 / C / B" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 537 | using d1_pos \<open>C>0\<close> \<open>B>0\<close> ynz by (simp_all add: e_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 538 | have e_le_d1: "e * (4 * C) \<le> d1" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 539 | using e \<open>C>0\<close> by (simp add: field_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 540 |         have "shrink a \<in> interior(convex hull {a,b,c})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 541 |              "shrink b \<in> interior(convex hull {a,b,c})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 542 |              "shrink c \<in> interior(convex hull {a,b,c})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 543 | using d e by (auto simp: hull_inc mem_interior_convex_shrink shrink_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 544 | then have fhp0: "(f has_contour_integral 0) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 545 | (linepath (shrink a) (shrink b) +++ linepath (shrink b) (shrink c) +++ linepath (shrink c) (shrink a))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 546 | by (simp add: Cauchy_theorem_triangle holomorphic_on_subset [OF holf] hull_minimal) | 
| 72629 | 547 | then have f_0_shrink: "pathint (shrink a) (shrink b) + pathint (shrink b) (shrink c) + pathint (shrink c) (shrink a) = 0" | 
| 548 | by (simp add: has_chain_integral_chain_integral3 pathint_def) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 549 | have fpi_abc: "f contour_integrable_on linepath (shrink a) (shrink b)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 550 | "f contour_integrable_on linepath (shrink b) (shrink c)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 551 | "f contour_integrable_on linepath (shrink c) (shrink a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 552 | using fhp0 by (auto simp: valid_path_join dest: has_contour_integral_integrable) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 553 | have cmod_shr: "\<And>x y. cmod (shrink y - shrink x - (y - x)) = e * cmod (x - y)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 554 | using e by (simp add: shrink_def real_vector.scale_right_diff_distrib [symmetric]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 555 | have sh_eq: "\<And>a b d::complex. (b - e *\<^sub>R (b - d)) - (a - e *\<^sub>R (a - d)) - (b - a) = e *\<^sub>R (a - b)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 556 | by (simp add: algebra_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 557 | have "cmod y / (24 * C) \<le> cmod y / cmod (b - a) / 12" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 558 | using False \<open>C>0\<close> diff_2C [of b a] ynz | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 559 | by (auto simp: field_split_simps hull_inc) | 
| 72629 | 560 |         have less_C: "x * cmod u < C" if "u \<in> convex hull {a,b,c}" "0 \<le> x" "x \<le> 1" for x u
 | 
| 561 | proof (cases "x=0") | |
| 562 | case False | |
| 563 | with that show ?thesis | |
| 564 | using Cno [of u] mult_left_le_one_le [of "cmod u" x] le_less_trans norm_ge_zero by blast | |
| 565 | qed (simp add: \<open>0<C\<close>) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 566 |         { fix u v
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 567 |           assume uv: "u \<in> convex hull {a, b, c}" "v \<in> convex hull {a, b, c}" "u\<noteq>v"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 568 | and fpi_uv: "f contour_integrable_on linepath (shrink u) (shrink v)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 569 |           have shr_uv: "shrink u \<in> interior(convex hull {a,b,c})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 570 |                        "shrink v \<in> interior(convex hull {a,b,c})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 571 | using d e uv | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 572 | by (auto simp: hull_inc mem_interior_convex_shrink shrink_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 573 | have cmod_fuv: "\<And>x. 0\<le>x \<Longrightarrow> x\<le>1 \<Longrightarrow> cmod (f (linepath (shrink u) (shrink v) x)) \<le> B" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 574 | using shr_uv by (blast intro: Bnf linepath_in_convex_hull interior_subset [THEN subsetD]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 575 |           { fix x::real   assume x: "0\<le>x" "x\<le>1"
 | 
| 72629 | 576 | have "\<bar>1 - x\<bar> * cmod u < C" "\<bar>x\<bar> * cmod v < C" | 
| 577 | using uv x by (auto intro!: less_C) | |
| 578 | moreover have "\<bar>x\<bar> * cmod d < C" "\<bar>1 - x\<bar> * cmod d < C" | |
| 579 | using x d interior_subset by (auto intro!: less_C) | |
| 580 | ultimately | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 581 | have cmod_less_4C: "cmod ((1 - x) *\<^sub>R u - (1 - x) *\<^sub>R d) + cmod (x *\<^sub>R v - x *\<^sub>R d) < (C+C) + (C+C)" | 
| 72629 | 582 | by (metis add_strict_mono le_less_trans norm_scaleR norm_triangle_ineq4) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 583 | have ll: "linepath (shrink u) (shrink v) x - linepath u v x = -e * ((1 - x) *\<^sub>R (u - d) + x *\<^sub>R (v - d))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 584 | by (simp add: linepath_def shrink_def algebra_simps scaleR_conv_of_real) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 585 | have cmod_less_dt: "cmod (linepath (shrink u) (shrink v) x - linepath u v x) < d1" | 
| 72629 | 586 | unfolding ll norm_mult scaleR_diff_right | 
| 587 | using \<open>e>0\<close> cmod_less_4C by (force intro: norm_triangle_lt less_le_trans [OF _ e_le_d1]) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 588 | have "cmod (f (linepath (shrink u) (shrink v) x)) * cmod (shrink v - shrink u - (v - u)) + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 589 | cmod (v - u) * cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 590 | \<le> B * (cmod y / 24 / C / B * 2 * C) + 2 * C * (cmod y / 24 / C)" | 
| 72629 | 591 | proof (intro add_mono [OF mult_mono]) | 
| 592 | show "cmod (f (linepath (shrink u) (shrink v) x)) \<le> B" | |
| 593 | using cmod_fuv x by blast | |
| 594 | have "B * (12 * (e * cmod (u - v))) \<le> 24 * e * C * B" | |
| 595 | using e \<open>B>0\<close> diff_2C [of u v] uv by (auto simp: field_simps) | |
| 596 | also have "\<dots> \<le> cmod y" | |
| 597 | using \<open>C>0\<close> \<open>B>0\<close> e by (simp add: field_simps) | |
| 598 | finally show "cmod (shrink v - shrink u - (v - u)) \<le> cmod y / 24 / C / B * 2 * C" | |
| 599 | using \<open>0 < B\<close> \<open>0 < C\<close> by (simp add: cmod_shr mult_ac divide_simps) | |
| 600 | have "cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) < cmod y / (24 * C)" | |
| 601 | using x uv shr_uv cmod_less_dt | |
| 602 | by (auto simp: hull_inc intro: d1 interior_subset [THEN subsetD] linepath_in_convex_hull) | |
| 603 | also have "\<dots> \<le> cmod y / cmod (v - u) / 12" | |
| 604 | using False uv \<open>C>0\<close> diff_2C [of v u] ynz | |
| 605 | by (auto simp: field_split_simps hull_inc) | |
| 606 | finally have "cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) \<le> cmod y / cmod (v - u) / 12" | |
| 607 | by simp | |
| 608 | then show "cmod (v - u) * cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) | |
| 609 | \<le> 2 * C * (cmod y / 24 / C)" | |
| 610 | using uv C by (simp add: field_simps) | |
| 611 | qed (use \<open>0 < B\<close> in auto) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 612 | also have "\<dots> \<le> cmod y / 6" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 613 | by simp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 614 | finally have "cmod (f (linepath (shrink u) (shrink v) x)) * cmod (shrink v - shrink u - (v - u)) + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 615 | cmod (v - u) * cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 616 | \<le> cmod y / 6" . | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 617 | } note cmod_diff_le = this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 618 | have f_uv: "continuous_on (closed_segment u v) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 619 | by (blast intro: uv continuous_on_subset [OF contf closed_segment_subset_convex_hull]) | 
| 72629 | 620 | have **: "\<And>f' x' f x::complex. f'*x' - f*x = f' * (x' - x) + x * (f' - f)" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 621 | by (simp add: algebra_simps) | 
| 72629 | 622 | have "norm (pathint (shrink u) (shrink v) - pathint u v) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 623 | \<le> (B*(norm y /24/C/B)*2*C + (2*C)*(norm y/24/C)) * content (cbox 0 (1::real))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 624 | apply (rule has_integral_bound | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 625 | [of _ "\<lambda>x. f(linepath (shrink u) (shrink v) x) * (shrink v - shrink u) - f(linepath u v x)*(v - u)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 626 | _ 0 1]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 627 | using ynz \<open>0 < B\<close> \<open>0 < C\<close> | 
| 72629 | 628 | apply (simp_all add: pathint_def has_integral_diff has_contour_integral_linepath [symmetric] has_contour_integral_integral | 
| 629 | fpi_uv f_uv contour_integrable_continuous_linepath del: le_divide_eq_numeral1) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 630 | apply (auto simp: ** norm_triangle_le norm_mult cmod_diff_le simp del: le_divide_eq_numeral1) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 631 | done | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 632 | also have "\<dots> \<le> norm y / 6" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 633 | by simp | 
| 72629 | 634 | finally have "norm (pathint (shrink u) (shrink v) - pathint u v) \<le> norm y / 6" . | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 635 | } note * = this | 
| 72629 | 636 | have "norm (pathint (shrink a) (shrink b) - pathint a b) \<le> norm y / 6" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 637 | using False fpi_abc by (rule_tac *) (auto simp: hull_inc) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 638 | moreover | 
| 72629 | 639 | have "norm (pathint (shrink b) (shrink c) - pathint b c) \<le> norm y / 6" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 640 | using False fpi_abc by (rule_tac *) (auto simp: hull_inc) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 641 | moreover | 
| 72629 | 642 | have "norm (pathint (shrink c) (shrink a) - pathint c a) \<le> norm y / 6" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 643 | using False fpi_abc by (rule_tac *) (auto simp: hull_inc) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 644 | ultimately | 
| 72629 | 645 | have "norm((pathint (shrink a) (shrink b) - pathint a b) + | 
| 646 | (pathint (shrink b) (shrink c) - pathint b c) + (pathint (shrink c) (shrink a) - pathint c a)) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 647 | \<le> norm y / 6 + norm y / 6 + norm y / 6" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 648 | by (metis norm_triangle_le add_mono) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 649 | also have "\<dots> = norm y / 2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 650 | by simp | 
| 72629 | 651 | finally have "norm((pathint (shrink a) (shrink b) + pathint (shrink b) (shrink c) + pathint (shrink c) (shrink a)) - | 
| 652 | (pathint a b + pathint b c + pathint c a)) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 653 | \<le> norm y / 2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 654 | by (simp add: algebra_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 655 | then | 
| 72629 | 656 | have "norm(pathint a b + pathint b c + pathint c a) \<le> norm y / 2" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 657 | by (simp add: f_0_shrink) (metis (mono_tags) add.commute minus_add_distrib norm_minus_cancel uminus_add_conv_diff) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 658 | then have "False" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 659 | using pi_eq_y ynz by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 660 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 661 | note * = this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 662 |         have "uniformly_continuous_on (convex hull {a,b,c}) f"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 663 | by (simp add: contf compact_convex_hull compact_uniformly_continuous) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 664 | moreover have "norm y / (24 * C) > 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 665 | using ynz \<open>C > 0\<close> by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 666 | ultimately obtain \<delta> where "\<delta> > 0" and | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 667 |           "\<forall>x\<in>convex hull {a, b, c}. \<forall>x'\<in>convex hull {a, b, c}.
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 668 | dist x' x < \<delta> \<longrightarrow> dist (f x') (f x) < cmod y / (24 * C)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 669 | using \<open>C > 0\<close> ynz unfolding uniformly_continuous_on_def dist_norm by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 670 | hence False using *[of \<delta>] by (auto simp: dist_norm) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 671 | then show ?thesis .. | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 672 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 673 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 674 | moreover have "f contour_integrable_on (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 675 | using fabc contour_integrable_continuous_linepath by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 676 | ultimately show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 677 | using has_contour_integral_integral by fastforce | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 678 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 679 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 680 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Version allowing finite number of exceptional points\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 681 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 682 | proposition\<^marker>\<open>tag unimportant\<close> Cauchy_theorem_triangle_cofinite: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 683 |   assumes "continuous_on (convex hull {a,b,c}) f"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 684 | and "finite S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 685 |       and "(\<And>x. x \<in> interior(convex hull {a,b,c}) - S \<Longrightarrow> f field_differentiable (at x))"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 686 | shows "(f has_contour_integral 0) (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 687 | using assms | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 688 | proof (induction "card S" arbitrary: a b c S rule: less_induct) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 689 | case (less S a b c) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 690 | show ?case | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 691 |   proof (cases "S={}")
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 692 | case True with less show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 693 | by (fastforce simp: holomorphic_on_def field_differentiable_at_within Cauchy_theorem_triangle_interior) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 694 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 695 | case False | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 696 | then obtain d S' where d: "S = insert d S'" "d \<notin> S'" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 697 | by (meson Set.set_insert all_not_in_conv) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 698 | then show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 699 |     proof (cases "d \<in> convex hull {a,b,c}")
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 700 | case False | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 701 | show "(f has_contour_integral 0) (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 702 | proof (rule less.hyps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 703 |         show "\<And>x. x \<in> interior (convex hull {a, b, c}) - S' \<Longrightarrow> f field_differentiable at x"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 704 | using False d interior_subset by (auto intro!: less.prems) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 705 | qed (use d less.prems in auto) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 706 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 707 | case True | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 708 |       have *: "convex hull {a, b, d} \<subseteq> convex hull {a, b, c}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 709 | by (meson True hull_subset insert_subset convex_hull_subset) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 710 | have abd: "(f has_contour_integral 0) (linepath a b +++ linepath b d +++ linepath d a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 711 | proof (rule less.hyps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 712 |         show "\<And>x. x \<in> interior (convex hull {a, b, d}) - S' \<Longrightarrow> f field_differentiable at x"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 713 | using d not_in_interior_convex_hull_3 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 714 | by (clarsimp intro!: less.prems) (metis * insert_absorb insert_subset interior_mono) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 715 | qed (use d continuous_on_subset [OF _ *] less.prems in auto) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 716 |       have *: "convex hull {b, c, d} \<subseteq> convex hull {a, b, c}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 717 | by (meson True hull_subset insert_subset convex_hull_subset) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 718 | have bcd: "(f has_contour_integral 0) (linepath b c +++ linepath c d +++ linepath d b)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 719 | proof (rule less.hyps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 720 |         show "\<And>x. x \<in> interior (convex hull {b, c, d}) - S' \<Longrightarrow> f field_differentiable at x"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 721 | using d not_in_interior_convex_hull_3 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 722 | by (clarsimp intro!: less.prems) (metis * insert_absorb insert_subset interior_mono) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 723 | qed (use d continuous_on_subset [OF _ *] less.prems in auto) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 724 |       have *: "convex hull {c, a, d} \<subseteq> convex hull {a, b, c}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 725 | by (meson True hull_subset insert_subset convex_hull_subset) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 726 | have cad: "(f has_contour_integral 0) (linepath c a +++ linepath a d +++ linepath d c)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 727 | proof (rule less.hyps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 728 |         show "\<And>x. x \<in> interior (convex hull {c, a, d}) - S' \<Longrightarrow> f field_differentiable at x"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 729 | using d not_in_interior_convex_hull_3 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 730 | by (clarsimp intro!: less.prems) (metis * insert_absorb insert_subset interior_mono) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 731 | qed (use d continuous_on_subset [OF _ *] less.prems in auto) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 732 | have "f contour_integrable_on linepath a b" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 733 | using less.prems abd contour_integrable_joinD1 contour_integrable_on_def by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 734 | moreover have "f contour_integrable_on linepath b c" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 735 | using less.prems bcd contour_integrable_joinD1 contour_integrable_on_def by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 736 | moreover have "f contour_integrable_on linepath c a" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 737 | using less.prems cad contour_integrable_joinD1 contour_integrable_on_def by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 738 | ultimately have fpi: "f contour_integrable_on (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 739 | by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 740 |       { fix y::complex
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 741 | assume fy: "(f has_contour_integral y) (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 742 | and ynz: "y \<noteq> 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 743 | have cont_ad: "continuous_on (closed_segment a d) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 744 | by (meson "*" continuous_on_subset less.prems(1) segments_subset_convex_hull(3)) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 745 | have cont_bd: "continuous_on (closed_segment b d) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 746 | by (meson True closed_segment_subset_convex_hull continuous_on_subset hull_subset insert_subset less.prems(1)) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 747 | have cont_cd: "continuous_on (closed_segment c d) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 748 | by (meson "*" continuous_on_subset less.prems(1) segments_subset_convex_hull(2)) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 749 | have "contour_integral (linepath a b) f = - (contour_integral (linepath b d) f + (contour_integral (linepath d a) f))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 750 | "contour_integral (linepath b c) f = - (contour_integral (linepath c d) f + (contour_integral (linepath d b) f))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 751 | "contour_integral (linepath c a) f = - (contour_integral (linepath a d) f + contour_integral (linepath d c) f)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 752 | using has_chain_integral_chain_integral3 [OF abd] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 753 | has_chain_integral_chain_integral3 [OF bcd] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 754 | has_chain_integral_chain_integral3 [OF cad] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 755 | by (simp_all add: algebra_simps add_eq_0_iff) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 756 | then have ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 757 | using cont_ad cont_bd cont_cd fy has_chain_integral_chain_integral3 contour_integral_reverse_linepath by fastforce | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 758 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 759 | then show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 760 | using fpi contour_integrable_on_def by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 761 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 762 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 763 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 764 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 765 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Cauchy's theorem for an open starlike set\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 766 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 767 | lemma starlike_convex_subset: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 768 | assumes S: "a \<in> S" "closed_segment b c \<subseteq> S" and subs: "\<And>x. x \<in> S \<Longrightarrow> closed_segment a x \<subseteq> S" | 
| 72629 | 769 |   shows "convex hull {a,b,c} \<subseteq> S"
 | 
| 770 | proof - | |
| 771 |   have "convex hull {b, c} \<subseteq> S"
 | |
| 772 | using assms(2) segment_convex_hull by auto | |
| 773 |   then have "\<And>u v d. \<lbrakk>0 \<le> u; 0 \<le> v; u + v = 1; d \<in> convex hull {b, c}\<rbrakk> \<Longrightarrow> u *\<^sub>R a + v *\<^sub>R d \<in> S"
 | |
| 774 | by (meson subs convexD convex_closed_segment ends_in_segment subsetCE) | |
| 775 | then show ?thesis | |
| 776 |     by (auto simp add: convex_hull_insert [of "{b,c}" a])
 | |
| 777 | qed | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 778 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 779 | lemma triangle_contour_integrals_starlike_primitive: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 780 | assumes contf: "continuous_on S f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 781 | and S: "a \<in> S" "open S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 782 | and x: "x \<in> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 783 | and subs: "\<And>y. y \<in> S \<Longrightarrow> closed_segment a y \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 784 | and zer: "\<And>b c. closed_segment b c \<subseteq> S | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 785 | \<Longrightarrow> contour_integral (linepath a b) f + contour_integral (linepath b c) f + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 786 | contour_integral (linepath c a) f = 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 787 | shows "((\<lambda>x. contour_integral(linepath a x) f) has_field_derivative f x) (at x)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 788 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 789 | let ?pathint = "\<lambda>x y. contour_integral(linepath x y) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 790 |   { fix e y
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 791 | assume e: "0 < e" and bxe: "ball x e \<subseteq> S" and close: "cmod (y - x) < e" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 792 | have y: "y \<in> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 793 | using bxe close by (force simp: dist_norm norm_minus_commute) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 794 | have cont_ayf: "continuous_on (closed_segment a y) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 795 | using contf continuous_on_subset subs y by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 796 | have xys: "closed_segment x y \<subseteq> S" | 
| 72629 | 797 | by (metis bxe centre_in_ball close closed_segment_subset convex_ball dist_norm dual_order.trans e mem_ball norm_minus_commute) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 798 | have "?pathint a y - ?pathint a x = ?pathint x y" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 799 | using zer [OF xys] contour_integral_reverse_linepath [OF cont_ayf] add_eq_0_iff by force | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 800 | } note [simp] = this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 801 |   { fix e::real
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 802 | assume e: "0 < e" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 803 | have cont_atx: "continuous (at x) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 804 | using x S contf continuous_on_eq_continuous_at by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 805 | then obtain d1 where d1: "d1>0" and d1_less: "\<And>y. cmod (y - x) < d1 \<Longrightarrow> cmod (f y - f x) < e/2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 806 | unfolding continuous_at Lim_at dist_norm using e | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 807 | by (drule_tac x="e/2" in spec) force | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 808 | obtain d2 where d2: "d2>0" "ball x d2 \<subseteq> S" using \<open>open S\<close> x | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 809 | by (auto simp: open_contains_ball) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 810 | have dpos: "min d1 d2 > 0" using d1 d2 by simp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 811 |     { fix y
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 812 | assume yx: "y \<noteq> x" and close: "cmod (y - x) < min d1 d2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 813 | have y: "y \<in> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 814 | using d2 close by (force simp: dist_norm norm_minus_commute) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 815 | have "closed_segment x y \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 816 | using close d2 by (auto simp: dist_norm norm_minus_commute dest!: segment_bound(1)) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 817 | then have fxy: "f contour_integrable_on linepath x y" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 818 | by (metis contour_integrable_continuous_linepath continuous_on_subset [OF contf]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 819 | then obtain i where i: "(f has_contour_integral i) (linepath x y)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 820 | by (auto simp: contour_integrable_on_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 821 | then have "((\<lambda>w. f w - f x) has_contour_integral (i - f x * (y - x))) (linepath x y)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 822 | by (rule has_contour_integral_diff [OF _ has_contour_integral_const_linepath]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 823 | then have "cmod (i - f x * (y - x)) \<le> e / 2 * cmod (y - x)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 824 | proof (rule has_contour_integral_bound_linepath) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 825 | show "\<And>u. u \<in> closed_segment x y \<Longrightarrow> cmod (f u - f x) \<le> e / 2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 826 | by (meson close d1_less le_less_trans less_imp_le min.strict_boundedE segment_bound1) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 827 | qed (use e in simp) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 828 | also have "\<dots> < e * cmod (y - x)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 829 | by (simp add: e yx) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 830 | finally have "cmod (?pathint x y - f x * (y-x)) / cmod (y-x) < e" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 831 | using i yx by (simp add: contour_integral_unique divide_less_eq) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 832 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 833 | then have "\<exists>d>0. \<forall>y. y \<noteq> x \<and> cmod (y-x) < d \<longrightarrow> cmod (?pathint x y - f x * (y-x)) / cmod (y-x) < e" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 834 | using dpos by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 835 | } | 
| 72629 | 836 | then have "(\<lambda>y. (?pathint x y - f x * (y - x)) /\<^sub>R cmod (y - x)) \<midarrow>x\<rightarrow> 0" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 837 | by (simp add: Lim_at dist_norm inverse_eq_divide) | 
| 72629 | 838 | then have "(\<lambda>y. (1 / cmod (y - x)) *\<^sub>R (?pathint a y - (?pathint a x + f x * (y - x)))) \<midarrow>x\<rightarrow> 0" | 
| 839 | using \<open>open S\<close> x | |
| 840 | by (force simp: dist_norm open_contains_ball inverse_eq_divide [symmetric] eventually_at intro: Lim_transform [OF _ tendsto_eventually]) | |
| 841 | then show ?thesis | |
| 842 | by (simp add: has_field_derivative_def has_derivative_at2 bounded_linear_mult_right) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 843 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 844 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 845 | (** Existence of a primitive.*) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 846 | lemma holomorphic_starlike_primitive: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 847 | fixes f :: "complex \<Rightarrow> complex" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 848 | assumes contf: "continuous_on S f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 849 | and S: "starlike S" and os: "open S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 850 | and k: "finite k" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 851 | and fcd: "\<And>x. x \<in> S - k \<Longrightarrow> f field_differentiable at x" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 852 | shows "\<exists>g. \<forall>x \<in> S. (g has_field_derivative f x) (at x)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 853 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 854 | obtain a where a: "a\<in>S" and a_cs: "\<And>x. x\<in>S \<Longrightarrow> closed_segment a x \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 855 | using S by (auto simp: starlike_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 856 |   { fix x b c
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 857 | assume "x \<in> S" "closed_segment b c \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 858 |     then have abcs: "convex hull {a, b, c} \<subseteq> S"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 859 | by (simp add: a a_cs starlike_convex_subset) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 860 |     then have "continuous_on (convex hull {a, b, c}) f"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 861 | by (simp add: continuous_on_subset [OF contf]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 862 | then have "(f has_contour_integral 0) (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 863 | using abcs interior_subset by (force intro: fcd Cauchy_theorem_triangle_cofinite [OF _ k]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 864 | } note 0 = this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 865 | show ?thesis | 
| 72629 | 866 | proof (intro exI ballI) | 
| 867 | show "\<And>x. x \<in> S \<Longrightarrow> ((\<lambda>x. contour_integral (linepath a x) f) has_field_derivative f x) (at x)" | |
| 868 | using "0" a a_cs contf has_chain_integral_chain_integral3 os triangle_contour_integrals_starlike_primitive by force | |
| 869 | qed | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 870 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 871 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 872 | lemma Cauchy_theorem_starlike: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 873 | "\<lbrakk>open S; starlike S; finite k; continuous_on S f; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 874 | \<And>x. x \<in> S - k \<Longrightarrow> f field_differentiable at x; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 875 | valid_path g; path_image g \<subseteq> S; pathfinish g = pathstart g\<rbrakk> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 876 | \<Longrightarrow> (f has_contour_integral 0) g" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 877 | by (metis holomorphic_starlike_primitive Cauchy_theorem_primitive at_within_open) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 878 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 879 | lemma Cauchy_theorem_starlike_simple: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 880 | "\<lbrakk>open S; starlike S; f holomorphic_on S; valid_path g; path_image g \<subseteq> S; pathfinish g = pathstart g\<rbrakk> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 881 | \<Longrightarrow> (f has_contour_integral 0) g" | 
| 72629 | 882 | using Cauchy_theorem_starlike [OF _ _ finite.emptyI] | 
| 883 | by (simp add: holomorphic_on_imp_continuous_on holomorphic_on_imp_differentiable_at) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 884 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 885 | subsection\<open>Cauchy's theorem for a convex set\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 886 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 887 | text\<open>For a convex set we can avoid assuming openness and boundary analyticity\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 888 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 889 | lemma triangle_contour_integrals_convex_primitive: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 890 | assumes contf: "continuous_on S f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 891 | and S: "a \<in> S" "convex S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 892 | and x: "x \<in> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 893 | and zer: "\<And>b c. \<lbrakk>b \<in> S; c \<in> S\<rbrakk> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 894 | \<Longrightarrow> contour_integral (linepath a b) f + contour_integral (linepath b c) f + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 895 | contour_integral (linepath c a) f = 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 896 | shows "((\<lambda>x. contour_integral(linepath a x) f) has_field_derivative f x) (at x within S)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 897 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 898 | let ?pathint = "\<lambda>x y. contour_integral(linepath x y) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 899 |   { fix y
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 900 | assume y: "y \<in> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 901 | have cont_ayf: "continuous_on (closed_segment a y) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 902 | using S y by (meson contf continuous_on_subset convex_contains_segment) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 903 | have xys: "closed_segment x y \<subseteq> S" (*?*) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 904 | using convex_contains_segment S x y by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 905 | have "?pathint a y - ?pathint a x = ?pathint x y" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 906 | using zer [OF x y] contour_integral_reverse_linepath [OF cont_ayf] add_eq_0_iff by force | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 907 | } note [simp] = this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 908 |   { fix e::real
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 909 | assume e: "0 < e" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 910 | have cont_atx: "continuous (at x within S) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 911 | using x S contf by (simp add: continuous_on_eq_continuous_within) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 912 | then obtain d1 where d1: "d1>0" and d1_less: "\<And>y. \<lbrakk>y \<in> S; cmod (y - x) < d1\<rbrakk> \<Longrightarrow> cmod (f y - f x) < e/2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 913 | unfolding continuous_within Lim_within dist_norm using e | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 914 | by (drule_tac x="e/2" in spec) force | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 915 |     { fix y
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 916 | assume yx: "y \<noteq> x" and close: "cmod (y - x) < d1" and y: "y \<in> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 917 | have fxy: "f contour_integrable_on linepath x y" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 918 | using convex_contains_segment S x y | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 919 | by (blast intro!: contour_integrable_continuous_linepath continuous_on_subset [OF contf]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 920 | then obtain i where i: "(f has_contour_integral i) (linepath x y)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 921 | by (auto simp: contour_integrable_on_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 922 | then have "((\<lambda>w. f w - f x) has_contour_integral (i - f x * (y - x))) (linepath x y)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 923 | by (rule has_contour_integral_diff [OF _ has_contour_integral_const_linepath]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 924 | then have "cmod (i - f x * (y - x)) \<le> e / 2 * cmod (y - x)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 925 | proof (rule has_contour_integral_bound_linepath) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 926 | show "\<And>u. u \<in> closed_segment x y \<Longrightarrow> cmod (f u - f x) \<le> e / 2" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 927 | by (meson assms(3) close convex_contains_segment d1_less le_less_trans less_imp_le segment_bound1 subset_iff x y) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 928 | qed (use e in simp) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 929 | also have "\<dots> < e * cmod (y - x)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 930 | by (simp add: e yx) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 931 | finally have "cmod (?pathint x y - f x * (y-x)) / cmod (y-x) < e" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 932 | using i yx by (simp add: contour_integral_unique divide_less_eq) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 933 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 934 | then have "\<exists>d>0. \<forall>y\<in>S. y \<noteq> x \<and> cmod (y-x) < d \<longrightarrow> cmod (?pathint x y - f x * (y-x)) / cmod (y-x) < e" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 935 | using d1 by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 936 | } | 
| 72629 | 937 | then have "((\<lambda>y. (?pathint x y - f x * (y - x)) /\<^sub>R cmod (y - x)) \<longlongrightarrow> 0) (at x within S)" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 938 | by (simp add: Lim_within dist_norm inverse_eq_divide) | 
| 72629 | 939 | then have "((\<lambda>y. (1 / cmod (y - x)) *\<^sub>R (?pathint a y - (?pathint a x + f x * (y - x)))) \<longlongrightarrow> 0) | 
| 940 | (at x within S)" | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 941 | using linordered_field_no_ub | 
| 72629 | 942 | by (force simp: inverse_eq_divide [symmetric] eventually_at intro: Lim_transform [OF _ tendsto_eventually]) | 
| 943 | then show ?thesis | |
| 944 | by (simp add: has_field_derivative_def has_derivative_within bounded_linear_mult_right) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 945 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 946 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 947 | lemma contour_integral_convex_primitive: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 948 | assumes "convex S" "continuous_on S f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 949 | "\<And>a b c. \<lbrakk>a \<in> S; b \<in> S; c \<in> S\<rbrakk> \<Longrightarrow> (f has_contour_integral 0) (linepath a b +++ linepath b c +++ linepath c a)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 950 | obtains g where "\<And>x. x \<in> S \<Longrightarrow> (g has_field_derivative f x) (at x within S)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 951 | proof (cases "S={}")
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 952 | case False | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 953 | with assms that show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 954 | by (blast intro: triangle_contour_integrals_convex_primitive has_chain_integral_chain_integral3) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 955 | qed auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 956 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 957 | lemma holomorphic_convex_primitive: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 958 | fixes f :: "complex \<Rightarrow> complex" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 959 | assumes "convex S" "finite K" and contf: "continuous_on S f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 960 | and fd: "\<And>x. x \<in> interior S - K \<Longrightarrow> f field_differentiable at x" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 961 | obtains g where "\<And>x. x \<in> S \<Longrightarrow> (g has_field_derivative f x) (at x within S)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 962 | proof (rule contour_integral_convex_primitive [OF \<open>convex S\<close> contf Cauchy_theorem_triangle_cofinite]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 963 |   have *: "convex hull {a, b, c} \<subseteq> S" if "a \<in> S" "b \<in> S" "c \<in> S" for a b c
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 964 | by (simp add: \<open>convex S\<close> hull_minimal that) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 965 |   show "continuous_on (convex hull {a, b, c}) f" if "a \<in> S" "b \<in> S" "c \<in> S" for a b c
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 966 | by (meson "*" contf continuous_on_subset that) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 967 |   show "f field_differentiable at x" if "a \<in> S" "b \<in> S" "c \<in> S" "x \<in> interior (convex hull {a, b, c}) - K" for a b c x
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 968 | by (metis "*" DiffD1 DiffD2 DiffI fd interior_mono subsetCE that) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 969 | qed (use assms in \<open>force+\<close>) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 970 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 971 | lemma holomorphic_convex_primitive': | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 972 | fixes f :: "complex \<Rightarrow> complex" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 973 | assumes "convex S" and "open S" and "f holomorphic_on S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 974 | obtains g where "\<And>x. x \<in> S \<Longrightarrow> (g has_field_derivative f x) (at x within S)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 975 | proof (rule holomorphic_convex_primitive) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 976 |   fix x assume "x \<in> interior S - {}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 977 | with assms show "f field_differentiable at x" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 978 | by (auto intro!: holomorphic_on_imp_differentiable_at simp: interior_open) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 979 | qed (use assms in \<open>auto intro: holomorphic_on_imp_continuous_on\<close>) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 980 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 981 | corollary\<^marker>\<open>tag unimportant\<close> Cauchy_theorem_convex: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 982 | "\<lbrakk>continuous_on S f; convex S; finite K; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 983 | \<And>x. x \<in> interior S - K \<Longrightarrow> f field_differentiable at x; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 984 | valid_path g; path_image g \<subseteq> S; pathfinish g = pathstart g\<rbrakk> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 985 | \<Longrightarrow> (f has_contour_integral 0) g" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 986 | by (metis holomorphic_convex_primitive Cauchy_theorem_primitive) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 987 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 988 | corollary Cauchy_theorem_convex_simple: | 
| 72629 | 989 | assumes holf: "f holomorphic_on S" | 
| 990 | and "convex S" "valid_path g" "path_image g \<subseteq> S" "pathfinish g = pathstart g" | |
| 991 | shows "(f has_contour_integral 0) g" | |
| 992 | proof - | |
| 993 | have "f holomorphic_on interior S" | |
| 994 | by (meson holf holomorphic_on_subset interior_subset) | |
| 995 |   with Cauchy_theorem_convex [where K = "{}"] show ?thesis
 | |
| 996 | using assms | |
| 997 | by (metis Diff_empty finite.emptyI holomorphic_on_imp_continuous_on holomorphic_on_imp_differentiable_at open_interior) | |
| 998 | qed | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 999 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1000 | text\<open>In particular for a disc\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1001 | corollary\<^marker>\<open>tag unimportant\<close> Cauchy_theorem_disc: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1002 | "\<lbrakk>finite K; continuous_on (cball a e) f; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1003 | \<And>x. x \<in> ball a e - K \<Longrightarrow> f field_differentiable at x; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1004 | valid_path g; path_image g \<subseteq> cball a e; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1005 | pathfinish g = pathstart g\<rbrakk> \<Longrightarrow> (f has_contour_integral 0) g" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1006 | by (auto intro: Cauchy_theorem_convex) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1007 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1008 | corollary\<^marker>\<open>tag unimportant\<close> Cauchy_theorem_disc_simple: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1009 | "\<lbrakk>f holomorphic_on (ball a e); valid_path g; path_image g \<subseteq> ball a e; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1010 | pathfinish g = pathstart g\<rbrakk> \<Longrightarrow> (f has_contour_integral 0) g" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1011 | by (simp add: Cauchy_theorem_convex_simple) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1012 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1013 | subsection\<^marker>\<open>tag unimportant\<close> \<open>Generalize integrability to local primitives\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1014 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1015 | lemma contour_integral_local_primitive_lemma: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1016 | fixes f :: "complex\<Rightarrow>complex" | 
| 72629 | 1017 |   assumes gpd: "g piecewise_differentiable_on {a..b}"
 | 
| 1018 | and dh: "\<And>x. x \<in> S \<Longrightarrow> (f has_field_derivative f' x) (at x within S)" | |
| 1019 |       and gs: "\<And>x. x \<in> {a..b} \<Longrightarrow> g x \<in> S"
 | |
| 1020 | shows | |
| 1021 |     "(\<lambda>x. f' (g x) * vector_derivative g (at x within {a..b})) integrable_on {a..b}"
 | |
| 1022 | proof (cases "cbox a b = {}")
 | |
| 1023 | case False | |
| 1024 | then show ?thesis | |
| 1025 | unfolding integrable_on_def by (auto intro: assms contour_integral_primitive_lemma) | |
| 1026 | qed auto | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1027 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1028 | lemma contour_integral_local_primitive_any: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1029 | fixes f :: "complex \<Rightarrow> complex" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1030 |   assumes gpd: "g piecewise_differentiable_on {a..b}"
 | 
| 72629 | 1031 | and dh: "\<And>x. x \<in> S | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1032 | \<Longrightarrow> \<exists>d h. 0 < d \<and> | 
| 72629 | 1033 | (\<forall>y. norm(y - x) < d \<longrightarrow> (h has_field_derivative f y) (at y within S))" | 
| 1034 |       and gs: "\<And>x. x \<in> {a..b} \<Longrightarrow> g x \<in> S"
 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1035 |   shows "(\<lambda>x. f(g x) * vector_derivative g (at x)) integrable_on {a..b}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1036 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1037 |   { fix x
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1038 | assume x: "a \<le> x" "x \<le> b" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1039 | obtain d h where d: "0 < d" | 
| 72629 | 1040 | and h: "(\<And>y. norm(y - g x) < d \<Longrightarrow> (h has_field_derivative f y) (at y within S))" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1041 | using x gs dh by (metis atLeastAtMost_iff) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1042 |     have "continuous_on {a..b} g" using gpd piecewise_differentiable_on_def by blast
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1043 |     then obtain e where e: "e>0" and lessd: "\<And>x'. x' \<in> {a..b} \<Longrightarrow> \<bar>x' - x\<bar> < e \<Longrightarrow> cmod (g x' - g x) < d"
 | 
| 72629 | 1044 | using x d by (fastforce simp: dist_norm continuous_on_iff) | 
| 1045 |     have "\<exists>e>0. \<forall>u v. u \<le> x \<and> x \<le> v \<and> {u..v} \<subseteq> ball x e \<and> (u \<le> v \<longrightarrow> a \<le> u \<and> v \<le> b) \<longrightarrow>
 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1046 |                           (\<lambda>x. f (g x) * vector_derivative g (at x)) integrable_on {u..v}"
 | 
| 72629 | 1047 | proof - | 
| 1048 |       have "(\<lambda>x. f (g x) * vector_derivative g (at x within {u..v})) integrable_on {u..v}"
 | |
| 1049 |         if "u \<le> x" "x \<le> v" and ball: "{u..v} \<subseteq> ball x e" and auvb: "u \<le> v \<Longrightarrow> a \<le> u \<and> v \<le> b"
 | |
| 1050 | for u v | |
| 1051 | proof (rule contour_integral_local_primitive_lemma) | |
| 1052 |         show "g piecewise_differentiable_on {u..v}"
 | |
| 1053 | by (metis atLeastatMost_subset_iff gpd piecewise_differentiable_on_subset auvb) | |
| 1054 |         show "\<And>x. x \<in> g ` {u..v} \<Longrightarrow> (h has_field_derivative f x) (at x within g ` {u..v})"
 | |
| 1055 | using that by (force simp: ball_def dist_norm intro: lessd gs DERIV_subset [OF h]) | |
| 1056 | qed auto | |
| 1057 | then show ?thesis | |
| 1058 | using e integrable_on_localized_vector_derivative by blast | |
| 1059 | qed | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1060 | } then | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1061 | show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1062 | by (force simp: intro!: integrable_on_little_subintervals [of a b, simplified]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1063 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1064 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1065 | lemma contour_integral_local_primitive: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1066 | fixes f :: "complex \<Rightarrow> complex" | 
| 72629 | 1067 | assumes g: "valid_path g" "path_image g \<subseteq> S" | 
| 1068 | and dh: "\<And>x. x \<in> S | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1069 | \<Longrightarrow> \<exists>d h. 0 < d \<and> | 
| 72629 | 1070 | (\<forall>y. norm(y - x) < d \<longrightarrow> (h has_field_derivative f y) (at y within S))" | 
| 1071 | shows "f contour_integrable_on g" | |
| 1072 | proof - | |
| 1073 |   have "(\<lambda>x. f (g x) * vector_derivative g (at x)) integrable_on {0..1}"
 | |
| 1074 | using contour_integral_local_primitive_any [OF _ dh] g | |
| 1075 | unfolding path_image_def valid_path_def | |
| 1076 | by (metis (no_types, lifting) image_subset_iff piecewise_C1_imp_differentiable) | |
| 1077 | then show ?thesis | |
| 1078 | using contour_integrable_on by presburger | |
| 1079 | qed | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1080 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1081 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1082 | text\<open>In particular if a function is holomorphic\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1083 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1084 | lemma contour_integrable_holomorphic: | 
| 72629 | 1085 | assumes contf: "continuous_on S f" | 
| 1086 | and os: "open S" | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1087 | and k: "finite k" | 
| 72629 | 1088 | and g: "valid_path g" "path_image g \<subseteq> S" | 
| 1089 | and fcd: "\<And>x. x \<in> S - k \<Longrightarrow> f field_differentiable at x" | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1090 | shows "f contour_integrable_on g" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1091 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1092 |   { fix z
 | 
| 72629 | 1093 | assume z: "z \<in> S" | 
| 1094 | obtain d where "d>0" and d: "ball z d \<subseteq> S" using \<open>open S\<close> z | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1095 | by (auto simp: open_contains_ball) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1096 | then have contfb: "continuous_on (ball z d) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1097 | using contf continuous_on_subset by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1098 | obtain h where "\<forall>y\<in>ball z d. (h has_field_derivative f y) (at y within ball z d)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1099 | by (metis holomorphic_convex_primitive [OF convex_ball k contfb fcd] d interior_subset Diff_iff subsetD) | 
| 72629 | 1100 | then have "\<forall>y\<in>ball z d. (h has_field_derivative f y) (at y within S)" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1101 | by (metis open_ball at_within_open d os subsetCE) | 
| 72629 | 1102 | then have "\<exists>h. (\<forall>y. cmod (y - z) < d \<longrightarrow> (h has_field_derivative f y) (at y within S))" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1103 | by (force simp: dist_norm norm_minus_commute) | 
| 72629 | 1104 | then have "\<exists>d h. 0 < d \<and> (\<forall>y. cmod (y - z) < d \<longrightarrow> (h has_field_derivative f y) (at y within S))" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1105 | using \<open>0 < d\<close> by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1106 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1107 | then show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1108 | by (rule contour_integral_local_primitive [OF g]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1109 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1110 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1111 | lemma contour_integrable_holomorphic_simple: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1112 | assumes fh: "f holomorphic_on S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1113 | and os: "open S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1114 | and g: "valid_path g" "path_image g \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1115 | shows "f contour_integrable_on g" | 
| 72629 | 1116 | proof - | 
| 1117 | have "\<And>x. x \<in> S \<Longrightarrow> f field_differentiable at x" | |
| 1118 | using fh holomorphic_on_imp_differentiable_at os by blast | |
| 1119 | moreover have "continuous_on S f" | |
| 1120 | by (simp add: fh holomorphic_on_imp_continuous_on) | |
| 1121 | ultimately show ?thesis | |
| 1122 | by (metis Diff_empty contour_integrable_holomorphic finite.emptyI g os) | |
| 1123 | qed | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1124 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1125 | lemma continuous_on_inversediff: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1126 | fixes z:: "'a::real_normed_field" shows "z \<notin> S \<Longrightarrow> continuous_on S (\<lambda>w. 1 / (w - z))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1127 | by (rule continuous_intros | force)+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1128 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1129 | lemma contour_integrable_inversediff: | 
| 72629 | 1130 | assumes g: "valid_path g" | 
| 1131 | and notin: "z \<notin> path_image g" | |
| 1132 | shows "(\<lambda>w. 1 / (w-z)) contour_integrable_on g" | |
| 1133 | proof (rule contour_integrable_holomorphic_simple) | |
| 1134 |   show "(\<lambda>w. 1 / (w-z)) holomorphic_on UNIV - {z}"
 | |
| 1135 | by (auto simp: holomorphic_on_open open_delete intro!: derivative_eq_intros) | |
| 1136 | qed (use assms in auto) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1137 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1138 | text\<open>Key fact that path integral is the same for a "nearby" path. This is the | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1139 | main lemma for the homotopy form of Cauchy's theorem and is also useful | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1140 | if we want "without loss of generality" to assume some nice properties of a | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1141 | path (e.g. smoothness). It can also be used to define the integrals of | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1142 | analytic functions over arbitrary continuous paths. This is just done for | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1143 | winding numbers now. | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1144 | \<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1145 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1146 | text\<open>A technical definition to avoid duplication of similar proofs, | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1147 | for paths joined at the ends versus looping paths\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1148 | definition linked_paths :: "bool \<Rightarrow> (real \<Rightarrow> 'a) \<Rightarrow> (real \<Rightarrow> 'a::topological_space) \<Rightarrow> bool" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1149 | where "linked_paths atends g h == | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1150 | (if atends then pathstart h = pathstart g \<and> pathfinish h = pathfinish g | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1151 | else pathfinish g = pathstart g \<and> pathfinish h = pathstart h)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1152 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1153 | text\<open>This formulation covers two cases: \<^term>\<open>g\<close> and \<^term>\<open>h\<close> share their | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1154 | start and end points; \<^term>\<open>g\<close> and \<^term>\<open>h\<close> both loop upon themselves.\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1155 | lemma contour_integral_nearby: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1156 | assumes os: "open S" and p: "path p" "path_image p \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1157 | shows "\<exists>d. 0 < d \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1158 | (\<forall>g h. valid_path g \<and> valid_path h \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1159 |                   (\<forall>t \<in> {0..1}. norm(g t - p t) < d \<and> norm(h t - p t) < d) \<and>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1160 | linked_paths atends g h | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1161 | \<longrightarrow> path_image g \<subseteq> S \<and> path_image h \<subseteq> S \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1162 | (\<forall>f. f holomorphic_on S \<longrightarrow> contour_integral h f = contour_integral g f))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1163 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1164 | have "\<forall>z. \<exists>e. z \<in> path_image p \<longrightarrow> 0 < e \<and> ball z e \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1165 | using open_contains_ball os p(2) by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1166 | then obtain ee where ee: "\<And>z. z \<in> path_image p \<Longrightarrow> 0 < ee z \<and> ball z (ee z) \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1167 | by metis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1168 | define cover where "cover = (\<lambda>z. ball z (ee z/3)) ` (path_image p)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1169 | have "compact (path_image p)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1170 | by (metis p(1) compact_path_image) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1171 | moreover have "path_image p \<subseteq> (\<Union>c\<in>path_image p. ball c (ee c / 3))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1172 | using ee by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1173 | ultimately have "\<exists>D \<subseteq> cover. finite D \<and> path_image p \<subseteq> \<Union>D" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1174 | by (simp add: compact_eq_Heine_Borel cover_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1175 | then obtain D where D: "D \<subseteq> cover" "finite D" "path_image p \<subseteq> \<Union>D" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1176 | by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1177 |   then obtain k where k: "k \<subseteq> {0..1}" "finite k" and D_eq: "D = ((\<lambda>z. ball z (ee z / 3)) \<circ> p) ` k"
 | 
| 72629 | 1178 | unfolding cover_def path_image_def image_comp | 
| 1179 | by (meson finite_subset_image) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1180 |   then have kne: "k \<noteq> {}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1181 | using D by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1182 | have pi: "\<And>i. i \<in> k \<Longrightarrow> p i \<in> path_image p" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1183 | using k by (auto simp: path_image_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1184 | then have eepi: "\<And>i. i \<in> k \<Longrightarrow> 0 < ee((p i))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1185 | by (metis ee) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1186 | define e where "e = Min((ee \<circ> p) ` k)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1187 | have fin_eep: "finite ((ee \<circ> p) ` k)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1188 | using k by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1189 | have "0 < e" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1190 | using ee k by (simp add: kne e_def Min_gr_iff [OF fin_eep] eepi) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1191 |   have "uniformly_continuous_on {0..1} p"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1192 | using p by (simp add: path_def compact_uniformly_continuous) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1193 | then obtain d::real where d: "d>0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1194 |           and de: "\<And>x x'. \<bar>x' - x\<bar> < d \<Longrightarrow> x\<in>{0..1} \<Longrightarrow> x'\<in>{0..1} \<Longrightarrow> cmod (p x' - p x) < e/3"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1195 | unfolding uniformly_continuous_on_def dist_norm real_norm_def | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1196 | by (metis divide_pos_pos \<open>0 < e\<close> zero_less_numeral) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1197 | then obtain N::nat where N: "N>0" "inverse N < d" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1198 | using real_arch_inverse [of d] by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1199 | show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1200 | proof (intro exI conjI allI; clarify?) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1201 | show "e/3 > 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1202 | using \<open>0 < e\<close> by simp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1203 | fix g h | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1204 |     assume g: "valid_path g" and ghp: "\<forall>t\<in>{0..1}. cmod (g t - p t) < e / 3 \<and>  cmod (h t - p t) < e / 3"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1205 | and h: "valid_path h" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1206 | and joins: "linked_paths atends g h" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1207 |     { fix t::real
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1208 | assume t: "0 \<le> t" "t \<le> 1" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1209 | then obtain u where u: "u \<in> k" and ptu: "p t \<in> ball(p u) (ee(p u) / 3)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1210 | using \<open>path_image p \<subseteq> \<Union>D\<close> D_eq by (force simp: path_image_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1211 | then have ele: "e \<le> ee (p u)" using fin_eep | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1212 | by (simp add: e_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1213 | have "cmod (g t - p t) < e / 3" "cmod (h t - p t) < e / 3" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1214 | using ghp t by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1215 | with ele have "cmod (g t - p t) < ee (p u) / 3" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1216 | "cmod (h t - p t) < ee (p u) / 3" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1217 | by linarith+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1218 | then have "g t \<in> ball(p u) (ee(p u))" "h t \<in> ball(p u) (ee(p u))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1219 | using norm_diff_triangle_ineq [of "g t" "p t" "p t" "p u"] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1220 | norm_diff_triangle_ineq [of "h t" "p t" "p t" "p u"] ptu eepi u | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1221 | by (force simp: dist_norm ball_def norm_minus_commute)+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1222 | then have "g t \<in> S" "h t \<in> S" using ee u k | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1223 | by (auto simp: path_image_def ball_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1224 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1225 | then have ghs: "path_image g \<subseteq> S" "path_image h \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1226 | by (auto simp: path_image_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1227 | moreover | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1228 |     { fix f
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1229 | assume fhols: "f holomorphic_on S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1230 | then have fpa: "f contour_integrable_on g" "f contour_integrable_on h" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1231 | using g ghs h holomorphic_on_imp_continuous_on os contour_integrable_holomorphic_simple | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1232 | by blast+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1233 | have contf: "continuous_on S f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1234 | by (simp add: fhols holomorphic_on_imp_continuous_on) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1235 |       { fix z
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1236 | assume z: "z \<in> path_image p" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1237 | have "f holomorphic_on ball z (ee z)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1238 | using fhols ee z holomorphic_on_subset by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1239 | then have "\<exists>ff. (\<forall>w \<in> ball z (ee z). (ff has_field_derivative f w) (at w))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1240 |           using holomorphic_convex_primitive [of "ball z (ee z)" "{}" f, simplified]
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1241 | by (metis open_ball at_within_open holomorphic_on_def holomorphic_on_imp_continuous_on mem_ball) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1242 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1243 | then obtain ff where ff: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1244 | "\<And>z w. \<lbrakk>z \<in> path_image p; w \<in> ball z (ee z)\<rbrakk> \<Longrightarrow> (ff z has_field_derivative f w) (at w)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1245 | by metis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1246 |       { fix n
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1247 | assume n: "n \<le> N" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1248 | then have "contour_integral(subpath 0 (n/N) h) f - contour_integral(subpath 0 (n/N) g) f = | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1249 | contour_integral(linepath (g(n/N)) (h(n/N))) f - contour_integral(linepath (g 0) (h 0)) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1250 | proof (induct n) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1251 | case 0 show ?case by simp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1252 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1253 | case (Suc n) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1254 | obtain t where t: "t \<in> k" and "p (n/N) \<in> ball(p t) (ee(p t) / 3)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1255 | using \<open>path_image p \<subseteq> \<Union>D\<close> [THEN subsetD, where c="p (n/N)"] D_eq N Suc.prems | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1256 | by (force simp: path_image_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1257 | then have ptu: "cmod (p t - p (n/N)) < ee (p t) / 3" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1258 | by (simp add: dist_norm) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1259 | have e3le: "e/3 \<le> ee (p t) / 3" using fin_eep t | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1260 | by (simp add: e_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1261 |           { fix x
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1262 | assume x: "n/N \<le> x" "x \<le> (1 + n)/N" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1263 | then have nN01: "0 \<le> n/N" "(1 + n)/N \<le> 1" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1264 | using Suc.prems by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1265 | then have x01: "0 \<le> x" "x \<le> 1" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1266 | using x by linarith+ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1267 | have "cmod (p t - p x) < ee (p t) / 3 + e/3" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1268 | proof (rule norm_diff_triangle_less [OF ptu de]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1269 | show "\<bar>real n / real N - x\<bar> < d" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1270 | using x N by (auto simp: field_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1271 | qed (use x01 Suc.prems in auto) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1272 | then have ptx: "cmod (p t - p x) < 2*ee (p t)/3" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1273 | using e3le eepi [OF t] by simp | 
| 72629 | 1274 | have "cmod (p t - g x) < 2*ee (p t)/3 + e/3" | 
| 1275 | using ghp x01 | |
| 1276 | by (force simp add: norm_minus_commute intro!: norm_diff_triangle_less [OF ptx]) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1277 | also have "\<dots> \<le> ee (p t)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1278 | using e3le eepi [OF t] by simp | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1279 | finally have gg: "cmod (p t - g x) < ee (p t)" . | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1280 | have "cmod (p t - h x) < 2*ee (p t)/3 + e/3 " | 
| 72629 | 1281 | using ghp x01 | 
| 1282 | by (force simp add: norm_minus_commute intro!: norm_diff_triangle_less [OF ptx]) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1283 | also have "\<dots> \<le> ee (p t)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1284 | using e3le eepi [OF t] by simp | 
| 72629 | 1285 | finally have "cmod (p t - g x) < ee (p t)" "cmod (p t - h x) < ee (p t)" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1286 | using gg by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1287 | } note ptgh_ee = this | 
| 72629 | 1288 | have "closed_segment (g (n/N)) (h (n/N)) = path_image (linepath (h (n/N)) (g (n/N)))" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1289 | by (simp add: closed_segment_commute) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1290 | also have pi_hgn: "\<dots> \<subseteq> ball (p t) (ee (p t))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1291 | using ptgh_ee [of "n/N"] Suc.prems | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1292 | by (auto simp: field_simps dist_norm dest: segment_furthest_le [where y="p t"]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1293 | finally have gh_ns: "closed_segment (g (n/N)) (h (n/N)) \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1294 | using ee pi t by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1295 | have pi_ghn': "path_image (linepath (g ((1 + n) / N)) (h ((1 + n) / N))) \<subseteq> ball (p t) (ee (p t))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1296 | using ptgh_ee [of "(1+n)/N"] Suc.prems | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1297 | by (auto simp: field_simps dist_norm dest: segment_furthest_le [where y="p t"]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1298 | then have gh_n's: "closed_segment (g ((1 + n) / N)) (h ((1 + n) / N)) \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1299 | using \<open>N>0\<close> Suc.prems ee pi t | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1300 | by (auto simp: Path_Connected.path_image_join field_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1301 | have pi_subset_ball: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1302 | "path_image (subpath (n/N) ((1+n) / N) g +++ linepath (g ((1+n) / N)) (h ((1+n) / N)) +++ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1303 | subpath ((1+n) / N) (n/N) h +++ linepath (h (n/N)) (g (n/N))) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1304 | \<subseteq> ball (p t) (ee (p t))" | 
| 72629 | 1305 | proof (intro subset_path_image_join pi_hgn pi_ghn') | 
| 1306 | show "path_image (subpath (n/N) ((1+n) / N) g) \<subseteq> ball (p t) (ee (p t))" | |
| 1307 | "path_image (subpath ((1+n) / N) (n/N) h) \<subseteq> ball (p t) (ee (p t))" | |
| 1308 | using \<open>N>0\<close> Suc.prems | |
| 1309 | by (auto simp: path_image_subpath dist_norm field_simps ptgh_ee) | |
| 1310 | qed | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1311 | have pi0: "(f has_contour_integral 0) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1312 | (subpath (n/ N) ((Suc n)/N) g +++ linepath(g ((Suc n) / N)) (h((Suc n) / N)) +++ | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1313 | subpath ((Suc n) / N) (n/N) h +++ linepath(h (n/N)) (g (n/N)))" | 
| 72629 | 1314 | proof (rule Cauchy_theorem_primitive) | 
| 1315 | show "\<And>x. x \<in> ball (p t) (ee (p t)) | |
| 1316 | \<Longrightarrow> (ff (p t) has_field_derivative f x) (at x within ball (p t) (ee (p t)))" | |
| 1317 | by (metis ff open_ball at_within_open pi t) | |
| 1318 | qed (use Suc.prems pi_subset_ball in \<open>simp_all add: valid_path_subpath g h\<close>) | |
| 1319 | have fpa1: "f contour_integrable_on subpath (n/N) (real (Suc n) / real N) g" | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1320 | using Suc.prems by (simp add: contour_integrable_subpath g fpa) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1321 | have fpa2: "f contour_integrable_on linepath (g (real (Suc n) / real N)) (h (real (Suc n) / real N))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1322 | using gh_n's | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1323 | by (auto intro!: contour_integrable_continuous_linepath continuous_on_subset [OF contf]) | 
| 72629 | 1324 | have fpa3: "f contour_integrable_on linepath (h (n/N)) (g (n/N))" | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1325 | using gh_ns | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1326 | by (auto simp: closed_segment_commute intro!: contour_integrable_continuous_linepath continuous_on_subset [OF contf]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1327 | have eq0: "contour_integral (subpath (n/N) ((Suc n) / real N) g) f + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1328 | contour_integral (linepath (g ((Suc n) / N)) (h ((Suc n) / N))) f + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1329 | contour_integral (subpath ((Suc n) / N) (n/N) h) f + | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1330 | contour_integral (linepath (h (n/N)) (g (n/N))) f = 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1331 | using contour_integral_unique [OF pi0] Suc.prems | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1332 | by (simp add: g h fpa valid_path_subpath contour_integrable_subpath | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1333 | fpa1 fpa2 fpa3 algebra_simps del: of_nat_Suc) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1334 | have *: "\<And>hn he hn' gn gd gn' hgn ghn gh0 ghn'. | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1335 | \<lbrakk>hn - gn = ghn - gh0; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1336 | gd + ghn' + he + hgn = (0::complex); | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1337 | hn - he = hn'; gn + gd = gn'; hgn = -ghn\<rbrakk> \<Longrightarrow> hn' - gn' = ghn' - gh0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1338 | by (auto simp: algebra_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1339 | have "contour_integral (subpath 0 (n/N) h) f - contour_integral (subpath ((Suc n) / N) (n/N) h) f = | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1340 | contour_integral (subpath 0 (n/N) h) f + contour_integral (subpath (n/N) ((Suc n) / N) h) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1341 | unfolding reversepath_subpath [symmetric, of "((Suc n) / N)"] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1342 | using Suc.prems by (simp add: h fpa contour_integral_reversepath valid_path_subpath contour_integrable_subpath) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1343 | also have "\<dots> = contour_integral (subpath 0 ((Suc n) / N) h) f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1344 | using Suc.prems by (simp add: contour_integral_subpath_combine h fpa) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1345 | finally have pi0_eq: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1346 | "contour_integral (subpath 0 (n/N) h) f - contour_integral (subpath ((Suc n) / N) (n/N) h) f = | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1347 | contour_integral (subpath 0 ((Suc n) / N) h) f" . | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1348 | show ?case | 
| 72629 | 1349 | proof (rule * [OF Suc.hyps eq0 pi0_eq]) | 
| 1350 | show "contour_integral (subpath 0 (n/N) g) f + | |
| 1351 | contour_integral (subpath (n/N) ((Suc n) / N) g) f = | |
| 1352 | contour_integral (subpath 0 ((Suc n) / N) g) f" | |
| 1353 | using Suc.prems contour_integral_subpath_combine fpa(1) g by auto | |
| 1354 | show "contour_integral (linepath (h (n/N)) (g (n/N))) f = - contour_integral (linepath (g (n/N)) (h (n/N))) f" | |
| 1355 | by (metis contour_integral_unique fpa3 has_contour_integral_integral has_contour_integral_reverse_linepath) | |
| 1356 | qed (use Suc.prems in auto) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1357 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1358 | } note ind = this | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1359 | have "contour_integral h f = contour_integral g f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1360 | using ind [OF order_refl] N joins | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1361 | by (simp add: linked_paths_def pathstart_def pathfinish_def split: if_split_asm) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1362 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1363 | ultimately | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1364 | show "path_image g \<subseteq> S \<and> path_image h \<subseteq> S \<and> (\<forall>f. f holomorphic_on S \<longrightarrow> contour_integral h f = contour_integral g f)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1365 | by metis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1366 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1367 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1368 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1369 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1370 | lemma | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1371 | assumes "open S" "path p" "path_image p \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1372 | shows contour_integral_nearby_ends: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1373 | "\<exists>d. 0 < d \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1374 | (\<forall>g h. valid_path g \<and> valid_path h \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1375 |                     (\<forall>t \<in> {0..1}. norm(g t - p t) < d \<and> norm(h t - p t) < d) \<and>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1376 | pathstart h = pathstart g \<and> pathfinish h = pathfinish g | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1377 | \<longrightarrow> path_image g \<subseteq> S \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1378 | path_image h \<subseteq> S \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1379 | (\<forall>f. f holomorphic_on S | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1380 | \<longrightarrow> contour_integral h f = contour_integral g f))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1381 | and contour_integral_nearby_loops: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1382 | "\<exists>d. 0 < d \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1383 | (\<forall>g h. valid_path g \<and> valid_path h \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1384 |                     (\<forall>t \<in> {0..1}. norm(g t - p t) < d \<and> norm(h t - p t) < d) \<and>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1385 | pathfinish g = pathstart g \<and> pathfinish h = pathstart h | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1386 | \<longrightarrow> path_image g \<subseteq> S \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1387 | path_image h \<subseteq> S \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1388 | (\<forall>f. f holomorphic_on S | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1389 | \<longrightarrow> contour_integral h f = contour_integral g f))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1390 | using contour_integral_nearby [OF assms, where atends=True] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1391 | using contour_integral_nearby [OF assms, where atends=False] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1392 | unfolding linked_paths_def by simp_all | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1393 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1394 | lemma contour_integral_bound_exists: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1395 | assumes S: "open S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1396 | and g: "valid_path g" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1397 | and pag: "path_image g \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1398 | shows "\<exists>L. 0 < L \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1399 | (\<forall>f B. f holomorphic_on S \<and> (\<forall>z \<in> S. norm(f z) \<le> B) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1400 | \<longrightarrow> norm(contour_integral g f) \<le> L*B)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1401 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1402 | have "path g" using g | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1403 | by (simp add: valid_path_imp_path) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1404 | then obtain d::real and p | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1405 | where d: "0 < d" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1406 | and p: "polynomial_function p" "path_image p \<subseteq> S" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1407 | and pi: "\<And>f. f holomorphic_on S \<Longrightarrow> contour_integral g f = contour_integral p f" | 
| 72381 | 1408 | using contour_integral_nearby_ends [OF S \<open>path g\<close> pag] | 
| 72382 | 1409 | by (metis cancel_comm_monoid_add_class.diff_cancel g norm_zero path_approx_polynomial_function valid_path_polynomial_function) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1410 | then obtain p' where p': "polynomial_function p'" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1411 | "\<And>x. (p has_vector_derivative (p' x)) (at x)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1412 | by (blast intro: has_vector_derivative_polynomial_function that) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1413 |   then have "bounded(p' ` {0..1})"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1414 | using continuous_on_polymonial_function | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1415 | by (force simp: intro!: compact_imp_bounded compact_continuous_image) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1416 | then obtain L where L: "L>0" and nop': "\<And>x. \<lbrakk>0 \<le> x; x \<le> 1\<rbrakk> \<Longrightarrow> norm (p' x) \<le> L" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1417 | by (force simp: bounded_pos) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1418 |   { fix f B
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1419 | assume f: "f holomorphic_on S" and B: "\<And>z. z\<in>S \<Longrightarrow> cmod (f z) \<le> B" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1420 | then have "f contour_integrable_on p \<and> valid_path p" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1421 | using p S | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1422 | by (blast intro: valid_path_polynomial_function contour_integrable_holomorphic_simple holomorphic_on_imp_continuous_on) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1423 | moreover have "cmod (vector_derivative p (at x)) * cmod (f (p x)) \<le> L * B" if "0 \<le> x" "x \<le> 1" for x | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1424 | proof (rule mult_mono) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1425 | show "cmod (vector_derivative p (at x)) \<le> L" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1426 | by (metis nop' p'(2) that vector_derivative_at) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1427 | show "cmod (f (p x)) \<le> B" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1428 | by (metis B atLeastAtMost_iff imageI p(2) path_defs(4) subset_eq that) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1429 | qed (use \<open>L>0\<close> in auto) | 
| 72629 | 1430 | ultimately | 
| 1431 |     have "cmod (integral {0..1} (\<lambda>x. f (p x) * vector_derivative p (at x))) \<le> L * B"
 | |
| 1432 | by (intro order_trans [OF integral_norm_bound_integral]) | |
| 1433 | (auto simp: mult.commute norm_mult contour_integrable_on) | |
| 1434 | then have "cmod (contour_integral g f) \<le> L * B" | |
| 1435 | using contour_integral_integral f pi by presburger | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1436 | } then | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1437 | show ?thesis using \<open>L > 0\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1438 | by (intro exI[of _ L]) auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1439 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1440 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1441 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1442 | subsection\<open>Homotopy forms of Cauchy's theorem\<close> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1443 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1444 | lemma Cauchy_theorem_homotopic: | 
| 72629 | 1445 | assumes hom: "if atends then homotopic_paths S g h else homotopic_loops S g h" | 
| 1446 | and "open S" and f: "f holomorphic_on S" | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1447 | and vpg: "valid_path g" and vph: "valid_path h" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1448 | shows "contour_integral g f = contour_integral h f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1449 | proof - | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1450 | have pathsf: "linked_paths atends g h" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1451 | using hom by (auto simp: linked_paths_def homotopic_paths_imp_pathstart homotopic_paths_imp_pathfinish homotopic_loops_imp_loop) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1452 | obtain k :: "real \<times> real \<Rightarrow> complex" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1453 |     where contk: "continuous_on ({0..1} \<times> {0..1}) k"
 | 
| 72629 | 1454 |       and ks: "k ` ({0..1} \<times> {0..1}) \<subseteq> S"
 | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1455 | and k [simp]: "\<forall>x. k (0, x) = g x" "\<forall>x. k (1, x) = h x" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1456 |       and ksf: "\<forall>t\<in>{0..1}. linked_paths atends g (\<lambda>x. k (t, x))"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1457 | using hom pathsf by (auto simp: linked_paths_def homotopic_paths_def homotopic_loops_def homotopic_with_def split: if_split_asm) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1458 |   have ucontk: "uniformly_continuous_on ({0..1} \<times> {0..1}) k"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1459 | by (blast intro: compact_Times compact_uniformly_continuous [OF contk]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1460 |   { fix t::real assume t: "t \<in> {0..1}"
 | 
| 72629 | 1461 |     have "Pair t ` {0..1} \<subseteq> {0..1} \<times> {0..1}"
 | 
| 1462 | using t by force | |
| 1463 | then have pak: "path (k \<circ> (\<lambda>u. (t, u)))" | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1464 | unfolding path_def | 
| 72629 | 1465 | by (intro continuous_intros continuous_on_subset [OF contk])+ | 
| 1466 | have pik: "path_image (k \<circ> Pair t) \<subseteq> S" | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1467 | using ks t by (auto simp: path_image_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1468 | obtain e where "e>0" and e: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1469 | "\<And>g h. \<lbrakk>valid_path g; valid_path h; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1470 |                   \<forall>u\<in>{0..1}. cmod (g u - (k \<circ> Pair t) u) < e \<and> cmod (h u - (k \<circ> Pair t) u) < e;
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1471 | linked_paths atends g h\<rbrakk> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1472 | \<Longrightarrow> contour_integral h f = contour_integral g f" | 
| 72629 | 1473 | using contour_integral_nearby [OF \<open>open S\<close> pak pik, of atends] f by metis | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1474 | obtain d where "d>0" and d: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1475 |         "\<And>x x'. \<lbrakk>x \<in> {0..1} \<times> {0..1}; x' \<in> {0..1} \<times> {0..1}; norm (x'-x) < d\<rbrakk> \<Longrightarrow> norm (k x' - k x) < e/4"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1476 | by (rule uniformly_continuous_onE [OF ucontk, of "e/4"]) (auto simp: dist_norm \<open>e>0\<close>) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1477 |     { fix t1 t2
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1478 | assume t1: "0 \<le> t1" "t1 \<le> 1" and t2: "0 \<le> t2" "t2 \<le> 1" and ltd: "\<bar>t1 - t\<bar> < d" "\<bar>t2 - t\<bar> < d" | 
| 72629 | 1479 | have no2: "norm(g1 - kt) < e" if "norm(g1 - k1) < e/4" "norm(k1 - kt) < e/4" for g1 k1 kt :: complex | 
| 1480 | proof (rule norm_triangle_half_l) | |
| 1481 | show "cmod (g1 - k1) < e/2" "cmod (kt - k1) < e/2" | |
| 1482 | using \<open>e > 0\<close> that by (auto simp: norm_minus_commute intro: order_less_trans) | |
| 1483 | qed | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1484 | have "\<exists>d>0. \<forall>g1 g2. valid_path g1 \<and> valid_path g2 \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1485 |                           (\<forall>u\<in>{0..1}. cmod (g1 u - k (t1, u)) < d \<and> cmod (g2 u - k (t2, u)) < d) \<and>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1486 | linked_paths atends g1 g2 \<longrightarrow> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1487 | contour_integral g2 f = contour_integral g1 f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1488 | using t t1 t2 ltd \<open>e > 0\<close> | 
| 72629 | 1489 | by (rule_tac x="e/4" in exI) (auto intro!: e simp: d no2 simp del: less_divide_eq_numeral1) | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1490 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1491 | then have "\<exists>e. 0 < e \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1492 |               (\<forall>t1 t2. t1 \<in> {0..1} \<and> t2 \<in> {0..1} \<and> \<bar>t1 - t\<bar> < e \<and> \<bar>t2 - t\<bar> < e
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1493 | \<longrightarrow> (\<exists>d. 0 < d \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1494 | (\<forall>g1 g2. valid_path g1 \<and> valid_path g2 \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1495 |                        (\<forall>u \<in> {0..1}.
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1496 | norm(g1 u - k((t1,u))) < d \<and> norm(g2 u - k((t2,u))) < d) \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1497 | linked_paths atends g1 g2 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1498 | \<longrightarrow> contour_integral g2 f = contour_integral g1 f)))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1499 | by (rule_tac x=d in exI) (simp add: \<open>d > 0\<close>) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1500 | } | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1501 | then obtain ee where ee: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1502 |        "\<And>t. t \<in> {0..1} \<Longrightarrow> ee t > 0 \<and>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1503 |           (\<forall>t1 t2. t1 \<in> {0..1} \<longrightarrow> t2 \<in> {0..1} \<longrightarrow> \<bar>t1 - t\<bar> < ee t \<longrightarrow> \<bar>t2 - t\<bar> < ee t
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1504 | \<longrightarrow> (\<exists>d. 0 < d \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1505 | (\<forall>g1 g2. valid_path g1 \<and> valid_path g2 \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1506 |                    (\<forall>u \<in> {0..1}.
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1507 | norm(g1 u - k((t1,u))) < d \<and> norm(g2 u - k((t2,u))) < d) \<and> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1508 | linked_paths atends g1 g2 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1509 | \<longrightarrow> contour_integral g2 f = contour_integral g1 f)))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1510 | by metis | 
| 72629 | 1511 | note ee_rule = ee [THEN conjunct2, rule_format, of 0 0 0] | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1512 |   define C where "C = (\<lambda>t. ball t (ee t / 3)) ` {0..1}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1513 |   obtain C' where C': "C' \<subseteq> C" "finite C'" and C'01: "{0..1} \<subseteq> \<Union>C'"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1514 | proof (rule compactE [OF compact_interval]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1515 |     show "{0..1} \<subseteq> \<Union>C"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1516 | using ee [THEN conjunct1] by (auto simp: C_def dist_norm) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1517 | qed (use C_def in auto) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1518 |   define kk where "kk = {t \<in> {0..1}. ball t (ee t / 3) \<in> C'}"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1519 |   have kk01: "kk \<subseteq> {0..1}" by (auto simp: kk_def)
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1520 | define e where "e = Min (ee ` kk)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1521 | have C'_eq: "C' = (\<lambda>t. ball t (ee t / 3)) ` kk" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1522 | using C' by (auto simp: kk_def C_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1523 |   have ee_pos[simp]: "\<And>t. t \<in> {0..1} \<Longrightarrow> ee t > 0"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1524 | by (simp add: kk_def ee) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1525 | moreover have "finite kk" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1526 | using \<open>finite C'\<close> kk01 by (force simp: C'_eq inj_on_def ball_eq_ball_iff dest: ee_pos finite_imageD) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1527 |   moreover have "kk \<noteq> {}" using \<open>{0..1} \<subseteq> \<Union>C'\<close> C'_eq by force
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1528 | ultimately have "e > 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1529 | using finite_less_Inf_iff [of "ee ` kk" 0] kk01 by (force simp: e_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1530 | then obtain N::nat where "N > 0" and N: "1/N < e/3" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1531 | by (meson divide_pos_pos nat_approx_posE zero_less_Suc zero_less_numeral) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1532 | have e_le_ee: "\<And>i. i \<in> kk \<Longrightarrow> e \<le> ee i" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1533 | using \<open>finite kk\<close> by (simp add: e_def Min_le_iff [of "ee ` kk"]) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1534 |   have plus: "\<exists>t \<in> kk. x \<in> ball t (ee t / 3)" if "x \<in> {0..1}" for x
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1535 | using C' subsetD [OF C'01 that] unfolding C'_eq by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1536 | have [OF order_refl]: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1537 |       "\<exists>d. 0 < d \<and> (\<forall>j. valid_path j \<and> (\<forall>u \<in> {0..1}. norm(j u - k (n/N, u)) < d) \<and> linked_paths atends g j
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1538 | \<longrightarrow> contour_integral j f = contour_integral g f)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1539 | if "n \<le> N" for n | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1540 | using that | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1541 | proof (induct n) | 
| 72629 | 1542 | case 0 show ?case | 
| 1543 | using ee_rule | |
| 1544 | by clarsimp (metis diff_self norm_eq_zero vpg) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1545 | next | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1546 | case (Suc n) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1547 |     then have N01: "n/N \<in> {0..1}" "(Suc n)/N \<in> {0..1}"  by auto
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1548 | then obtain t where t: "t \<in> kk" "n/N \<in> ball t (ee t / 3)" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1549 | using plus [of "n/N"] by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1550 | then have nN_less: "\<bar>n/N - t\<bar> < ee t" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1551 | by (simp add: dist_norm del: less_divide_eq_numeral1) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1552 | have n'N_less: "\<bar>real (Suc n) / real N - t\<bar> < ee t" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1553 | using t N \<open>N > 0\<close> e_le_ee [of t] | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1554 | by (simp add: dist_norm add_divide_distrib abs_diff_less_iff del: less_divide_eq_numeral1) (simp add: field_simps) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1555 |     have t01: "t \<in> {0..1}" using \<open>kk \<subseteq> {0..1}\<close> \<open>t \<in> kk\<close> by blast
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1556 | obtain d1 where "d1 > 0" and d1: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1557 | "\<And>g1 g2. \<lbrakk>valid_path g1; valid_path g2; | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1558 |                    \<forall>u\<in>{0..1}. cmod (g1 u - k (n/N, u)) < d1 \<and> cmod (g2 u - k ((Suc n) / N, u)) < d1;
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1559 | linked_paths atends g1 g2\<rbrakk> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1560 | \<Longrightarrow> contour_integral g2 f = contour_integral g1 f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1561 | using ee [THEN conjunct2, rule_format, OF t01 N01 nN_less n'N_less] by fastforce | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1562 | have "n \<le> N" using Suc.prems by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1563 | with Suc.hyps | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1564 | obtain d2 where "d2 > 0" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1565 |       and d2: "\<And>j. \<lbrakk>valid_path j; \<forall>u\<in>{0..1}. cmod (j u - k (n/N, u)) < d2; linked_paths atends g j\<rbrakk>
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1566 | \<Longrightarrow> contour_integral j f = contour_integral g f" | 
| 72629 | 1567 | by auto | 
| 1568 |     have "Pair (n/ N) ` {0..1} \<subseteq> {0..1} \<times> {0..1}"
 | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1569 | using N01 by auto | 
| 72629 | 1570 |     then have "continuous_on {0..1} (k \<circ> (\<lambda>u. (n/N, u)))"
 | 
| 1571 | by (intro continuous_intros continuous_on_subset [OF contk]) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1572 | then have pkn: "path (\<lambda>u. k (n/N, u))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1573 | by (simp add: path_def) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1574 | have min12: "min d1 d2 > 0" by (simp add: \<open>0 < d1\<close> \<open>0 < d2\<close>) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1575 | obtain p where "polynomial_function p" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1576 | and psf: "pathstart p = pathstart (\<lambda>u. k (n/N, u))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1577 | "pathfinish p = pathfinish (\<lambda>u. k (n/N, u))" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1578 |         and pk_le:  "\<And>t. t\<in>{0..1} \<Longrightarrow> cmod (p t - k (n/N, t)) < min d1 d2"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1579 | using path_approx_polynomial_function [OF pkn min12] by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1580 | then have vpp: "valid_path p" using valid_path_polynomial_function by blast | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1581 | have lpa: "linked_paths atends g p" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1582 | by (metis (mono_tags, lifting) N01(1) ksf linked_paths_def pathfinish_def pathstart_def psf) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1583 | show ?case | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1584 | proof (intro exI; safe) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1585 | fix j | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1586 | assume "valid_path j" "linked_paths atends g j" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1587 |         and "\<forall>u\<in>{0..1}. cmod (j u - k (real (Suc n) / real N, u)) < min d1 d2"
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1588 | then have "contour_integral j f = contour_integral p f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1589 | using pk_le N01(1) ksf by (force intro!: vpp d1 simp add: linked_paths_def psf) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1590 | also have "... = contour_integral g f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1591 | using pk_le by (force intro!: vpp d2 lpa) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1592 | finally show "contour_integral j f = contour_integral g f" . | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1593 | qed (simp add: \<open>0 < d1\<close> \<open>0 < d2\<close>) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1594 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1595 | then obtain d where "0 < d" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1596 |                        "\<And>j. valid_path j \<and> (\<forall>u \<in> {0..1}. norm(j u - k (1,u)) < d) \<and> linked_paths atends g j
 | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1597 | \<Longrightarrow> contour_integral j f = contour_integral g f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1598 | using \<open>N>0\<close> by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1599 | then have "linked_paths atends g h \<Longrightarrow> contour_integral h f = contour_integral g f" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1600 | using \<open>N>0\<close> vph by fastforce | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1601 | then show ?thesis | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1602 | by (simp add: pathsf) | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1603 | qed | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1604 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1605 | proposition Cauchy_theorem_homotopic_paths: | 
| 72629 | 1606 | assumes hom: "homotopic_paths S g h" | 
| 1607 | and "open S" and f: "f holomorphic_on S" | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1608 | and vpg: "valid_path g" and vph: "valid_path h" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1609 | shows "contour_integral g f = contour_integral h f" | 
| 72629 | 1610 | using Cauchy_theorem_homotopic [of True S g h] assms by simp | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1611 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1612 | proposition Cauchy_theorem_homotopic_loops: | 
| 72629 | 1613 | assumes hom: "homotopic_loops S g h" | 
| 1614 | and "open S" and f: "f holomorphic_on S" | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1615 | and vpg: "valid_path g" and vph: "valid_path h" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1616 | shows "contour_integral g f = contour_integral h f" | 
| 72629 | 1617 | using Cauchy_theorem_homotopic [of False S g h] assms by simp | 
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1618 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1619 | lemma has_contour_integral_newpath: | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1620 | "\<lbrakk>(f has_contour_integral y) h; f contour_integrable_on g; contour_integral g f = contour_integral h f\<rbrakk> | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1621 | \<Longrightarrow> (f has_contour_integral y) g" | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1622 | using has_contour_integral_integral contour_integral_unique by auto | 
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1623 | |
| 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1624 | lemma Cauchy_theorem_null_homotopic: | 
| 72629 | 1625 | "\<lbrakk>f holomorphic_on S; open S; valid_path g; homotopic_loops S g (linepath a a)\<rbrakk> | 
| 1626 | \<Longrightarrow> (f has_contour_integral 0) g" | |
| 1627 | by (metis Cauchy_theorem_homotopic_loops contour_integrable_holomorphic_simple valid_path_linepath | |
| 1628 | contour_integral_trivial has_contour_integral_integral homotopic_loops_imp_subset) | |
| 71189 
954ee5acaae0
Split off new HOL-Complex_Analysis session from HOL-Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1629 | |
| 71201 
6617fb368a06
Reorganised HOL-Complex_Analysis
 Manuel Eberl <eberlm@in.tum.de> parents: 
71189diff
changeset | 1630 | end |