src/HOL/Complex_Analysis/Weierstrass_Factorization.thy
author nipkow
Tue, 17 Jun 2025 14:11:40 +0200
changeset 82733 8b537e1af2ec
parent 82517 111b1b2a2d13
permissions -rw-r--r--
reinstated intersection of lists as inter_list_set
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79933
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     1
section \<open>The Weierstra\ss\ Factorisation Theorem\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     2
theory Weierstrass_Factorization
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     3
  imports Meromorphic
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     4
begin 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     5
                
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     6
subsection \<open>The elementary factors\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     7
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     8
text \<open>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
     9
  The Weierstra\ss\ elementary factors are the family of entire functions
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    10
  \[E_n(z) = (1-z) \exp\bigg(z + \frac{z^2}{2} + \ldots + \frac{z^n}{n}\bigg)\]
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    11
  with the key properties that they have a single zero at $z = 1$ and 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    12
  satisfy $E_n(z) = 1 + O(z^{n+1})$ around the origin.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    13
\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    14
definition weierstrass_factor :: "nat \<Rightarrow> complex \<Rightarrow> complex" where
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    15
  "weierstrass_factor n z = (1 - z) * exp (\<Sum>k=1..n. z ^ k / of_nat k)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    16
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    17
lemma weierstrass_factor_continuous_on [continuous_intros]:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    18
  "continuous_on A f \<Longrightarrow> continuous_on A (\<lambda>z. weierstrass_factor n (f z))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    19
  by (auto simp: weierstrass_factor_def intro!: continuous_intros)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    20
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    21
lemma weierstrass_factor_holomorphic [holomorphic_intros]:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    22
  "f holomorphic_on A \<Longrightarrow> (\<lambda>z. weierstrass_factor n (f z)) holomorphic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    23
  by (auto simp: weierstrass_factor_def intro!: holomorphic_intros)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    24
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    25
lemma weierstrass_factor_analytic [analytic_intros]:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    26
  "f analytic_on A \<Longrightarrow> (\<lambda>z. weierstrass_factor n (f z)) analytic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    27
  by (auto simp: weierstrass_factor_def intro!: analytic_intros)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    28
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    29
lemma weierstrass_factor_0 [simp]: "weierstrass_factor n 0 = 1"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    30
  by (auto simp: weierstrass_factor_def power_0_left)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    31
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    32
lemma weierstrass_factor_1 [simp]: "weierstrass_factor n 1 = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    33
  by (simp add: weierstrass_factor_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    34
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    35
lemma weierstrass_factor_eq_0_iff [simp]: "weierstrass_factor n z = 0 \<longleftrightarrow> z = 1"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    36
  by (simp add: weierstrass_factor_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    37
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    38
lemma zorder_weierstrass_factor [simp]: "zorder (weierstrass_factor n) 1 = 1"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    39
proof (rule zorder_eqI)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    40
  show "(\<lambda>z. -exp (\<Sum>k=1..n. z ^ k / of_nat k)) holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    41
    by (intro holomorphic_intros) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    42
qed (auto simp: weierstrass_factor_def algebra_simps)  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    43
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    44
lemma
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    45
  fixes z :: "'a :: {banach, real_normed_field}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    46
  assumes "norm z \<le> 1 / 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    47
  shows   norm_exp_bounds_lemma: "norm (exp z - 1 - z) \<le> norm z / 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    48
    and   norm_exp_bounds: "norm (exp z - 1) \<ge> 1 / 2 * norm z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    49
                           "norm (exp z - 1) \<le> 3 / 2 * norm z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    50
proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    51
  show *: "norm (exp z - 1 - z) \<le> norm z / 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    52
  proof (cases "z = 0")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    53
    case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    54
    have sums: "(\<lambda>k. z ^ (k + 2) /\<^sub>R fact (k + 2)) sums (exp z - (\<Sum>k<2. z ^ k /\<^sub>R fact k))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    55
      by (intro sums_split_initial_segment exp_converges)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    56
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    57
    have "summable (\<lambda>k. norm z ^ (k + 2) /\<^sub>R fact (k + 2))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    58
      using summable_norm_exp[of z]
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    59
      by (intro summable_norm summable_ignore_initial_segment)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    60
         (auto simp: norm_power norm_divide divide_simps)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    61
    also have "?this \<longleftrightarrow> summable (\<lambda>k. norm z ^ 2 * (norm z ^ k / fact (k +2)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    62
      by (simp add: power_add mult_ac divide_simps power2_eq_square del: of_nat_Suc of_nat_add)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    63
    also have "\<dots> \<longleftrightarrow> summable (\<lambda>k. norm z ^ k / fact (k + 2))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    64
      by (subst summable_cmult_iff) (use \<open>z \<noteq> 0\<close> in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    65
    finally have summable: "summable (\<lambda>k. norm z ^ k / fact (k + 2))" .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    66
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    67
    have "exp z - 1 - z = (\<Sum>k. z ^ (k + 2) / fact (k + 2))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    68
      using sums by (simp add: sums_iff scaleR_conv_of_real divide_simps eval_nat_numeral)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    69
    also have "norm \<dots> \<le> (\<Sum>k. norm (z ^ (k + 2) / fact (k + 2)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    70
      using summable_norm_exp[of z]
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    71
      by (intro summable_norm summable_ignore_initial_segment)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    72
         (auto simp: norm_power norm_divide divide_simps)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    73
    also have "\<dots> = (\<Sum>k. norm z ^ 2 * (norm z ^ k / fact (k + 2)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    74
      by (simp add: power_add norm_power norm_divide mult_ac norm_mult power2_eq_square del: of_nat_Suc)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    75
    also have "\<dots> = norm z ^ 2 * (\<Sum>k. norm z ^ k / fact (k + 2))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    76
      using summable by (rule suminf_mult)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    77
    also have "\<dots> \<le> norm z ^ 2 * (1 / (1 - norm z) / 2)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    78
    proof (intro mult_left_mono, rule sums_le)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    79
      show "(\<lambda>k. norm z ^ k / fact (k + 2)) sums (\<Sum>k. norm z ^ k / fact (k + 2))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    80
        using summable by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    81
      show "(\<lambda>k. norm z ^ k / 2) sums (1 / (1 - norm z) / 2)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    82
        using assms by (intro geometric_sums sums_divide) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    83
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    84
      fix k :: nat
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    85
      have "norm z ^ k / fact (k + 2) \<le> norm z ^ k / fact 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    86
        by (intro divide_left_mono fact_mono) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    87
      thus "norm z ^ k / fact (k + 2) \<le> norm z ^ k / 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    88
        by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    89
    qed (auto simp: divide_simps)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    90
    also have "\<dots> = norm z * (norm z / (1 - norm z)) / 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    91
      by (simp add: power2_eq_square)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    92
    also have "\<dots> \<le> norm z * ((1 / 2) / (1 - (1 / 2))) / 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    93
      using assms by (intro mult_mono frac_le diff_mono) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    94
    also have "\<dots> = norm z / 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    95
      by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    96
    finally show "norm (exp z - 1 - z) \<le> norm z / 2" .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    97
  qed auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    98
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
    99
  have "norm (exp z - 1) \<le> norm z + norm (exp z - 1 - z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   100
    by (rule norm_triangle_sub)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   101
  with * show "norm (exp z - 1) \<le> 3 / 2 * norm z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   102
    by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   103
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   104
  have "norm z - norm (exp z - 1 - z) \<le> norm (exp z - 1)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   105
    using norm_triangle_ineq3[of "exp z - 1 - z" "-z"] by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   106
  with * show "norm (exp z - 1) \<ge> 1 / 2 * norm z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   107
    by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   108
qed 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   109
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   110
lemma weierstrass_factor_bound:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   111
  assumes "norm z \<le> 1 / 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   112
  shows   "norm (weierstrass_factor n z - 1) \<le> 3 * norm z ^ Suc n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   113
proof (cases "n = 0 \<or> z = 0")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   114
  case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   115
  thus ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   116
  proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   117
    assume "n = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   118
    thus ?thesis by (auto simp: weierstrass_factor_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   119
  qed auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   120
next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   121
  case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   122
  with assms have "z \<noteq> 1" "n > 0" "z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   123
    by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   124
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   125
  have "summable (\<lambda>k. cmod z ^ (k + Suc n) / real (k + Suc n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   126
    using ln_series'[of "-norm z"] assms
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   127
    by (intro summable_norm summable_ignore_initial_segment)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   128
       (simp_all add: sums_iff summable_minus_iff power_minus' norm_divide norm_power)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   129
  also have "?this \<longleftrightarrow> summable (\<lambda>k. norm z ^ Suc n * (norm z ^ k / real (k + Suc n)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   130
    by (simp add: power_add mult_ac)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   131
  also have "\<dots> \<longleftrightarrow> summable (\<lambda>k. norm z ^ k / real (k + Suc n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   132
    by (subst summable_cmult_iff) (use \<open>z \<noteq> 0\<close> in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   133
  finally have summable: "summable (\<lambda>k. norm z ^ k / real (k + Suc n))" .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   134
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   135
  have "(\<lambda>k. z ^ k / of_nat k) sums - Ln (1 - z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   136
    using sums_minus[OF Ln_series[of "-z"]] assms by (simp add: power_minus')
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   137
  hence "(\<lambda>k. z ^ (k + Suc n) / of_nat (k + Suc n)) sums (- Ln (1 - z) - (\<Sum>k<Suc n. z ^ k / of_nat k))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   138
    by (intro sums_split_initial_segment)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   139
  also have "(\<Sum>k<Suc n. z ^ k / of_nat k) = (\<Sum>k=1..n. z ^ k / of_nat k)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   140
    by (intro sum.mono_neutral_right) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   141
  finally have "norm (ln (1 - z) + (\<Sum>k=1..n. z ^ k / of_nat k)) =
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   142
                norm (\<Sum>k. z ^ (k + Suc n) / of_nat (k + Suc n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   143
    by (simp add: sums_iff norm_uminus_minus)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   144
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   145
  also have "\<dots> \<le> (\<Sum>k. norm (z ^ (k + Suc n) / of_nat (k + Suc n)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   146
    using ln_series'[of "-norm z"] assms
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   147
    by (intro summable_norm summable_ignore_initial_segment)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   148
       (simp_all add: sums_iff summable_minus_iff power_minus' norm_divide norm_power)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   149
  also have "\<dots> = (\<Sum>k. norm z ^ Suc n * (norm z ^ k / real (k + Suc n)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   150
    by (simp add: algebra_simps norm_mult norm_power norm_divide power_add del: of_nat_add of_nat_Suc)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   151
  also have "\<dots> = norm z ^ Suc n * (\<Sum>k. norm z ^ k / real (k + Suc n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   152
    by (intro suminf_mult summable)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   153
  also have "\<dots> \<le> norm z ^ Suc n * (1 / (1 - norm z))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   154
  proof (intro mult_left_mono[OF sums_le])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   155
    show "(\<lambda>k. norm z ^ k / real (k + Suc n)) sums (\<Sum>k. norm z ^ k / real (k + Suc n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   156
      using summable by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   157
    show "(\<lambda>k. norm z ^ k) sums (1 / (1 - norm z))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   158
      by (rule geometric_sums) (use assms in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   159
  qed (auto simp: field_simps)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   160
  also have "norm z ^ Suc n * (1 / (1 - norm z)) \<le> norm z ^ Suc n * (1 / (1 - (1 / 2)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   161
    using assms by (intro mult_mono power_mono divide_left_mono diff_mono mult_pos_pos) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   162
  also have "\<dots> = 2 * norm z ^ Suc n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   163
    by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   164
  finally have norm_le: "norm (ln (1 - z) + (\<Sum>k=1..n. z ^ k / of_nat k)) \<le> 2 * norm z ^ Suc n" .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   165
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   166
  also have "\<dots> \<le> 2 * norm z ^ 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   167
    using \<open>n > 0\<close> assms by (intro mult_left_mono power_decreasing) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   168
  also have "\<dots> \<le> 2 * (1 / 2) ^ 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   169
    by (intro mult_left_mono assms power_mono) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   170
  finally have norm_le': "norm (ln (1 - z) + (\<Sum>k=1..n. z ^ k / of_nat k)) \<le> 1 / 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   171
    by (simp add: power2_eq_square)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   172
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   173
  have "weierstrass_factor n z = exp (ln (1 - z) + (\<Sum>k=1..n. z ^ k / of_nat k))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   174
    using \<open>z \<noteq> 1\<close> by (simp add: exp_add weierstrass_factor_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   175
  also have "norm (\<dots> - 1) \<le> (3 / 2) * norm (ln (1 - z) + (\<Sum>k=1..n. z ^ k / of_nat k))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   176
    by (intro norm_exp_bounds norm_le')
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   177
  also have "\<dots> \<le> (3 / 2) * (2 * norm z ^ Suc n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   178
    by (intro mult_left_mono norm_le) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   179
  finally show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   180
    by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   181
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   182
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   183
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   184
subsection \<open>Infinite products of elementary factors\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   185
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   186
text \<open>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   187
  We now show that the elementary factors can be used to construct an entire function
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   188
  with its zeros at a certain set of points (given by a sequence of non-zero numbers $a_n$ with no
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   189
  accumulation point).
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   190
\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   191
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   192
locale weierstrass_product =
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   193
  fixes a :: "nat \<Rightarrow> complex"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   194
  fixes p :: "nat \<Rightarrow> nat"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   195
  assumes a_nonzero: "\<And>n. a n \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   196
  assumes filterlim_a: "filterlim a at_infinity at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   197
  assumes summable_a_p: "\<And>r. r > 0 \<Longrightarrow> summable (\<lambda>n. (r / norm (a n)) ^ Suc (p n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   198
begin
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   199
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   200
definition f :: "complex \<Rightarrow> complex" where
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   201
  "f z = (\<Prod>n. weierstrass_factor (p n) (z / a n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   202
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   203
lemma abs_convergent: "abs_convergent_prod (\<lambda>n. weierstrass_factor (p n) (z / a n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   204
  unfolding abs_convergent_prod_conv_summable
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   205
proof (rule summable_comparison_test_ev)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   206
  have "eventually (\<lambda>n. norm (a n) > 2 * norm z) at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   207
    using filterlim_a by (metis filterlim_at_infinity_imp_norm_at_top filterlim_at_top_dense)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   208
  thus "eventually (\<lambda>n. norm (norm (weierstrass_factor (p n) (z / a n) - 1)) \<le>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   209
          3 * norm (z / a n) ^ Suc (p n)) at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   210
  proof eventually_elim
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   211
    case (elim n)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   212
    hence "norm (z / a n) \<le> 1 / 2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   213
      by (auto simp: norm_divide divide_simps)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   214
    thus ?case using weierstrass_factor_bound[of "z / a n" "p n"]
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   215
      by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   216
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   217
next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   218
  show "summable (\<lambda>n. 3 * norm (z / a n) ^ Suc (p n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   219
    using summable_mult[OF summable_a_p[of "norm z"], of 3]
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   220
    by (cases "z = 0") (auto simp: norm_divide)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   221
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   222
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   223
lemma convergent: "convergent_prod (\<lambda>n. weierstrass_factor (p n) (z / a n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   224
  using abs_convergent[of z] abs_convergent_prod_imp_convergent_prod by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   225
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   226
lemma has_prod: "(\<lambda>n. weierstrass_factor (p n) (z / a n)) has_prod f z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   227
  using convergent[of z] unfolding f_def by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   228
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   229
lemma finite_occs_a: "finite (a -` {z})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   230
proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   231
  have "eventually (\<lambda>n. norm (a n) > norm z) at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   232
    using filterlim_a by (metis filterlim_at_infinity_imp_norm_at_top filterlim_at_top_dense)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   233
  then obtain N where N: "\<And>n. n \<ge> N \<Longrightarrow> norm (a n) > norm z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   234
    by (auto simp: eventually_at_top_linorder)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   235
  have "n < N" if "n \<in> a -` {z}" for n
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   236
    using N[of n] that by (cases "n < N") auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   237
  hence "a -` {z} \<subseteq> {..<N}" "finite {..<N}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   238
    by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   239
  thus ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   240
    using finite_subset by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   241
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   242
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   243
context
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   244
  fixes P
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   245
  defines "P \<equiv> (\<lambda>N z. \<Prod>n<N. weierstrass_factor (p n) (z / a n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   246
begin 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   247
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   248
lemma uniformly_convergent:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   249
  assumes "R > 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   250
  shows   "uniformly_convergent_on (cball 0 R) P"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   251
  unfolding P_def
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   252
proof (rule uniformly_convergent_on_prod')
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   253
  show "uniformly_convergent_on (cball 0 R) (\<lambda>N z. \<Sum>n<N. norm (weierstrass_factor (p n) (z / a n) - 1))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   254
  proof (rule Weierstrass_m_test'_ev)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   255
    have "eventually (\<lambda>n. norm (a n) \<ge> 2 * R) sequentially"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   256
      using filterlim_a by (metis filterlim_at_infinity_imp_norm_at_top filterlim_at_top)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   257
    thus "\<forall>\<^sub>F n in sequentially. \<forall>z\<in>cball 0 R. norm (norm (weierstrass_factor (p n) (z / a n) - 1)) \<le>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   258
            3 * (R / norm (a n)) ^ Suc (p n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   259
    proof eventually_elim
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   260
      case (elim n)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   261
      show ?case
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   262
      proof safe
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   263
        fix z :: complex assume z: "z \<in> cball 0 R"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   264
        have "2 * norm z \<le> 2 * R"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   265
          using z by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   266
        also have "\<dots> \<le> norm (a n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   267
          using elim by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   268
        finally have "norm (a n) \<ge> 2 * norm z" .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   269
        hence "norm (weierstrass_factor (p n) (z / a n) - 1) \<le> 3 * norm (z / a n) ^ Suc (p n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   270
          by (intro weierstrass_factor_bound) (auto simp: norm_divide divide_simps)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   271
        also have "\<dots> = 3 * (norm z / norm (a n)) ^ Suc (p n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   272
          by (simp add: norm_divide)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   273
        also have "\<dots> \<le> 3 * (R / norm (a n)) ^ Suc (p n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   274
          by (intro mult_left_mono power_mono divide_right_mono) (use z in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   275
        finally show "norm (norm (weierstrass_factor (p n) (z / a n) - 1)) \<le>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   276
                        3 * (R / norm (a n)) ^ Suc (p n)" by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   277
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   278
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   279
  next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   280
    show "summable (\<lambda>n. 3 * (R / norm (a n)) ^ Suc (p n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   281
      by (intro summable_mult summable_a_p assms)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   282
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   283
qed (auto intro!: continuous_intros simp: a_nonzero)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   284
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   285
lemma uniform_limit:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   286
  assumes "R > 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   287
  shows   "uniform_limit (cball 0 R) P f at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   288
proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   289
  obtain g where g: "uniform_limit (cball 0 R) P g at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   290
    using uniformly_convergent[OF assms] by (auto simp: uniformly_convergent_on_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   291
  also have "?this \<longleftrightarrow> uniform_limit (cball 0 R) P f at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   292
  proof (intro uniform_limit_cong)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   293
    fix z :: complex assume "z \<in> cball 0 R"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   294
    with g have "(\<lambda>n. P (Suc n) z) \<longlonglongrightarrow> g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   295
      by (metis tendsto_uniform_limitI filterlim_sequentially_Suc)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   296
    moreover have "(\<lambda>n. P (Suc n) z) \<longlonglongrightarrow> f z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   297
      using convergent_prod_LIMSEQ[OF convergent[of z]] unfolding P_def lessThan_Suc_atMost
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   298
      by (simp add: f_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   299
    ultimately show "g z = f z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   300
      using tendsto_unique by force
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   301
  qed auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   302
  finally show ?thesis .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   303
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   304
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   305
lemma holomorphic [holomorphic_intros]: "f holomorphic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   306
proof (rule holomorphic_on_subset)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   307
  show "f holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   308
  proof (rule holomorphic_uniform_sequence)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   309
    fix z :: complex
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   310
    have *: "uniform_limit (cball 0 (norm z + 1)) P f sequentially"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   311
      by (rule uniform_limit) (auto intro: add_nonneg_pos)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   312
    hence "uniform_limit (cball z 1) P f sequentially"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   313
      by (rule uniform_limit_on_subset) (simp add: cball_subset_cball_iff)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   314
    thus "\<exists>d>0. cball z d \<subseteq> UNIV \<and> uniform_limit (cball z d) P f sequentially"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   315
      by (intro exI[of _ 1]) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   316
  qed (auto intro!: holomorphic_intros simp: P_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   317
qed auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   318
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   319
lemma analytic [analytic_intros]: "f analytic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   320
  using holomorphic[of UNIV] analytic_on_holomorphic by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   321
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   322
end
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   323
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   324
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   325
lemma zero: "f z = 0 \<longleftrightarrow> z \<in> range a"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   326
  using has_prod_eq_0_iff[OF has_prod, of z] by (auto simp: a_nonzero)  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   327
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   328
lemma not_islimpt_range_a: "\<not>z islimpt (range a)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   329
proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   330
  assume "z islimpt (range a)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   331
  then obtain r :: "nat \<Rightarrow> nat" where r: "strict_mono r" "(a \<circ> r) \<longlonglongrightarrow> z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   332
    using islimpt_range_imp_convergent_subsequence by metis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   333
  moreover have "filterlim (a \<circ> r) at_infinity sequentially"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   334
    unfolding o_def by (rule filterlim_compose[OF filterlim_a filterlim_subseq[OF r(1)]])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   335
  ultimately show False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   336
    by (meson not_tendsto_and_filterlim_at_infinity trivial_limit_sequentially)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   337
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   338
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   339
lemma isolated_zero:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   340
  assumes "z \<in> range a"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   341
  shows   "isolated_zero f z"
82517
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   342
proof -
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   343
  have "eventually (\<lambda>z. f z \<noteq> 0) (at z)"
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   344
    using not_islimpt_range_a[of z] by (auto simp: islimpt_iff_eventually zero)
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   345
  moreover have "f \<midarrow>z\<rightarrow> f z"
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   346
    by (intro isContD analytic_at_imp_isCont analytic)
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   347
  hence "f \<midarrow>z\<rightarrow> 0"
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   348
    using assms zero[of z] by auto
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   349
  ultimately show ?thesis
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   350
    by (auto simp: isolated_zero_def)
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   351
qed
79933
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   352
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   353
lemma zorder: "zorder f z = card (a -` {z})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   354
proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   355
  obtain N where N: "a -` {z} \<subseteq> {..N}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   356
    using finite_occs_a[of z] by (meson finite_nat_iff_bounded_le)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   357
  define g where "g = (\<lambda>z n. weierstrass_factor (p n) (z / a n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   358
  define h1 where "h1 = (\<lambda>w. (\<Prod>n\<in>{..N} - a-`{z}. g w n) * (\<Prod>n. g w (n + Suc N)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   359
  define h2 where "h2 = (\<lambda>w. (\<Prod>n\<in>{..N} \<inter> a-`{z}. g w n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   360
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   361
  have has_prod_h1': "(\<lambda>n. g w (n + Suc N)) has_prod (\<Prod>n. g w (n + Suc N))" for w
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   362
    unfolding g_def
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   363
    by (intro convergent_prod_has_prod convergent_prod_ignore_initial_segment convergent)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   364
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   365
  have f_eq: "f w = h1 w * h2 w" for w
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   366
  proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   367
    have "f w = (\<Prod>n<Suc N. g w n) * (\<Prod>n. g w (n + Suc N))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   368
    proof (rule has_prod_unique2)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   369
      show "(\<lambda>n. g w n) has_prod ((\<Prod>n<Suc N. g w n) * (\<Prod>n. g w (n + Suc N)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   370
        unfolding g_def by (intro has_prod_ignore_initial_segment' convergent)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   371
      show "g w has_prod f w"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   372
        unfolding g_def by (rule has_prod)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   373
    qed 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   374
    also have "{..<Suc N} = ({..N} - a-`{z}) \<union> ({..N} \<inter> a-`{z})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   375
      by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   376
    also have "(\<Prod>k\<in>\<dots>. g w k) = (\<Prod>k\<in>{..N} - a-`{z}. g w k) * (\<Prod>k\<in>{..N} \<inter> a-`{z}. g w k)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   377
      by (intro prod.union_disjoint) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   378
    finally show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   379
      by (simp add: h1_def h2_def mult_ac)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   380
  qed    
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   381
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   382
  have ana_h1: "h1 analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   383
  proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   384
    interpret h1: weierstrass_product "\<lambda>n. a (n + Suc N)" "\<lambda>n. p (n + Suc N)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   385
    proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   386
      have "filterlim (\<lambda>n. n + Suc N) at_top at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   387
        by (rule filterlim_add_const_nat_at_top)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   388
      thus "filterlim (\<lambda>n. a (n + Suc N)) at_infinity at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   389
        by (intro filterlim_compose[OF filterlim_a])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   390
      show "summable (\<lambda>n. (r / cmod (a (n + Suc N))) ^ Suc (p (n + Suc N)))" if "r > 0" for r
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   391
        by (intro summable_ignore_initial_segment summable_a_p that)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   392
    qed (auto simp: a_nonzero)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   393
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   394
    show ?thesis using h1.analytic
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   395
      unfolding h1_def g_def h1.f_def by (intro analytic_intros) (auto simp: a_nonzero)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   396
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   397
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   398
  have ana_h2: "h2 analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   399
    unfolding h2_def g_def by (intro analytic_intros) (auto simp: a_nonzero)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   400
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   401
  have "zorder f z = zorder (\<lambda>w. h1 w * h2 w) z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   402
    by (simp add: f_eq [abs_def])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   403
  also have "\<dots> = zorder h1 z + zorder h2 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   404
  proof (rule zorder_times_analytic)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   405
    have "eventually (\<lambda>w. f w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   406
      using not_islimpt_range_a[of z] by (auto simp: islimpt_conv_frequently_at frequently_def zero)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   407
    thus "eventually (\<lambda>w. h1 w * h2 w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   408
      by (simp add: f_eq)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   409
  qed fact+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   410
  also have "zorder h2 z = (\<Sum>n\<in>{..N} \<inter> a -` {z}. zorder (\<lambda>w. g w n) z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   411
    unfolding h2_def
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   412
    by (intro zorder_prod_analytic)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   413
       (auto simp: a_nonzero g_def eventually_at_filter intro!: analytic_intros)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   414
  also have "h1 z \<noteq> 0" using N has_prod_eq_0_iff[OF has_prod_h1'[of z]]
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   415
    by (auto simp: h1_def g_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   416
  hence "zorder h1 z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   417
    by (intro zorder_eq_0I ana_h1)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   418
  also have "(\<Sum>n\<in>{..N} \<inter> a -` {z}. zorder (\<lambda>w. g w n) z) = (\<Sum>n\<in>{..N} \<inter> a -` {z}. 1)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   419
  proof (intro sum.cong refl)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   420
    fix n :: nat
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   421
    assume n: "n \<in> {..N} \<inter> a -` {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   422
    have "zorder (\<lambda>w. weierstrass_factor (p n) (1 / a n * w)) z =
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   423
          zorder (weierstrass_factor (p n)) (1 / a n * z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   424
      using a_nonzero[of n] eventually_neq_at_within[of 1 "z / a n" UNIV]
82517
111b1b2a2d13 new lemmas for HOL-Complex_Analysis; overhaul of isolated_zeros
Manuel Eberl <manuel@pruvisto.org>
parents: 79933
diff changeset
   425
      by (intro zorder_scale analytic_intros analytic_on_imp_meromorphic_on) auto
79933
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   426
    hence "zorder (\<lambda>w. g w n) z = zorder (weierstrass_factor (p n)) 1"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   427
      using n a_nonzero[of n] by (auto simp: g_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   428
    thus "zorder (\<lambda>w. g w n) z = 1"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   429
      by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   430
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   431
  also have "\<dots> = card ({..N} \<inter> a -` {z})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   432
    by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   433
  also have "{..N} \<inter> a -` {z} = a -` {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   434
    using N by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   435
  finally show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   436
    by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   437
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   438
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   439
end (* weierstrass_product *)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   440
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   441
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   442
text \<open>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   443
  The following locale is the most common case of $p(n) = n$.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   444
\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   445
locale weierstrass_product' =
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   446
  fixes a :: "nat \<Rightarrow> complex"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   447
  assumes a_nonzero: "\<And>n. a n \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   448
  assumes filterlim_a: "filterlim a at_infinity at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   449
  assumes finite_occs_a': "\<And>z. z \<in> range a \<Longrightarrow> finite (a -` {z})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   450
begin
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   451
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   452
lemma finite_occs_a: "finite (a -` {z})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   453
proof (cases "z \<in> range a")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   454
  case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   455
  hence "a -` {z} = {}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   456
    by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   457
  thus ?thesis by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   458
qed (use finite_occs_a'[of z] in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   459
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   460
sublocale weierstrass_product a "\<lambda>n. n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   461
proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   462
  fix r :: real assume r: "r > 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   463
  show "summable (\<lambda>n. (r / norm (a n)) ^ Suc n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   464
  proof (rule summable_comparison_test_ev)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   465
    have "eventually (\<lambda>n. norm (a n) > 2 * r) at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   466
      using filterlim_a by (metis filterlim_at_infinity_imp_norm_at_top filterlim_at_top_dense)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   467
    thus "eventually (\<lambda>n. norm ((r / norm (a n)) ^ Suc n) \<le> (1 / 2) ^ Suc n) at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   468
    proof eventually_elim
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   469
      case (elim n)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   470
      have "norm ((r / norm (a n)) ^ Suc n) = (r / norm (a n)) ^ Suc n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   471
        using \<open>r > 0\<close> by (simp add: abs_mult)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   472
      also have "\<dots> \<le> (1 / 2) ^ Suc n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   473
        using \<open>r > 0\<close> elim by (intro power_mono) (auto simp: divide_simps)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   474
      finally show ?case .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   475
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   476
  next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   477
    show "summable (\<lambda>n. (1 / 2) ^ Suc n :: real)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   478
      unfolding summable_Suc_iff by (intro summable_geometric) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   479
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   480
qed (use a_nonzero filterlim_a finite_occs_a in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   481
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   482
end (* weierstrass_product' *)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   483
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   484
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   485
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   486
subsection \<open>Writing a quotient as an exponential\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   487
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   488
text \<open>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   489
  If two holomorphic functions \<open>f\<close> and \<open>g\<close> on a simply connected domain have the same zeros with
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   490
  the same multiplicities, they can be written as $g(x) = e^{h(x)} f(x)$ for some holomorphic
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   491
  function $h(x)$.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   492
\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   493
lemma holomorphic_zorder_factorization:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   494
  assumes "g holomorphic_on A" "open A" "connected A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   495
  assumes "f holomorphic_on A" "\<And>z. z \<in> A \<Longrightarrow> f z = 0 \<longleftrightarrow> g z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   496
          "\<And>z. z \<in> A \<Longrightarrow> zorder f z = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   497
  obtains h where "h holomorphic_on A" "\<And>z. z \<in> A \<Longrightarrow> h z \<noteq> 0" "\<And>z. z \<in> A \<Longrightarrow> g z = h z * f z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   498
proof (cases "\<exists>z\<in>A. g z \<noteq> 0")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   499
  case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   500
  show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   501
    by (rule that[of "\<lambda>_. 1"]) (use False assms in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   502
next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   503
  case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   504
  define F where "F = fps_expansion f"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   505
  define G where "G = fps_expansion g"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   506
  define c where "c = (\<lambda>z. fps_nth (G z) (subdegree (G z)) / fps_nth (F z) (subdegree (F z)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   507
  define h where "h = (\<lambda>z. if f z = 0 then c z else g z / f z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   508
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   509
  have ev_nonzero: "eventually (\<lambda>w. g w \<noteq> 0 \<and> w \<in> A) (at z)" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   510
  proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   511
    from True obtain z0 where z0: "z0 \<in> A" "g z0 \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   512
      by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   513
    show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   514
      by (rule non_zero_neighbour_alt[where ?\<beta> = z0])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   515
         (use assms that z0 in \<open>auto intro: simply_connected_imp_connected\<close>)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   516
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   517
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   518
  have g_ana: "g analytic_on {z}" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   519
    using assms \<open>open A\<close> analytic_at that by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   520
  have f_ana: "f analytic_on {z}" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   521
    using assms \<open>open A\<close> analytic_at that by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   522
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   523
  have F: "(\<lambda>w. f (z + w)) has_fps_expansion F z" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   524
    unfolding F_def by (rule analytic_at_imp_has_fps_expansion[OF f_ana[OF that]])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   525
  have G: "(\<lambda>w. g (z + w)) has_fps_expansion G z" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   526
    unfolding G_def by (rule analytic_at_imp_has_fps_expansion[OF g_ana[OF that]])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   527
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   528
  have [simp]: "G z \<noteq> 0" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   529
  proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   530
    assume "G z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   531
    hence "eventually (\<lambda>w. g w = 0) (at z)" using G[OF that]
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   532
      by (auto simp: has_fps_expansion_0_iff at_to_0' eventually_filtermap add_ac
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   533
                     eventually_at_filter nhds_to_0' elim: eventually_mono)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   534
    hence "eventually (\<lambda>_. False) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   535
      using ev_nonzero[OF that] unfolding eventually_at_filter by eventually_elim auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   536
    thus False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   537
      by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   538
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   539
  have [simp]: "F z \<noteq> 0" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   540
  proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   541
    assume "F z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   542
    hence "eventually (\<lambda>w. f w = 0) (at z)" using F[of z] that
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   543
      by (auto simp: has_fps_expansion_0_iff at_to_0' eventually_filtermap add_ac
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   544
                     eventually_at_filter nhds_to_0' elim: eventually_mono)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   545
    hence "eventually (\<lambda>_. False) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   546
      using ev_nonzero[OF that] unfolding eventually_at_filter
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   547
      by eventually_elim (use assms in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   548
    thus False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   549
      by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   550
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   551
  have [simp]: "c z \<noteq> 0" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   552
    using that by (simp add: c_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   553
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   554
  have h: "h analytic_on {z} \<and> h z \<noteq> 0" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   555
  proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   556
    show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   557
    proof (cases "f z = 0")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   558
      case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   559
      from False that have "(\<lambda>z. g z / f z) analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   560
        by (intro analytic_intros g_ana f_ana) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   561
      also have "?this \<longleftrightarrow> h analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   562
      proof (rule analytic_at_cong)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   563
        have "eventually (\<lambda>w. f w \<noteq> 0) (nhds z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   564
          using ev_nonzero[OF \<open>z \<in> A\<close>] unfolding eventually_at_filter
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   565
          by eventually_elim (use False \<open>z \<in> A\<close> assms in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   566
        thus "eventually (\<lambda>z. g z / f z = h z) (nhds z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   567
          by eventually_elim (auto simp: h_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   568
      qed auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   569
      finally have "h analytic_on {z}" .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   570
      moreover have "h z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   571
        using that assms by (simp add: h_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   572
      ultimately show ?thesis by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   573
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   574
      case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   575
      with that have z: "z \<in> A" "f z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   576
        by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   577
      have "zorder f z = int (subdegree (F z))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   578
        using F by (rule has_fps_expansion_zorder) (use z in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   579
      also have "zorder f z = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   580
        using z assms by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   581
      also have "zorder g z = subdegree (G z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   582
        using G by (rule has_fps_expansion_zorder) (use z in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   583
      finally have subdegree_eq: "subdegree (F z) = subdegree (G z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   584
        by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   585
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   586
      have "(\<lambda>w. if w = 0 then c z else g (z + w) / f (z + w)) has_fps_expansion G z / F z" (is ?P)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   587
        using subdegree_eq z by (intro has_fps_expansion_divide F G) (auto simp: c_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   588
      also have "?this \<longleftrightarrow> (\<lambda>w. h (z + w)) has_fps_expansion G z / F z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   589
      proof (intro has_fps_expansion_cong)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   590
        have "eventually (\<lambda>w. w \<noteq> z \<longrightarrow> f w \<noteq> 0) (nhds z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   591
          using ev_nonzero[OF \<open>z \<in> A\<close>] unfolding eventually_at_filter
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   592
          by eventually_elim (use \<open>z \<in> A\<close> assms in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   593
        hence "eventually (\<lambda>w. w \<noteq> 0 \<longrightarrow> f (z + w) \<noteq> 0) (nhds 0)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   594
          by (simp add: nhds_to_0' eventually_filtermap)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   595
        thus "eventually (\<lambda>w. (if w = 0 then c z else g (z + w) / f (z + w)) = h (z + w)) (nhds 0)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   596
          unfolding h_def by eventually_elim (use z in \<open>auto simp: c_def h_def\<close>)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   597
      qed auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   598
      finally have "h analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   599
        using has_fps_expansion_imp_analytic by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   600
      moreover have "h z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   601
        using that z by (auto simp: h_def c_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   602
      ultimately show ?thesis by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   603
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   604
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   605
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   606
  from h have h_ana: "h analytic_on A" and h_nz: "\<forall>z\<in>A. h z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   607
    using analytic_on_analytic_at by blast+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   608
  moreover have "g z = h z * f z" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   609
    using assms that by (auto simp: h_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   610
  ultimately show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   611
    using \<open>open A\<close> by (intro that[of h]) (auto simp: analytic_on_open)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   612
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   613
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   614
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   615
subsection \<open>Constructing the sequence of zeros\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   616
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   617
text \<open>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   618
  The form of the Weierstra\ss\ Factorisation Theorem that we derived above requires
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   619
  an explicit sequence of the zeros that tends to infinity. We will now show that under
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   620
  mild conditions, such a sequence always exists.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   621
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   622
  More precisely: if \<open>A\<close> is an infinite closed set that is sparse in the sense that its
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   623
  intersection with any compact set is finite, then there exists an injective sequence \<open>f\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   624
  enumerating the values of \<open>A\<close> in ascending order by absolute value, and \<open>f\<close> tends to infinity
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   625
  for \<open>n \<rightarrow> \<infinity>\<close>.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   626
\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   627
lemma sequence_of_sparse_set_exists:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   628
  fixes A :: "complex set"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   629
  assumes "infinite A" "closed A" "\<And>r. r \<ge> 0 \<Longrightarrow> finite (A \<inter> cball 0 r)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   630
  obtains f :: "nat \<Rightarrow> complex"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   631
    where "mono (norm \<circ> f)" "inj f" "range f = A" "filterlim f at_infinity at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   632
proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   633
  have "\<exists>f::nat \<Rightarrow> complex. \<forall>n.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   634
         f n \<in> A \<and>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   635
         f n \<notin> f ` {..<n} \<and>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   636
         {z\<in>A. norm z < norm (f n)} \<subseteq> f ` {..<n} \<and>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   637
         (\<forall>k<n. norm (f k) \<le> norm (f n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   638
  proof (rule dependent_wf_choice[OF wf], goal_cases)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   639
    case (1 f g n r)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   640
    thus ?case by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   641
  next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   642
    case (2 n f)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   643
    have f: "f k \<in> A" "{z \<in> A. norm z < norm (f k)} \<subseteq> f ` {..<k}" "\<forall>k'<k. cmod (f k') \<le> cmod (f k)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   644
      if "k < n" for k
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   645
      using 2[of k] that by simp_all
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   646
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   647
    have "infinite (A - f ` {..<n})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   648
      using assms(1) by (intro Diff_infinite_finite) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   649
    then obtain z0 where z0: "z0 \<in> A - f ` {..<n}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   650
      by (meson finite.intros(1) finite_subset subsetI)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   651
    have "finite (A \<inter> cball 0 (norm z0))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   652
      by (intro assms(3)) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   653
    hence "finite (A \<inter> cball 0 (norm z0) - f ` {..<n})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   654
      using finite_subset by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   655
    moreover from z0 have "A \<inter> cball 0 (norm z0) - f ` {..<n} \<noteq> {}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   656
      by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   657
    ultimately obtain z where "is_arg_min norm (\<lambda>z. z \<in> A \<inter> cball 0 (norm z0) - f ` {..<n}) z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   658
      using ex_is_arg_min_if_finite by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   659
    hence z: "z \<in> A" "norm z \<le> norm z0" "z \<notin> f ` {..<n}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   660
             "\<And>w. w \<in> A \<Longrightarrow> norm w \<le> norm z0 \<Longrightarrow> w \<notin> f ` {..<n} \<Longrightarrow> norm w \<ge> norm z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   661
      by (auto simp: is_arg_min_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   662
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   663
    show ?case
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   664
    proof (rule exI[of _ z], safe)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   665
      fix w assume w: "w \<in> A" "norm w < norm z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   666
      with z(4)[of w] z w show "w \<in> f ` {..<n}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   667
        by linarith
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   668
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   669
      fix k assume k: "k < n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   670
      show "norm (f k) \<le> norm z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   671
        using f(2)[of k] z(1,3) k by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   672
    qed (use z in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   673
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   674
  then obtain f :: "nat \<Rightarrow> complex" where f:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   675
    "\<And>n. f n \<in> A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   676
    "\<And>n. f n \<notin> f ` {..<n}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   677
    "\<And>n. {z\<in>A. norm z < norm (f n)} \<subseteq> f ` {..<n}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   678
    "\<And>k n. k < n \<Longrightarrow> norm (f k) \<le> norm (f n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   679
    by meson
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   680
  from f(2) have f_neq: "f n \<noteq> f k" if "k < n" for k n
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   681
    using that by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   682
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   683
  have inj: "inj f"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   684
  proof (rule injI)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   685
    fix m n :: nat
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   686
    assume "f m = f n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   687
    thus "m = n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   688
      using f_neq[of m n] f_neq[of n m] by (cases m n rule: linorder_cases) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   689
  qed      
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   690
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   691
  have range: "range f = A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   692
  proof safe
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   693
    fix z assume z: "z \<in> A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   694
    show "z \<in> range f"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   695
    proof (rule ccontr)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   696
      assume "z \<notin> range f"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   697
      hence "norm (f n) \<le> norm z" for n
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   698
        using f(3)[of n] z by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   699
      hence "range f \<subseteq> A \<inter> cball 0 (norm z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   700
        using f(1) by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   701
      moreover have "finite (A \<inter> cball 0 (norm z))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   702
        by (intro assms) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   703
      ultimately have "finite (range f)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   704
        using finite_subset by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   705
      moreover have "infinite (range f)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   706
        using inj by (subst finite_image_iff) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   707
      ultimately show False by contradiction
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   708
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   709
  qed (use f(1) in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   710
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   711
  have mono: "mono (norm \<circ> f)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   712
  proof (rule monoI, unfold o_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   713
    fix m n :: nat
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   714
    assume "m \<le> n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   715
    thus "norm (f m) \<le> norm (f n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   716
      using f(4)[of m n] by (cases "m < n") auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   717
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   718
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   719
  have "\<not>bounded A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   720
  proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   721
    assume "bounded A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   722
    hence "bdd_above (norm ` A)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   723
      by (meson bdd_above_norm)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   724
    hence "norm z \<le> Sup (norm ` A)" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   725
      using that by (meson cSUP_upper)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   726
    hence "A \<subseteq> cball 0 (Sup (norm ` A))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   727
      by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   728
    also have "\<dots> \<subseteq> cball 0 (max 1 (Sup (norm ` A)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   729
      by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   730
    finally have "A \<subseteq> A \<inter> cball 0 (max 1 (Sup (norm ` A)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   731
      by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   732
    moreover have "finite (A \<inter> cball 0 (max 1 (Sup (norm ` A))))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   733
      by (intro assms) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   734
    ultimately have "finite A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   735
      using finite_subset by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   736
    hence "finite (range f)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   737
      by (simp add: range)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   738
    thus False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   739
      using inj by (subst (asm) finite_image_iff) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   740
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   741
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   742
  have lim: "filterlim f at_infinity at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   743
    unfolding filterlim_at_infinity_conv_norm_at_top filterlim_at_top
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   744
  proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   745
    fix C :: real
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   746
    from \<open>\<not>bounded A\<close> obtain z where "z \<in> A" "norm z > C"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   747
      unfolding bounded_iff by (auto simp: not_le)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   748
    obtain n where [simp]: "z = f n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   749
      using range \<open>z \<in> A\<close> by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   750
    show "eventually (\<lambda>n. norm (f n) \<ge> C) at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   751
      using eventually_ge_at_top[of n]
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   752
    proof eventually_elim
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   753
      case (elim k)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   754
      have "C \<le> norm (f n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   755
        using \<open>norm z > C\<close> by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   756
      also have "\<dots> \<le> norm (f k)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   757
        using monoD[OF \<open>mono (norm \<circ> f)\<close>, of n k] elim by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   758
      finally show ?case .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   759
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   760
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   761
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   762
  show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   763
    by (intro that[of f] inj range mono lim)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   764
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   765
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   766
(* TODO: of general interest? *)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   767
lemma strict_mono_sequence_partition:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   768
  assumes "strict_mono (f :: nat \<Rightarrow> 'a :: {linorder, no_top})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   769
  assumes "x \<ge> f 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   770
  assumes "filterlim f at_top at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   771
  shows   "\<exists>k. x \<in> {f k..<f (Suc k)}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   772
proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   773
  define k where "k = (LEAST k. f (Suc k) > x)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   774
  {
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   775
    obtain n where "x \<le> f n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   776
      using assms by (auto simp: filterlim_at_top eventually_at_top_linorder)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   777
    also have "f n < f (Suc n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   778
      using assms by (auto simp: strict_mono_Suc_iff)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   779
    finally have "\<exists>n. f (Suc n) > x" by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   780
  }
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   781
  from LeastI_ex[OF this] have "x < f (Suc k)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   782
    by (simp add: k_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   783
  moreover have "f k \<le> x"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   784
  proof (cases k)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   785
    case (Suc k')
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   786
    have "k \<le> k'" if "f (Suc k') > x"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   787
      using that unfolding k_def by (rule Least_le)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   788
    with Suc show "f k \<le> x" by (cases "f k \<le> x") (auto simp: not_le)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   789
  qed (use assms in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   790
  ultimately show ?thesis by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   791
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   792
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   793
(* TODO: of general interest? *)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   794
lemma strict_mono_sequence_partition':
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   795
  assumes "strict_mono (f :: nat \<Rightarrow> 'a :: {linorder, no_top})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   796
  assumes "x \<ge> f 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   797
  assumes "filterlim f at_top at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   798
  shows   "\<exists>!k. x \<in> {f k..<f (Suc k)}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   799
proof (rule ex_ex1I)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   800
  show "\<exists>k. x \<in> {f k..<f (Suc k)}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   801
    using strict_mono_sequence_partition[OF assms] .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   802
  fix k1 k2 assume "x \<in> {f k1..<f (Suc k1)}" "x \<in> {f k2..<f (Suc k2)}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   803
  thus "k1 = k2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   804
  proof (induction k1 k2 rule: linorder_wlog)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   805
    case (le k1 k2)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   806
    hence "f k2 < f (Suc k1)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   807
      by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   808
    hence "k2 < Suc k1"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   809
      using assms(1) strict_mono_less by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   810
    with le show "k1 = k2"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   811
      by linarith
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   812
  qed auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   813
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   814
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   815
lemma sequence_of_sparse_set_exists':
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   816
  fixes A :: "complex set" and c :: "complex \<Rightarrow> nat"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   817
  assumes "infinite A" "closed A" "\<And>r. r \<ge> 0 \<Longrightarrow> finite (A \<inter> cball 0 r)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   818
  assumes c_pos: "\<And>x. x \<in> A \<Longrightarrow> c x > 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   819
  obtains f :: "nat \<Rightarrow> complex" where
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   820
    "mono (norm \<circ> f)" "range f = A" "filterlim f at_infinity at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   821
    "\<And>z. z \<in> A \<Longrightarrow> finite (f -` {z}) \<and> card (f -` {z}) = c z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   822
proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   823
  obtain f :: "nat \<Rightarrow> complex" where f:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   824
    "mono (norm \<circ> f)" "inj f" "range f = A" "filterlim f at_infinity at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   825
    using assms sequence_of_sparse_set_exists by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   826
  have f_eq_iff [simp]: "f m = f n \<longleftrightarrow> m = n" for m n
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   827
    using \<open>inj f\<close> by (auto simp: inj_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   828
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   829
  define h :: "nat \<Rightarrow> nat" where "h = (\<lambda>n. \<Sum>k<n. c (f k))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   830
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   831
  have [simp]: "h 0 = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   832
    by (simp add: h_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   833
  have h_ge: "h n \<ge> n" for n
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   834
  proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   835
    have "h n \<ge> (\<Sum>k<n. 1)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   836
      unfolding h_def by (intro sum_mono) (use c_pos f in \<open>auto simp: Suc_le_eq\<close>)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   837
    thus ?thesis by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   838
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   839
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   840
  have "strict_mono h"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   841
    unfolding strict_mono_Suc_iff using f by (auto simp: h_def c_pos)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   842
  moreover from this have "filterlim h at_top at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   843
    using filterlim_subseq by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   844
  ultimately have Ex1: "\<exists>!k. n \<in> {h k..<h (Suc k)}" for n
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   845
    by (intro strict_mono_sequence_partition') auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   846
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   847
  define g :: "nat \<Rightarrow> nat" where "g = (\<lambda>n. THE k. n \<in> {h k..<h (Suc k)})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   848
  have g: "n \<in> {h (g n)..<h (Suc (g n))}" for n
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   849
    using theI'[OF Ex1[of n]] by (simp add: g_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   850
  have g_eqI: "g n = k" if "n \<in> {h k..<h (Suc k)}" for n k
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   851
    using the1_equality[OF Ex1 that] by (simp add: g_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   852
  have g_h: "g (h n) = n" for n
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   853
    by (rule g_eqI) (auto intro: strict_monoD[OF \<open>strict_mono h\<close>])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   854
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   855
  have "mono g"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   856
    unfolding incseq_Suc_iff
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   857
  proof safe
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   858
    fix n :: nat
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   859
    have "h (g n) + 1 \<le> Suc n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   860
      using g[of n] by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   861
    also have "Suc n < h (Suc (g (Suc n)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   862
      using g[of "Suc n"] by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   863
    finally show "g n \<le> g (Suc n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   864
      by (metis \<open>strict_mono h\<close> add_lessD1 less_Suc_eq_le strict_mono_less)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   865
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   866
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   867
  have "filterlim g at_top at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   868
    unfolding filterlim_at_top
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   869
  proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   870
    fix n :: nat
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   871
    show "eventually (\<lambda>m. g m \<ge> n) at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   872
      using eventually_ge_at_top[of "h n"]
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   873
    proof eventually_elim
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   874
      case (elim m)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   875
      have "n \<le> g (h n)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   876
        by (simp add: g_h)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   877
      also have "g (h n) \<le> g m"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   878
        by (intro monoD[OF \<open>mono g\<close>] elim)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   879
      finally show ?case .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   880
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   881
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   882
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   883
  have vimage: "(f \<circ> g) -` {f n} = {h n..<h (Suc n)}" for n
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   884
    using g by (auto intro!: g_eqI)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   885
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   886
  show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   887
  proof (rule that[of "f \<circ> g"])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   888
    have "incseq (\<lambda>n. (norm \<circ> f) (g n))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   889
      by (intro monoI monoD[OF f(1)] monoD[OF \<open>incseq g\<close>])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   890
    thus "incseq (norm \<circ> (f \<circ> g))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   891
      by (simp add: o_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   892
  next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   893
    have "range (f \<circ> g) \<subseteq> A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   894
      using f(3) by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   895
    moreover have "A \<subseteq> range (f \<circ> g)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   896
    proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   897
      fix z assume "z \<in> A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   898
      then obtain n where [simp]: "z = f n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   899
        using f(3) by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   900
      have "f (g (h n)) \<in> range (f \<circ> g)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   901
        unfolding o_def by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   902
      thus "z \<in> range (f \<circ> g)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   903
        by (simp add: g_h)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   904
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   905
    ultimately show "range (f \<circ> g) = A" by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   906
  next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   907
    fix z assume "z \<in> A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   908
    then obtain n where [simp]: "z = f n"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   909
      using f(3) by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   910
    have "finite {h n..<h (Suc n)}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   911
      by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   912
    moreover have "card {h n..<h (Suc n)} = c z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   913
      by (simp add: h_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   914
    ultimately show "finite ((f \<circ> g) -` {z}) \<and> card ((f \<circ> g) -` {z}) = c z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   915
      using vimage[of n] by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   916
  next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   917
    show "filterlim (f \<circ> g) at_infinity at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   918
      unfolding o_def by (rule filterlim_compose[OF f(4) \<open>filterlim g at_top at_top\<close>])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   919
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   920
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   921
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   922
subsection \<open>The factorisation theorem for holomorphic functions\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   923
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   924
text \<open>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   925
  If \<open>g\<close> is a holomorphic function on an open connected domain whose zeros do not
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   926
  have an accumulation point on the frontier of \<open>A\<close>, then we can write \<open>g\<close> as a product
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   927
  of a function \<open>h\<close> holomorphic on \<open>A\<close> and an entire function \<open>f\<close> such that \<open>h\<close> is non-zero
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   928
  everywhere in \<open>A\<close> and the zeros of \<open>f\<close> are precisely the zeros of \<open>A\<close> with the same multiplicity.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   929
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   930
  In other words, we can get rid of all the zeros of \<open>g\<close> by dividing it with a suitable
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   931
  entire function \<open>f\<close>.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   932
\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   933
theorem weierstrass_factorization:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   934
  assumes "g holomorphic_on A" "open A" "connected A" 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   935
  assumes "\<And>z. z \<in> frontier A \<Longrightarrow> \<not>z islimpt {w\<in>A. g w = 0}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   936
  obtains h f where
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   937
    "h holomorphic_on A" "f holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   938
    "\<forall>z. f z = 0 \<longleftrightarrow> (\<forall>z\<in>A. g z = 0) \<or> (z \<in> A \<and> g z = 0)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   939
    "\<forall>z\<in>A. zorder f z = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   940
    "\<forall>z\<in>A. h z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   941
    "\<forall>z\<in>A. g z = h z * f z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   942
proof (cases "\<forall>z\<in>A. g z = 0")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   943
  case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   944
  show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   945
  proof (rule that[of "\<lambda>_. 1" "\<lambda>_. 0"]; (intro ballI allI impI)?)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   946
    fix z assume z: "z \<in> A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   947
    have ev: "eventually (\<lambda>w. w \<in> A) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   948
      using z assms by (intro eventually_at_in_open') auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   949
    show "zorder (\<lambda>_::complex. 0 :: complex) z = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   950
      by (intro zorder_cong eventually_mono[OF ev] refl) (use True in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   951
  qed (use assms True in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   952
next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   953
  case not_identically_zero: False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   954
  define Z where "Z = {z\<in>A. g z = 0}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   955
  have freq_nz: "frequently (\<lambda>z. g z \<noteq> 0) (at z)" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   956
  proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   957
    have "\<forall>\<^sub>F w in at z. g w \<noteq> 0 \<and> w \<in> A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   958
      using non_zero_neighbour_alt[OF assms(1,2,3) that(1)] not_identically_zero by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   959
    hence  "\<forall>\<^sub>F w in at z. g w \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   960
      by eventually_elim auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   961
    thus ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   962
      using eventually_frequently by force
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   963
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   964
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   965
  have zorder_pos_iff: "zorder g z > 0 \<longleftrightarrow> g z = 0" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   966
    by (subst zorder_pos_iff[OF assms(1,2) that]) (use freq_nz[of z] that in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   967
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   968
  show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   969
  proof (cases "finite Z")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   970
    case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   971
    define f where "f = (\<lambda>z. \<Prod>w\<in>Z. (z - w) powi (zorder g w))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   972
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   973
    have eq_zero_iff: "f z = 0 \<longleftrightarrow> z \<in> A \<and> g z = 0" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   974
      using True local.zorder_pos_iff
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   975
      unfolding f_def Z_def by fastforce
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   976
    have zorder_eq: "zorder f z = zorder g z" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   977
    proof (cases "g z = 0")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   978
      case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   979
      have "g analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   980
        using that assms analytic_at by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   981
      hence [simp]: "zorder g z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   982
        using False by (intro zorder_eq_0I) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   983
      moreover have "f analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   984
        unfolding f_def by (auto intro!: analytic_intros)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   985
      hence "zorder f z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   986
        using False by (intro zorder_eq_0I) (auto simp: eq_zero_iff)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   987
      ultimately show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   988
        by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   989
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   990
      case zero: True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   991
      have "g analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   992
        using that assms(1,2) analytic_at by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   993
      hence "zorder g z \<ge> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   994
        using that by (intro zorder_ge_0 freq_nz) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   995
      define f' where "f' = (\<lambda>z'. (\<Prod>w\<in>Z-{z}. (z' - w) powi (zorder g w)))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   996
      have "zorder (\<lambda>z'. (z' - z) powi (zorder g z) * f' z') z = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   997
      proof (rule zorder_eqI)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   998
        show "open (UNIV :: complex set)" "f' holomorphic_on UNIV" "z \<in> UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
   999
          using local.zorder_pos_iff
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1000
          by (fastforce intro!: holomorphic_intros simp: f'_def Z_def)+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1001
        show "f' z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1002
          using True unfolding f'_def by (subst prod_zero_iff) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1003
      qed (use \<open>zorder g z \<ge> 0\<close> in \<open>auto simp: powr_of_int\<close>)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1004
      also have "(\<lambda>z'. (z' - z) powi (zorder g z) * f' z') = f"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1005
      proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1006
        fix z' :: complex
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1007
        have "Z = insert z (Z - {z})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1008
          using that zero by (auto simp: Z_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1009
        also have "(\<Prod>w\<in>\<dots>. (z' - w) powi (zorder g w)) = (z' - z) powi (zorder g z) * f' z'"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1010
          using True by (subst prod.insert) (auto simp: f'_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1011
        finally show "(z' - z) powi (zorder g z) * f' z' = f z'"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1012
          by (simp add: f_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1013
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1014
      finally show ?thesis .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1015
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1016
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1017
    obtain h :: "complex \<Rightarrow> complex" where h:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1018
       "h holomorphic_on A" "\<And>z. z \<in> A \<Longrightarrow> h z \<noteq> 0" "\<And>z. z \<in> A \<Longrightarrow> g z = h z * f z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1019
    proof (rule holomorphic_zorder_factorization[OF assms(1-3)])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1020
      show "f holomorphic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1021
        using local.zorder_pos_iff
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1022
        unfolding f_def Z_def by (fastforce intro: holomorphic_intros)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1023
      show "f z = 0 \<longleftrightarrow> g z = 0" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1024
        using that by (subst eq_zero_iff) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1025
      show "zorder f z = zorder g z" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1026
        by (rule zorder_eq) fact
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1027
    qed metis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1028
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1029
    show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1030
    proof (rule that[of h f]; (intro ballI)?)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1031
      show "h holomorphic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1032
        by fact
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1033
      show "f holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1034
        using local.zorder_pos_iff
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1035
        unfolding f_def Z_def by (fastforce intro: holomorphic_intros)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1036
    qed (use True not_identically_zero in \<open>auto simp: eq_zero_iff zorder_eq h(2) h(3)[symmetric]\<close>)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1037
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1038
  next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1039
    case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1040
    note infinite_zeroes = not_identically_zero False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1041
    define c where "c = (\<lambda>z. nat (zorder g z))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1042
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1043
    have ev_nz: "eventually (\<lambda>w. g w \<noteq> 0) (at z)" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1044
    proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1045
      from infinite_zeroes(1) obtain z0 where z0: "z0 \<in> A" "g z0 \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1046
        by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1047
      have "eventually (\<lambda>w. g w \<noteq> 0 \<and> w \<in> A) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1048
        by (rule non_zero_neighbour_alt[where ?\<beta> = z0]) (use assms z0 that in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1049
      thus ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1050
        by eventually_elim auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1051
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1052
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1053
    have no_limpt_Z: "\<not>z islimpt Z" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1054
    proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1055
      assume "z islimpt Z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1056
      show False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1057
      proof (cases "z \<in> A")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1058
        case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1059
        have "z islimpt A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1060
          by (rule islimpt_subset[OF \<open>z islimpt Z\<close>]) (auto simp: Z_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1061
        hence "z \<in> closure A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1062
          by (simp add: closure_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1063
        with \<open>z \<notin> A\<close> have "z \<in> frontier A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1064
          by (simp add: closure_Un_frontier)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1065
        with assms and \<open>z islimpt Z\<close> show False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1066
          by (auto simp: Z_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1067
      next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1068
        case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1069
        from True have "eventually (\<lambda>w. g w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1070
          using ev_nz by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1071
        hence "\<not>z islimpt Z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1072
          by (auto simp: islimpt_iff_eventually Z_def elim!: eventually_mono)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1073
        with \<open>z islimpt Z\<close> show False by blast        
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1074
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1075
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1076
    have "closed Z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1077
      using no_limpt_Z unfolding closed_limpt by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1078
   
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1079
    obtain a where a:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1080
        "incseq (norm \<circ> a)" "range a = Z - {0}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1081
        "\<And>z. z \<in> Z - {0} \<Longrightarrow> finite (a -` {z}) \<and> card (a -` {z}) = c z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1082
        "filterlim a at_infinity at_top"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1083
    proof (rule sequence_of_sparse_set_exists')
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1084
      show "infinite (Z - {0})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1085
        using infinite_zeroes(2) by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1086
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1087
      show "closed (Z - {0})" 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1088
        unfolding closed_limpt using no_limpt_Z islimpt_subset by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1089
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1090
      show "finite ((Z - {0}) \<inter> cball 0 R)" if "R \<ge> 0" for R
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1091
      proof (rule ccontr)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1092
        assume *: "infinite ((Z - {0}) \<inter> cball 0 R)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1093
        have "\<exists>z\<in>cball 0 R. z islimpt ((Z - {0}) \<inter> cball 0 R)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1094
          by (rule Heine_Borel_imp_Bolzano_Weierstrass) (use * in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1095
        then obtain z where "z islimpt ((Z - {0}) \<inter> cball 0 R)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1096
          by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1097
        hence "z islimpt Z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1098
          using islimpt_subset by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1099
        thus False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1100
          using no_limpt_Z by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1101
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1102
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1103
      show "c z > 0" if "z \<in> Z - {0}" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1104
        using zorder_pos_iff[of z] that by (auto simp: c_def Z_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1105
    qed metis 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1106
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1107
    interpret f: weierstrass_product' a
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1108
    proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1109
      show "a n \<noteq> 0" for n
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1110
        using a(2) by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1111
      show "finite (a -` {z})" if "z \<in> range a" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1112
        using a(3)[of z] a(2) that by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1113
    qed fact+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1114
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1115
    define m where "m = (if 0 \<in> A then nat (zorder g 0) else  0)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1116
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1117
    have zorder_eq: "zorder (\<lambda>z. z ^ m * f.f z) z = zorder g z" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1118
    proof (cases "g z = 0")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1119
      case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1120
      have "g analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1121
        using \<open>z \<in> A\<close> analytic_at assms by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1122
      hence "zorder g z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1123
        by (intro zorder_eq_0I False)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1124
      have "z \<notin> range a"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1125
        using False Z_def a(2) by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1126
      hence "zorder (\<lambda>z. z ^ m * f.f z) z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1127
        using False \<open>zorder g z = 0\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1128
        by (intro zorder_eq_0I analytic_intros) (auto simp: f.zero m_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1129
      with \<open>zorder g z = 0\<close> show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1130
        by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1131
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1132
      case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1133
      define F where "F = fps_expansion f.f z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1134
      have "frequently (\<lambda>w. g w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1135
        using ev_nz[OF that] eventually_frequently by force
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1136
      hence "zorder g z \<ge> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1137
        by (intro zorder_ge_0) (use assms that in \<open>auto simp: analytic_at\<close>)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1138
      
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1139
      have ev: "eventually (\<lambda>z. z \<in> A) (nhds z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1140
        using that assms by (intro eventually_nhds_in_open) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1141
      have exp1: "(\<lambda>w. f.f (z + w)) has_fps_expansion F"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1142
        unfolding F_def by (intro analytic_at_imp_has_fps_expansion[OF f.analytic])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1143
      have exp2: "(\<lambda>w. (z + w) ^ m * f.f (z + w)) has_fps_expansion (fps_const z + fps_X) ^ m * F"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1144
        by (intro fps_expansion_intros exp1)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1145
      have [simp]: "F \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1146
      proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1147
        assume "F = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1148
        hence "eventually (\<lambda>z. f.f z = 0) (nhds z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1149
          using exp1 by (auto simp: has_fps_expansion_def nhds_to_0' eventually_filtermap)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1150
        hence "eventually (\<lambda>z. g z = 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1151
          by (auto simp: f.zero a Z_def eventually_at_filter elim!: eventually_mono)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1152
        hence "eventually (\<lambda>z::complex. False) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1153
          using ev_nz[OF \<open>z \<in> A\<close>] by eventually_elim auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1154
        thus False by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1155
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1156
      
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1157
      have "zorder (\<lambda>w. w ^ m * f.f w) z = int (subdegree ((fps_const z + fps_X) ^ m * F))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1158
        using has_fps_expansion_zorder[OF exp2] by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1159
      also have "\<dots> = int (subdegree F) + (if z = 0 then m else 0)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1160
        by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1161
      also have "int (subdegree F) = zorder f.f z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1162
        using has_fps_expansion_zorder[OF exp1] by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1163
      also have "\<dots> = int (card (a -` {z}))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1164
        by (rule f.zorder)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1165
      also have "card (a -` {z}) = (if z = 0 then 0 else c z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1166
      proof (cases "z = 0")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1167
        case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1168
        hence "a -` {z} = {}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1169
          using a(2) by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1170
        thus ?thesis using True by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1171
      next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1172
        case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1173
        thus ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1174
          by (subst a(3)) (use True that in \<open>auto simp: Z_def\<close>)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1175
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1176
      also have "int \<dots> + (if z = 0 then m else 0) = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1177
        using \<open>zorder g z \<ge> 0\<close> that by (auto simp: c_def m_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1178
      finally show ?thesis .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1179
    qed 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1180
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1181
    have eq_zero_iff: "z ^ m * f.f z = 0 \<longleftrightarrow> g z = 0" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1182
      using that by (auto simp add: f.zero a m_def zorder_pos_iff Z_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1183
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1184
    obtain h :: "complex \<Rightarrow> complex" where h:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1185
       "h holomorphic_on A" "\<And>z. z \<in> A \<Longrightarrow> h z \<noteq> 0" "\<And>z. z \<in> A \<Longrightarrow> g z = h z * (z ^ m * f.f z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1186
    proof (rule holomorphic_zorder_factorization[OF assms(1-3)])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1187
      show "(\<lambda>z. z ^ m * f.f z) holomorphic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1188
        by (intro holomorphic_intros)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1189
      show "z ^ m * f.f z = 0 \<longleftrightarrow> g z = 0" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1190
        by (rule eq_zero_iff) fact+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1191
      show "zorder (\<lambda>z. z ^ m * f.f z) z = zorder g z" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1192
        by (rule zorder_eq) fact+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1193
    qed metis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1194
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1195
    show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1196
    proof (rule that[of h "\<lambda>z. z ^ m * f.f z"]; (intro ballI allI impI)?)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1197
      show "h holomorphic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1198
        by fact
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1199
      show "(\<lambda>z. z ^ m * f.f z) holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1200
        by (intro holomorphic_intros)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1201
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1202
      fix z :: complex
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1203
      show "(z ^ m * f.f z = 0) = ((\<forall>z\<in>A. g z = 0) \<or> z \<in> A \<and> g z = 0)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1204
        using infinite_zeroes(1) a(2)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1205
        by (auto simp: m_def zorder_eq eq_zero_iff zorder_pos_iff Z_def f.zero)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1206
    qed (use zorder_eq eq_zero_iff h in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1207
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1208
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1209
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1210
text \<open>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1211
  The following is a simpler version for entire functions.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1212
\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1213
theorem weierstrass_factorization_UNIV:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1214
  assumes "g holomorphic_on UNIV" 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1215
  obtains h f where
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1216
    "h holomorphic_on UNIV" "f holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1217
    "\<forall>z. f z = 0 \<longleftrightarrow> g z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1218
    "\<forall>z. zorder f z = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1219
    "\<forall>z. h z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1220
    "\<forall>z. g z = h z * f z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1221
  using assms by (rule weierstrass_factorization, goal_cases) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1222
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1223
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1224
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1225
subsection \<open>The factorisation theorem for meromorphic functions\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1226
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1227
text \<open>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1228
  Let \<open>g\<close> be a meromorphic function on a connected open domain \<open>A\<close>. Assume that the poles and
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1229
  zeros of \<open>g\<close> have no accumulation point on the border of \<open>A\<close>. Then \<open>g\<close> can be written in the
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1230
  form $g(z) = h(z) f_1(z) / f_2(z)$ where $h$ is holomorphic on \<open>A\<close> with no zeroes and $f_1$ and
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1231
  $f_2$ are entire.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1232
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1233
  Moreover, as direct consequences of that, the zeroes of $f_1$ are precisely the zeroes of $g$
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1234
  and the zeros of $f_2$ are precisely the poles of $g$ (with the corresponding multiplicity).
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1235
\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1236
theorem weierstrass_factorization_meromorphic:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1237
  assumes mero: "g nicely_meromorphic_on A" and A: "open A" "connected A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1238
  assumes no_limpt: "\<And>z. z \<in> frontier A \<Longrightarrow> \<not>z islimpt {w\<in>A. g w = 0 \<or> is_pole g w}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1239
  obtains h f1 f2 where
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1240
    "h holomorphic_on A" "f1 holomorphic_on UNIV" "f2 holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1241
    "\<forall>z\<in>A. f1 z = 0 \<longleftrightarrow> \<not>is_pole g z \<and> g z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1242
    "\<forall>z\<in>A. f2 z = 0 \<longleftrightarrow> is_pole g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1243
    "\<forall>z\<in>A. \<not>is_pole g z \<longrightarrow> zorder f1 z = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1244
    "\<forall>z\<in>A. is_pole g z \<longrightarrow> zorder f2 z = -zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1245
    "\<forall>z\<in>A. h z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1246
    "\<forall>z\<in>A. g z = h z * f1 z / f2 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1247
proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1248
  have mero': "g meromorphic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1249
    using mero unfolding nicely_meromorphic_on_def by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1250
  define pts where "pts = {z\<in>A. is_pole g z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1251
  have "{z. is_pole g z} sparse_in A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1252
    using meromorphic_on_imp_not_pole_cosparse[OF mero']
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1253
    by (auto simp: eventually_cosparse)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1254
  hence "pts sparse_in A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1255
    unfolding pts_def by (rule sparse_in_subset2) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1256
  have open_diff_pts: "open (A - pts')" if "pts' \<subseteq> pts" for pts'
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1257
  proof (rule open_diff_sparse_pts)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1258
    show "pts' sparse_in A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1259
      using \<open>pts sparse_in A\<close> by (rule sparse_in_subset2) fact
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1260
  qed (use \<open>open A\<close> in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1261
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1262
  have ev: "eventually (\<lambda>w. w \<in> A - pts) (at z)" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1263
  proof (cases "z \<in> pts")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1264
    case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1265
    thus ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1266
      using that open_diff_pts[of "pts"] by (intro eventually_at_in_open') auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1267
  next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1268
    case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1269
    have "eventually (\<lambda>w. w \<in> (A - (pts - {z})) - {z}) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1270
      using that by (intro eventually_at_in_open open_diff_pts) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1271
    also have "A - (pts - {z}) - {z} = A - pts"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1272
      using True by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1273
    finally show ?thesis .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1274
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1275
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1276
  show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1277
  proof (cases "\<forall>z\<in>A-pts. g z = 0")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1278
    case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1279
    have no_poles: "\<not>is_pole g z" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1280
    proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1281
      have "is_pole g z \<longleftrightarrow> is_pole (\<lambda>_::complex. 0 :: complex) z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1282
        by (intro is_pole_cong[OF eventually_mono[OF ev]]) (use that True in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1283
      thus ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1284
        by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1285
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1286
    hence [simp]: "pts = {}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1287
      by (auto simp: pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1288
    have [simp]: "zorder g z = zorder (\<lambda>_::complex. 0 :: complex) z" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1289
      by (intro zorder_cong[OF eventually_mono[OF ev]]) (use True that in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1290
    show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1291
      by (rule that[of "\<lambda>_. 1" "\<lambda>_. 0" "\<lambda>_. 1"]) (use True in \<open>auto simp: no_poles\<close>)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1292
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1293
  next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1294
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1295
    case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1296
    have is_pole_iff: "is_pole g z \<longleftrightarrow> z \<in> pts" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1297
      using that by (auto simp: pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1298
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1299
    obtain h f1 where h_f1:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1300
      "h holomorphic_on A - pts" "f1 holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1301
      "\<forall>z. f1 z = 0 \<longleftrightarrow> (\<forall>z\<in>A-pts. g z = 0) \<or> (z \<in> A - pts \<and> g z = 0)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1302
      "\<forall>z\<in>A-pts. zorder f1 z = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1303
      "\<forall>z\<in>A-pts. h z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1304
      "\<forall>z\<in>A-pts. g z = h z * f1 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1305
    proof (rule weierstrass_factorization)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1306
      have "g analytic_on A - pts"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1307
        by (rule nicely_meromorphic_without_singularities)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1308
           (use mero in \<open>auto simp: pts_def dest: nicely_meromorphic_on_subset\<close>)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1309
      thus holo: "g holomorphic_on A - pts"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1310
        by (rule analytic_imp_holomorphic)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1311
      show "open (A - pts)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1312
        by (rule open_diff_pts) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1313
      show "connected (A - pts)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1314
        by (rule sparse_imp_connected) (use A \<open>pts sparse_in A\<close> in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1315
      show "\<not> z islimpt {w \<in> A - pts. g w = 0}" if "z \<in> frontier (A - pts)" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1316
      proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1317
        from that have "z \<in> frontier A - pts \<union> pts"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1318
          using \<open>open (A - pts)\<close> \<open>open A\<close> closure_mono[of "A - pts" A]
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1319
          by (auto simp: frontier_def interior_open)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1320
        thus ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1321
        proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1322
          assume "z \<in> pts"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1323
          hence "is_pole g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1324
            by (auto simp: pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1325
          hence "eventually (\<lambda>z. g z \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1326
            using non_zero_neighbour_pole by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1327
          hence "\<not>z islimpt {w. g w = 0}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1328
            by (auto simp: islimpt_iff_eventually)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1329
          thus ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1330
            using islimpt_subset[of z "{w\<in>A-pts. g w = 0}" "{w. g w = 0}"] by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1331
        next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1332
          assume z: "z \<in> frontier A - pts"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1333
          show "\<not> z islimpt {w \<in> A - pts. g w = 0}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1334
          proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1335
            assume "z islimpt {w \<in> A - pts. g w = 0}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1336
            hence "z islimpt {w \<in> A. g w = 0 \<or> is_pole g w}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1337
              by (rule islimpt_subset) (auto simp: pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1338
            thus False using no_limpt z by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1339
          qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1340
        qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1341
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1342
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1343
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1344
    have f1_eq_0_iff: "f1 z = 0 \<longleftrightarrow> (z \<in> A - pts \<and> g z = 0)" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1345
      using h_f1(3) False by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1346
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1347
    define h' where "h' = (\<lambda>z. if z \<in> pts then 0 else inverse (h z))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1348
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1349
    have isolated_h: "isolated_singularity_at h z" if "z \<in> pts" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1350
    proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1351
      have "open (A - (pts - {z}))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1352
        by (rule open_diff_pts) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1353
      moreover have "z \<in> (A - (pts - {z}))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1354
        using that by (auto simp: pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1355
      moreover have "h holomorphic_on (A - (pts - {z})) - {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1356
        by (rule holomorphic_on_subset[OF h_f1(1)]) (use that in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1357
      ultimately show "isolated_singularity_at h z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1358
        using isolated_singularity_at_holomorphic by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1359
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1360
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1361
    have is_pole_h: "is_pole h z" if "z \<in> A" "is_pole g z" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1362
    proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1363
      have f1: "f1 analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1364
        by (meson analytic_on_holomorphic h_f1(2) open_UNIV top_greatest)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1365
      have "eventually (\<lambda>w. g w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1366
        using \<open>is_pole g z\<close> non_zero_neighbour_pole by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1367
      with ev[OF that(1)] have ev': "eventually (\<lambda>w. g w * f1 w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1368
        by eventually_elim (use h_f1(3) in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1369
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1370
      have "is_pole (\<lambda>w. g w / f1 w) z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1371
      proof (rule is_pole_divide_zorder)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1372
        show "isolated_singularity_at f1 z" "not_essential f1 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1373
          using f1 by (simp_all add: isolated_singularity_at_analytic not_essential_analytic)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1374
        show "isolated_singularity_at g z" "not_essential g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1375
          using mero' that unfolding meromorphic_on_altdef by blast+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1376
        show freq: "frequently (\<lambda>w. g w * f1 w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1377
          using ev' by (rule eventually_frequently[rotated]) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1378
        from freq have freq': "frequently (\<lambda>w. f1 w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1379
          using frequently_elim1 by fastforce
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1380
        have "zorder g z < 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1381
          using \<open>is_pole g z\<close> \<open>isolated_singularity_at g z\<close> isolated_pole_imp_neg_zorder by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1382
        also have "0 \<le> zorder f1 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1383
          by (rule zorder_ge_0[OF f1 freq'])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1384
        finally show "zorder g z < zorder f1 z" .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1385
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1386
      also have "?this \<longleftrightarrow> is_pole h z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1387
      proof (intro is_pole_cong refl eventually_mono[OF eventually_conj[OF ev[OF that(1)] ev']])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1388
        fix w assume "w \<in> A - pts \<and> g w * f1 w \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1389
        thus "g w / f1 w = h w" using h_f1(6)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1390
          by (auto simp: divide_simps)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1391
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1392
      finally show "is_pole h z" .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1393
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1394
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1395
    have "h' analytic_on {z}" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1396
    proof (cases "z \<in> pts")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1397
      case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1398
      moreover have "open (A - pts)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1399
        by (rule open_diff_pts) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1400
      ultimately have "(\<lambda>z. inverse (h z)) analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1401
        using that h_f1(1,2,5) \<open>open (A - pts)\<close> analytic_at False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1402
        by (intro analytic_intros) (auto simp: f1_eq_0_iff)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1403
      also have "eventually (\<lambda>z. z \<in> A - pts) (nhds z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1404
        using that False \<open>open (A - pts)\<close> by (intro eventually_nhds_in_open) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1405
      hence "(\<lambda>z. inverse (h z)) analytic_on {z} \<longleftrightarrow> h' analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1406
        by (intro analytic_at_cong) (auto elim!: eventually_mono simp: h'_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1407
      finally show ?thesis .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1408
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1409
      case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1410
      have "(\<lambda>w. if w = z then 0 else inverse (h w)) holomorphic_on (A - (pts - {z}))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1411
      proof (rule is_pole_inverse_holomorphic)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1412
        from True have "A - (pts - {z}) - {z} = A - pts"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1413
          by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1414
        thus "h holomorphic_on A - (pts - {z}) - {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1415
          using h_f1(1) by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1416
      next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1417
        show "open (A - (pts - {z}))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1418
          by (rule open_diff_pts) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1419
      next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1420
        have "is_pole g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1421
          using True that by (simp add: is_pole_iff)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1422
        thus "is_pole h z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1423
          using is_pole_h that by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1424
      next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1425
        show "\<forall>w\<in>A-(pts-{z})-{z}. h w \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1426
          using h_f1(5) by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1427
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1428
      also have "?this \<longleftrightarrow> h' holomorphic_on A - (pts - {z})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1429
      proof (intro holomorphic_cong refl)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1430
        fix w assume w: "w \<in> A - (pts - {z})"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1431
        show "(if w = z then 0 else inverse (h w)) = h' w"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1432
          using True w by (cases "w = z") (auto simp: h'_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1433
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1434
      finally have "h' holomorphic_on A - (pts - {z})" .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1435
      moreover have "z \<in> A - (pts - {z})" "open (A - (pts - {z}))"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1436
        using True that by (auto intro!: open_diff_pts)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1437
      ultimately show "h' analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1438
        using analytic_at by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1439
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1440
    hence h': "h' analytic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1441
      using analytic_on_analytic_at by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1442
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1443
    have h'_eq_0_iff: "h' w = 0 \<longleftrightarrow> is_pole g w" if "w \<in> A" for w
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1444
      using that h_f1(5) is_pole_iff[of w] by (auto simp: h'_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1445
 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1446
    obtain h'' f2 where h''_f2:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1447
       "h'' holomorphic_on A" "f2 holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1448
       "\<forall>z. f2 z = 0 \<longleftrightarrow> (\<forall>z\<in>A. h' z = 0) \<or> (z \<in> A \<and> h' z = 0)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1449
       "\<forall>z\<in>A. h' z = 0 \<longrightarrow> zorder f2 z = zorder h' z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1450
       "\<forall>z\<in>A. h'' z \<noteq> 0" "\<forall>z\<in>A. h' z = h'' z * f2 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1451
    proof (rule weierstrass_factorization[of h' A])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1452
      show "open A" "connected A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1453
        by fact+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1454
      show "h' holomorphic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1455
        using h' \<open>open A\<close> by (simp add: analytic_on_open)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1456
      show "\<not>z islimpt {w\<in>A. h' w = 0}" if "z \<in> frontier A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1457
      proof
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1458
        assume "z islimpt {w\<in>A. h' w = 0}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1459
        also have "{w\<in>A. h' w = 0} = pts"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1460
          by (auto simp: h'_eq_0_iff pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1461
        finally have "z islimpt {w \<in> A. g w = 0 \<or> is_pole g w}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1462
          by (rule islimpt_subset) (auto simp: pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1463
        thus False using no_limpt[of z] that
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1464
          by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1465
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1466
    qed blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1467
  
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1468
    show ?thesis
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1469
    proof (rule that[of "\<lambda>w. inverse (h'' w)" f1 f2]; (intro ballI allI impI)?)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1470
      show "(\<lambda>w. inverse (h'' w)) holomorphic_on A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1471
        using h''_f2(1,2,5) by (intro holomorphic_intros) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1472
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1473
      show "f1 holomorphic_on UNIV" "f2 holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1474
        by fact+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1475
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1476
      show "f1 z = 0 \<longleftrightarrow> \<not> is_pole g z \<and> g z = 0" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1477
        using that by (subst f1_eq_0_iff) (auto simp: pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1478
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1479
      show "f2 z = 0 \<longleftrightarrow> is_pole g z" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1480
      proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1481
        have "\<not>(\<forall>z\<in>A. h' z = 0)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1482
          using False h''_f2(6) h_f1(6) h'_eq_0_iff is_pole_iff by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1483
        hence "f2 z = 0 \<longleftrightarrow> h' z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1484
          using h''_f2(3) that by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1485
        also have "\<dots> \<longleftrightarrow> is_pole g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1486
          using that by (simp add: is_pole_iff h'_eq_0_iff)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1487
        finally show ?thesis .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1488
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1489
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1490
      show "zorder f1 z = zorder g z" if "z \<in> A" "\<not>is_pole g z" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1491
        using h_f1(4) that by (auto simp: pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1492
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1493
      show "zorder f2 z = -zorder g z" if "z \<in> A" "is_pole g z" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1494
      proof -
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1495
        have "zorder f2 z = zorder h' z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1496
          using h''_f2(4) that h'_eq_0_iff[of z] is_pole_iff[of z] by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1497
        also have "\<dots> = zorder (\<lambda>w. inverse (h w)) z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1498
          using that by (intro zorder_cong eventually_mono[OF ev]) (auto simp: h'_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1499
        also have "\<dots> = -zorder h z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1500
        proof (intro zorder_inverse)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1501
          have "is_pole h z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1502
            using that is_pole_iff[of z] is_pole_h[of z] by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1503
          thus "not_essential h z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1504
            by force
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1505
          show "frequently (\<lambda>w. h w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1506
            using non_zero_neighbour_pole[OF \<open>is_pole h z\<close>] eventually_frequently by force
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1507
        qed (use that in \<open>auto intro!: isolated_h simp: pts_def\<close>)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1508
        also have "zorder f1 z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1509
        proof (rule zorder_eq_0I)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1510
          show "f1 analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1511
            using that h_f1(2) holomorphic_on_imp_analytic_at by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1512
          show "f1 z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1513
            using that h_f1(3) False by (auto simp: pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1514
        qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1515
        hence "zorder h z = zorder f1 z + zorder h z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1516
          by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1517
        also have "\<dots> = zorder (\<lambda>w. f1 w * h w) z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1518
        proof (rule zorder_times [symmetric])
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1519
          have "f1 analytic_on {z}"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1520
            using that h_f1(2) holomorphic_on_imp_analytic_at by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1521
          thus "isolated_singularity_at f1 z" "not_essential f1 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1522
            using isolated_singularity_at_analytic not_essential_analytic by blast+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1523
          show "isolated_singularity_at h z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1524
            using that by (intro isolated_h) (auto simp: pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1525
          have "is_pole h z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1526
            using is_pole_iff[of z] that by (intro is_pole_h) auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1527
          thus "not_essential h z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1528
            by force
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1529
          have "z \<in> A"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1530
            using that by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1531
          have "eventually (\<lambda>w. g w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1532
            using non_zero_neighbour_pole[of g z] that by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1533
          hence "eventually (\<lambda>w. f1 w * h w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1534
            using ev[OF \<open>z \<in> A\<close>]  by eventually_elim (use h_f1(6) in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1535
          thus "frequently (\<lambda>w. f1 w * h w \<noteq> 0) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1536
            using eventually_frequently by force
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1537
        qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1538
        also have "\<dots> = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1539
        proof (rule zorder_cong)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1540
          have "eventually (\<lambda>w. w \<in> A - pts) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1541
            using ev[of z] that by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1542
          thus "eventually (\<lambda>w. f1 w * h w = g w) (at z)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1543
            by eventually_elim (use h_f1(6) in auto)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1544
        qed auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1545
        finally show ?thesis .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1546
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1547
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1548
      show "inverse (h'' z) \<noteq> 0" if "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1549
        using h''_f2(5) that by auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1550
    next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1551
      show "g z = inverse (h'' z) * f1 z / f2 z" if z: "z \<in> A" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1552
      proof (cases "is_pole g z")
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1553
        case False
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1554
        have *: "g z = h z * f1 z" "h' z = h'' z * f2 z" "h'' z \<noteq> 0" "h z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1555
          using that h''_f2(5,6) h_f1(5,6) False unfolding pts_def by blast+
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1556
        have "g z = h z * f1 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1557
          by fact
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1558
        also have "\<dots> = f1 z / h' z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1559
          using * that False by (simp add: h'_def field_simps pts_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1560
        also have "h' z = h'' z * f2 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1561
          by fact
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1562
        also have "f1 z / (h'' z * f2 z) = inverse (h'' z) * f1 z / f2 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1563
          by (simp add: divide_inverse_commute)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1564
        finally show ?thesis .
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1565
      next
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1566
        case True
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1567
        have "\<not>g \<midarrow>z\<rightarrow> g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1568
          using True at_neq_bot is_pole_def not_tendsto_and_filterlim_at_infinity by blast
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1569
        with mero and z and True have "g z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1570
          by (auto simp: nicely_meromorphic_on_def)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1571
        moreover have "f2 z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1572
          using True z by (simp add: h''_f2(3) h'_eq_0_iff)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1573
        ultimately show ?thesis by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1574
      qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1575
    qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1576
  qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1577
qed
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1578
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1579
text \<open>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1580
  Again, we derive an easier version for functions meromorphic on the entire complex plane.
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1581
\<close>
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1582
theorem weierstrass_factorization_meromorphic_UNIV:
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1583
  assumes "g nicely_meromorphic_on UNIV" 
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1584
  obtains h f1 f2 where
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1585
    "h holomorphic_on UNIV" "f1 holomorphic_on UNIV" "f2 holomorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1586
    "\<forall>z. f1 z = 0 \<longleftrightarrow> \<not>is_pole g z \<and> g z = 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1587
    "\<forall>z. f2 z = 0 \<longleftrightarrow> is_pole g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1588
    "\<forall>z. \<not>is_pole g z \<longrightarrow> zorder f1 z = zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1589
    "\<forall>z. is_pole g z \<longrightarrow> zorder f2 z = -zorder g z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1590
    "\<forall>z. h z \<noteq> 0"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1591
    "\<forall>z. g z = h z * f1 z / f2 z"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1592
proof (rule weierstrass_factorization_meromorphic)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1593
  show "g nicely_meromorphic_on UNIV"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1594
    by fact
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1595
  show "connected (UNIV :: complex set)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1596
    by (simp add: Convex.connected_UNIV)
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1597
  show "\<not> z islimpt {w \<in> UNIV. g w = 0 \<or> is_pole g w}" if "z \<in> frontier UNIV" for z
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1598
    using that by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1599
  show "open (UNIV :: complex set)"
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1600
    by simp
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1601
qed auto
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1602
3f415c76a511 more general definition of meromorphicity; Weierstraß factorisation theorem
Manuel Eberl <eberlm@in.tum.de>
parents:
diff changeset
  1603
end