src/HOL/Complex_Analysis/Complex_Residues.thy
author nipkow
Fri, 11 Dec 2020 17:58:01 +0100
changeset 72884 50f18a822ee9
parent 71201 6617fb368a06
child 73924 df893af36eb4
permissions -rw-r--r--
merged
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
71201
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     1
theory Complex_Residues
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     2
  imports Complex_Singularities
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     3
begin
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     4
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     5
subsection \<open>Definition of residues\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     6
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     7
text\<open>Wenda Li and LC Paulson (2016). A Formal Proof of Cauchy's Residue Theorem.
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     8
    Interactive Theorem Proving\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     9
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    10
definition\<^marker>\<open>tag important\<close> residue :: "(complex \<Rightarrow> complex) \<Rightarrow> complex \<Rightarrow> complex" where
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    11
  "residue f z = (SOME int. \<exists>e>0. \<forall>\<epsilon>>0. \<epsilon><e
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    12
    \<longrightarrow> (f has_contour_integral 2*pi* \<i> *int) (circlepath z \<epsilon>))"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    13
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    14
lemma Eps_cong:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    15
  assumes "\<And>x. P x = Q x"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    16
  shows   "Eps P = Eps Q"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    17
  using ext[of P Q, OF assms] by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    18
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    19
lemma residue_cong:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    20
  assumes eq: "eventually (\<lambda>z. f z = g z) (at z)" and "z = z'"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    21
  shows   "residue f z = residue g z'"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    22
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    23
  from assms have eq': "eventually (\<lambda>z. g z = f z) (at z)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    24
    by (simp add: eq_commute)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    25
  let ?P = "\<lambda>f c e. (\<forall>\<epsilon>>0. \<epsilon> < e \<longrightarrow>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    26
   (f has_contour_integral of_real (2 * pi) * \<i> * c) (circlepath z \<epsilon>))"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    27
  have "residue f z = residue g z" unfolding residue_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    28
  proof (rule Eps_cong)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    29
    fix c :: complex
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    30
    have "\<exists>e>0. ?P g c e"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    31
      if "\<exists>e>0. ?P f c e" and "eventually (\<lambda>z. f z = g z) (at z)" for f g
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    32
    proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    33
      from that(1) obtain e where e: "e > 0" "?P f c e"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    34
        by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    35
      from that(2) obtain e' where e': "e' > 0" "\<And>z'. z' \<noteq> z \<Longrightarrow> dist z' z < e' \<Longrightarrow> f z' = g z'"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    36
        unfolding eventually_at by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    37
      have "?P g c (min e e')"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    38
      proof (intro allI exI impI, goal_cases)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    39
        case (1 \<epsilon>)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    40
        hence "(f has_contour_integral of_real (2 * pi) * \<i> * c) (circlepath z \<epsilon>)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    41
          using e(2) by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    42
        thus ?case
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    43
        proof (rule has_contour_integral_eq)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    44
          fix z' assume "z' \<in> path_image (circlepath z \<epsilon>)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    45
          hence "dist z' z < e'" and "z' \<noteq> z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    46
            using 1 by (auto simp: dist_commute)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    47
          with e'(2)[of z'] show "f z' = g z'" by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    48
        qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    49
      qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    50
      moreover from e and e' have "min e e' > 0" by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    51
      ultimately show ?thesis by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    52
    qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    53
    from this[OF _ eq] and this[OF _ eq']
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    54
      show "(\<exists>e>0. ?P f c e) \<longleftrightarrow> (\<exists>e>0. ?P g c e)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    55
      by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    56
  qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    57
  with assms show ?thesis by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    58
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    59
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    60
lemma contour_integral_circlepath_eq:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    61
  assumes "open s" and f_holo:"f holomorphic_on (s-{z})" and "0<e1" "e1\<le>e2"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    62
    and e2_cball:"cball z e2 \<subseteq> s"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    63
  shows
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    64
    "f contour_integrable_on circlepath z e1"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    65
    "f contour_integrable_on circlepath z e2"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    66
    "contour_integral (circlepath z e2) f = contour_integral (circlepath z e1) f"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    67
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    68
  define l where "l \<equiv> linepath (z+e2) (z+e1)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    69
  have [simp]:"valid_path l" "pathstart l=z+e2" "pathfinish l=z+e1" unfolding l_def by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    70
  have "e2>0" using \<open>e1>0\<close> \<open>e1\<le>e2\<close> by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    71
  have zl_img:"z\<notin>path_image l"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    72
    proof
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    73
      assume "z \<in> path_image l"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    74
      then have "e2 \<le> cmod (e2 - e1)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    75
        using segment_furthest_le[of z "z+e2" "z+e1" "z+e2",simplified] \<open>e1>0\<close> \<open>e2>0\<close> unfolding l_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    76
        by (auto simp add:closed_segment_commute)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    77
      thus False using \<open>e2>0\<close> \<open>e1>0\<close> \<open>e1\<le>e2\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    78
        apply (subst (asm) norm_of_real)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    79
        by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    80
    qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    81
  define g where "g \<equiv> circlepath z e2 +++ l +++ reversepath (circlepath z e1) +++ reversepath l"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    82
  show [simp]: "f contour_integrable_on circlepath z e2" "f contour_integrable_on (circlepath z e1)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    83
    proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    84
      show "f contour_integrable_on circlepath z e2"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    85
        apply (intro contour_integrable_continuous_circlepath[OF
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    86
                continuous_on_subset[OF holomorphic_on_imp_continuous_on[OF f_holo]]])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    87
        using \<open>e2>0\<close> e2_cball by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    88
      show "f contour_integrable_on (circlepath z e1)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    89
        apply (intro contour_integrable_continuous_circlepath[OF
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    90
                      continuous_on_subset[OF holomorphic_on_imp_continuous_on[OF f_holo]]])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    91
        using \<open>e1>0\<close> \<open>e1\<le>e2\<close> e2_cball by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    92
    qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    93
  have [simp]:"f contour_integrable_on l"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    94
    proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    95
      have "closed_segment (z + e2) (z + e1) \<subseteq> cball z e2" using \<open>e2>0\<close> \<open>e1>0\<close> \<open>e1\<le>e2\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    96
        by (intro closed_segment_subset,auto simp add:dist_norm)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    97
      hence "closed_segment (z + e2) (z + e1) \<subseteq> s - {z}" using zl_img e2_cball unfolding l_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    98
        by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    99
      then show "f contour_integrable_on l" unfolding l_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   100
        apply (intro contour_integrable_continuous_linepath[OF
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   101
                      continuous_on_subset[OF holomorphic_on_imp_continuous_on[OF f_holo]]])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   102
        by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   103
    qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   104
  let ?ig="\<lambda>g. contour_integral g f"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   105
  have "(f has_contour_integral 0) g"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   106
    proof (rule Cauchy_theorem_global[OF _ f_holo])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   107
      show "open (s - {z})" using \<open>open s\<close> by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   108
      show "valid_path g" unfolding g_def l_def by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   109
      show "pathfinish g = pathstart g" unfolding g_def l_def by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   110
    next
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   111
      have path_img:"path_image g \<subseteq> cball z e2"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   112
        proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   113
          have "closed_segment (z + e2) (z + e1) \<subseteq> cball z e2" using \<open>e2>0\<close> \<open>e1>0\<close> \<open>e1\<le>e2\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   114
            by (intro closed_segment_subset,auto simp add:dist_norm)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   115
          moreover have "sphere z \<bar>e1\<bar> \<subseteq> cball z e2" using \<open>e2>0\<close> \<open>e1\<le>e2\<close> \<open>e1>0\<close> by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   116
          ultimately show ?thesis unfolding g_def l_def using \<open>e2>0\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   117
            by (simp add: path_image_join closed_segment_commute)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   118
        qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   119
      show "path_image g \<subseteq> s - {z}"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   120
        proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   121
          have "z\<notin>path_image g" using zl_img
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   122
            unfolding g_def l_def by (auto simp add: path_image_join closed_segment_commute)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   123
          moreover note \<open>cball z e2 \<subseteq> s\<close> and path_img
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   124
          ultimately show ?thesis by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   125
        qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   126
      show "winding_number g w = 0" when"w \<notin> s - {z}" for w
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   127
        proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   128
          have "winding_number g w = 0" when "w\<notin>s" using that e2_cball
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   129
            apply (intro winding_number_zero_outside[OF _ _ _ _ path_img])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   130
            by (auto simp add:g_def l_def)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   131
          moreover have "winding_number g z=0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   132
            proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   133
              let ?Wz="\<lambda>g. winding_number g z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   134
              have "?Wz g = ?Wz (circlepath z e2) + ?Wz l + ?Wz (reversepath (circlepath z e1))
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   135
                  + ?Wz (reversepath l)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   136
                using \<open>e2>0\<close> \<open>e1>0\<close> zl_img unfolding g_def l_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   137
                by (subst winding_number_join,auto simp add:path_image_join closed_segment_commute)+
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   138
              also have "... = ?Wz (circlepath z e2) + ?Wz (reversepath (circlepath z e1))"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   139
                using zl_img
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   140
                apply (subst (2) winding_number_reversepath)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   141
                by (auto simp add:l_def closed_segment_commute)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   142
              also have "... = 0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   143
                proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   144
                  have "?Wz (circlepath z e2) = 1" using \<open>e2>0\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   145
                    by (auto intro: winding_number_circlepath_centre)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   146
                  moreover have "?Wz (reversepath (circlepath z e1)) = -1" using \<open>e1>0\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   147
                    apply (subst winding_number_reversepath)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   148
                    by (auto intro: winding_number_circlepath_centre)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   149
                  ultimately show ?thesis by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   150
                qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   151
              finally show ?thesis .
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   152
            qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   153
          ultimately show ?thesis using that by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   154
        qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   155
    qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   156
  then have "0 = ?ig g" using contour_integral_unique by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   157
  also have "... = ?ig (circlepath z e2) + ?ig l + ?ig (reversepath (circlepath z e1))
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   158
      + ?ig (reversepath l)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   159
    unfolding g_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   160
    by (auto simp add:contour_integrable_reversepath_eq)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   161
  also have "... = ?ig (circlepath z e2)  - ?ig (circlepath z e1)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   162
    by (auto simp add:contour_integral_reversepath)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   163
  finally show "contour_integral (circlepath z e2) f = contour_integral (circlepath z e1) f"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   164
    by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   165
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   166
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   167
lemma base_residue:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   168
  assumes "open s" "z\<in>s" "r>0" and f_holo:"f holomorphic_on (s - {z})"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   169
    and r_cball:"cball z r \<subseteq> s"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   170
  shows "(f has_contour_integral 2 * pi * \<i> * (residue f z)) (circlepath z r)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   171
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   172
  obtain e where "e>0" and e_cball:"cball z e \<subseteq> s"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   173
    using open_contains_cball[of s] \<open>open s\<close> \<open>z\<in>s\<close> by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   174
  define c where "c \<equiv> 2 * pi * \<i>"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   175
  define i where "i \<equiv> contour_integral (circlepath z e) f / c"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   176
  have "(f has_contour_integral c*i) (circlepath z \<epsilon>)" when "\<epsilon>>0" "\<epsilon><e" for \<epsilon>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   177
    proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   178
      have "contour_integral (circlepath z e) f = contour_integral (circlepath z \<epsilon>) f"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   179
          "f contour_integrable_on circlepath z \<epsilon>"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   180
          "f contour_integrable_on circlepath z e"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   181
        using \<open>\<epsilon><e\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   182
        by (intro contour_integral_circlepath_eq[OF \<open>open s\<close> f_holo \<open>\<epsilon>>0\<close> _ e_cball],auto)+
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   183
      then show ?thesis unfolding i_def c_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   184
        by (auto intro:has_contour_integral_integral)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   185
    qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   186
  then have "\<exists>e>0. \<forall>\<epsilon>>0. \<epsilon><e \<longrightarrow> (f has_contour_integral c * (residue f z)) (circlepath z \<epsilon>)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   187
    unfolding residue_def c_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   188
    apply (rule_tac someI[of _ i],intro  exI[where x=e])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   189
    by (auto simp add:\<open>e>0\<close> c_def)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   190
  then obtain e' where "e'>0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   191
      and e'_def:"\<forall>\<epsilon>>0. \<epsilon><e' \<longrightarrow> (f has_contour_integral c * (residue f z)) (circlepath z \<epsilon>)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   192
    by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   193
  let ?int="\<lambda>e. contour_integral (circlepath z e) f"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   194
  define  \<epsilon> where "\<epsilon> \<equiv> Min {r,e'} / 2"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   195
  have "\<epsilon>>0" "\<epsilon>\<le>r" "\<epsilon><e'" using \<open>r>0\<close> \<open>e'>0\<close> unfolding \<epsilon>_def by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   196
  have "(f has_contour_integral c * (residue f z)) (circlepath z \<epsilon>)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   197
    using e'_def[rule_format,OF \<open>\<epsilon>>0\<close> \<open>\<epsilon><e'\<close>] .
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   198
  then show ?thesis unfolding c_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   199
    using contour_integral_circlepath_eq[OF \<open>open s\<close> f_holo \<open>\<epsilon>>0\<close> \<open>\<epsilon>\<le>r\<close> r_cball]
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   200
    by (auto elim: has_contour_integral_eqpath[of _ _ "circlepath z \<epsilon>" "circlepath z r"])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   201
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   202
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   203
lemma residue_holo:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   204
  assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   205
  shows "residue f z = 0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   206
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   207
  define c where "c \<equiv> 2 * pi * \<i>"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   208
  obtain e where "e>0" and e_cball:"cball z e \<subseteq> s" using \<open>open s\<close> \<open>z\<in>s\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   209
    using open_contains_cball_eq by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   210
  have "(f has_contour_integral c*residue f z) (circlepath z e)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   211
    using f_holo
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   212
    by (auto intro: base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c_def])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   213
  moreover have "(f has_contour_integral 0) (circlepath z e)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   214
    using f_holo e_cball \<open>e>0\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   215
    by (auto intro: Cauchy_theorem_convex_simple[of _ "cball z e"])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   216
  ultimately have "c*residue f z =0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   217
    using has_contour_integral_unique by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   218
  thus ?thesis unfolding c_def  by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   219
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   220
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   221
lemma residue_const:"residue (\<lambda>_. c) z = 0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   222
  by (intro residue_holo[of "UNIV::complex set"],auto intro:holomorphic_intros)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   223
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   224
lemma residue_add:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   225
  assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   226
      and g_holo:"g holomorphic_on s - {z}"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   227
  shows "residue (\<lambda>z. f z + g z) z= residue f z + residue g z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   228
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   229
  define c where "c \<equiv> 2 * pi * \<i>"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   230
  define fg where "fg \<equiv> (\<lambda>z. f z+g z)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   231
  obtain e where "e>0" and e_cball:"cball z e \<subseteq> s" using \<open>open s\<close> \<open>z\<in>s\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   232
    using open_contains_cball_eq by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   233
  have "(fg has_contour_integral c * residue fg z) (circlepath z e)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   234
    unfolding fg_def using f_holo g_holo
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   235
    apply (intro base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c_def])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   236
    by (auto intro:holomorphic_intros)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   237
  moreover have "(fg has_contour_integral c*residue f z + c* residue g z) (circlepath z e)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   238
    unfolding fg_def using f_holo g_holo
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   239
    by (auto intro: has_contour_integral_add base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c_def])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   240
  ultimately have "c*(residue f z + residue g z) = c * residue fg z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   241
    using has_contour_integral_unique by (auto simp add:distrib_left)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   242
  thus ?thesis unfolding fg_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   243
    by (auto simp add:c_def)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   244
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   245
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   246
lemma residue_lmul:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   247
  assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   248
  shows "residue (\<lambda>z. c * (f z)) z= c * residue f z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   249
