src/HOL/Complex_Analysis/Cauchy_Integral_Theorem.thy
author haftmann
Thu, 19 Jun 2025 17:15:40 +0200
changeset 82734 89347c0cc6a3
parent 82400 24d09a911713
permissions -rw-r--r--
treat map_filter similar to list_all, list_ex, list_ex1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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: 71189
diff 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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    48
proof (rule has_contour_integral_split)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    49
  show "midpoint a b - a = (1/2) *\<^sub>R (b - a)"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    50
  using assms by (auto simp: midpoint_def scaleR_conv_of_real)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    54
  assumes "continuous_on (closed_segment a b) f"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    55
  shows "contour_integral (linepath a b) f =
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    56
         contour_integral (linepath a (midpoint a b)) f + contour_integral (linepath (midpoint a b) b) f"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    57
proof (rule contour_integral_split)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    58
  show "midpoint a b - a = (1/2) *\<^sub>R (b - a)"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    59
  using assms by (auto simp: midpoint_def scaleR_conv_of_real)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    66
proof (rule Cauchy_theorem_primitive)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    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)"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    68
    by (auto intro!: derivative_eq_intros)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    72
  assumes "(f has_contour_integral i) (linepath a b +++ linepath b c +++ linepath c d)" 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    73
           (is "(f has_contour_integral i) ?g")
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    74
  shows "contour_integral (linepath a b) f + contour_integral (linepath b c) f + contour_integral (linepath c d) f = i"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    75
       (is "?lhs = _")
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    76
proof -
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    77
  have "f contour_integrable_on ?g"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    78
    using assms contour_integrable_on_def by blast
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    79
  then have "?lhs = contour_integral ?g f"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    80
    by (simp add: valid_path_join has_contour_integral_integrable)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    81
  then show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    82
    using assms contour_integral_unique by blast
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    86
  assumes "(f has_contour_integral i) (linepath a b +++ linepath b c +++ linepath c d +++ linepath d e)" 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    87
           (is "(f has_contour_integral i) ?g")
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    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"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    89
       (is "?lhs = _")
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    90
proof -
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    91
  have "f contour_integrable_on ?g"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    92
    using assms contour_integrable_on_def by blast
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    93
  then have "?lhs = contour_integral ?g f"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    94
    by (simp add: valid_path_join has_contour_integral_integrable)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    95
  then show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    96
    using assms contour_integral_unique by blast
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
    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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   144
  define pathint where "pathint x y \<equiv> contour_integral(linepath x y) f" for x y
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   145
  have *: "pathint a b + pathint b c + pathint c a =
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   146
          (pathint a c' + pathint c' b' + pathint b' a) +
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   147
          (pathint a' c' + pathint c' b + pathint b a') +
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   148
          (pathint a' c + pathint c b' + pathint b' a') +
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   149
          (pathint a' b' + pathint b' c' + pathint c' a')"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   156
  consider "e * K\<^sup>2 / 4 \<le> cmod (pathint a c' + pathint c' b' + pathint b' a)" |
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   157
           "e * K\<^sup>2 / 4 \<le> cmod (pathint a' c' + pathint c' b + pathint b a')" |
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   158
           "e * K\<^sup>2 / 4 \<le> cmod (pathint a' c + pathint c b' + pathint b' a')" |
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   159
           "e * K\<^sup>2 / 4 \<le> cmod (pathint a' b' + pathint b' c' + pathint c' a')"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   235
              contour_integral (linepath a b) (\<lambda>y. f y - f x - f' * (y-x)) +
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   236
              contour_integral (linepath b c) (\<lambda>y. f y - f x - f' * (y-x)) +
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   307
  proof
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   308
    show "\<And>n. Follows (fst (three.f (Suc n))) (fst (snd (three.f (Suc n))))
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   309
                      (snd (snd (three.f (Suc n)))) (fst (three.f n))
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   310
                     (fst (snd (three.f n))) (snd (snd (three.f n)))"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   311
         "\<And>n. At (fst (three.f n)) (fst (snd (three.f n))) (snd (snd (three.f n))) n"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   312
      using three.At three.Follows
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   313
      by (simp_all add: split_beta')
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   436
    case False
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   437
    show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   438
    proof (subst contour_integral_split [symmetric])
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   439
      show "b - a = (1/k) *\<^sub>R (c - a)"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   440
        using False c by force
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   441
      show "contour_integral (linepath a c) f + contour_integral (linepath c a) f = 0"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   442
        by (simp add: contour_integral_reverse_linepath fabc(3))
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   443
      show "continuous_on (closed_segment a c) f"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   444
        by (metis closed_segment_commute fabc(3))
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   463
                 contour_integral (linepath c b) f = 0"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   464
  proof (rule Cauchy_theorem_flat_lemma [of b a c f "1-k"])
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   465
    show "continuous_on (convex hull {b, a, c}) f"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   466
      by (simp add: f insert_commute)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   467
    show "c - b = (1 - k) *\<^sub>R (a - b)"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   468
      using c by (auto simp: algebra_simps)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   474
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   506
    have pi_eq_y: "pathint a b + pathint b c + pathint c a= y"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   547
        then have f_0_shrink: "pathint (shrink a) (shrink b) + pathint (shrink b) (shrink c) + pathint (shrink c) (shrink a) = 0"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   561
        proof (cases "x=0")
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   562
          case False
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   563
          with that show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   564
            using Cno [of u] mult_left_le_one_le [of "cmod u" x] le_less_trans norm_ge_zero by blast
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   576
            have "\<bar>1 - x\<bar> * cmod u < C" "\<bar>x\<bar> * cmod v < C"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   577
              using uv x by (auto intro!: less_C)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   578
            moreover have  "\<bar>x\<bar> * cmod d < C" "\<bar>1 - x\<bar> * cmod d < C"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   579
              using x d interior_subset by (auto intro!: less_C)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   586
              unfolding ll norm_mult scaleR_diff_right
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   591
            proof (intro add_mono [OF mult_mono])
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   592
              show "cmod (f (linepath (shrink u) (shrink v) x)) \<le> B"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   593
                using cmod_fuv x by blast
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   594
              have "B * (12 * (e * cmod (u - v))) \<le> 24 * e * C * B"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   595
                using e \<open>B>0\<close> diff_2C [of u v] uv by (auto simp: field_simps)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   596
              also have "\<dots> \<le> cmod y"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   597
                using \<open>C>0\<close> \<open>B>0\<close> e by (simp add: field_simps)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   598
              finally show "cmod (shrink v - shrink u - (v - u)) \<le> cmod y / 24 / C / B * 2 * C"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   599
                using \<open>0 < B\<close> \<open>0 < C\<close> by (simp add: cmod_shr mult_ac divide_simps)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   600
              have "cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) < cmod y / (24 * C)"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   601
                using x uv shr_uv cmod_less_dt
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   602
                by (auto simp: hull_inc intro: d1 interior_subset [THEN subsetD] linepath_in_convex_hull)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   603
              also have "\<dots> \<le> cmod y / cmod (v - u) / 12"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   604
                using False uv \<open>C>0\<close> diff_2C [of v u] ynz
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   605
                by (auto simp: field_split_simps hull_inc)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   606
              finally have "cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) \<le> cmod y / cmod (v - u) / 12"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   607
                by simp
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   608
              then show "cmod (v - u) * cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x))
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   609
                       \<le> 2 * C * (cmod y / 24 / C)"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   610
                using uv C  by (simp add: field_simps)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   622
          have "norm (pathint (shrink u) (shrink v) - pathint u v)
82400
24d09a911713 Inserted more of Manuel Eberl's material
paulson <lp15@cam.ac.uk>
parents: 78700
diff changeset
   623
                \<le> (B*(norm y /24/C/B)*2*C + (2*C)*(norm y/24/C)) * measure lborel (cbox 0 (1::real))"
71189
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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   628
            apply (simp_all add: pathint_def has_integral_diff has_contour_integral_linepath [symmetric] has_contour_integral_integral
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   645
          have "norm((pathint (shrink a) (shrink b) - pathint a b) +
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   651
          finally have "norm((pathint (shrink a) (shrink b) + pathint (shrink b) (shrink c) + pathint (shrink c) (shrink a)) -
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   769
  shows "convex hull {a,b,c} \<subseteq> S"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   770
proof -
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   771
  have "convex hull {b, c} \<subseteq> S"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   772
    using assms(2) segment_convex_hull by auto
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   774
    by (meson subs convexD convex_closed_segment ends_in_segment subsetCE)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   775
  then show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   776
    by (auto simp add: convex_hull_insert [of "{b,c}" a])
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   839
    using \<open>open S\<close> x 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   840
    by (force simp: dist_norm open_contains_ball inverse_eq_divide [symmetric] eventually_at intro:  Lim_transform [OF _ tendsto_eventually])
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   841
  then show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
78517
28c1f4f5335f Numerous minor tweaks and simplifications
paulson <lp15@cam.ac.uk>
parents: 72629
diff changeset
   845
text \<open>Existence of a primitive\<close>
71189
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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   866
  proof (intro exI ballI)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   867
    show "\<And>x. x \<in> S \<Longrightarrow> ((\<lambda>x. contour_integral (linepath a x) f) has_field_derivative f x) (at x)"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   868
      using "0" a a_cs contf has_chain_integral_chain_integral3 os triangle_contour_integrals_starlike_primitive by force
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   882
  using Cauchy_theorem_starlike [OF _ _ finite.emptyI]
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   939
  then have "((\<lambda>y. (1 / cmod (y - x)) *\<^sub>R (?pathint a y - (?pathint a x + f x * (y - x)))) \<longlongrightarrow> 0)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   942
    by (force simp: inverse_eq_divide [symmetric] eventually_at intro: Lim_transform [OF _ tendsto_eventually])
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   943
  then show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   989
  assumes holf: "f holomorphic_on S" 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   990
      and "convex S" "valid_path g" "path_image g \<subseteq> S" "pathfinish g = pathstart g"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   991
  shows "(f has_contour_integral 0) g"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   992
proof -
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   993
  have "f holomorphic_on interior S"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   994
    by (meson holf holomorphic_on_subset interior_subset)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   995
  with Cauchy_theorem_convex [where K = "{}"] show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   996
    using assms
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   997
    by (metis Diff_empty finite.emptyI holomorphic_on_imp_continuous_on holomorphic_on_imp_differentiable_at open_interior)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
   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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1017
  assumes gpd: "g piecewise_differentiable_on {a..b}"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1018
      and dh: "\<And>x. x \<in> S \<Longrightarrow> (f has_field_derivative f' x) (at x within S)"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1019
      and gs: "\<And>x. x \<in> {a..b} \<Longrightarrow> g x \<in> S"
78517
28c1f4f5335f Numerous minor tweaks and simplifications
paulson <lp15@cam.ac.uk>
parents: 72629
diff changeset
  1020
    shows "(\<lambda>x. f' (g x) * vector_derivative g (at x within {a..b})) integrable_on {a..b}"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1021
proof (cases "cbox a b = {}")
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1022
  case False
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1023
  then show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1024
    unfolding integrable_on_def by (auto intro: assms contour_integral_primitive_lemma)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1025
qed auto
71189
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1026
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1027
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
  1028
  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
  1029
  assumes gpd: "g piecewise_differentiable_on {a..b}"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1030
      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
  1031
               \<Longrightarrow> \<exists>d h. 0 < d \<and>
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1032
                         (\<forall>y. norm(y - x) < d \<longrightarrow> (h has_field_derivative f y) (at y within S))"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1033
      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
  1034
  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
  1035
proof -
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1036
  { fix x
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1037
    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
  1038
    obtain d h where d: "0 < d"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1039
               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
  1040
      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
  1041
    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
  1042
    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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1043
      using x d by (fastforce simp: dist_norm continuous_on_iff)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1044
    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
  1045
                          (\<lambda>x. f (g x) * vector_derivative g (at x)) integrable_on {u..v}"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1046
    proof -
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1047
      have "(\<lambda>x. f (g x) * vector_derivative g (at x within {u..v})) integrable_on {u..v}"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1048
        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"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1049
        for u v
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1050
      proof (rule contour_integral_local_primitive_lemma)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1051
        show "g piecewise_differentiable_on {u..v}"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1052
          by (metis atLeastatMost_subset_iff gpd piecewise_differentiable_on_subset auvb)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1053
        show "\<And>x. x \<in> g ` {u..v} \<Longrightarrow> (h has_field_derivative f x) (at x within g ` {u..v})"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1054
          using that by (force simp: ball_def dist_norm intro: lessd gs DERIV_subset [OF h])
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1055
      qed auto
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1056
      then show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1057
        using e integrable_on_localized_vector_derivative by blast
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1058
    qed
71189
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1059
  } then
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1060
  show ?thesis
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1061
    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
  1062
qed
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1063
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1064
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
  1065
  fixes f :: "complex \<Rightarrow> complex"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1066
  assumes g: "valid_path g" "path_image g \<subseteq> S"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1067
      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
  1068
               \<Longrightarrow> \<exists>d h. 0 < d \<and>
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1069
                         (\<forall>y. norm(y - x) < d \<longrightarrow> (h has_field_derivative f y) (at y within S))"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1070
    shows "f contour_integrable_on g"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1071
proof -
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1072
  have "(\<lambda>x. f (g x) * vector_derivative g (at x)) integrable_on {0..1}"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1073
    using contour_integral_local_primitive_any [OF _ dh] g
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1074
    unfolding path_image_def valid_path_def
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1075
    by (metis (no_types, lifting) image_subset_iff piecewise_C1_imp_differentiable)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1076
  then show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1077
    using contour_integrable_on by presburger
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1078
qed
71189
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1079
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
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
  1082
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1083
lemma contour_integrable_holomorphic:
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1084
  assumes contf: "continuous_on S f"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1085
      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
  1086
      and k: "finite k"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1087
      and g: "valid_path g" "path_image g \<subseteq> S"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1088
      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
  1089
    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
  1090
proof -
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1091
  { fix z
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1092
    assume z: "z \<in> S"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1093
    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
  1094
      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
  1095
    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
  1096
      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
  1097
    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
  1098
      by (metis holomorphic_convex_primitive [OF convex_ball k contfb fcd] d interior_subset Diff_iff subsetD)
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1099
    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
  1100
      by (metis open_ball at_within_open d os subsetCE)
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1101
    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
  1102
      by (force simp: dist_norm norm_minus_commute)
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1103
    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
  1104
      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
  1105
  }
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1106
  then show ?thesis
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1107
    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
  1108
qed
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1109
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1110
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
  1111
  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
  1112
      and os: "open S"
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1113
      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
  1114
    shows "f contour_integrable_on g"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1115
proof -
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1116
  have "\<And>x. x \<in> S \<Longrightarrow> f field_differentiable at x"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1117
    using fh holomorphic_on_imp_differentiable_at os by blast
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1118
  moreover have "continuous_on S f"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1119
    by (simp add: fh holomorphic_on_imp_continuous_on)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1120
  ultimately show ?thesis
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1121
    by (metis Diff_empty contour_integrable_holomorphic finite.emptyI g os)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1122
qed
71189
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1123
78700
4de5b127c124 Importing or moving a few more useful theorems
paulson <lp15@cam.ac.uk>
parents: 78517
diff changeset
  1124
lemma analytic_imp_contour_integrable:
4de5b127c124 Importing or moving a few more useful theorems
paulson <lp15@cam.ac.uk>
parents: 78517
diff changeset
  1125
  assumes "f analytic_on path_image p" "valid_path p"
4de5b127c124 Importing or moving a few more useful theorems
paulson <lp15@cam.ac.uk>
parents: 78517
diff changeset
  1126
  shows   "f contour_integrable_on p"
4de5b127c124 Importing or moving a few more useful theorems
paulson <lp15@cam.ac.uk>
parents: 78517
diff changeset
  1127
  by (meson analytic_on_holomorphic assms contour_integrable_holomorphic_simple)
4de5b127c124 Importing or moving a few more useful theorems
paulson <lp15@cam.ac.uk>
parents: 78517
diff changeset
  1128
71189
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1129
lemma continuous_on_inversediff:
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1130
  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
  1131
  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
  1132
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1133
lemma contour_integrable_inversediff:
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1134
  assumes g: "valid_path g"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1135
      and notin: "z \<notin> path_image g"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1136
    shows "(\<lambda>w. 1 / (w-z)) contour_integrable_on g"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1137
proof (rule contour_integrable_holomorphic_simple)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1138
  show "(\<lambda>w. 1 / (w-z)) holomorphic_on UNIV - {z}"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1139
    by (auto simp: holomorphic_on_open open_delete intro!: derivative_eq_intros)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1140
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
  1141
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1142
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
  1143
 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
  1144
 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
  1145
 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
  1146
 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
  1147
 winding numbers now.
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1148
\<close>
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1149
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1150
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
  1151
     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
  1152
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
  1153
  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
  1154
        (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
  1155
                   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
  1156
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1157
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
  1158
      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
  1159
lemma contour_integral_nearby:
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1160
  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
  1161
  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
  1162
            (\<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
  1163
                  (\<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
  1164
                  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
  1165
                  \<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
  1166
                      (\<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
  1167
proof -
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1168
  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
  1169
    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
  1170
  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
  1171
    by metis
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1172
  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
  1173
  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
  1174
    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
  1175
  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
  1176
    using ee by auto
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1177
  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
  1178
    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
  1179
  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
  1180
    by blast
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1181
  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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1182
    unfolding cover_def path_image_def image_comp 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1183
    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
  1184
  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
  1185
    using D by auto
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1186
  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
  1187
    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
  1188
  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
  1189
    by (metis ee)
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1190
  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
  1191
  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
  1192
    using k  by blast
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1193
  have "0 < e"
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1194
    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
  1195
  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
  1196
    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
  1197
  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
  1198
          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
  1199
    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
  1200
    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
  1201
  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
  1202
    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
  1203
  show ?thesis
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1204
  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
  1205
    show "e/3 > 0"
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1206
      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
  1207
    fix g h
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1208
    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
  1209
       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
  1210
       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
  1211
    { fix t::real
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1212
      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
  1213
      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
  1214
        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
  1215
      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
  1216
        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
  1217
      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
  1218
        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
  1219
      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
  1220
                    "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
  1221
        by linarith+
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> 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
  1223
        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
  1224
              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
  1225
        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
  1226
      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
  1227
        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
  1228
    }
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1229
    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
  1230
      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
  1231
    moreover
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1232
    { fix f
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1233
      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
  1234
      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
  1235
        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
  1236
        by blast+
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1237
      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
  1238
        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
  1239
      { fix z
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1240
        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
  1241
        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
  1242
          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
  1243
        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
  1244
          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
  1245
          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
  1246
      }
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1247
      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
  1248
            "\<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
  1249
        by metis
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1250
      { fix n
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1251
        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
  1252
        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
  1253
                   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
  1254
        proof (induct n)
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1255
          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
  1256
        next
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1257
          case (Suc n)
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1258
          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
  1259
            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
  1260
            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
  1261
          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
  1262
            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
  1263
          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
  1264
            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
  1265
          { fix x
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1266
            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
  1267
            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
  1268
              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
  1269
            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
  1270
              using x by linarith+
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1271
            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
  1272
            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
  1273
              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
  1274
                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
  1275
            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
  1276
            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
  1277
              using e3le eepi [OF t] by simp
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1278
            have "cmod (p t - g x) < 2*ee (p t)/3 + e/3"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1279
              using ghp x01 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1280
              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
  1281
            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
  1282
              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
  1283
            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
  1284
            have "cmod (p t - h x) < 2*ee (p t)/3 + e/3 "
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1285
              using ghp x01 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1286
              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
  1287
            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
  1288
              using e3le eepi [OF t] by simp
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1289
            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
  1290
              using gg by auto
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1291
          } note ptgh_ee = this
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1292
          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
  1293
            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
  1294
          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
  1295
            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
  1296
            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
  1297
          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
  1298
            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
  1299
          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
  1300
            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
  1301
            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
  1302
          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
  1303
            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
  1304
            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
  1305
          have pi_subset_ball:
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1306
                "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
  1307
                             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
  1308
                 \<subseteq> ball (p t) (ee (p t))"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1309
          proof (intro subset_path_image_join pi_hgn pi_ghn')
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1310
            show "path_image (subpath (n/N) ((1+n) / N) g) \<subseteq> ball (p t) (ee (p t))"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1311
                 "path_image (subpath ((1+n) / N) (n/N) h) \<subseteq> ball (p t) (ee (p t))"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1312
              using \<open>N>0\<close> Suc.prems
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1313
              by (auto simp: path_image_subpath dist_norm field_simps ptgh_ee)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1314
          qed
71189
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1315
          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
  1316
                       (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
  1317
                        subpath ((Suc n) / N) (n/N) h +++ linepath(h (n/N)) (g (n/N)))"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1318
          proof (rule Cauchy_theorem_primitive)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1319
            show "\<And>x. x \<in> ball (p t) (ee (p t)) 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1320
                      \<Longrightarrow> (ff (p t) has_field_derivative f x) (at x within ball (p t) (ee (p t)))"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1321
              by (metis ff open_ball at_within_open pi t)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1322
            qed (use Suc.prems pi_subset_ball in \<open>simp_all add: valid_path_subpath g h\<close>)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1323
          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
  1324
            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
  1325
          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
  1326
            using gh_n's
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1327
            by (auto intro!: contour_integrable_continuous_linepath continuous_on_subset [OF contf])
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1328
          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
  1329
            using gh_ns
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1330
            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
  1331
          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
  1332
                     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
  1333
                     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
  1334
                     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
  1335
            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
  1336
            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
  1337
                          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
  1338
          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
  1339
                    \<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
  1340
                     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
  1341
                     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
  1342
            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
  1343
          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
  1344
                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
  1345
            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
  1346
            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
  1347
          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
  1348
            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
  1349
          finally have pi0_eq:
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1350
               "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
  1351
                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
  1352
          show ?case
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1353
          proof (rule * [OF Suc.hyps eq0 pi0_eq])
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1354
            show "contour_integral (subpath 0 (n/N) g) f +
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1355
                  contour_integral (subpath (n/N) ((Suc n) / N) g) f =
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1356
                  contour_integral (subpath 0 ((Suc n) / N) g) f"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1357
              using Suc.prems contour_integral_subpath_combine fpa(1) g by auto
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1358
            show "contour_integral (linepath (h (n/N)) (g (n/N))) f = - contour_integral (linepath (g (n/N)) (h (n/N))) f"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1359
              by (metis contour_integral_unique fpa3 has_contour_integral_integral has_contour_integral_reverse_linepath)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1360
          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
  1361
      qed
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1362
      } note ind = this
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1363
      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
  1364
        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
  1365
        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
  1366
    }
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1367
    ultimately
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1368
    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
  1369
      by metis
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1370
  qed
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1371
qed
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1372
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1373
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1374
lemma
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1375
  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
  1376
    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
  1377
      "\<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
  1378
              (\<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
  1379
                    (\<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
  1380
                    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
  1381
                    \<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
  1382
                        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
  1383
                        (\<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
  1384
                            \<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
  1385
    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
  1386
      "\<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
  1387
              (\<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
  1388
                    (\<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
  1389
                    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
  1390
                    \<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
  1391
                        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
  1392
                        (\<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
  1393
                            \<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
  1394
  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
  1395
  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
  1396
  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
  1397
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1398
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
  1399
assumes S: "open S"
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1400
    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
  1401
    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
  1402
  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
  1403
             (\<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
  1404
               \<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
  1405
proof -
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1406
  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
  1407
    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
  1408
  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
  1409
    where d: "0 < d"
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1410
      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
  1411
      and pi: "\<And>f. f holomorphic_on S \<Longrightarrow> contour_integral g f = contour_integral p f"
72381
15ea20d8a4d6 A few more reversions
paulson <lp15@cam.ac.uk>
parents: 72379
diff changeset
  1412
    using contour_integral_nearby_ends [OF S \<open>path g\<close> pag]
72382
6cacbdb53637 still not quite fixed...
paulson <lp15@cam.ac.uk>
parents: 72381
diff changeset
  1413
    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
  1414
  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
  1415
    "\<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
  1416
    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
  1417
  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
  1418
    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
  1419
    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
  1420
  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
  1421
    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
  1422
  { fix f B
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1423
    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
  1424
    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
  1425
      using p S
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1426
      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
  1427
    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
  1428
    proof (rule mult_mono)
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1429
      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
  1430
        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
  1431
      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
  1432
        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
  1433
    qed (use \<open>L>0\<close> in auto)
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1434
    ultimately 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1435
    have "cmod (integral {0..1} (\<lambda>x. f (p x) * vector_derivative p (at x))) \<le> L * B"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1436
      by (intro order_trans [OF integral_norm_bound_integral])
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1437
         (auto simp: mult.commute norm_mult contour_integrable_on)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1438
    then have "cmod (contour_integral g f) \<le> L * B"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1439
      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
  1440
  } then
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1441
  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
  1442
    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
  1443
qed
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1444
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1445
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1446
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
  1447
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1448
lemma Cauchy_theorem_homotopic:
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1449
    assumes hom: "if atends then homotopic_paths S g h else homotopic_loops S g h"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1450
        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
  1451
        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
  1452
    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
  1453
proof -
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1454
  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
  1455
    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
  1456
  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
  1457
    where contk: "continuous_on ({0..1} \<times> {0..1}) k"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1458
      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
  1459
      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
  1460
      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
  1461
      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
  1462
  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
  1463
    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
  1464
  { fix t::real assume t: "t \<in> {0..1}"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1465
    have "Pair t ` {0..1} \<subseteq> {0..1} \<times> {0..1}"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1466
      using t by force
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1467
    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
  1468
      unfolding path_def
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1469
      by (intro continuous_intros continuous_on_subset [OF contk])+
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1470
    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
  1471
      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
  1472
    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
  1473
         "\<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
  1474
                  \<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
  1475
                  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
  1476
                 \<Longrightarrow> contour_integral h f = contour_integral g f"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1477
      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
  1478
    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
  1479
        "\<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
  1480
      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
  1481
    { fix t1 t2
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1482
      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
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1483
      have no2: "norm(g1 - kt) < e" if "norm(g1 - k1) < e/4" "norm(k1 - kt) < e/4" for g1 k1 kt :: complex
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1484
      proof (rule norm_triangle_half_l)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1485
        show "cmod (g1 - k1) < e/2" "cmod (kt - k1) < e/2"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1486
          using \<open>e > 0\<close> that by (auto simp: norm_minus_commute intro: order_less_trans)
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1487
      qed
71189
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1488
      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
  1489
                          (\<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
  1490
                          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
  1491
                          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
  1492
        using t t1 t2 ltd \<open>e > 0\<close>
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1493
        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
  1494
    }
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1495
    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
  1496
              (\<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
  1497
                \<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
  1498
                     (\<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
  1499
                       (\<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
  1500
                          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
  1501
                          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
  1502
                          \<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
  1503
      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
  1504
  }
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1505
  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
  1506
       "\<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
  1507
          (\<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
  1508
            \<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
  1509
                 (\<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
  1510
                   (\<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
  1511
                      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
  1512
                      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
  1513
                      \<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
  1514
    by metis
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1515
  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
  1516
  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
  1517
  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
  1518
  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
  1519
    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
  1520
      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
  1521
  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
  1522
  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
  1523
  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
  1524
  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
  1525
  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
  1526
    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
  1527
  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
  1528
    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
  1529
  moreover have "finite kk"
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1530
    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
  1531
  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
  1532
  ultimately have "e > 0"
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1533
    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
  1534
  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
  1535
    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
  1536
  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
  1537
    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
  1538
  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
  1539
    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
  1540
  have [OF order_refl]:
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1541
      "\<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
  1542
                        \<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
  1543
       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
  1544
  using that
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1545
  proof (induct n)
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1546
    case 0 show ?case 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1547
      using ee_rule 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1548
      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
  1549
  next
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1550
    case (Suc n)
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1551
    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
  1552
    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
  1553
      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
  1554
    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
  1555
      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
  1556
    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
  1557
      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
  1558
      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
  1559
    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
  1560
    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
  1561
        "\<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
  1562
                   \<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
  1563
                   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
  1564
                   \<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
  1565
      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
  1566
    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
  1567
    with Suc.hyps
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1568
    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
  1569
      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
  1570
                     \<Longrightarrow> contour_integral j f = contour_integral g f"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1571
      by auto
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1572
    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
  1573
      using N01 by auto
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1574
    then have "continuous_on {0..1} (k \<circ> (\<lambda>u. (n/N, u)))"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1575
      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
  1576
    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
  1577
      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
  1578
    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
  1579
    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
  1580
        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
  1581
                 "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
  1582
        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
  1583
      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
  1584
    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
  1585
    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
  1586
      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
  1587
    show ?case
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1588
    proof (intro exI; safe)
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1589
      fix j
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1590
      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
  1591
        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
  1592
      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
  1593
        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
  1594
      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
  1595
        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
  1596
      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
  1597
    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
  1598
  qed
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1599
  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
  1600
                       "\<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
  1601
                            \<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
  1602
    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
  1603
  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
  1604
    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
  1605
  then show ?thesis
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1606
    by (simp add: pathsf)
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1607
qed
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1608
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1609
proposition Cauchy_theorem_homotopic_paths:
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1610
    assumes hom: "homotopic_paths S g h"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1611
        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
  1612
        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
  1613
    shows "contour_integral g f = contour_integral h f"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1614
  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
  1615
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1616
proposition Cauchy_theorem_homotopic_loops:
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1617
    assumes hom: "homotopic_loops S g h"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1618
        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
  1619
        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
  1620
    shows "contour_integral g f = contour_integral h f"
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1621
  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
  1622
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1623
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
  1624
    "\<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
  1625
     \<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
  1626
  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
  1627
954ee5acaae0 Split off new HOL-Complex_Analysis session from HOL-Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1628
lemma Cauchy_theorem_null_homotopic:
72629
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1629
     "\<lbrakk>f holomorphic_on S; open S; valid_path g; homotopic_loops S g (linepath a a)\<rbrakk> 
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1630
      \<Longrightarrow> (f has_contour_integral 0) g"
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1631
  by (metis Cauchy_theorem_homotopic_loops contour_integrable_holomorphic_simple valid_path_linepath
a995071b8e6d de-applying and tidying
paulson <lp15@cam.ac.uk>
parents: 72382
diff changeset
  1632
            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
  1633
71201
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents: 71189
diff changeset
  1634
end