proof (cases "c=0")
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   250
  case True
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   251
  thus ?thesis using residue_const by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   252
next
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   253
  case False
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   254
  define c' where "c' \<equiv> 2 * pi * \<i>"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   255
  define f' where "f' \<equiv> (\<lambda>z. c * (f z))"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   256
  obtain e where "e>0" and e_cball:"cball z e \<subseteq> s" using \<open>open s\<close> \<open>z\<in>s\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   257
    using open_contains_cball_eq by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   258
  have "(f' has_contour_integral c' * residue f' z) (circlepath z e)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   259
    unfolding f'_def using f_holo
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   260
    apply (intro base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c'_def])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   261
    by (auto intro:holomorphic_intros)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   262
  moreover have "(f' has_contour_integral c * (c' * residue f z)) (circlepath z e)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   263
    unfolding f'_def using f_holo
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   264
    by (auto intro: has_contour_integral_lmul
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   265
      base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c'_def])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   266
  ultimately have "c' * residue f' z  = c * (c' * residue f z)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   267
    using has_contour_integral_unique by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   268
  thus ?thesis unfolding f'_def c'_def using False
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   269
    by (auto simp add:field_simps)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   270
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   271
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   272
lemma residue_rmul:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   273
  assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   274
  shows "residue (\<lambda>z. (f z) * c) z= residue f z * c"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   275
using residue_lmul[OF assms,of c] by (auto simp add:algebra_simps)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   276
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   277
lemma residue_div:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   278
  assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   279
  shows "residue (\<lambda>z. (f z) / c) z= residue f z / c "
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   280
using residue_lmul[OF assms,of "1/c"] by (auto simp add:algebra_simps)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   281
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   282
lemma residue_neg:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   283
  assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   284
  shows "residue (\<lambda>z. - (f z)) z= - residue f z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   285
using residue_lmul[OF assms,of "-1"] by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   286
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   287
lemma residue_diff:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   288
  assumes "open s" "z \<in> s" and f_holo: "f holomorphic_on s - {z}"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   289
      and g_holo:"g holomorphic_on s - {z}"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   290
  shows "residue (\<lambda>z. f z - g z) z= residue f z - residue g z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   291
using residue_add[OF assms(1,2,3),of "\<lambda>z. - g z"] residue_neg[OF assms(1,2,4)]
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   292
by (auto intro:holomorphic_intros g_holo)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   293
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   294
lemma residue_simple:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   295
  assumes "open s" "z\<in>s" and f_holo:"f holomorphic_on s"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   296
  shows "residue (\<lambda>w. f w / (w - z)) z = f z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   297
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   298
  define c where "c \<equiv> 2 * pi * \<i>"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   299
  define f' where "f' \<equiv> \<lambda>w. f w / (w - z)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   300
  obtain e where "e>0" and e_cball:"cball z e \<subseteq> s" using \<open>open s\<close> \<open>z\<in>s\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   301
    using open_contains_cball_eq by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   302
  have "(f' has_contour_integral c * f z) (circlepath z e)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   303
    unfolding f'_def c_def using \<open>e>0\<close> f_holo e_cball
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   304
    by (auto intro!: Cauchy_integral_circlepath_simple holomorphic_intros)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   305
  moreover have "(f' has_contour_integral c * residue f' z) (circlepath z e)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   306
    unfolding f'_def using f_holo
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   307
    apply (intro base_residue[OF \<open>open s\<close> \<open>z\<in>s\<close> \<open>e>0\<close> _ e_cball,folded c_def])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   308
    by (auto intro!:holomorphic_intros)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   309
  ultimately have "c * f z = c * residue f' z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   310
    using has_contour_integral_unique by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   311
  thus ?thesis unfolding c_def f'_def  by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   312
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   313
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   314
lemma residue_simple':
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   315
  assumes s: "open s" "z \<in> s" and holo: "f holomorphic_on (s - {z})"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   316
      and lim: "((\<lambda>w. f w * (w - z)) \<longlongrightarrow> c) (at z)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   317
  shows   "residue f z = c"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   318
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   319
  define g where "g = (\<lambda>w. if w = z then c else f w * (w - z))"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   320
  from holo have "(\<lambda>w. f w * (w - z)) holomorphic_on (s - {z})" (is "?P")
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   321
    by (force intro: holomorphic_intros)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   322
  also have "?P \<longleftrightarrow> g holomorphic_on (s - {z})"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   323
    by (intro holomorphic_cong refl) (simp_all add: g_def)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   324
  finally have *: "g holomorphic_on (s - {z})" .
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   325
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   326
  note lim
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   327
  also have "(\<lambda>w. f w * (w - z)) \<midarrow>z\<rightarrow> c \<longleftrightarrow> g \<midarrow>z\<rightarrow> g z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   328
    by (intro filterlim_cong refl) (simp_all add: g_def [abs_def] eventually_at_filter)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   329
  finally have **: "g \<midarrow>z\<rightarrow> g z" .
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   330
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   331
  have g_holo: "g holomorphic_on s"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   332
    by (rule no_isolated_singularity'[where K = "{z}"])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   333
       (insert assms * **, simp_all add: at_within_open_NO_MATCH)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   334
  from s and this have "residue (\<lambda>w. g w / (w - z)) z = g z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   335
    by (rule residue_simple)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   336
  also have "\<forall>\<^sub>F za in at z. g za / (za - z) = f za"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   337
    unfolding eventually_at by (auto intro!: exI[of _ 1] simp: field_simps g_def)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   338
  hence "residue (\<lambda>w. g w / (w - z)) z = residue f z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   339
    by (intro residue_cong refl)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   340
  finally show ?thesis
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   341
    by (simp add: g_def)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   342
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   343
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   344
lemma residue_holomorphic_over_power:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   345
  assumes "open A" "z0 \<in> A" "f holomorphic_on A"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   346
  shows   "residue (\<lambda>z. f z / (z - z0) ^ Suc n) z0 = (deriv ^^ n) f z0 / fact n"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   347
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   348
  let ?f = "\<lambda>z. f z / (z - z0) ^ Suc n"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   349
  from assms(1,2) obtain r where r: "r > 0" "cball z0 r \<subseteq> A"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   350
    by (auto simp: open_contains_cball)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   351
  have "(?f has_contour_integral 2 * pi * \<i> * residue ?f z0) (circlepath z0 r)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   352
    using r assms by (intro base_residue[of A]) (auto intro!: holomorphic_intros)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   353
  moreover have "(?f has_contour_integral 2 * pi * \<i> / fact n * (deriv ^^ n) f z0) (circlepath z0 r)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   354
    using assms r
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   355
    by (intro Cauchy_has_contour_integral_higher_derivative_circlepath)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   356
       (auto intro!: holomorphic_on_subset[OF assms(3)] holomorphic_on_imp_continuous_on)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   357
  ultimately have "2 * pi * \<i> * residue ?f z0 = 2 * pi * \<i> / fact n * (deriv ^^ n) f z0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   358
    by (rule has_contour_integral_unique)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   359
  thus ?thesis by (simp add: field_simps)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   360
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   361
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   362
lemma residue_holomorphic_over_power':
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   363
  assumes "open A" "0 \<in> A" "f holomorphic_on A"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   364
  shows   "residue (\<lambda>z. f z / z ^ Suc n) 0 = (deriv ^^ n) f 0 / fact n"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   365
  using residue_holomorphic_over_power[OF assms] by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   366
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   367
theorem residue_fps_expansion_over_power_at_0:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   368
  assumes "f has_fps_expansion F"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   369
  shows   "residue (\<lambda>z. f z / z ^ Suc n) 0 = fps_nth F n"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   370
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   371
  from has_fps_expansion_imp_holomorphic[OF assms] guess s . note s = this
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   372
  have "residue (\<lambda>z. f z / (z - 0) ^ Suc n) 0 = (deriv ^^ n) f 0 / fact n"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   373
    using assms s unfolding has_fps_expansion_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   374
    by (intro residue_holomorphic_over_power[of s]) (auto simp: zero_ereal_def)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   375
  also from assms have "\<dots> = fps_nth F n"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   376
    by (subst fps_nth_fps_expansion) auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   377
  finally show ?thesis by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   378
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   379
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   380
lemma residue_pole_order:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   381
  fixes f::"complex \<Rightarrow> complex" and z::complex
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   382
  defines "n \<equiv> nat (- zorder f z)" and "h \<equiv> zor_poly f z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   383
  assumes f_iso:"isolated_singularity_at f z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   384
    and pole:"is_pole f z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   385
  shows "residue f z = ((deriv ^^ (n - 1)) h z / fact (n-1))"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   386
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   387
  define g where "g \<equiv> \<lambda>x. if x=z then 0 else inverse (f x)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   388
  obtain e where [simp]:"e>0" and f_holo:"f holomorphic_on ball z e - {z}"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   389
    using f_iso analytic_imp_holomorphic unfolding isolated_singularity_at_def by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   390
  obtain r where "0 < n" "0 < r" and r_cball:"cball z r \<subseteq> ball z e" and h_holo: "h holomorphic_on cball z r"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   391
      and h_divide:"(\<forall>w\<in>cball z r. (w\<noteq>z \<longrightarrow> f w = h w / (w - z) ^ n) \<and> h w \<noteq> 0)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   392
  proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   393
    obtain r where r:"zorder f z < 0" "h z \<noteq> 0" "r>0" "cball z r \<subseteq> ball z e" "h holomorphic_on cball z r"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   394
        "(\<forall>w\<in>cball z r - {z}. f w = h w / (w - z) ^ n \<and> h w \<noteq> 0)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   395
      using zorder_exist_pole[OF f_holo,simplified,OF \<open>is_pole f z\<close>,folded n_def h_def] by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   396
    have "n>0" using \<open>zorder f z < 0\<close> unfolding n_def by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   397
    moreover have "(\<forall>w\<in>cball z r. (w\<noteq>z \<longrightarrow> f w = h w / (w - z) ^ n) \<and> h w \<noteq> 0)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   398
      using \<open>h z\<noteq>0\<close> r(6) by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   399
    ultimately show ?thesis using r(3,4,5) that by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   400
  qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   401
  have r_nonzero:"\<And>w. w \<in> ball z r - {z} \<Longrightarrow> f w \<noteq> 0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   402
    using h_divide by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   403
  define c where "c \<equiv> 2 * pi * \<i>"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   404
  define der_f where "der_f \<equiv> ((deriv ^^ (n - 1)) h z / fact (n-1))"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   405
  define h' where "h' \<equiv> \<lambda>u. h u / (u - z) ^ n"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   406
  have "(h' has_contour_integral c / fact (n - 1) * (deriv ^^ (n - 1)) h z) (circlepath z r)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   407
    unfolding h'_def
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   408
    proof (rule Cauchy_has_contour_integral_higher_derivative_circlepath[of z r h z "n-1",
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   409
        folded c_def Suc_pred'[OF \<open>n>0\<close>]])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   410
      show "continuous_on (cball z r) h" using holomorphic_on_imp_continuous_on h_holo by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   411
      show "h holomorphic_on ball z r" using h_holo by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   412
      show " z \<in> ball z r" using \<open>r>0\<close> by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   413
    qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   414
  then have "(h' has_contour_integral c * der_f) (circlepath z r)" unfolding der_f_def by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   415
  then have "(f has_contour_integral c * der_f) (circlepath z r)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   416
    proof (elim has_contour_integral_eq)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   417
      fix x assume "x \<in> path_image (circlepath z r)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   418
      hence "x\<in>cball z r - {z}" using \<open>r>0\<close> by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   419
      then show "h' x = f x" using h_divide unfolding h'_def by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   420
    qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   421
  moreover have "(f has_contour_integral c * residue f z) (circlepath z r)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   422
    using base_residue[of \<open>ball z e\<close> z,simplified,OF \<open>r>0\<close> f_holo r_cball,folded c_def]
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   423
    unfolding c_def by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   424
  ultimately have "c * der_f =  c * residue f z" using has_contour_integral_unique by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   425
  hence "der_f = residue f z" unfolding c_def by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   426
  thus ?thesis unfolding der_f_def by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   427
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   428
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   429
lemma residue_simple_pole:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   430
  assumes "isolated_singularity_at f z0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   431
  assumes "is_pole f z0" "zorder f z0 = - 1"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   432
  shows   "residue f z0 = zor_poly f z0 z0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   433
  using assms by (subst residue_pole_order) simp_all
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   434
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   435
lemma residue_simple_pole_limit:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   436
  assumes "isolated_singularity_at f z0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   437
  assumes "is_pole f z0" "zorder f z0 = - 1"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   438
  assumes "((\<lambda>x. f (g x) * (g x - z0)) \<longlongrightarrow> c) F"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   439
  assumes "filterlim g (at z0) F" "F \<noteq> bot"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   440
  shows   "residue f z0 = c"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   441
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   442
  have "residue f z0 = zor_poly f z0 z0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   443
    by (rule residue_simple_pole assms)+
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   444
  also have "\<dots> = c"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   445
    apply (rule zor_poly_pole_eqI)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   446
    using assms by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   447
  finally show ?thesis .
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   448
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   449
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   450
lemma
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   451
  assumes f_holo:"f holomorphic_on s" and g_holo:"g holomorphic_on s"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   452
          and "open s" "connected s" "z \<in> s"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   453
  assumes g_deriv:"(g has_field_derivative g') (at z)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   454
  assumes "f z \<noteq> 0" "g z = 0" "g' \<noteq> 0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   455
  shows   porder_simple_pole_deriv: "zorder (\<lambda>w. f w / g w) z = - 1"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   456
    and   residue_simple_pole_deriv: "residue (\<lambda>w. f w / g w) z = f z / g'"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   457
proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   458
  have [simp]:"isolated_singularity_at f z" "isolated_singularity_at g z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   459
    using isolated_singularity_at_holomorphic[OF _ \<open>open s\<close> \<open>z\<in>s\<close>] f_holo g_holo
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   460
    by (meson Diff_subset holomorphic_on_subset)+
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   461
  have [simp]:"not_essential f z" "not_essential g z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   462
    unfolding not_essential_def using f_holo g_holo assms(3,5)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   463
    by (meson continuous_on_eq_continuous_at continuous_within holomorphic_on_imp_continuous_on)+
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   464
  have g_nconst:"\<exists>\<^sub>F w in at z. g w \<noteq>0 "
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   465
  proof (rule ccontr)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   466
    assume "\<not> (\<exists>\<^sub>F w in at z. g w \<noteq> 0)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   467
    then have "\<forall>\<^sub>F w in nhds z. g w = 0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   468
      unfolding eventually_at eventually_nhds frequently_at using \<open>g z = 0\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   469
      by (metis open_ball UNIV_I centre_in_ball dist_commute mem_ball)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   470
    then have "deriv g z = deriv (\<lambda>_. 0) z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   471
      by (intro deriv_cong_ev) auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   472
    then have "deriv g z = 0" by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   473
    then have "g' = 0" using g_deriv DERIV_imp_deriv by blast
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   474
    then show False using \<open>g'\<noteq>0\<close> by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   475
  qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   476
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   477
  have "zorder (\<lambda>w. f w / g w) z = zorder f z - zorder g z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   478
  proof -
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   479
    have "\<forall>\<^sub>F w in at z. f w \<noteq>0 \<and> w\<in>s"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   480
      apply (rule non_zero_neighbour_alt)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   481
      using assms by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   482
    with g_nconst have "\<exists>\<^sub>F w in at z. f w * g w \<noteq> 0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   483
      by (elim frequently_rev_mp eventually_rev_mp,auto)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   484
    then show ?thesis using zorder_divide[of f z g] by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   485
  qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   486
  moreover have "zorder f z=0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   487
    apply (rule zorder_zero_eqI[OF f_holo \<open>open s\<close> \<open>z\<in>s\<close>])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   488
    using \<open>f z\<noteq>0\<close> by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   489
  moreover have "zorder g z=1"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   490
    apply (rule zorder_zero_eqI[OF g_holo \<open>open s\<close> \<open>z\<in>s\<close>])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   491
    subgoal using assms(8) by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   492
    subgoal using DERIV_imp_deriv assms(9) g_deriv by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   493
    subgoal by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   494
    done
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   495
  ultimately show "zorder (\<lambda>w. f w / g w) z = - 1" by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   496
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   497
  show "residue (\<lambda>w. f w / g w) z = f z / g'"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   498
  proof (rule residue_simple_pole_limit[where g=id and F="at z",simplified])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   499
    show "zorder (\<lambda>w. f w / g w) z = - 1" by fact
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   500
    show "isolated_singularity_at (\<lambda>w. f w / g w) z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   501
      by (auto intro: singularity_intros)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   502
    show "is_pole (\<lambda>w. f w / g w) z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   503
    proof (rule is_pole_divide)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   504
      have "\<forall>\<^sub>F x in at z. g x \<noteq> 0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   505
        apply (rule non_zero_neighbour)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   506
        using g_nconst by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   507
      moreover have "g \<midarrow>z\<rightarrow> 0"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   508
        using DERIV_isCont assms(8) continuous_at g_deriv by force
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   509
      ultimately show "filterlim g (at 0) (at z)" unfolding filterlim_at by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   510
      show "isCont f z"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   511
        using assms(3,5) continuous_on_eq_continuous_at f_holo holomorphic_on_imp_continuous_on
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   512
        by auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   513
      show "f z \<noteq> 0" by fact
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   514
    qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   515
    show "filterlim id (at z) (at z)" by (simp add: filterlim_iff)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   516
    have "((\<lambda>w. (f w * (w - z)) / g w) \<longlongrightarrow> f z / g') (at z)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   517
    proof (rule lhopital_complex_simple)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   518
      show "((\<lambda>w. f w * (w - z)) has_field_derivative f z) (at z)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   519
        using assms by (auto intro!: derivative_eq_intros holomorphic_derivI[OF f_holo])
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   520
      show "(g has_field_derivative g') (at z)" by fact
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   521
    qed (insert assms, auto)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   522
    then show "((\<lambda>w. (f w / g w) * (w - z)) \<longlongrightarrow> f z / g') (at z)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   523
      by (simp add: field_split_simps)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   524
  qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   525
qed
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   526
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   527
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   528
subsection \<open>Poles and residues of some well-known functions\<close>
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   529
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   530
(* TODO: add more material here for other functions *)
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   531
lemma is_pole_Gamma: "is_pole Gamma (-of_nat n)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   532
  unfolding is_pole_def using Gamma_poles .
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   533
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   534
lemma Gamma_residue:
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   535
  "residue Gamma (-of_nat n) = (-1) ^ n / fact n"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   536
proof (rule residue_simple')
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   537
  show "open (- (\<int>\<^sub>\<le>\<^sub>0 - {-of_nat n}) :: complex set)"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   538
    by (intro open_Compl closed_subset_Ints) auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   539
  show "Gamma holomorphic_on (- (\<int>\<^sub>\<le>\<^sub>0 - {-of_nat n}) - {- of_nat n})"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   540
    by (rule holomorphic_Gamma) auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   541
  show "(\<lambda>w. Gamma w * (w - (-of_nat n))) \<midarrow>(-of_nat n)\<rightarrow> (- 1) ^ n / fact n"
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   542
    using Gamma_residues[of n] by simp
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   543
qed auto
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   544
6617fb368a06 Reorganised HOL-Complex_Analysis
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   545
end