src/HOL/Multivariate_Analysis/Complex_Transcendental.thy
author paulson
Mon, 11 Jan 2016 22:14:15 +0000
changeset 62131 1baed43f453e
parent 62087 44841d07ef1d
child 62381 a6479cb85944
child 62390 842917225d56
permissions -rw-r--r--
nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
     1
section \<open>Complex Transcendental Functions\<close>
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     2
61711
21d7910d6816 Theory of homotopic paths (from HOL Light), plus comments and minor refinements
paulson <lp15@cam.ac.uk>
parents: 61694
diff changeset
     3
text\<open>By John Harrison et al.  Ported from HOL Light by L C Paulson (2015)\<close>
21d7910d6816 Theory of homotopic paths (from HOL Light), plus comments and minor refinements
paulson <lp15@cam.ac.uk>
parents: 61694
diff changeset
     4
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     5
theory Complex_Transcendental
62049
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
     6
imports 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
     7
  Complex_Analysis_Basics
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
     8
  Summation
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     9
begin
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    10
62049
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    11
(* TODO: Figure out what to do with Möbius transformations *)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    12
definition "moebius a b c d = (\<lambda>z. (a*z+b) / (c*z+d :: 'a :: field))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    13
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    14
lemma moebius_inverse: 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    15
  assumes "a * d \<noteq> b * c" "c * z + d \<noteq> 0"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    16
  shows   "moebius d (-b) (-c) a (moebius a b c d z) = z"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    17
proof -
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    18
  from assms have "(-c) * moebius a b c d z + a \<noteq> 0" unfolding moebius_def
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    19
    by (simp add: field_simps)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    20
  with assms show ?thesis
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    21
    unfolding moebius_def by (simp add: moebius_def divide_simps) (simp add: algebra_simps)?
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    22
qed
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    23
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    24
lemma moebius_inverse': 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    25
  assumes "a * d \<noteq> b * c" "c * z - a \<noteq> 0"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    26
  shows   "moebius a b c d (moebius d (-b) (-c) a z) = z"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    27
  using assms moebius_inverse[of d a "-b" "-c" z]
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    28
  by (auto simp: algebra_simps)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
    29
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    30
lemma cmod_add_real_less:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    31
  assumes "Im z \<noteq> 0" "r\<noteq>0"
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
    32
    shows "cmod (z + r) < cmod z + \<bar>r\<bar>"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    33
proof (cases z)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    34
  case (Complex x y)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    35
  have "r * x / \<bar>r\<bar> < sqrt (x*x + y*y)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    36
    apply (rule real_less_rsqrt)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    37
    using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    38
    apply (simp add: Complex power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    39
    using not_real_square_gt_zero by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    40
  then show ?thesis using assms Complex
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    41
    apply (auto simp: cmod_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    42
    apply (rule power2_less_imp_less, auto)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    43
    apply (simp add: power2_eq_square field_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    44
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    45
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    46
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
    47
lemma cmod_diff_real_less: "Im z \<noteq> 0 \<Longrightarrow> x\<noteq>0 \<Longrightarrow> cmod (z - x) < cmod z + \<bar>x\<bar>"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    48
  using cmod_add_real_less [of z "-x"]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    49
  by simp
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    50
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    51
lemma cmod_square_less_1_plus:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    52
  assumes "Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    53
    shows "(cmod z)\<^sup>2 < 1 + cmod (1 - z\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    54
  using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    55
  apply (cases "Im z = 0 \<or> Re z = 0")
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    56
  using abs_square_less_1
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    57
    apply (force simp add: Re_power2 Im_power2 cmod_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    58
  using cmod_diff_real_less [of "1 - z\<^sup>2" "1"]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    59
  apply (simp add: norm_power Im_power2)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    60
  done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
    61
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
    62
subsection\<open>The Exponential Function is Differentiable and Continuous\<close>
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    63
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    64
lemma complex_differentiable_within_exp: "exp complex_differentiable (at z within s)"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
    65
  using DERIV_exp complex_differentiable_at_within complex_differentiable_def by blast
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    66
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    67
lemma continuous_within_exp:
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    68
  fixes z::"'a::{real_normed_field,banach}"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    69
  shows "continuous (at z within s) exp"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    70
by (simp add: continuous_at_imp_continuous_within)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    71
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    72
lemma continuous_on_exp:
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    73
  fixes s::"'a::{real_normed_field,banach} set"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    74
  shows "continuous_on s exp"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    75
by (simp add: continuous_on_exp continuous_on_id)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    76
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    77
lemma holomorphic_on_exp: "exp holomorphic_on s"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    78
  by (simp add: complex_differentiable_within_exp holomorphic_on_def)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    79
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
    80
subsection\<open>Euler and de Moivre formulas.\<close>
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
    81
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
    82
text\<open>The sine series times @{term i}\<close>
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    83
lemma sin_ii_eq: "(\<lambda>n. (ii * sin_coeff n) * z^n) sums (ii * sin z)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    84
proof -
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    85
  have "(\<lambda>n. ii * sin_coeff n *\<^sub>R z^n) sums (ii * sin z)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    86
    using sin_converges sums_mult by blast
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    87
  then show ?thesis
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    88
    by (simp add: scaleR_conv_of_real field_simps)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    89
qed
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    90
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    91
theorem exp_Euler: "exp(ii * z) = cos(z) + ii * sin(z)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    92
proof -
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
    93
  have "(\<lambda>n. (cos_coeff n + ii * sin_coeff n) * z^n)
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    94
        = (\<lambda>n. (ii * z) ^ n /\<^sub>R (fact n))"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    95
  proof
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    96
    fix n
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    97
    show "(cos_coeff n + ii * sin_coeff n) * z^n = (ii * z) ^ n /\<^sub>R (fact n)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    98
      by (auto simp: cos_coeff_def sin_coeff_def scaleR_conv_of_real field_simps elim!: evenE oddE)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    99
  qed
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   100
  also have "... sums (exp (ii * z))"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   101
    by (rule exp_converges)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   102
  finally have "(\<lambda>n. (cos_coeff n + ii * sin_coeff n) * z^n) sums (exp (ii * z))" .
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   103
  moreover have "(\<lambda>n. (cos_coeff n + ii * sin_coeff n) * z^n) sums (cos z + ii * sin z)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   104
    using sums_add [OF cos_converges [of z] sin_ii_eq [of z]]
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   105
    by (simp add: field_simps scaleR_conv_of_real)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   106
  ultimately show ?thesis
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   107
    using sums_unique2 by blast
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   108
qed
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   109
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   110
corollary exp_minus_Euler: "exp(-(ii * z)) = cos(z) - ii * sin(z)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   111
  using exp_Euler [of "-z"]
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   112
  by simp
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   113
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   114
lemma sin_exp_eq: "sin z = (exp(ii * z) - exp(-(ii * z))) / (2*ii)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   115
  by (simp add: exp_Euler exp_minus_Euler)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   116
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   117
lemma sin_exp_eq': "sin z = ii * (exp(-(ii * z)) - exp(ii * z)) / 2"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   118
  by (simp add: exp_Euler exp_minus_Euler)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   119
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   120
lemma cos_exp_eq:  "cos z = (exp(ii * z) + exp(-(ii * z))) / 2"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   121
  by (simp add: exp_Euler exp_minus_Euler)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   122
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
   123
subsection\<open>Relationships between real and complex trig functions\<close>
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   124
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   125
lemma real_sin_eq [simp]:
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   126
  fixes x::real
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   127
  shows "Re(sin(of_real x)) = sin x"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   128
  by (simp add: sin_of_real)
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   129
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   130
lemma real_cos_eq [simp]:
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   131
  fixes x::real
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   132
  shows "Re(cos(of_real x)) = cos x"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   133
  by (simp add: cos_of_real)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   134
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   135
lemma DeMoivre: "(cos z + ii * sin z) ^ n = cos(n * z) + ii * sin(n * z)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   136
  apply (simp add: exp_Euler [symmetric])
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   137
  by (metis exp_of_nat_mult mult.left_commute)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   138
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   139
lemma exp_cnj:
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   140
  fixes z::complex
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   141
  shows "cnj (exp z) = exp (cnj z)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   142
proof -
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   143
  have "(\<lambda>n. cnj (z ^ n /\<^sub>R (fact n))) = (\<lambda>n. (cnj z)^n /\<^sub>R (fact n))"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   144
    by auto
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   145
  also have "... sums (exp (cnj z))"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   146
    by (rule exp_converges)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   147
  finally have "(\<lambda>n. cnj (z ^ n /\<^sub>R (fact n))) sums (exp (cnj z))" .
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   148
  moreover have "(\<lambda>n. cnj (z ^ n /\<^sub>R (fact n))) sums (cnj (exp z))"
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   149
    by (metis exp_converges sums_cnj)
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   150
  ultimately show ?thesis
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   151
    using sums_unique2
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   152
    by blast
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   153
qed
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   154
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   155
lemma cnj_sin: "cnj(sin z) = sin(cnj z)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   156
  by (simp add: sin_exp_eq exp_cnj field_simps)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   157
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   158
lemma cnj_cos: "cnj(cos z) = cos(cnj z)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   159
  by (simp add: cos_exp_eq exp_cnj field_simps)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   160
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   161
lemma complex_differentiable_at_sin: "sin complex_differentiable at z"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   162
  using DERIV_sin complex_differentiable_def by blast
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   163
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   164
lemma complex_differentiable_within_sin: "sin complex_differentiable (at z within s)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   165
  by (simp add: complex_differentiable_at_sin complex_differentiable_at_within)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   166
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   167
lemma complex_differentiable_at_cos: "cos complex_differentiable at z"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   168
  using DERIV_cos complex_differentiable_def by blast
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   169
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   170
lemma complex_differentiable_within_cos: "cos complex_differentiable (at z within s)"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   171
  by (simp add: complex_differentiable_at_cos complex_differentiable_at_within)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   172
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   173
lemma holomorphic_on_sin: "sin holomorphic_on s"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   174
  by (simp add: complex_differentiable_within_sin holomorphic_on_def)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   175
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   176
lemma holomorphic_on_cos: "cos holomorphic_on s"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   177
  by (simp add: complex_differentiable_within_cos holomorphic_on_def)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   178
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
   179
subsection\<open>Get a nice real/imaginary separation in Euler's formula.\<close>
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   180
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   181
lemma Euler: "exp(z) = of_real(exp(Re z)) *
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   182
              (of_real(cos(Im z)) + ii * of_real(sin(Im z)))"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   183
by (cases z) (simp add: exp_add exp_Euler cos_of_real exp_of_real sin_of_real)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   184
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   185
lemma Re_sin: "Re(sin z) = sin(Re z) * (exp(Im z) + exp(-(Im z))) / 2"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   186
  by (simp add: sin_exp_eq field_simps Re_divide Im_exp)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   187
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   188
lemma Im_sin: "Im(sin z) = cos(Re z) * (exp(Im z) - exp(-(Im z))) / 2"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   189
  by (simp add: sin_exp_eq field_simps Im_divide Re_exp)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   190
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   191
lemma Re_cos: "Re(cos z) = cos(Re z) * (exp(Im z) + exp(-(Im z))) / 2"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   192
  by (simp add: cos_exp_eq field_simps Re_divide Re_exp)
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   193
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   194
lemma Im_cos: "Im(cos z) = sin(Re z) * (exp(-(Im z)) - exp(Im z)) / 2"
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   195
  by (simp add: cos_exp_eq field_simps Im_divide Im_exp)
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   196
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   197
lemma Re_sin_pos: "0 < Re z \<Longrightarrow> Re z < pi \<Longrightarrow> Re (sin z) > 0"
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   198
  by (auto simp: Re_sin Im_sin add_pos_pos sin_gt_zero)
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   199
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   200
lemma Im_sin_nonneg: "Re z = 0 \<Longrightarrow> 0 \<le> Im z \<Longrightarrow> 0 \<le> Im (sin z)"
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   201
  by (simp add: Re_sin Im_sin algebra_simps)
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   202
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   203
lemma Im_sin_nonneg2: "Re z = pi \<Longrightarrow> Im z \<le> 0 \<Longrightarrow> 0 \<le> Im (sin z)"
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   204
  by (simp add: Re_sin Im_sin algebra_simps)
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   205
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
   206
subsection\<open>More on the Polar Representation of Complex Numbers\<close>
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   207
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   208
lemma exp_Complex: "exp(Complex r t) = of_real(exp r) * Complex (cos t) (sin t)"
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   209
  by (simp add: exp_add exp_Euler exp_of_real sin_of_real cos_of_real)
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   210
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   211
lemma exp_eq_1: "exp z = 1 \<longleftrightarrow> Re(z) = 0 \<and> (\<exists>n::int. Im(z) = of_int (2 * n) * pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   212
apply auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   213
apply (metis exp_eq_one_iff norm_exp_eq_Re norm_one)
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
   214
apply (metis Re_exp cos_one_2pi_int mult.commute mult.left_neutral norm_exp_eq_Re norm_one one_complex.simps(1))
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
   215
by (metis Im_exp Re_exp complex_Re_Im_cancel_iff cos_one_2pi_int sin_double Re_complex_of_real complex_Re_numeral exp_zero mult.assoc mult.left_commute mult_eq_0_iff mult_numeral_1 numeral_One of_real_0 sin_zero_iff_int2)
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   216
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   217
lemma exp_eq: "exp w = exp z \<longleftrightarrow> (\<exists>n::int. w = z + (of_int (2 * n) * pi) * ii)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   218
                (is "?lhs = ?rhs")
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   219
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   220
  have "exp w = exp z \<longleftrightarrow> exp (w-z) = 1"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   221
    by (simp add: exp_diff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   222
  also have "... \<longleftrightarrow> (Re w = Re z \<and> (\<exists>n::int. Im w - Im z = of_int (2 * n) * pi))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   223
    by (simp add: exp_eq_1)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   224
  also have "... \<longleftrightarrow> ?rhs"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   225
    by (auto simp: algebra_simps intro!: complex_eqI)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   226
  finally show ?thesis .
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   227
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   228
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
   229
lemma exp_complex_eqI: "\<bar>Im w - Im z\<bar> < 2*pi \<Longrightarrow> exp w = exp z \<Longrightarrow> w = z"
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   230
  by (auto simp: exp_eq abs_mult)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   231
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   232
lemma exp_integer_2pi:
61070
b72a990adfe2 prefer symbols;
wenzelm
parents: 60809
diff changeset
   233
  assumes "n \<in> \<int>"
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   234
  shows "exp((2 * n * pi) * ii) = 1"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   235
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   236
  have "exp((2 * n * pi) * ii) = exp 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   237
    using assms
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   238
    by (simp only: Ints_def exp_eq) auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   239
  also have "... = 1"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   240
    by simp
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   241
  finally show ?thesis .
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   242
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   243
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   244
lemma sin_cos_eq_iff: "sin y = sin x \<and> cos y = cos x \<longleftrightarrow> (\<exists>n::int. y = x + 2 * n * pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   245
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   246
  { assume "sin y = sin x" "cos y = cos x"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   247
    then have "cos (y-x) = 1"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   248
      using cos_add [of y "-x"] by simp
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
   249
    then have "\<exists>n::int. y-x = n * 2 * pi"
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   250
      using cos_one_2pi_int by blast }
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   251
  then show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   252
  apply (auto simp: sin_add cos_add)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   253
  apply (metis add.commute diff_add_cancel mult.commute)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   254
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   255
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   256
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   257
lemma exp_i_ne_1:
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   258
  assumes "0 < x" "x < 2*pi"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   259
  shows "exp(\<i> * of_real x) \<noteq> 1"
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   260
proof
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   261
  assume "exp (\<i> * of_real x) = 1"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   262
  then have "exp (\<i> * of_real x) = exp 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   263
    by simp
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   264
  then obtain n where "\<i> * of_real x = (of_int (2 * n) * pi) * \<i>"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   265
    by (simp only: Ints_def exp_eq) auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   266
  then have  "of_real x = (of_int (2 * n) * pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   267
    by (metis complex_i_not_zero mult.commute mult_cancel_left of_real_eq_iff real_scaleR_def scaleR_conv_of_real)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   268
  then have  "x = (of_int (2 * n) * pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   269
    by simp
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   270
  then show False using assms
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   271
    by (cases n) (auto simp: zero_less_mult_iff mult_less_0_iff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   272
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   273
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   274
lemma sin_eq_0:
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   275
  fixes z::complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   276
  shows "sin z = 0 \<longleftrightarrow> (\<exists>n::int. z = of_real(n * pi))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   277
  by (simp add: sin_exp_eq exp_eq of_real_numeral)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   278
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   279
lemma cos_eq_0:
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   280
  fixes z::complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   281
  shows "cos z = 0 \<longleftrightarrow> (\<exists>n::int. z = of_real(n * pi) + of_real pi/2)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   282
  using sin_eq_0 [of "z - of_real pi/2"]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   283
  by (simp add: sin_diff algebra_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   284
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   285
lemma cos_eq_1:
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   286
  fixes z::complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   287
  shows "cos z = 1 \<longleftrightarrow> (\<exists>n::int. z = of_real(2 * n * pi))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   288
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   289
  have "cos z = cos (2*(z/2))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   290
    by simp
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   291
  also have "... = 1 - 2 * sin (z/2) ^ 2"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   292
    by (simp only: cos_double_sin)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   293
  finally have [simp]: "cos z = 1 \<longleftrightarrow> sin (z/2) = 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   294
    by simp
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   295
  show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   296
    by (auto simp: sin_eq_0 of_real_numeral)
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   297
qed
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   298
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   299
lemma csin_eq_1:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   300
  fixes z::complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   301
  shows "sin z = 1 \<longleftrightarrow> (\<exists>n::int. z = of_real(2 * n * pi) + of_real pi/2)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   302
  using cos_eq_1 [of "z - of_real pi/2"]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   303
  by (simp add: cos_diff algebra_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   304
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   305
lemma csin_eq_minus1:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   306
  fixes z::complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   307
  shows "sin z = -1 \<longleftrightarrow> (\<exists>n::int. z = of_real(2 * n * pi) + 3/2*pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   308
        (is "_ = ?rhs")
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   309
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   310
  have "sin z = -1 \<longleftrightarrow> sin (-z) = 1"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   311
    by (simp add: equation_minus_iff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   312
  also have "...  \<longleftrightarrow> (\<exists>n::int. -z = of_real(2 * n * pi) + of_real pi/2)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   313
    by (simp only: csin_eq_1)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   314
  also have "...  \<longleftrightarrow> (\<exists>n::int. z = - of_real(2 * n * pi) - of_real pi/2)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   315
    apply (rule iff_exI)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   316
    by (metis (no_types)  is_num_normalize(8) minus_minus of_real_def real_vector.scale_minus_left uminus_add_conv_diff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   317
  also have "... = ?rhs"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   318
    apply (auto simp: of_real_numeral)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   319
    apply (rule_tac [2] x="-(x+1)" in exI)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   320
    apply (rule_tac x="-(x+1)" in exI)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   321
    apply (simp_all add: algebra_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   322
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   323
  finally show ?thesis .
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   324
qed
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   325
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   326
lemma ccos_eq_minus1:
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   327
  fixes z::complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   328
  shows "cos z = -1 \<longleftrightarrow> (\<exists>n::int. z = of_real(2 * n * pi) + pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   329
  using csin_eq_1 [of "z - of_real pi/2"]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   330
  apply (simp add: sin_diff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   331
  apply (simp add: algebra_simps of_real_numeral equation_minus_iff)
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   332
  done
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   333
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   334
lemma sin_eq_1: "sin x = 1 \<longleftrightarrow> (\<exists>n::int. x = (2 * n + 1 / 2) * pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   335
                (is "_ = ?rhs")
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   336
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   337
  have "sin x = 1 \<longleftrightarrow> sin (complex_of_real x) = 1"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   338
    by (metis of_real_1 one_complex.simps(1) real_sin_eq sin_of_real)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   339
  also have "...  \<longleftrightarrow> (\<exists>n::int. complex_of_real x = of_real(2 * n * pi) + of_real pi/2)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   340
    by (simp only: csin_eq_1)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   341
  also have "...  \<longleftrightarrow> (\<exists>n::int. x = of_real(2 * n * pi) + of_real pi/2)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   342
    apply (rule iff_exI)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   343
    apply (auto simp: algebra_simps of_real_numeral)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   344
    apply (rule injD [OF inj_of_real [where 'a = complex]])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   345
    apply (auto simp: of_real_numeral)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   346
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   347
  also have "... = ?rhs"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   348
    by (auto simp: algebra_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   349
  finally show ?thesis .
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   350
qed
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   351
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   352
lemma sin_eq_minus1: "sin x = -1 \<longleftrightarrow> (\<exists>n::int. x = (2*n + 3/2) * pi)"  (is "_ = ?rhs")
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   353
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   354
  have "sin x = -1 \<longleftrightarrow> sin (complex_of_real x) = -1"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   355
    by (metis Re_complex_of_real of_real_def scaleR_minus1_left sin_of_real)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   356
  also have "...  \<longleftrightarrow> (\<exists>n::int. complex_of_real x = of_real(2 * n * pi) + 3/2*pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   357
    by (simp only: csin_eq_minus1)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   358
  also have "...  \<longleftrightarrow> (\<exists>n::int. x = of_real(2 * n * pi) + 3/2*pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   359
    apply (rule iff_exI)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   360
    apply (auto simp: algebra_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   361
    apply (rule injD [OF inj_of_real [where 'a = complex]], auto)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   362
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   363
  also have "... = ?rhs"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   364
    by (auto simp: algebra_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   365
  finally show ?thesis .
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   366
qed
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   367
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   368
lemma cos_eq_minus1: "cos x = -1 \<longleftrightarrow> (\<exists>n::int. x = (2*n + 1) * pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   369
                      (is "_ = ?rhs")
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   370
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   371
  have "cos x = -1 \<longleftrightarrow> cos (complex_of_real x) = -1"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   372
    by (metis Re_complex_of_real of_real_def scaleR_minus1_left cos_of_real)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   373
  also have "...  \<longleftrightarrow> (\<exists>n::int. complex_of_real x = of_real(2 * n * pi) + pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   374
    by (simp only: ccos_eq_minus1)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   375
  also have "...  \<longleftrightarrow> (\<exists>n::int. x = of_real(2 * n * pi) + pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   376
    apply (rule iff_exI)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   377
    apply (auto simp: algebra_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   378
    apply (rule injD [OF inj_of_real [where 'a = complex]], auto)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   379
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   380
  also have "... = ?rhs"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   381
    by (auto simp: algebra_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   382
  finally show ?thesis .
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   383
qed
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   384
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
   385
lemma dist_exp_ii_1: "norm(exp(ii * of_real t) - 1) = 2 * \<bar>sin(t / 2)\<bar>"
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   386
  apply (simp add: exp_Euler cmod_def power2_diff sin_of_real cos_of_real algebra_simps)
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   387
  using cos_double_sin [of "t/2"]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   388
  apply (simp add: real_sqrt_mult)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   389
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   390
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   391
lemma sinh_complex:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   392
  fixes z :: complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   393
  shows "(exp z - inverse (exp z)) / 2 = -ii * sin(ii * z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   394
  by (simp add: sin_exp_eq divide_simps exp_minus of_real_numeral)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   395
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   396
lemma sin_ii_times:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   397
  fixes z :: complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   398
  shows "sin(ii * z) = ii * ((exp z - inverse (exp z)) / 2)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   399
  using sinh_complex by auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   400
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   401
lemma sinh_real:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   402
  fixes x :: real
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   403
  shows "of_real((exp x - inverse (exp x)) / 2) = -ii * sin(ii * of_real x)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   404
  by (simp add: exp_of_real sin_ii_times of_real_numeral)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   405
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   406
lemma cosh_complex:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   407
  fixes z :: complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   408
  shows "(exp z + inverse (exp z)) / 2 = cos(ii * z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   409
  by (simp add: cos_exp_eq divide_simps exp_minus of_real_numeral exp_of_real)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   410
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   411
lemma cosh_real:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   412
  fixes x :: real
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   413
  shows "of_real((exp x + inverse (exp x)) / 2) = cos(ii * of_real x)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   414
  by (simp add: cos_exp_eq divide_simps exp_minus of_real_numeral exp_of_real)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   415
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   416
lemmas cos_ii_times = cosh_complex [symmetric]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   417
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   418
lemma norm_cos_squared:
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   419
    "norm(cos z) ^ 2 = cos(Re z) ^ 2 + (exp(Im z) - inverse(exp(Im z))) ^ 2 / 4"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   420
  apply (cases z)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   421
  apply (simp add: cos_add cmod_power2 cos_of_real sin_of_real)
61694
6571c78c9667 Removed some legacy theorems; minor adjustments to simplification rules; new material on homotopic paths
paulson <lp15@cam.ac.uk>
parents: 61649
diff changeset
   422
  apply (simp add: cos_exp_eq sin_exp_eq exp_minus exp_of_real Re_divide Im_divide power_divide)
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   423
  apply (simp only: left_diff_distrib [symmetric] power_mult_distrib)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   424
  apply (simp add: sin_squared_eq)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   425
  apply (simp add: power2_eq_square algebra_simps divide_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   426
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   427
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   428
lemma norm_sin_squared:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   429
    "norm(sin z) ^ 2 = (exp(2 * Im z) + inverse(exp(2 * Im z)) - 2 * cos(2 * Re z)) / 4"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   430
  apply (cases z)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   431
  apply (simp add: sin_add cmod_power2 cos_of_real sin_of_real cos_double_cos exp_double)
61694
6571c78c9667 Removed some legacy theorems; minor adjustments to simplification rules; new material on homotopic paths
paulson <lp15@cam.ac.uk>
parents: 61649
diff changeset
   432
  apply (simp add: cos_exp_eq sin_exp_eq exp_minus exp_of_real Re_divide Im_divide power_divide)
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   433
  apply (simp only: left_diff_distrib [symmetric] power_mult_distrib)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   434
  apply (simp add: cos_squared_eq)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   435
  apply (simp add: power2_eq_square algebra_simps divide_simps)
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   436
  done
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   437
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   438
lemma exp_uminus_Im: "exp (- Im z) \<le> exp (cmod z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   439
  using abs_Im_le_cmod linear order_trans by fastforce
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   440
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   441
lemma norm_cos_le:
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   442
  fixes z::complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   443
  shows "norm(cos z) \<le> exp(norm z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   444
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   445
  have "Im z \<le> cmod z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   446
    using abs_Im_le_cmod abs_le_D1 by auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   447
  with exp_uminus_Im show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   448
    apply (simp add: cos_exp_eq norm_divide)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   449
    apply (rule order_trans [OF norm_triangle_ineq], simp)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   450
    apply (metis add_mono exp_le_cancel_iff mult_2_right)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   451
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   452
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   453
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   454
lemma norm_cos_plus1_le:
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   455
  fixes z::complex
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   456
  shows "norm(1 + cos z) \<le> 2 * exp(norm z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   457
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   458
  have mono: "\<And>u w z::real. (1 \<le> w | 1 \<le> z) \<Longrightarrow> (w \<le> u & z \<le> u) \<Longrightarrow> 2 + w + z \<le> 4 * u"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   459
      by arith
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   460
  have *: "Im z \<le> cmod z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   461
    using abs_Im_le_cmod abs_le_D1 by auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   462
  have triangle3: "\<And>x y z. norm(x + y + z) \<le> norm(x) + norm(y) + norm(z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   463
    by (simp add: norm_add_rule_thm)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   464
  have "norm(1 + cos z) = cmod (1 + (exp (\<i> * z) + exp (- (\<i> * z))) / 2)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   465
    by (simp add: cos_exp_eq)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   466
  also have "... = cmod ((2 + exp (\<i> * z) + exp (- (\<i> * z))) / 2)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   467
    by (simp add: field_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   468
  also have "... = cmod (2 + exp (\<i> * z) + exp (- (\<i> * z))) / 2"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   469
    by (simp add: norm_divide)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   470
  finally show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   471
    apply (rule ssubst, simp)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   472
    apply (rule order_trans [OF triangle3], simp)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   473
    using exp_uminus_Im *
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   474
    apply (auto intro: mono)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   475
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   476
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   477
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
   478
subsection\<open>Taylor series for complex exponential, sine and cosine.\<close>
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   479
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   480
declare power_Suc [simp del]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   481
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   482
lemma Taylor_exp:
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   483
  "norm(exp z - (\<Sum>k\<le>n. z ^ k / (fact k))) \<le> exp\<bar>Re z\<bar> * (norm z) ^ (Suc n) / (fact n)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   484
proof (rule complex_taylor [of _ n "\<lambda>k. exp" "exp\<bar>Re z\<bar>" 0 z, simplified])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   485
  show "convex (closed_segment 0 z)"
61518
ff12606337e9 new lemmas about topology, etc., for Cauchy integral formula
paulson
parents: 61426
diff changeset
   486
    by (rule convex_closed_segment [of 0 z])
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   487
next
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   488
  fix k x
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   489
  assume "x \<in> closed_segment 0 z" "k \<le> n"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   490
  show "(exp has_field_derivative exp x) (at x within closed_segment 0 z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   491
    using DERIV_exp DERIV_subset by blast
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   492
next
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   493
  fix x
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   494
  assume "x \<in> closed_segment 0 z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   495
  then show "Re x \<le> \<bar>Re z\<bar>"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   496
    apply (auto simp: closed_segment_def scaleR_conv_of_real)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   497
    by (meson abs_ge_self abs_ge_zero linear mult_left_le_one_le mult_nonneg_nonpos order_trans)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   498
next
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   499
  show "0 \<in> closed_segment 0 z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   500
    by (auto simp: closed_segment_def)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   501
next
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   502
  show "z \<in> closed_segment 0 z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   503
    apply (simp add: closed_segment_def scaleR_conv_of_real)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   504
    using of_real_1 zero_le_one by blast
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   505
qed
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   506
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   507
lemma
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   508
  assumes "0 \<le> u" "u \<le> 1"
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   509
  shows cmod_sin_le_exp: "cmod (sin (u *\<^sub>R z)) \<le> exp \<bar>Im z\<bar>"
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   510
    and cmod_cos_le_exp: "cmod (cos (u *\<^sub>R z)) \<le> exp \<bar>Im z\<bar>"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   511
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   512
  have mono: "\<And>u w z::real. w \<le> u \<Longrightarrow> z \<le> u \<Longrightarrow> w + z \<le> u*2"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   513
    by arith
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   514
  show "cmod (sin (u *\<^sub>R z)) \<le> exp \<bar>Im z\<bar>" using assms
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   515
    apply (auto simp: scaleR_conv_of_real norm_mult norm_power sin_exp_eq norm_divide)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   516
    apply (rule order_trans [OF norm_triangle_ineq4])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   517
    apply (rule mono)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   518
    apply (auto simp: abs_if mult_left_le_one_le)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   519
    apply (meson mult_nonneg_nonneg neg_le_0_iff_le not_le order_trans)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   520
    apply (meson less_eq_real_def mult_nonneg_nonpos neg_0_le_iff_le order_trans)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   521
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   522
  show "cmod (cos (u *\<^sub>R z)) \<le> exp \<bar>Im z\<bar>" using assms
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   523
    apply (auto simp: scaleR_conv_of_real norm_mult norm_power cos_exp_eq norm_divide)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   524
    apply (rule order_trans [OF norm_triangle_ineq])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   525
    apply (rule mono)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   526
    apply (auto simp: abs_if mult_left_le_one_le)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   527
    apply (meson mult_nonneg_nonneg neg_le_0_iff_le not_le order_trans)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   528
    apply (meson less_eq_real_def mult_nonneg_nonpos neg_0_le_iff_le order_trans)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   529
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   530
qed
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   531
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   532
lemma Taylor_sin:
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   533
  "norm(sin z - (\<Sum>k\<le>n. complex_of_real (sin_coeff k) * z ^ k))
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   534
   \<le> exp\<bar>Im z\<bar> * (norm z) ^ (Suc n) / (fact n)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   535
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   536
  have mono: "\<And>u w z::real. w \<le> u \<Longrightarrow> z \<le> u \<Longrightarrow> w + z \<le> u*2"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   537
      by arith
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   538
  have *: "cmod (sin z -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   539
                 (\<Sum>i\<le>n. (-1) ^ (i div 2) * (if even i then sin 0 else cos 0) * z ^ i / (fact i)))
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   540
           \<le> exp \<bar>Im z\<bar> * cmod z ^ Suc n / (fact n)"
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
   541
  proof (rule complex_taylor [of "closed_segment 0 z" n
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
   542
                                 "\<lambda>k x. (-1)^(k div 2) * (if even k then sin x else cos x)"
60162
645058aa9d6f tidying some messy proofs
paulson <lp15@cam.ac.uk>
parents: 60150
diff changeset
   543
                                 "exp\<bar>Im z\<bar>" 0 z,  simplified])
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   544
    fix k x
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   545
    show "((\<lambda>x. (- 1) ^ (k div 2) * (if even k then sin x else cos x)) has_field_derivative
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   546
            (- 1) ^ (Suc k div 2) * (if odd k then sin x else cos x))
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   547
            (at x within closed_segment 0 z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   548
      apply (auto simp: power_Suc)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   549
      apply (intro derivative_eq_intros | simp)+
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   550
      done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   551
  next
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   552
    fix x
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   553
    assume "x \<in> closed_segment 0 z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   554
    then show "cmod ((- 1) ^ (Suc n div 2) * (if odd n then sin x else cos x)) \<le> exp \<bar>Im z\<bar>"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   555
      by (auto simp: closed_segment_def norm_mult norm_power cmod_sin_le_exp cmod_cos_le_exp)
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   556
  qed
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   557
  have **: "\<And>k. complex_of_real (sin_coeff k) * z ^ k
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   558
            = (-1)^(k div 2) * (if even k then sin 0 else cos 0) * z^k / of_nat (fact k)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   559
    by (auto simp: sin_coeff_def elim!: oddE)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   560
  show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   561
    apply (rule order_trans [OF _ *])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   562
    apply (simp add: **)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   563
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   564
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   565
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   566
lemma Taylor_cos:
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   567
  "norm(cos z - (\<Sum>k\<le>n. complex_of_real (cos_coeff k) * z ^ k))
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   568
   \<le> exp\<bar>Im z\<bar> * (norm z) ^ Suc n / (fact n)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   569
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   570
  have mono: "\<And>u w z::real. w \<le> u \<Longrightarrow> z \<le> u \<Longrightarrow> w + z \<le> u*2"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   571
      by arith
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   572
  have *: "cmod (cos z -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   573
                 (\<Sum>i\<le>n. (-1) ^ (Suc i div 2) * (if even i then cos 0 else sin 0) * z ^ i / (fact i)))
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   574
           \<le> exp \<bar>Im z\<bar> * cmod z ^ Suc n / (fact n)"
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   575
  proof (rule complex_taylor [of "closed_segment 0 z" n "\<lambda>k x. (-1)^(Suc k div 2) * (if even k then cos x else sin x)" "exp\<bar>Im z\<bar>" 0 z,
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   576
simplified])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   577
    fix k x
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   578
    assume "x \<in> closed_segment 0 z" "k \<le> n"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   579
    show "((\<lambda>x. (- 1) ^ (Suc k div 2) * (if even k then cos x else sin x)) has_field_derivative
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   580
            (- 1) ^ Suc (k div 2) * (if odd k then cos x else sin x))
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   581
             (at x within closed_segment 0 z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   582
      apply (auto simp: power_Suc)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   583
      apply (intro derivative_eq_intros | simp)+
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   584
      done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   585
  next
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   586
    fix x
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   587
    assume "x \<in> closed_segment 0 z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   588
    then show "cmod ((- 1) ^ Suc (n div 2) * (if odd n then cos x else sin x)) \<le> exp \<bar>Im z\<bar>"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   589
      by (auto simp: closed_segment_def norm_mult norm_power cmod_sin_le_exp cmod_cos_le_exp)
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
   590
  qed
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   591
  have **: "\<And>k. complex_of_real (cos_coeff k) * z ^ k
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   592
            = (-1)^(Suc k div 2) * (if even k then cos 0 else sin 0) * z^k / of_nat (fact k)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   593
    by (auto simp: cos_coeff_def elim!: evenE)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   594
  show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   595
    apply (rule order_trans [OF _ *])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   596
    apply (simp add: **)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   597
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   598
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   599
60162
645058aa9d6f tidying some messy proofs
paulson <lp15@cam.ac.uk>
parents: 60150
diff changeset
   600
declare power_Suc [simp]
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   601
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
   602
text\<open>32-bit Approximation to e\<close>
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
   603
lemma e_approx_32: "\<bar>exp(1) - 5837465777 / 2147483648\<bar> \<le> (inverse(2 ^ 32)::real)"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   604
  using Taylor_exp [of 1 14] exp_le
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   605
  apply (simp add: setsum_left_distrib in_Reals_norm Re_exp atMost_nat_numeral fact_numeral)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   606
  apply (simp only: pos_le_divide_eq [symmetric], linarith)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   607
  done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   608
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
   609
lemma e_less_3: "exp 1 < (3::real)"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
   610
  using e_approx_32
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
   611
  by (simp add: abs_if split: split_if_asm)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
   612
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
   613
lemma ln3_gt_1: "ln 3 > (1::real)"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
   614
  by (metis e_less_3 exp_less_cancel_iff exp_ln_iff less_trans ln_exp)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
   615
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
   616
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
   617
subsection\<open>The argument of a complex number\<close>
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   618
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   619
definition Arg :: "complex \<Rightarrow> real" where
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   620
 "Arg z \<equiv> if z = 0 then 0
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   621
           else THE t. 0 \<le> t \<and> t < 2*pi \<and>
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   622
                    z = of_real(norm z) * exp(ii * of_real t)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   623
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   624
lemma Arg_0 [simp]: "Arg(0) = 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   625
  by (simp add: Arg_def)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   626
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   627
lemma Arg_unique_lemma:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   628
  assumes z:  "z = of_real(norm z) * exp(ii * of_real t)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   629
      and z': "z = of_real(norm z) * exp(ii * of_real t')"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   630
      and t:  "0 \<le> t"  "t < 2*pi"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   631
      and t': "0 \<le> t'" "t' < 2*pi"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   632
      and nz: "z \<noteq> 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   633
  shows "t' = t"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   634
proof -
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   635
  have [dest]: "\<And>x y z::real. x\<ge>0 \<Longrightarrow> x+y < z \<Longrightarrow> y<z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   636
    by arith
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   637
  have "of_real (cmod z) * exp (\<i> * of_real t') = of_real (cmod z) * exp (\<i> * of_real t)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   638
    by (metis z z')
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   639
  then have "exp (\<i> * of_real t') = exp (\<i> * of_real t)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   640
    by (metis nz mult_left_cancel mult_zero_left z)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   641
  then have "sin t' = sin t \<and> cos t' = cos t"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   642
    apply (simp add: exp_Euler sin_of_real cos_of_real)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   643
    by (metis Complex_eq complex.sel)
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
   644
  then obtain n::int where n: "t' = t + 2 * n * pi"
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   645
    by (auto simp: sin_cos_eq_iff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   646
  then have "n=0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   647
    apply (rule_tac z=n in int_cases)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   648
    using t t'
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   649
    apply (auto simp: mult_less_0_iff algebra_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   650
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   651
  then show "t' = t"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   652
      by (simp add: n)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   653
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   654
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   655
lemma Arg: "0 \<le> Arg z & Arg z < 2*pi & z = of_real(norm z) * exp(ii * of_real(Arg z))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   656
proof (cases "z=0")
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   657
  case True then show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   658
    by (simp add: Arg_def)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   659
next
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   660
  case False
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   661
  obtain t where t: "0 \<le> t" "t < 2*pi"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   662
             and ReIm: "Re z / cmod z = cos t" "Im z / cmod z = sin t"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   663
    using sincos_total_2pi [OF complex_unit_circle [OF False]]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   664
    by blast
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   665
  have z: "z = of_real(norm z) * exp(ii * of_real t)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   666
    apply (rule complex_eqI)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   667
    using t False ReIm
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   668
    apply (auto simp: exp_Euler sin_of_real cos_of_real divide_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   669
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   670
  show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   671
    apply (simp add: Arg_def False)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   672
    apply (rule theI [where a=t])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   673
    using t z False
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   674
    apply (auto intro: Arg_unique_lemma)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   675
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   676
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   677
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   678
corollary
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   679
  shows Arg_ge_0: "0 \<le> Arg z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   680
    and Arg_lt_2pi: "Arg z < 2*pi"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   681
    and Arg_eq: "z = of_real(norm z) * exp(ii * of_real(Arg z))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   682
  using Arg by auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   683
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   684
lemma complex_norm_eq_1_exp: "norm z = 1 \<longleftrightarrow> (\<exists>t. z = exp(ii * of_real t))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   685
  using Arg [of z] by auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   686
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   687
lemma Arg_unique: "\<lbrakk>of_real r * exp(ii * of_real a) = z; 0 < r; 0 \<le> a; a < 2*pi\<rbrakk> \<Longrightarrow> Arg z = a"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   688
  apply (rule Arg_unique_lemma [OF _ Arg_eq])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   689
  using Arg [of z]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   690
  apply (auto simp: norm_mult)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   691
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   692
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   693
lemma Arg_minus: "z \<noteq> 0 \<Longrightarrow> Arg (-z) = (if Arg z < pi then Arg z + pi else Arg z - pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   694
  apply (rule Arg_unique [of "norm z"])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   695
  apply (rule complex_eqI)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   696
  using Arg_ge_0 [of z] Arg_eq [of z] Arg_lt_2pi [of z] Arg_eq [of z]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   697
  apply auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   698
  apply (auto simp: Re_exp Im_exp cos_diff sin_diff cis_conv_exp [symmetric])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   699
  apply (metis Re_rcis Im_rcis rcis_def)+
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   700
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   701
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   702
lemma Arg_times_of_real [simp]: "0 < r \<Longrightarrow> Arg (of_real r * z) = Arg z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   703
  apply (cases "z=0", simp)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   704
  apply (rule Arg_unique [of "r * norm z"])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   705
  using Arg
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   706
  apply auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   707
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   708
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   709
lemma Arg_times_of_real2 [simp]: "0 < r \<Longrightarrow> Arg (z * of_real r) = Arg z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   710
  by (metis Arg_times_of_real mult.commute)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   711
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   712
lemma Arg_divide_of_real [simp]: "0 < r \<Longrightarrow> Arg (z / of_real r) = Arg z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   713
  by (metis Arg_times_of_real2 less_numeral_extra(3) nonzero_eq_divide_eq of_real_eq_0_iff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   714
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   715
lemma Arg_le_pi: "Arg z \<le> pi \<longleftrightarrow> 0 \<le> Im z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   716
proof (cases "z=0")
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   717
  case True then show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   718
    by simp
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   719
next
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   720
  case False
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   721
  have "0 \<le> Im z \<longleftrightarrow> 0 \<le> Im (of_real (cmod z) * exp (\<i> * complex_of_real (Arg z)))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   722
    by (metis Arg_eq)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   723
  also have "... = (0 \<le> Im (exp (\<i> * complex_of_real (Arg z))))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   724
    using False
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   725
    by (simp add: zero_le_mult_iff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   726
  also have "... \<longleftrightarrow> Arg z \<le> pi"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   727
    by (simp add: Im_exp) (metis Arg_ge_0 Arg_lt_2pi sin_lt_zero sin_ge_zero not_le)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   728
  finally show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   729
    by blast
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   730
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   731
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   732
lemma Arg_lt_pi: "0 < Arg z \<and> Arg z < pi \<longleftrightarrow> 0 < Im z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   733
proof (cases "z=0")
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   734
  case True then show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   735
    by simp
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   736
next
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   737
  case False
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   738
  have "0 < Im z \<longleftrightarrow> 0 < Im (of_real (cmod z) * exp (\<i> * complex_of_real (Arg z)))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   739
    by (metis Arg_eq)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   740
  also have "... = (0 < Im (exp (\<i> * complex_of_real (Arg z))))"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   741
    using False
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   742
    by (simp add: zero_less_mult_iff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   743
  also have "... \<longleftrightarrow> 0 < Arg z \<and> Arg z < pi"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   744
    using Arg_ge_0  Arg_lt_2pi sin_le_zero sin_gt_zero
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   745
    apply (auto simp: Im_exp)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   746
    using le_less apply fastforce
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   747
    using not_le by blast
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   748
  finally show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   749
    by blast
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   750
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   751
61070
b72a990adfe2 prefer symbols;
wenzelm
parents: 60809
diff changeset
   752
lemma Arg_eq_0: "Arg z = 0 \<longleftrightarrow> z \<in> \<real> \<and> 0 \<le> Re z"
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   753
proof (cases "z=0")
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   754
  case True then show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   755
    by simp
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   756
next
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   757
  case False
61070
b72a990adfe2 prefer symbols;
wenzelm
parents: 60809
diff changeset
   758
  have "z \<in> \<real> \<and> 0 \<le> Re z \<longleftrightarrow> z \<in> \<real> \<and> 0 \<le> Re (of_real (cmod z) * exp (\<i> * complex_of_real (Arg z)))"
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   759
    by (metis Arg_eq)
61070
b72a990adfe2 prefer symbols;
wenzelm
parents: 60809
diff changeset
   760
  also have "... \<longleftrightarrow> z \<in> \<real> \<and> 0 \<le> Re (exp (\<i> * complex_of_real (Arg z)))"
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   761
    using False
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   762
    by (simp add: zero_le_mult_iff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   763
  also have "... \<longleftrightarrow> Arg z = 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   764
    apply (auto simp: Re_exp)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   765
    apply (metis Arg_lt_pi Arg_ge_0 Arg_le_pi cos_pi complex_is_Real_iff leD less_linear less_minus_one_simps(2) minus_minus neg_less_eq_nonneg order_refl)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   766
    using Arg_eq [of z]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   767
    apply (auto simp: Reals_def)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   768
    done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   769
  finally show ?thesis
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   770
    by blast
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   771
qed
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   772
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
   773
corollary Arg_gt_0:
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   774
  assumes "z \<in> \<real> \<Longrightarrow> Re z < 0"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   775
    shows "Arg z > 0"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   776
  using Arg_eq_0 Arg_ge_0 assms dual_order.strict_iff_order by fastforce
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   777
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   778
lemma Arg_of_real: "Arg(of_real x) = 0 \<longleftrightarrow> 0 \<le> x"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   779
  by (simp add: Arg_eq_0)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   780
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   781
lemma Arg_eq_pi: "Arg z = pi \<longleftrightarrow> z \<in> \<real> \<and> Re z < 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   782
  apply  (cases "z=0", simp)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   783
  using Arg_eq_0 [of "-z"]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   784
  apply (auto simp: complex_is_Real_iff Arg_minus)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   785
  apply (simp add: complex_Re_Im_cancel_iff)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   786
  apply (metis Arg_minus pi_gt_zero add.left_neutral minus_minus minus_zero)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   787
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   788
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   789
lemma Arg_eq_0_pi: "Arg z = 0 \<or> Arg z = pi \<longleftrightarrow> z \<in> \<real>"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   790
  using Arg_eq_0 Arg_eq_pi not_le by auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   791
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   792
lemma Arg_inverse: "Arg(inverse z) = (if z \<in> \<real> \<and> 0 \<le> Re z then Arg z else 2*pi - Arg z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   793
  apply (cases "z=0", simp)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   794
  apply (rule Arg_unique [of "inverse (norm z)"])
61762
d50b993b4fb9 Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
paulson <lp15@cam.ac.uk>
parents: 61711
diff changeset
   795
  using Arg_ge_0 [of z] Arg_lt_2pi [of z] Arg_eq [of z] Arg_eq_0 [of z] exp_two_pi_i
59746
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   796
  apply (auto simp: of_real_numeral algebra_simps exp_diff divide_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   797
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   798
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   799
lemma Arg_eq_iff:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   800
  assumes "w \<noteq> 0" "z \<noteq> 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   801
     shows "Arg w = Arg z \<longleftrightarrow> (\<exists>x. 0 < x & w = of_real x * z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   802
  using assms Arg_eq [of z] Arg_eq [of w]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   803
  apply auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   804
  apply (rule_tac x="norm w / norm z" in exI)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   805
  apply (simp add: divide_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   806
  by (metis mult.commute mult.left_commute)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   807
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   808
lemma Arg_inverse_eq_0: "Arg(inverse z) = 0 \<longleftrightarrow> Arg z = 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   809
  using complex_is_Real_iff
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   810
  apply (simp add: Arg_eq_0)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   811
  apply (auto simp: divide_simps not_sum_power2_lt_zero)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   812
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   813
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   814
lemma Arg_divide:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   815
  assumes "w \<noteq> 0" "z \<noteq> 0" "Arg w \<le> Arg z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   816
    shows "Arg(z / w) = Arg z - Arg w"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   817
  apply (rule Arg_unique [of "norm(z / w)"])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   818
  using assms Arg_eq [of z] Arg_eq [of w] Arg_ge_0 [of w] Arg_lt_2pi [of z]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   819
  apply (auto simp: exp_diff norm_divide algebra_simps divide_simps)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   820
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   821
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   822
lemma Arg_le_div_sum:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   823
  assumes "w \<noteq> 0" "z \<noteq> 0" "Arg w \<le> Arg z"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   824
    shows "Arg z = Arg w + Arg(z / w)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   825
  by (simp add: Arg_divide assms)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   826
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   827
lemma Arg_le_div_sum_eq:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   828
  assumes "w \<noteq> 0" "z \<noteq> 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   829
    shows "Arg w \<le> Arg z \<longleftrightarrow> Arg z = Arg w + Arg(z / w)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   830
  using assms
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   831
  by (auto simp: Arg_ge_0 intro: Arg_le_div_sum)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   832
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   833
lemma Arg_diff:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   834
  assumes "w \<noteq> 0" "z \<noteq> 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   835
    shows "Arg w - Arg z = (if Arg z \<le> Arg w then Arg(w / z) else Arg(w/z) - 2*pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   836
  using assms
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   837
  apply (auto simp: Arg_ge_0 Arg_divide not_le)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   838
  using Arg_divide [of w z] Arg_inverse [of "w/z"]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   839
  apply auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   840
  by (metis Arg_eq_0 less_irrefl minus_diff_eq right_minus_eq)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   841
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   842
lemma Arg_add:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   843
  assumes "w \<noteq> 0" "z \<noteq> 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   844
    shows "Arg w + Arg z = (if Arg w + Arg z < 2*pi then Arg(w * z) else Arg(w * z) + 2*pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   845
  using assms
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   846
  using Arg_diff [of "w*z" z] Arg_le_div_sum_eq [of z "w*z"]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   847
  apply (auto simp: Arg_ge_0 Arg_divide not_le)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   848
  apply (metis Arg_lt_2pi add.commute)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   849
  apply (metis (no_types) Arg add.commute diff_0 diff_add_cancel diff_less_eq diff_minus_eq_add not_less)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   850
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   851
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   852
lemma Arg_times:
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   853
  assumes "w \<noteq> 0" "z \<noteq> 0"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   854
    shows "Arg (w * z) = (if Arg w + Arg z < 2*pi then Arg w + Arg z
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   855
                            else (Arg w + Arg z) - 2*pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   856
  using Arg_add [OF assms]
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   857
  by auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   858
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   859
lemma Arg_cnj: "Arg(cnj z) = (if z \<in> \<real> \<and> 0 \<le> Re z then Arg z else 2*pi - Arg z)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   860
  apply (cases "z=0", simp)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   861
  apply (rule trans [of _ "Arg(inverse z)"])
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   862
  apply (simp add: Arg_eq_iff divide_simps complex_norm_square [symmetric] mult.commute)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   863
  apply (metis norm_eq_zero of_real_power zero_less_power2)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   864
  apply (auto simp: of_real_numeral Arg_inverse)
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   865
  done
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   866
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   867
lemma Arg_real: "z \<in> \<real> \<Longrightarrow> Arg z = (if 0 \<le> Re z then 0 else pi)"
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   868
  using Arg_eq_0 Arg_eq_0_pi
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   869
  by auto
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   870
ddae5727c5a9 new HOL Light material about exp, sin, cos
paulson <lp15@cam.ac.uk>
parents: 59745
diff changeset
   871
lemma Arg_exp: "0 \<le> Im z \<Longrightarrow> Im z < 2*pi \<Longrightarrow> Arg(exp z) = Im z"
61762
d50b993b4fb9 Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
paulson <lp15@cam.ac.uk>
parents: 61711
diff changeset
   872
  by (rule Arg_unique [of  "exp(Re z)"]) (auto simp: exp_eq_polar)
d50b993b4fb9 Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
paulson <lp15@cam.ac.uk>
parents: 61711
diff changeset
   873
d50b993b4fb9 Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
paulson <lp15@cam.ac.uk>
parents: 61711
diff changeset
   874
lemma complex_split_polar:
d50b993b4fb9 Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
paulson <lp15@cam.ac.uk>
parents: 61711
diff changeset
   875
  obtains r a::real where "z = complex_of_real r * (cos a + \<i> * sin a)" "0 \<le> r" "0 \<le> a" "a < 2*pi"
d50b993b4fb9 Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
paulson <lp15@cam.ac.uk>
parents: 61711
diff changeset
   876
  using Arg cis.ctr cis_conv_exp by fastforce
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   877
61806
d2e62ae01cd8 Cauchy's integral formula for circles. Starting to fix eventually_mono.
paulson <lp15@cam.ac.uk>
parents: 61762
diff changeset
   878
lemma Re_Im_le_cmod: "Im w * sin \<phi> + Re w * cos \<phi> \<le> cmod w"
d2e62ae01cd8 Cauchy's integral formula for circles. Starting to fix eventually_mono.
paulson <lp15@cam.ac.uk>
parents: 61762
diff changeset
   879
proof (cases w rule: complex_split_polar)
d2e62ae01cd8 Cauchy's integral formula for circles. Starting to fix eventually_mono.
paulson <lp15@cam.ac.uk>
parents: 61762
diff changeset
   880
  case (1 r a) with sin_cos_le1 [of a \<phi>] show ?thesis
d2e62ae01cd8 Cauchy's integral formula for circles. Starting to fix eventually_mono.
paulson <lp15@cam.ac.uk>
parents: 61762
diff changeset
   881
    apply (simp add: norm_mult cmod_unit_one)
d2e62ae01cd8 Cauchy's integral formula for circles. Starting to fix eventually_mono.
paulson <lp15@cam.ac.uk>
parents: 61762
diff changeset
   882
    by (metis (no_types, hide_lams) abs_le_D1 distrib_left mult.commute mult.left_commute mult_left_le)
d2e62ae01cd8 Cauchy's integral formula for circles. Starting to fix eventually_mono.
paulson <lp15@cam.ac.uk>
parents: 61762
diff changeset
   883
qed
d2e62ae01cd8 Cauchy's integral formula for circles. Starting to fix eventually_mono.
paulson <lp15@cam.ac.uk>
parents: 61762
diff changeset
   884
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
   885
subsection\<open>Analytic properties of tangent function\<close>
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   886
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   887
lemma cnj_tan: "cnj(tan z) = tan(cnj z)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   888
  by (simp add: cnj_cos cnj_sin tan_def)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   889
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   890
lemma complex_differentiable_at_tan: "~(cos z = 0) \<Longrightarrow> tan complex_differentiable at z"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   891
  unfolding complex_differentiable_def
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   892
  using DERIV_tan by blast
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   893
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   894
lemma complex_differentiable_within_tan: "~(cos z = 0)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   895
         \<Longrightarrow> tan complex_differentiable (at z within s)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   896
  using complex_differentiable_at_tan complex_differentiable_at_within by blast
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   897
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   898
lemma continuous_within_tan: "~(cos z = 0) \<Longrightarrow> continuous (at z within s) tan"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   899
  using continuous_at_imp_continuous_within isCont_tan by blast
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   900
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   901
lemma continuous_on_tan [continuous_intros]: "(\<And>z. z \<in> s \<Longrightarrow> ~(cos z = 0)) \<Longrightarrow> continuous_on s tan"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   902
  by (simp add: continuous_at_imp_continuous_on)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   903
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   904
lemma holomorphic_on_tan: "(\<And>z. z \<in> s \<Longrightarrow> ~(cos z = 0)) \<Longrightarrow> tan holomorphic_on s"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   905
  by (simp add: complex_differentiable_within_tan holomorphic_on_def)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   906
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   907
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
   908
subsection\<open>Complex logarithms (the conventional principal value)\<close>
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   909
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   910
instantiation complex :: ln
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   911
begin
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
   912
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   913
definition ln_complex :: "complex \<Rightarrow> complex"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   914
  where "ln_complex \<equiv> \<lambda>z. THE w. exp w = z & -pi < Im(w) & Im(w) \<le> pi"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   915
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   916
lemma
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   917
  assumes "z \<noteq> 0"
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   918
    shows exp_Ln [simp]:  "exp(ln z) = z"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   919
      and mpi_less_Im_Ln: "-pi < Im(ln z)"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   920
      and Im_Ln_le_pi:    "Im(ln z) \<le> pi"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   921
proof -
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   922
  obtain \<psi> where z: "z / (cmod z) = Complex (cos \<psi>) (sin \<psi>)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   923
    using complex_unimodular_polar [of "z / (norm z)"] assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   924
    by (auto simp: norm_divide divide_simps)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   925
  obtain \<phi> where \<phi>: "- pi < \<phi>" "\<phi> \<le> pi" "sin \<phi> = sin \<psi>" "cos \<phi> = cos \<psi>"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   926
    using sincos_principal_value [of "\<psi>"] assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   927
    by (auto simp: norm_divide divide_simps)
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   928
  have "exp(ln z) = z & -pi < Im(ln z) & Im(ln z) \<le> pi" unfolding ln_complex_def
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   929
    apply (rule theI [where a = "Complex (ln(norm z)) \<phi>"])
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   930
    using z assms \<phi>
61762
d50b993b4fb9 Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
paulson <lp15@cam.ac.uk>
parents: 61711
diff changeset
   931
    apply (auto simp: field_simps exp_complex_eqI exp_eq_polar cis.code)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   932
    done
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   933
  then show "exp(ln z) = z" "-pi < Im(ln z)" "Im(ln z) \<le> pi"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   934
    by auto
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   935
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   936
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   937
lemma Ln_exp [simp]:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   938
  assumes "-pi < Im(z)" "Im(z) \<le> pi"
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   939
    shows "ln(exp z) = z"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   940
  apply (rule exp_complex_eqI)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   941
  using assms mpi_less_Im_Ln  [of "exp z"] Im_Ln_le_pi [of "exp z"]
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   942
  apply auto
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   943
  done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   944
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
   945
subsection\<open>Relation to Real Logarithm\<close>
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   946
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   947
lemma Ln_of_real:
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   948
  assumes "0 < z"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   949
    shows "ln(of_real z::complex) = of_real(ln z)"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   950
proof -
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   951
  have "ln(of_real (exp (ln z))::complex) = ln (exp (of_real (ln z)))"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   952
    by (simp add: exp_of_real)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   953
  also have "... = of_real(ln z)"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   954
    using assms
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   955
    by (subst Ln_exp) auto
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   956
  finally show ?thesis
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   957
    using assms by simp
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   958
qed
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   959
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   960
corollary Ln_in_Reals [simp]: "z \<in> \<real> \<Longrightarrow> Re z > 0 \<Longrightarrow> ln z \<in> \<real>"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   961
  by (auto simp: Ln_of_real elim: Reals_cases)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   962
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   963
corollary Im_Ln_of_real [simp]: "r > 0 \<Longrightarrow> Im (ln (of_real r)) = 0"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   964
  by (simp add: Ln_of_real)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   965
61070
b72a990adfe2 prefer symbols;
wenzelm
parents: 60809
diff changeset
   966
lemma cmod_Ln_Reals [simp]: "z \<in> \<real> \<Longrightarrow> 0 < Re z \<Longrightarrow> cmod (ln z) = norm (ln (Re z))"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   967
  using Ln_of_real by force
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   968
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   969
lemma Ln_1: "ln 1 = (0::complex)"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   970
proof -
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   971
  have "ln (exp 0) = (0::complex)"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   972
    by (metis (mono_tags, hide_lams) Ln_of_real exp_zero ln_one of_real_0 of_real_1 zero_less_one)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   973
  then show ?thesis
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   974
    by simp
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   975
qed
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   976
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   977
instance
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   978
  by intro_classes (rule ln_complex_def Ln_1)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   979
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   980
end
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   981
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   982
abbreviation Ln :: "complex \<Rightarrow> complex"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   983
  where "Ln \<equiv> ln"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
   984
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   985
lemma Ln_eq_iff: "w \<noteq> 0 \<Longrightarrow> z \<noteq> 0 \<Longrightarrow> (Ln w = Ln z \<longleftrightarrow> w = z)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   986
  by (metis exp_Ln)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   987
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   988
lemma Ln_unique: "exp(z) = w \<Longrightarrow> -pi < Im(z) \<Longrightarrow> Im(z) \<le> pi \<Longrightarrow> Ln w = z"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   989
  using Ln_exp by blast
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   990
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   991
lemma Re_Ln [simp]: "z \<noteq> 0 \<Longrightarrow> Re(Ln z) = ln(norm z)"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   992
  by (metis exp_Ln assms ln_exp norm_exp_eq_Re)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   993
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
   994
corollary ln_cmod_le:
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   995
  assumes z: "z \<noteq> 0"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   996
    shows "ln (cmod z) \<le> cmod (Ln z)"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   997
  using norm_exp [of "Ln z", simplified exp_Ln [OF z]]
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
   998
  by (metis Re_Ln complex_Re_le_cmod z)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
   999
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1000
lemma exists_complex_root:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1001
  fixes a :: complex
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1002
  shows "n \<noteq> 0 \<Longrightarrow> \<exists>z. z ^ n = a"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1003
  apply (cases "a=0", simp)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1004
  apply (rule_tac x= "exp(Ln(a) / n)" in exI)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1005
  apply (auto simp: exp_of_nat_mult [symmetric])
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1006
  done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1007
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1008
subsection\<open>The Unwinding Number and the Ln-product Formula\<close>
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1009
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1010
text\<open>Note that in this special case the unwinding number is -1, 0 or 1.\<close>
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1011
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1012
definition unwinding :: "complex \<Rightarrow> complex" where
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1013
   "unwinding(z) = (z - Ln(exp z)) / (of_real(2*pi) * ii)"
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1014
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1015
lemma unwinding_2pi: "(2*pi) * ii * unwinding(z) = z - Ln(exp z)"
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1016
  by (simp add: unwinding_def)
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1017
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1018
lemma Ln_times_unwinding:
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1019
    "w \<noteq> 0 \<Longrightarrow> z \<noteq> 0 \<Longrightarrow> Ln(w * z) = Ln(w) + Ln(z) - (2*pi) * ii * unwinding(Ln w + Ln z)"
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1020
  using unwinding_2pi by (simp add: exp_add)
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1021
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1022
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1023
subsection\<open>Derivative of Ln away from the branch cut\<close>
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1024
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1025
lemma
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1026
  assumes "z \<notin> \<real>\<^sub>\<le>\<^sub>0"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1027
    shows has_field_derivative_Ln: "(Ln has_field_derivative inverse(z)) (at z)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1028
      and Im_Ln_less_pi:           "Im (Ln z) < pi"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1029
proof -
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1030
  have znz: "z \<noteq> 0"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1031
    using assms by auto
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1032
  then have "Im (Ln z) \<noteq> pi"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1033
    by (metis (no_types) Im_exp Ln_in_Reals assms complex_nonpos_Reals_iff complex_is_Real_iff exp_Ln mult_zero_right not_less pi_neq_zero sin_pi znz)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1034
  then show *: "Im (Ln z) < pi" using assms Im_Ln_le_pi
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1035
    by (simp add: le_neq_trans znz)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1036
  show "(Ln has_field_derivative inverse(z)) (at z)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1037
    apply (rule has_complex_derivative_inverse_strong_x
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1038
              [where f = exp and s = "{w. -pi < Im(w) & Im(w) < pi}"])
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1039
    using znz *
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1040
    apply (auto simp: continuous_on_exp open_Collect_conj open_halfspace_Im_gt open_halfspace_Im_lt)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1041
    apply (metis DERIV_exp exp_Ln)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1042
    apply (metis mpi_less_Im_Ln)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1043
    done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1044
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1045
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1046
declare has_field_derivative_Ln [derivative_intros]
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1047
declare has_field_derivative_Ln [THEN DERIV_chain2, derivative_intros]
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1048
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1049
lemma complex_differentiable_at_Ln: "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Ln complex_differentiable at z"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1050
  using complex_differentiable_def has_field_derivative_Ln by blast
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1051
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1052
lemma complex_differentiable_within_Ln: "z \<notin> \<real>\<^sub>\<le>\<^sub>0
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1053
         \<Longrightarrow> Ln complex_differentiable (at z within s)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1054
  using complex_differentiable_at_Ln complex_differentiable_within_subset by blast
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1055
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1056
lemma continuous_at_Ln: "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> continuous (at z) Ln"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1057
  by (simp add: complex_differentiable_imp_continuous_at complex_differentiable_within_Ln)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1058
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1059
lemma isCont_Ln' [simp]:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1060
   "\<lbrakk>isCont f z; f z \<notin> \<real>\<^sub>\<le>\<^sub>0\<rbrakk> \<Longrightarrow> isCont (\<lambda>x. Ln (f x)) z"
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1061
  by (blast intro: isCont_o2 [OF _ continuous_at_Ln])
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1062
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1063
lemma continuous_within_Ln: "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> continuous (at z within s) Ln"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1064
  using continuous_at_Ln continuous_at_imp_continuous_within by blast
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1065
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1066
lemma continuous_on_Ln [continuous_intros]: "(\<And>z. z \<in> s \<Longrightarrow> z \<notin> \<real>\<^sub>\<le>\<^sub>0) \<Longrightarrow> continuous_on s Ln"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1067
  by (simp add: continuous_at_imp_continuous_on continuous_within_Ln)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1068
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1069
lemma holomorphic_on_Ln: "(\<And>z. z \<in> s \<Longrightarrow> z \<notin> \<real>\<^sub>\<le>\<^sub>0) \<Longrightarrow> Ln holomorphic_on s"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1070
  by (simp add: complex_differentiable_within_Ln holomorphic_on_def)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1071
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1072
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1073
subsection\<open>Quadrant-type results for Ln\<close>
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1074
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1075
lemma cos_lt_zero_pi: "pi/2 < x \<Longrightarrow> x < 3*pi/2 \<Longrightarrow> cos x < 0"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1076
  using cos_minus_pi cos_gt_zero_pi [of "x-pi"]
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1077
  by simp
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1078
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1079
lemma Re_Ln_pos_lt:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1080
  assumes "z \<noteq> 0"
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  1081
    shows "\<bar>Im(Ln z)\<bar> < pi/2 \<longleftrightarrow> 0 < Re(z)"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1082
proof -
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1083
  { fix w
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1084
    assume "w = Ln z"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1085
    then have w: "Im w \<le> pi" "- pi < Im w"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1086
      using Im_Ln_le_pi [of z]  mpi_less_Im_Ln [of z]  assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1087
      by auto
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  1088
    then have "\<bar>Im w\<bar> < pi/2 \<longleftrightarrow> 0 < Re(exp w)"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1089
      apply (auto simp: Re_exp zero_less_mult_iff cos_gt_zero_pi)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1090
      using cos_lt_zero_pi [of "-(Im w)"] cos_lt_zero_pi [of "(Im w)"]
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1091
      apply (simp add: abs_if split: split_if_asm)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1092
      apply (metis (no_types) cos_minus cos_pi_half eq_divide_eq_numeral1(1) eq_numeral_simps(4)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1093
               less_numeral_extra(3) linorder_neqE_linordered_idom minus_mult_minus minus_mult_right
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1094
               mult_numeral_1_right)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1095
      done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1096
  }
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1097
  then show ?thesis using assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1098
    by auto
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1099
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1100
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1101
lemma Re_Ln_pos_le:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1102
  assumes "z \<noteq> 0"
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  1103
    shows "\<bar>Im(Ln z)\<bar> \<le> pi/2 \<longleftrightarrow> 0 \<le> Re(z)"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1104
proof -
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1105
  { fix w
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1106
    assume "w = Ln z"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1107
    then have w: "Im w \<le> pi" "- pi < Im w"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1108
      using Im_Ln_le_pi [of z]  mpi_less_Im_Ln [of z]  assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1109
      by auto
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  1110
    then have "\<bar>Im w\<bar> \<le> pi/2 \<longleftrightarrow> 0 \<le> Re(exp w)"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1111
      apply (auto simp: Re_exp zero_le_mult_iff cos_ge_zero)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1112
      using cos_lt_zero_pi [of "- (Im w)"] cos_lt_zero_pi [of "(Im w)"] not_le
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1113
      apply (auto simp: abs_if split: split_if_asm)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1114
      done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1115
  }
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1116
  then show ?thesis using assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1117
    by auto
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1118
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1119
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1120
lemma Im_Ln_pos_lt:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1121
  assumes "z \<noteq> 0"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1122
    shows "0 < Im(Ln z) \<and> Im(Ln z) < pi \<longleftrightarrow> 0 < Im(z)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1123
proof -
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1124
  { fix w
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1125
    assume "w = Ln z"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1126
    then have w: "Im w \<le> pi" "- pi < Im w"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1127
      using Im_Ln_le_pi [of z]  mpi_less_Im_Ln [of z]  assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1128
      by auto
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1129
    then have "0 < Im w \<and> Im w < pi \<longleftrightarrow> 0 < Im(exp w)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1130
      using sin_gt_zero [of "- (Im w)"] sin_gt_zero [of "(Im w)"]
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1131
      apply (auto simp: Im_exp zero_less_mult_iff)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1132
      using less_linear apply fastforce
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1133
      using less_linear apply fastforce
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1134
      done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1135
  }
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1136
  then show ?thesis using assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1137
    by auto
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1138
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1139
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1140
lemma Im_Ln_pos_le:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1141
  assumes "z \<noteq> 0"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1142
    shows "0 \<le> Im(Ln z) \<and> Im(Ln z) \<le> pi \<longleftrightarrow> 0 \<le> Im(z)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1143
proof -
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1144
  { fix w
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1145
    assume "w = Ln z"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1146
    then have w: "Im w \<le> pi" "- pi < Im w"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1147
      using Im_Ln_le_pi [of z]  mpi_less_Im_Ln [of z]  assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1148
      by auto
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1149
    then have "0 \<le> Im w \<and> Im w \<le> pi \<longleftrightarrow> 0 \<le> Im(exp w)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1150
      using sin_ge_zero [of "- (Im w)"] sin_ge_zero [of "(Im w)"]
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1151
      apply (auto simp: Im_exp zero_le_mult_iff sin_ge_zero)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1152
      apply (metis not_le not_less_iff_gr_or_eq pi_not_less_zero sin_eq_0_pi)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1153
      done }
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1154
  then show ?thesis using assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1155
    by auto
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1156
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1157
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  1158
lemma Re_Ln_pos_lt_imp: "0 < Re(z) \<Longrightarrow> \<bar>Im(Ln z)\<bar> < pi/2"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1159
  by (metis Re_Ln_pos_lt less_irrefl zero_complex.simps(1))
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1160
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1161
lemma Im_Ln_pos_lt_imp: "0 < Im(z) \<Longrightarrow> 0 < Im(Ln z) \<and> Im(Ln z) < pi"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1162
  by (metis Im_Ln_pos_lt not_le order_refl zero_complex.simps(2))
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1163
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1164
text\<open>A reference to the set of positive real numbers\<close>
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1165
lemma Im_Ln_eq_0: "z \<noteq> 0 \<Longrightarrow> (Im(Ln z) = 0 \<longleftrightarrow> 0 < Re(z) \<and> Im(z) = 0)"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1166
by (metis Im_complex_of_real Im_exp Ln_in_Reals Re_Ln_pos_lt Re_Ln_pos_lt_imp 
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1167
          Re_complex_of_real complex_is_Real_iff exp_Ln exp_of_real pi_gt_zero)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1168
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1169
lemma Im_Ln_eq_pi: "z \<noteq> 0 \<Longrightarrow> (Im(Ln z) = pi \<longleftrightarrow> Re(z) < 0 \<and> Im(z) = 0)"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1170
by (metis Im_Ln_eq_0 Im_Ln_pos_le Im_Ln_pos_lt add.left_neutral complex_eq less_eq_real_def 
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1171
    mult_zero_right not_less_iff_gr_or_eq pi_ge_zero pi_neq_zero rcis_zero_arg rcis_zero_mod)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1172
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1173
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1174
subsection\<open>More Properties of Ln\<close>
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1175
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1176
lemma cnj_Ln: "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> cnj(Ln z) = Ln(cnj z)"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1177
  apply (cases "z=0", auto)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1178
  apply (rule exp_complex_eqI)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1179
  apply (auto simp: abs_if split: split_if_asm)
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1180
  using Im_Ln_less_pi Im_Ln_le_pi apply force
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1181
  apply (metis complex_cnj_zero_iff diff_minus_eq_add diff_strict_mono minus_less_iff 
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1182
          mpi_less_Im_Ln mult.commute mult_2_right)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1183
  by (metis exp_Ln exp_cnj)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1184
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1185
lemma Ln_inverse: "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Ln(inverse z) = -(Ln z)"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1186
  apply (cases "z=0", auto)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1187
  apply (rule exp_complex_eqI)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1188
  using mpi_less_Im_Ln [of z] mpi_less_Im_Ln [of "inverse z"]
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1189
  apply (auto simp: abs_if exp_minus split: split_if_asm)
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1190
  apply (metis Im_Ln_less_pi Im_Ln_le_pi add.commute add_mono_thms_linordered_field(3) inverse_nonzero_iff_nonzero mult_2)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1191
  done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1192
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1193
lemma Ln_minus1 [simp]: "Ln(-1) = ii * pi"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1194
  apply (rule exp_complex_eqI)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1195
  using Im_Ln_le_pi [of "-1"] mpi_less_Im_Ln [of "-1"] cis_conv_exp cis_pi
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1196
  apply (auto simp: abs_if)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1197
  done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1198
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1199
lemma Ln_ii [simp]: "Ln ii = ii * of_real pi/2"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1200
  using Ln_exp [of "ii * (of_real pi/2)"]
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1201
  unfolding exp_Euler
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1202
  by simp
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1203
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1204
lemma Ln_minus_ii [simp]: "Ln(-ii) = - (ii * pi/2)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1205
proof -
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1206
  have  "Ln(-ii) = Ln(inverse ii)"    by simp
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1207
  also have "... = - (Ln ii)"         using Ln_inverse by blast
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1208
  also have "... = - (ii * pi/2)"     by simp
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1209
  finally show ?thesis .
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1210
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1211
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1212
lemma Ln_times:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1213
  assumes "w \<noteq> 0" "z \<noteq> 0"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1214
    shows "Ln(w * z) =
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1215
                (if Im(Ln w + Ln z) \<le> -pi then
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1216
                  (Ln(w) + Ln(z)) + ii * of_real(2*pi)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1217
                else if Im(Ln w + Ln z) > pi then
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1218
                  (Ln(w) + Ln(z)) - ii * of_real(2*pi)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1219
                else Ln(w) + Ln(z))"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1220
  using pi_ge_zero Im_Ln_le_pi [of w] Im_Ln_le_pi [of z]
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1221
  using assms mpi_less_Im_Ln [of w] mpi_less_Im_Ln [of z]
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1222
  by (auto simp: exp_add exp_diff sin_double cos_double exp_Euler intro!: Ln_unique)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1223
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1224
corollary Ln_times_simple:
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1225
    "\<lbrakk>w \<noteq> 0; z \<noteq> 0; -pi < Im(Ln w) + Im(Ln z); Im(Ln w) + Im(Ln z) \<le> pi\<rbrakk>
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1226
         \<Longrightarrow> Ln(w * z) = Ln(w) + Ln(z)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1227
  by (simp add: Ln_times)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1228
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1229
corollary Ln_times_of_real:
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1230
    "\<lbrakk>r > 0; z \<noteq> 0\<rbrakk> \<Longrightarrow> Ln(of_real r * z) = ln r + Ln(z)"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1231
  using mpi_less_Im_Ln Im_Ln_le_pi
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1232
  by (force simp: Ln_times)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1233
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1234
corollary Ln_divide_of_real:
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1235
    "\<lbrakk>r > 0; z \<noteq> 0\<rbrakk> \<Longrightarrow> Ln(z / of_real r) = Ln(z) - ln r"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1236
using Ln_times_of_real [of "inverse r" z]
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1237
by (simp add: ln_inverse Ln_of_real mult.commute divide_inverse of_real_inverse [symmetric]
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1238
         del: of_real_inverse)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1239
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1240
lemma Ln_minus:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1241
  assumes "z \<noteq> 0"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1242
    shows "Ln(-z) = (if Im(z) \<le> 0 \<and> ~(Re(z) < 0 \<and> Im(z) = 0)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1243
                     then Ln(z) + ii * pi
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1244
                     else Ln(z) - ii * pi)" (is "_ = ?rhs")
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1245
  using Im_Ln_le_pi [of z] mpi_less_Im_Ln [of z] assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1246
        Im_Ln_eq_pi [of z] Im_Ln_pos_lt [of z]
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1247
    by (fastforce simp: exp_add exp_diff exp_Euler intro!: Ln_unique)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1248
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1249
lemma Ln_inverse_if:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1250
  assumes "z \<noteq> 0"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1251
    shows "Ln (inverse z) = (if z \<in> \<real>\<^sub>\<le>\<^sub>0 then -(Ln z) + \<i> * 2 * complex_of_real pi else -(Ln z))"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1252
proof (cases "z \<in> \<real>\<^sub>\<le>\<^sub>0")
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1253
  case False then show ?thesis
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1254
    by (simp add: Ln_inverse)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1255
next
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1256
  case True
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1257
  then have z: "Im z = 0" "Re z < 0"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1258
    using assms
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1259
    apply (auto simp: complex_nonpos_Reals_iff)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1260
    by (metis complex_is_Real_iff le_imp_less_or_eq of_real_0 of_real_Re)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1261
  have "Ln(inverse z) = Ln(- (inverse (-z)))"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1262
    by simp
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1263
  also have "... = Ln (inverse (-z)) + \<i> * complex_of_real pi"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1264
    using assms z
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1265
    apply (simp add: Ln_minus)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1266
    apply (simp add: field_simps)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1267
    done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1268
  also have "... = - Ln (- z) + \<i> * complex_of_real pi"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1269
    apply (subst Ln_inverse)
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1270
    using z by (auto simp add: complex_nonneg_Reals_iff) 
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1271
  also have "... = - (Ln z) + \<i> * 2 * complex_of_real pi"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1272
    apply (subst Ln_minus [OF assms])
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1273
    using assms z
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1274
    apply simp
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1275
    done
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1276
  finally show ?thesis by (simp add: True)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1277
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1278
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1279
lemma Ln_times_ii:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1280
  assumes "z \<noteq> 0"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1281
    shows  "Ln(ii * z) = (if 0 \<le> Re(z) | Im(z) < 0
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1282
                          then Ln(z) + ii * of_real pi/2
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1283
                          else Ln(z) - ii * of_real(3 * pi/2))"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1284
  using Im_Ln_le_pi [of z] mpi_less_Im_Ln [of z] assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1285
        Im_Ln_eq_pi [of z] Im_Ln_pos_lt [of z] Re_Ln_pos_le [of z]
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1286
  by (auto simp: Ln_times)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1287
61524
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1288
lemma Ln_of_nat: "0 < n \<Longrightarrow> Ln (of_nat n) = of_real (ln (of_nat n))"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1289
  by (subst of_real_of_nat_eq[symmetric], subst Ln_of_real[symmetric]) simp_all
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1290
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1291
lemma Ln_of_nat_over_of_nat:
61524
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1292
  assumes "m > 0" "n > 0"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1293
  shows   "Ln (of_nat m / of_nat n) = of_real (ln (of_nat m) - ln (of_nat n))"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1294
proof -
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1295
  have "of_nat m / of_nat n = (of_real (of_nat m / of_nat n) :: complex)" by simp
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1296
  also from assms have "Ln ... = of_real (ln (of_nat m / of_nat n))"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1297
    by (simp add: Ln_of_real[symmetric])
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1298
  also from assms have "... = of_real (ln (of_nat m) - ln (of_nat n))"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1299
    by (simp add: ln_div)
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1300
  finally show ?thesis .
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1301
qed
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1302
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1303
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1304
subsection\<open>Relation between Ln and Arg, and hence continuity of Arg\<close>
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1305
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1306
lemma Arg_Ln:
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1307
  assumes "0 < Arg z" shows "Arg z = Im(Ln(-z)) + pi"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1308
proof (cases "z = 0")
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1309
  case True
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1310
  with assms show ?thesis
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1311
    by simp
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1312
next
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1313
  case False
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1314
  then have "z / of_real(norm z) = exp(ii * of_real(Arg z))"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1315
    using Arg [of z]
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1316
    by (metis abs_norm_cancel nonzero_mult_divide_cancel_left norm_of_real zero_less_norm_iff)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1317
  then have "- z / of_real(norm z) = exp (\<i> * (of_real (Arg z) - pi))"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1318
    using cis_conv_exp cis_pi
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1319
    by (auto simp: exp_diff algebra_simps)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1320
  then have "ln (- z / of_real(norm z)) = ln (exp (\<i> * (of_real (Arg z) - pi)))"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1321
    by simp
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1322
  also have "... = \<i> * (of_real(Arg z) - pi)"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1323
    using Arg [of z] assms pi_not_less_zero
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1324
    by auto
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1325
  finally have "Arg z =  Im (Ln (- z / of_real (cmod z))) + pi"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1326
    by simp
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1327
  also have "... = Im (Ln (-z) - ln (cmod z)) + pi"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1328
    by (metis diff_0_right minus_diff_eq zero_less_norm_iff Ln_divide_of_real False)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1329
  also have "... = Im (Ln (-z)) + pi"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1330
    by simp
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1331
  finally show ?thesis .
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1332
qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1333
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1334
lemma continuous_at_Arg:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1335
  assumes "z \<notin> \<real>\<^sub>\<ge>\<^sub>0"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1336
    shows "continuous (at z) Arg"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1337
proof -
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1338
  have *: "isCont (\<lambda>z. Im (Ln (- z)) + pi) z"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1339
    by (rule Complex.isCont_Im isCont_Ln' continuous_intros | simp add: assms complex_is_Real_iff)+
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1340
  have [simp]: "\<And>x. \<lbrakk>Im x \<noteq> 0\<rbrakk> \<Longrightarrow> Im (Ln (- x)) + pi = Arg x"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1341
      using Arg_Ln Arg_gt_0 complex_is_Real_iff by auto
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1342
  consider "Re z < 0" | "Im z \<noteq> 0" using assms
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1343
    using complex_nonneg_Reals_iff not_le by blast 
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1344
  then have [simp]: "(\<lambda>z. Im (Ln (- z)) + pi) \<midarrow>z\<rightarrow> Arg z"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1345
      using "*"  by (simp add: isCont_def) (metis Arg_Ln Arg_gt_0 complex_is_Real_iff)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1346
  show ?thesis
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1347
      apply (simp add: continuous_at)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1348
      apply (rule Lim_transform_within_open [where s= "-\<real>\<^sub>\<ge>\<^sub>0" and f = "\<lambda>z. Im(Ln(-z)) + pi"])
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1349
      apply (auto simp add: not_le Arg_Ln [OF Arg_gt_0] complex_nonneg_Reals_iff closed_def [symmetric])
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1350
      using assms apply (force simp add: complex_nonneg_Reals_iff)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1351
      done
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1352
qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1353
62049
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1354
lemma Ln_series:
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1355
  fixes z :: complex
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1356
  assumes "norm z < 1"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1357
  shows   "(\<lambda>n. (-1)^Suc n / of_nat n * z^n) sums ln (1 + z)" (is "(\<lambda>n. ?f n * z^n) sums _")
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1358
proof -
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1359
  let ?F = "\<lambda>z. \<Sum>n. ?f n * z^n" and ?F' = "\<lambda>z. \<Sum>n. diffs ?f n * z^n"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1360
  have r: "conv_radius ?f = 1"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1361
    by (intro conv_radius_ratio_limit_nonzero[of _ 1])
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1362
       (simp_all add: norm_divide LIMSEQ_Suc_n_over_n del: of_nat_Suc)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1363
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1364
  have "\<exists>c. \<forall>z\<in>ball 0 1. ln (1 + z) - ?F z = c"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1365
  proof (rule has_field_derivative_zero_constant)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1366
    fix z :: complex assume z': "z \<in> ball 0 1"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1367
    hence z: "norm z < 1" by (simp add: dist_0_norm)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1368
    def t \<equiv> "of_real (1 + norm z) / 2 :: complex"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1369
    from z have t: "norm z < norm t" "norm t < 1" unfolding t_def
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1370
      by (simp_all add: field_simps norm_divide del: of_real_add)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1371
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1372
    have "Re (-z) \<le> norm (-z)" by (rule complex_Re_le_cmod)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1373
    also from z have "... < 1" by simp
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1374
    finally have "((\<lambda>z. ln (1 + z)) has_field_derivative inverse (1+z)) (at z)"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1375
      by (auto intro!: derivative_eq_intros simp: complex_nonpos_Reals_iff)
62049
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1376
    moreover have "(?F has_field_derivative ?F' z) (at z)" using t r
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1377
      by (intro termdiffs_strong[of _ t] summable_in_conv_radius) simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1378
    ultimately have "((\<lambda>z. ln (1 + z) - ?F z) has_field_derivative (inverse (1 + z) - ?F' z)) 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1379
                       (at z within ball 0 1)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1380
      by (intro derivative_intros) (simp_all add: at_within_open[OF z'])
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1381
    also have "(\<lambda>n. of_nat n * ?f n * z ^ (n - Suc 0)) sums ?F' z" using t r
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1382
      by (intro diffs_equiv termdiff_converges[OF t(1)] summable_in_conv_radius) simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1383
    from sums_split_initial_segment[OF this, of 1]
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1384
      have "(\<lambda>i. (-z) ^ i) sums ?F' z" by (simp add: power_minus[of z] del: of_nat_Suc)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1385
    hence "?F' z = inverse (1 + z)" using z by (simp add: sums_iff suminf_geometric divide_inverse)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1386
    also have "inverse (1 + z) - inverse (1 + z) = 0" by simp
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1387
    finally show "((\<lambda>z. ln (1 + z) - ?F z) has_field_derivative 0) (at z within ball 0 1)" .
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1388
  qed simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1389
  then obtain c where c: "\<And>z. z \<in> ball 0 1 \<Longrightarrow> ln (1 + z) - ?F z = c" by blast
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1390
  from c[of 0] have "c = 0" by (simp only: powser_zero) simp
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1391
  with c[of z] assms have "ln (1 + z) = ?F z" by (simp add: dist_0_norm)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1392
  moreover have "summable (\<lambda>n. ?f n * z^n)" using assms r
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1393
    by (intro summable_in_conv_radius) simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1394
  ultimately show ?thesis by (simp add: sums_iff)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1395
qed
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1396
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1397
lemma Ln_approx_linear:
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1398
  fixes z :: complex
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1399
  assumes "norm z < 1"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1400
  shows   "norm (ln (1 + z) - z) \<le> norm z^2 / (1 - norm z)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1401
proof -
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1402
  let ?f = "\<lambda>n. (-1)^Suc n / of_nat n"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1403
  from assms have "(\<lambda>n. ?f n * z^n) sums ln (1 + z)" using Ln_series by simp
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1404
  moreover have "(\<lambda>n. (if n = 1 then 1 else 0) * z^n) sums z" using powser_sums_if[of 1] by simp
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1405
  ultimately have "(\<lambda>n. (?f n - (if n = 1 then 1 else 0)) * z^n) sums (ln (1 + z) - z)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1406
    by (subst left_diff_distrib, intro sums_diff) simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1407
  from sums_split_initial_segment[OF this, of "Suc 1"]
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1408
    have "(\<lambda>i. (-(z^2)) * inverse (2 + of_nat i) * (- z)^i) sums (Ln (1 + z) - z)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1409
    by (simp add: power2_eq_square mult_ac power_minus[of z] divide_inverse)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1410
  hence "(Ln (1 + z) - z) = (\<Sum>i. (-(z^2)) * inverse (of_nat (i+2)) * (-z)^i)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1411
    by (simp add: sums_iff)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1412
  also have A: "summable (\<lambda>n. norm z^2 * (inverse (real_of_nat (Suc (Suc n))) * cmod z ^ n))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1413
    by (rule summable_mult, rule summable_comparison_test_ev[OF _ summable_geometric[of "norm z"]])
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1414
       (auto simp: assms field_simps intro!: always_eventually)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1415
  hence "norm (\<Sum>i. (-(z^2)) * inverse (of_nat (i+2)) * (-z)^i) \<le> 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1416
             (\<Sum>i. norm (-(z^2) * inverse (of_nat (i+2)) * (-z)^i))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1417
    by (intro summable_norm)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1418
       (auto simp: norm_power norm_inverse norm_mult mult_ac simp del: of_nat_add of_nat_Suc)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1419
  also have "norm ((-z)^2 * (-z)^i) * inverse (of_nat (i+2)) \<le> norm ((-z)^2 * (-z)^i) * 1" for i
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1420
    by (intro mult_left_mono) (simp_all add: divide_simps)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1421
  hence "(\<Sum>i. norm (-(z^2) * inverse (of_nat (i+2)) * (-z)^i)) \<le> 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1422
           (\<Sum>i. norm (-(z^2) * (-z)^i))" using A assms
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1423
    apply (simp_all only: norm_power norm_inverse norm_divide norm_mult)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1424
    apply (intro suminf_le summable_mult summable_geometric)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1425
    apply (auto simp: norm_power field_simps simp del: of_nat_add of_nat_Suc)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1426
    done
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1427
  also have "... = norm z^2 * (\<Sum>i. norm z^i)" using assms
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1428
    by (subst suminf_mult [symmetric]) (auto intro!: summable_geometric simp: norm_mult norm_power)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1429
  also have "(\<Sum>i. norm z^i) = inverse (1 - norm z)" using assms
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1430
    by (subst suminf_geometric) (simp_all add: divide_inverse)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1431
  also have "norm z^2 * ... = norm z^2 / (1 - norm z)" by (simp add: divide_inverse)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1432
  finally show ?thesis .
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1433
qed
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1434
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1435
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1436
text\<open>Relation between Arg and arctangent in upper halfplane\<close>
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1437
lemma Arg_arctan_upperhalf:
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1438
  assumes "0 < Im z"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1439
    shows "Arg z = pi/2 - arctan(Re z / Im z)"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1440
proof (cases "z = 0")
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1441
  case True with assms show ?thesis
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1442
    by simp
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1443
next
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1444
  case False
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1445
  show ?thesis
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1446
    apply (rule Arg_unique [of "norm z"])
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1447
    using False assms arctan [of "Re z / Im z"] pi_ge_two pi_half_less_two
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1448
    apply (auto simp: exp_Euler cos_diff sin_diff)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1449
    using norm_complex_def [of z, symmetric]
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1450
    apply (simp add: sin_of_real cos_of_real sin_arctan cos_arctan field_simps real_sqrt_divide)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1451
    apply (metis complex_eq mult.assoc ring_class.ring_distribs(2))
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1452
    done
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1453
qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1454
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1455
lemma Arg_eq_Im_Ln:
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1456
  assumes "0 \<le> Im z" "0 < Re z"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1457
    shows "Arg z = Im (Ln z)"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1458
proof (cases "z = 0 \<or> Im z = 0")
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1459
  case True then show ?thesis
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1460
    using assms Arg_eq_0 complex_is_Real_iff
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1461
    apply auto
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1462
    by (metis Arg_eq_0_pi Arg_eq_pi Im_Ln_eq_0 Im_Ln_eq_pi less_numeral_extra(3) zero_complex.simps(1))
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1463
next
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1464
  case False
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1465
  then have "Arg z > 0"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1466
    using Arg_gt_0 complex_is_Real_iff by blast
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1467
  then show ?thesis
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1468
    using assms False
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1469
    by (subst Arg_Ln) (auto simp: Ln_minus)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1470
qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1471
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1472
lemma continuous_within_upperhalf_Arg:
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1473
  assumes "z \<noteq> 0"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1474
    shows "continuous (at z within {z. 0 \<le> Im z}) Arg"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1475
proof (cases "z \<in> \<real>\<^sub>\<ge>\<^sub>0")
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1476
  case False then show ?thesis
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1477
    using continuous_at_Arg continuous_at_imp_continuous_within by auto
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1478
next
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1479
  case True
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1480
  then have z: "z \<in> \<real>" "0 < Re z"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1481
    using assms  by (auto simp: complex_nonneg_Reals_iff complex_is_Real_iff complex_neq_0)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1482
  then have [simp]: "Arg z = 0" "Im (Ln z) = 0"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1483
    by (auto simp: Arg_eq_0 Im_Ln_eq_0 assms complex_is_Real_iff)
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1484
  show ?thesis
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1485
  proof (clarsimp simp add: continuous_within Lim_within dist_norm)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1486
    fix e::real
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1487
    assume "0 < e"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1488
    moreover have "continuous (at z) (\<lambda>x. Im (Ln x))"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1489
      using z by (simp add: continuous_at_Ln complex_nonpos_Reals_iff)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1490
    ultimately
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1491
    obtain d where d: "d>0" "\<And>x. x \<noteq> z \<Longrightarrow> cmod (x - z) < d \<Longrightarrow> \<bar>Im (Ln x)\<bar> < e"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1492
      by (auto simp: continuous_within Lim_within dist_norm)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1493
    { fix x
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1494
      assume "cmod (x - z) < Re z / 2"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1495
      then have "\<bar>Re x - Re z\<bar> < Re z / 2"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1496
        by (metis le_less_trans abs_Re_le_cmod minus_complex.simps(1))
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1497
      then have "0 < Re x"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1498
        using z by linarith
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1499
    }
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1500
    then show "\<exists>d>0. \<forall>x. 0 \<le> Im x \<longrightarrow> x \<noteq> z \<and> cmod (x - z) < d \<longrightarrow> \<bar>Arg x\<bar> < e"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1501
      apply (rule_tac x="min d (Re z / 2)" in exI)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1502
      using z d
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1503
      apply (auto simp: Arg_eq_Im_Ln)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1504
      done
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1505
  qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1506
qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1507
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1508
lemma continuous_on_upperhalf_Arg: "continuous_on ({z. 0 \<le> Im z} - {0}) Arg"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1509
  apply (auto simp: continuous_on_eq_continuous_within)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1510
  by (metis Diff_subset continuous_within_subset continuous_within_upperhalf_Arg)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1511
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1512
lemma open_Arg_less_Int:
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1513
  assumes "0 \<le> s" "t \<le> 2*pi"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1514
    shows "open ({y. s < Arg y} \<inter> {y. Arg y < t})"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1515
proof -
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1516
  have 1: "continuous_on (UNIV - \<real>\<^sub>\<ge>\<^sub>0) Arg"
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1517
    using continuous_at_Arg continuous_at_imp_continuous_within
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1518
    by (auto simp: continuous_on_eq_continuous_within)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1519
  have 2: "open (UNIV - \<real>\<^sub>\<ge>\<^sub>0 :: complex set)"  by (simp add: open_Diff)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1520
  have "open ({z. s < z} \<inter> {z. z < t})"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1521
    using open_lessThan [of t] open_greaterThan [of s]
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1522
    by (metis greaterThan_def lessThan_def open_Int)
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1523
  moreover have "{y. s < Arg y} \<inter> {y. Arg y < t} \<subseteq> - \<real>\<^sub>\<ge>\<^sub>0"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1524
    using assms by (auto simp: Arg_real complex_nonneg_Reals_iff complex_is_Real_iff)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1525
  ultimately show ?thesis
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1526
    using continuous_imp_open_vimage [OF 1 2, of  "{z. Re z > s} \<inter> {z. Re z < t}"]
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1527
    by auto
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1528
qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1529
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1530
lemma open_Arg_gt: "open {z. t < Arg z}"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1531
proof (cases "t < 0")
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1532
  case True then have "{z. t < Arg z} = UNIV"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1533
    using Arg_ge_0 less_le_trans by auto
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1534
  then show ?thesis
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1535
    by simp
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1536
next
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1537
  case False then show ?thesis
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1538
    using open_Arg_less_Int [of t "2*pi"] Arg_lt_2pi
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1539
    by auto
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1540
qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1541
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1542
lemma closed_Arg_le: "closed {z. Arg z \<le> t}"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1543
  using open_Arg_gt [of t]
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1544
  by (simp add: closed_def Set.Collect_neg_eq [symmetric] not_le)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1545
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1546
subsection\<open>Complex Powers\<close>
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1547
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1548
lemma powr_to_1 [simp]: "z powr 1 = (z::complex)"
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1549
  by (simp add: powr_def)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1550
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1551
lemma powr_nat:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1552
  fixes n::nat and z::complex shows "z powr n = (if z = 0 then 0 else z^n)"
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1553
  by (simp add: exp_of_nat_mult powr_def)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1554
60809
457abb82fb9e the Cauchy integral theorem and related material
paulson <lp15@cam.ac.uk>
parents: 60420
diff changeset
  1555
lemma powr_add_complex:
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1556
  fixes w::complex shows "w powr (z1 + z2) = w powr z1 * w powr z2"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1557
  by (simp add: powr_def algebra_simps exp_add)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1558
60809
457abb82fb9e the Cauchy integral theorem and related material
paulson <lp15@cam.ac.uk>
parents: 60420
diff changeset
  1559
lemma powr_minus_complex:
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1560
  fixes w::complex shows  "w powr (-z) = inverse(w powr z)"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1561
  by (simp add: powr_def exp_minus)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1562
60809
457abb82fb9e the Cauchy integral theorem and related material
paulson <lp15@cam.ac.uk>
parents: 60420
diff changeset
  1563
lemma powr_diff_complex:
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1564
  fixes w::complex shows  "w powr (z1 - z2) = w powr z1 / w powr z2"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1565
  by (simp add: powr_def algebra_simps exp_diff)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1566
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1567
lemma norm_powr_real: "w \<in> \<real> \<Longrightarrow> 0 < Re w \<Longrightarrow> norm(w powr z) = exp(Re z * ln(Re w))"
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1568
  apply (simp add: powr_def)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1569
  using Im_Ln_eq_0 complex_is_Real_iff norm_complex_def
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1570
  by auto
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1571
61524
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1572
lemma cnj_powr:
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1573
  assumes "Im a = 0 \<Longrightarrow> Re a \<ge> 0"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1574
  shows   "cnj (a powr b) = cnj a powr cnj b"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1575
proof (cases "a = 0")
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1576
  case False
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1577
  with assms have "a \<notin> \<real>\<^sub>\<le>\<^sub>0" by (auto simp: complex_eq_iff complex_nonpos_Reals_iff)
61524
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1578
  with False show ?thesis by (simp add: powr_def exp_cnj cnj_Ln)
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1579
qed simp
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1580
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1581
lemma powr_real_real:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1582
    "\<lbrakk>w \<in> \<real>; z \<in> \<real>; 0 < Re w\<rbrakk> \<Longrightarrow> w powr z = exp(Re z * ln(Re w))"
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1583
  apply (simp add: powr_def)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1584
  by (metis complex_eq complex_is_Real_iff diff_0 diff_0_right diff_minus_eq_add exp_ln exp_not_eq_zero
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1585
       exp_of_real Ln_of_real mult_zero_right of_real_0 of_real_mult)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1586
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1587
lemma powr_of_real:
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1588
  fixes x::real and y::real
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1589
  shows "0 < x \<Longrightarrow> of_real x powr (of_real y::complex) = of_real (x powr y)"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1590
  by (simp add: powr_def) (metis exp_of_real of_real_mult Ln_of_real)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1591
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1592
lemma norm_powr_real_mono:
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1593
    "\<lbrakk>w \<in> \<real>; 1 < Re w\<rbrakk>
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1594
     \<Longrightarrow> cmod(w powr z1) \<le> cmod(w powr z2) \<longleftrightarrow> Re z1 \<le> Re z2"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1595
  by (auto simp: powr_def algebra_simps Reals_def Ln_of_real)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1596
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1597
lemma powr_times_real:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1598
    "\<lbrakk>x \<in> \<real>; y \<in> \<real>; 0 \<le> Re x; 0 \<le> Re y\<rbrakk>
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1599
           \<Longrightarrow> (x * y) powr z = x powr z * y powr z"
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1600
  by (auto simp: Reals_def powr_def Ln_times exp_add algebra_simps less_eq_real_def Ln_of_real)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1601
61524
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1602
lemma powr_neg_real_complex:
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1603
  shows   "(- of_real x) powr a = (-1) powr (of_real (sgn x) * a) * of_real x powr (a :: complex)"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1604
proof (cases "x = 0")
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1605
  assume x: "x \<noteq> 0"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1606
  hence "(-x) powr a = exp (a * ln (-of_real x))" by (simp add: powr_def)
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1607
  also from x have "ln (-of_real x) = Ln (of_real x) + of_real (sgn x) * pi * \<i>"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1608
    by (simp add: Ln_minus Ln_of_real)
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1609
  also from x assms have "exp (a * ...) = cis pi powr (of_real (sgn x) * a) * of_real x powr a"
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1610
    by (simp add: powr_def exp_add algebra_simps Ln_of_real cis_conv_exp)
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1611
  also note cis_pi
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1612
  finally show ?thesis by simp
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1613
qed simp_all
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1614
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1615
lemma has_field_derivative_powr:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1616
  fixes z :: complex
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1617
  shows "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> ((\<lambda>z. z powr s) has_field_derivative (s * z powr (s - 1))) (at z)"
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1618
  apply (cases "z=0", auto)
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1619
  apply (simp add: powr_def)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1620
  apply (rule DERIV_transform_at [where d = "norm z" and f = "\<lambda>z. exp (s * Ln z)"])
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1621
  apply (auto simp: dist_complex_def)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1622
  apply (intro derivative_eq_intros | simp add: assms)+
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1623
  apply (simp add: field_simps exp_diff)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1624
  done
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1625
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1626
declare has_field_derivative_powr[THEN DERIV_chain2, derivative_intros]
61524
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1627
f2e51e704a96 added many small lemmas about setsum/setprod/powr/...
eberlm
parents: 61518
diff changeset
  1628
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1629
lemma has_field_derivative_powr_right:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1630
    "w \<noteq> 0 \<Longrightarrow> ((\<lambda>z. w powr z) has_field_derivative Ln w * w powr z) (at z)"
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1631
  apply (simp add: powr_def)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1632
  apply (intro derivative_eq_intros | simp add: assms)+
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1633
  done
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1634
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1635
lemma complex_differentiable_powr_right:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1636
    "w \<noteq> 0 \<Longrightarrow> (\<lambda>z. w powr z) complex_differentiable (at z)"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1637
using complex_differentiable_def has_field_derivative_powr_right by blast
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1638
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1639
lemma holomorphic_on_powr_right:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1640
    "f holomorphic_on s \<Longrightarrow> w \<noteq> 0 \<Longrightarrow> (\<lambda>z. w powr (f z)) holomorphic_on s"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1641
    unfolding holomorphic_on_def
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1642
    using DERIV_chain' complex_differentiable_def has_field_derivative_powr_right by fastforce
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1643
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1644
lemma norm_powr_real_powr:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1645
  "w \<in> \<real> \<Longrightarrow> 0 < Re w \<Longrightarrow> norm(w powr z) = Re w powr Re z"
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1646
  by (auto simp add: norm_powr_real powr_def Im_Ln_eq_0 complex_is_Real_iff in_Reals_norm)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1647
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1648
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1649
subsection\<open>Some Limits involving Logarithms\<close>
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1650
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1651
lemma lim_Ln_over_power:
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1652
  fixes s::complex
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1653
  assumes "0 < Re s"
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
  1654
    shows "((\<lambda>n. Ln n / (n powr s)) \<longlongrightarrow> 0) sequentially"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1655
proof (simp add: lim_sequentially dist_norm, clarify)
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1656
  fix e::real
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1657
  assume e: "0 < e"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1658
  have "\<exists>xo>0. \<forall>x\<ge>xo. 0 < e * 2 + (e * Re s * 2 - 2) * x + e * (Re s)\<^sup>2 * x\<^sup>2"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1659
  proof (rule_tac x="2/(e * (Re s)\<^sup>2)" in exI, safe)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1660
    show "0 < 2 / (e * (Re s)\<^sup>2)"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1661
      using e assms by (simp add: field_simps)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1662
  next
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1663
    fix x::real
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1664
    assume x: "2 / (e * (Re s)\<^sup>2) \<le> x"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1665
    then have "x>0"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1666
    using e assms
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1667
      by (metis less_le_trans mult_eq_0_iff mult_pos_pos pos_less_divide_eq power2_eq_square
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1668
                zero_less_numeral)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1669
    then show "0 < e * 2 + (e * Re s * 2 - 2) * x + e * (Re s)\<^sup>2 * x\<^sup>2"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1670
      using e assms x
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1671
      apply (auto simp: field_simps)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1672
      apply (rule_tac y = "e * (x\<^sup>2 * (Re s)\<^sup>2)" in le_less_trans)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1673
      apply (auto simp: power2_eq_square field_simps add_pos_pos)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1674
      done
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1675
  qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1676
  then have "\<exists>xo>0. \<forall>x\<ge>xo. x / e < 1 + (Re s * x) + (1/2) * (Re s * x)^2"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1677
    using e  by (simp add: field_simps)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1678
  then have "\<exists>xo>0. \<forall>x\<ge>xo. x / e < exp (Re s * x)"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1679
    using assms
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1680
    by (force intro: less_le_trans [OF _ exp_lower_taylor_quadratic])
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1681
  then have "\<exists>xo>0. \<forall>x\<ge>xo. x < e * exp (Re s * x)"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1682
    using e   by (auto simp: field_simps)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1683
  with e show "\<exists>no. \<forall>n\<ge>no. norm (Ln (of_nat n) / of_nat n powr s) < e"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1684
    apply (auto simp: norm_divide norm_powr_real divide_simps)
61942
f02b26f7d39d prefer symbols for "floor", "ceiling";
wenzelm
parents: 61808
diff changeset
  1685
    apply (rule_tac x="nat \<lceil>exp xo\<rceil>" in exI)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1686
    apply clarify
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1687
    apply (drule_tac x="ln n" in spec)
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1688
    apply (auto simp: exp_less_mono nat_ceiling_le_eq not_le)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1689
    apply (metis exp_less_mono exp_ln not_le of_nat_0_less_iff)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1690
    done
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1691
qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1692
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
  1693
lemma lim_Ln_over_n: "((\<lambda>n. Ln(of_nat n) / of_nat n) \<longlongrightarrow> 0) sequentially"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1694
  using lim_Ln_over_power [of 1]
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1695
  by simp
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1696
61070
b72a990adfe2 prefer symbols;
wenzelm
parents: 60809
diff changeset
  1697
lemma Ln_Reals_eq: "x \<in> \<real> \<Longrightarrow> Re x > 0 \<Longrightarrow> Ln x = of_real (ln (Re x))"
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1698
  using Ln_of_real by force
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1699
61070
b72a990adfe2 prefer symbols;
wenzelm
parents: 60809
diff changeset
  1700
lemma powr_Reals_eq: "x \<in> \<real> \<Longrightarrow> Re x > 0 \<Longrightarrow> x powr complex_of_real y = of_real (x powr y)"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1701
  by (simp add: powr_of_real)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1702
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1703
lemma lim_ln_over_power:
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1704
  fixes s :: real
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1705
  assumes "0 < s"
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
  1706
    shows "((\<lambda>n. ln n / (n powr s)) \<longlongrightarrow> 0) sequentially"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1707
  using lim_Ln_over_power [of "of_real s", THEN filterlim_sequentially_Suc [THEN iffD2]] assms
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1708
  apply (subst filterlim_sequentially_Suc [symmetric])
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1709
  apply (simp add: lim_sequentially dist_norm
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1710
          Ln_Reals_eq norm_powr_real_powr norm_divide)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1711
  done
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1712
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
  1713
lemma lim_ln_over_n: "((\<lambda>n. ln(real_of_nat n) / of_nat n) \<longlongrightarrow> 0) sequentially"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1714
  using lim_ln_over_power [of 1, THEN filterlim_sequentially_Suc [THEN iffD2]]
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1715
  apply (subst filterlim_sequentially_Suc [symmetric])
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1716
  apply (simp add: lim_sequentially dist_norm)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1717
  done
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1718
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1719
lemma lim_1_over_complex_power:
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1720
  assumes "0 < Re s"
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
  1721
    shows "((\<lambda>n. 1 / (of_nat n powr s)) \<longlongrightarrow> 0) sequentially"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1722
proof -
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1723
  have "\<forall>n>0. 3 \<le> n \<longrightarrow> 1 \<le> ln (real_of_nat n)"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1724
    using ln3_gt_1
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1725
    by (force intro: order_trans [of _ "ln 3"] ln3_gt_1)
61969
e01015e49041 more symbols;
wenzelm
parents: 61945
diff changeset
  1726
  moreover have "(\<lambda>n. cmod (Ln (of_nat n) / of_nat n powr s)) \<longlonglongrightarrow> 0"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1727
    using lim_Ln_over_power [OF assms]
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1728
    by (metis tendsto_norm_zero_iff)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1729
  ultimately show ?thesis
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1730
    apply (auto intro!: Lim_null_comparison [where g = "\<lambda>n. norm (Ln(of_nat n) / of_nat n powr s)"])
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1731
    apply (auto simp: norm_divide divide_simps eventually_sequentially)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1732
    done
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1733
qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1734
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1735
lemma lim_1_over_real_power:
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1736
  fixes s :: real
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1737
  assumes "0 < s"
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
  1738
    shows "((\<lambda>n. 1 / (of_nat n powr s)) \<longlongrightarrow> 0) sequentially"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1739
  using lim_1_over_complex_power [of "of_real s", THEN filterlim_sequentially_Suc [THEN iffD2]] assms
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1740
  apply (subst filterlim_sequentially_Suc [symmetric])
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1741
  apply (simp add: lim_sequentially dist_norm)
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1742
  apply (simp add: Ln_Reals_eq norm_powr_real_powr norm_divide)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1743
  done
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1744
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
  1745
lemma lim_1_over_Ln: "((\<lambda>n. 1 / Ln(of_nat n)) \<longlongrightarrow> 0) sequentially"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1746
proof (clarsimp simp add: lim_sequentially dist_norm norm_divide divide_simps)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1747
  fix r::real
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1748
  assume "0 < r"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1749
  have ir: "inverse (exp (inverse r)) > 0"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1750
    by simp
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1751
  obtain n where n: "1 < of_nat n * inverse (exp (inverse r))"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1752
    using ex_less_of_nat_mult [of _ 1, OF ir]
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1753
    by auto
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1754
  then have "exp (inverse r) < of_nat n"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1755
    by (simp add: divide_simps)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1756
  then have "ln (exp (inverse r)) < ln (of_nat n)"
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1757
    by (metis exp_gt_zero less_trans ln_exp ln_less_cancel_iff)
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1758
  with \<open>0 < r\<close> have "1 < r * ln (real_of_nat n)"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1759
    by (simp add: field_simps)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1760
  moreover have "n > 0" using n
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1761
    using neq0_conv by fastforce
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1762
  ultimately show "\<exists>no. \<forall>n. Ln (of_nat n) \<noteq> 0 \<longrightarrow> no \<le> n \<longrightarrow> 1 < r * cmod (Ln (of_nat n))"
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1763
    using n \<open>0 < r\<close>
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1764
    apply (rule_tac x=n in exI)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1765
    apply (auto simp: divide_simps)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1766
    apply (erule less_le_trans, auto)
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1767
    done
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1768
qed
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1769
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
  1770
lemma lim_1_over_ln: "((\<lambda>n. 1 / ln(real_of_nat n)) \<longlongrightarrow> 0) sequentially"
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1771
  using lim_1_over_Ln [THEN filterlim_sequentially_Suc [THEN iffD2]] assms
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1772
  apply (subst filterlim_sequentially_Suc [symmetric])
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1773
  apply (simp add: lim_sequentially dist_norm)
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1774
  apply (simp add: Ln_Reals_eq norm_powr_real_powr norm_divide)
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1775
  done
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60141
diff changeset
  1776
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  1777
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1778
subsection\<open>Relation between Square Root and exp/ln, hence its derivative\<close>
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1779
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1780
lemma csqrt_exp_Ln:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1781
  assumes "z \<noteq> 0"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1782
    shows "csqrt z = exp(Ln(z) / 2)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1783
proof -
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1784
  have "(exp (Ln z / 2))\<^sup>2 = (exp (Ln z))"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1785
    by (metis exp_double nonzero_mult_divide_cancel_left times_divide_eq_right zero_neq_numeral)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1786
  also have "... = z"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1787
    using assms exp_Ln by blast
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1788
  finally have "csqrt z = csqrt ((exp (Ln z / 2))\<^sup>2)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1789
    by simp
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1790
  also have "... = exp (Ln z / 2)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1791
    apply (subst csqrt_square)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1792
    using cos_gt_zero_pi [of "(Im (Ln z) / 2)"] Im_Ln_le_pi mpi_less_Im_Ln assms
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1793
    apply (auto simp: Re_exp Im_exp zero_less_mult_iff zero_le_mult_iff, fastforce+)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1794
    done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1795
  finally show ?thesis using assms csqrt_square
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1796
    by simp
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1797
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1798
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1799
lemma csqrt_inverse:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1800
  assumes "z \<notin> \<real>\<^sub>\<le>\<^sub>0"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1801
    shows "csqrt (inverse z) = inverse (csqrt z)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1802
proof (cases "z=0", simp)
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1803
  assume "z \<noteq> 0"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1804
  then show ?thesis
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1805
    using assms csqrt_exp_Ln Ln_inverse exp_minus
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1806
    by (simp add: csqrt_exp_Ln Ln_inverse exp_minus)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1807
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1808
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1809
lemma cnj_csqrt:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1810
  assumes "z \<notin> \<real>\<^sub>\<le>\<^sub>0"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1811
    shows "cnj(csqrt z) = csqrt(cnj z)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1812
proof (cases "z=0", simp)
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1813
  assume "z \<noteq> 0"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1814
  then show ?thesis
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1815
     by (simp add: assms cnj_Ln csqrt_exp_Ln exp_cnj) 
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1816
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1817
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1818
lemma has_field_derivative_csqrt:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1819
  assumes "z \<notin> \<real>\<^sub>\<le>\<^sub>0"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1820
    shows "(csqrt has_field_derivative inverse(2 * csqrt z)) (at z)"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1821
proof -
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1822
  have z: "z \<noteq> 0"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1823
    using assms by auto
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1824
  then have *: "inverse z = inverse (2*z) * 2"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1825
    by (simp add: divide_simps)
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1826
  have [simp]: "exp (Ln z / 2) * inverse z = inverse (csqrt z)"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1827
    by (simp add: z field_simps csqrt_exp_Ln [symmetric]) (metis power2_csqrt power2_eq_square)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1828
  have "Im z = 0 \<Longrightarrow> 0 < Re z"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1829
    using assms complex_nonpos_Reals_iff not_less by blast
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1830
  with z have "((\<lambda>z. exp (Ln z / 2)) has_field_derivative inverse (2 * csqrt z)) (at z)"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1831
    by (force intro: derivative_eq_intros * simp add: assms)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1832
  then show ?thesis
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1833
    apply (rule DERIV_transform_at[where d = "norm z"])
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1834
    apply (intro z derivative_eq_intros | simp add: assms)+
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1835
    using z
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1836
    apply (metis csqrt_exp_Ln dist_0_norm less_irrefl)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1837
    done
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1838
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1839
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1840
lemma complex_differentiable_at_csqrt:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1841
    "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> csqrt complex_differentiable at z"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1842
  using complex_differentiable_def has_field_derivative_csqrt by blast
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1843
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1844
lemma complex_differentiable_within_csqrt:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1845
    "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> csqrt complex_differentiable (at z within s)"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1846
  using complex_differentiable_at_csqrt complex_differentiable_within_subset by blast
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1847
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1848
lemma continuous_at_csqrt:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1849
    "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> continuous (at z) csqrt"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1850
  by (simp add: complex_differentiable_within_csqrt complex_differentiable_imp_continuous_at)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1851
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1852
corollary isCont_csqrt' [simp]:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1853
   "\<lbrakk>isCont f z; f z \<notin> \<real>\<^sub>\<le>\<^sub>0\<rbrakk> \<Longrightarrow> isCont (\<lambda>x. csqrt (f x)) z"
59862
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1854
  by (blast intro: isCont_o2 [OF _ continuous_at_csqrt])
44b3f4fa33ca New material and binomial fix
paulson <lp15@cam.ac.uk>
parents: 59751
diff changeset
  1855
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1856
lemma continuous_within_csqrt:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1857
    "z \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> continuous (at z within s) csqrt"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1858
  by (simp add: complex_differentiable_imp_continuous_at complex_differentiable_within_csqrt)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1859
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1860
lemma continuous_on_csqrt [continuous_intros]:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1861
    "(\<And>z. z \<in> s \<Longrightarrow> z \<notin> \<real>\<^sub>\<le>\<^sub>0) \<Longrightarrow> continuous_on s csqrt"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1862
  by (simp add: continuous_at_imp_continuous_on continuous_within_csqrt)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1863
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1864
lemma holomorphic_on_csqrt:
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1865
    "(\<And>z. z \<in> s \<Longrightarrow> z \<notin> \<real>\<^sub>\<le>\<^sub>0) \<Longrightarrow> csqrt holomorphic_on s"
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1866
  by (simp add: complex_differentiable_within_csqrt holomorphic_on_def)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1867
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1868
lemma continuous_within_closed_nontrivial:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1869
    "closed s \<Longrightarrow> a \<notin> s ==> continuous (at a within s) f"
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1870
  using open_Compl
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1871
  by (force simp add: continuous_def eventually_at_topological filterlim_iff open_Collect_neg)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1872
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1873
lemma continuous_within_csqrt_posreal:
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1874
    "continuous (at z within (\<real> \<inter> {w. 0 \<le> Re(w)})) csqrt"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1875
proof (cases "z \<in> \<real>\<^sub>\<le>\<^sub>0")
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1876
  case True 
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1877
  then have "Im z = 0" "Re z < 0 \<or> z = 0"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1878
    using cnj.code complex_cnj_zero_iff  by (auto simp: complex_nonpos_Reals_iff) fastforce
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1879
  then show ?thesis
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1880
    apply (auto simp: continuous_within_closed_nontrivial [OF closed_Real_halfspace_Re_ge])
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1881
    apply (auto simp: continuous_within_eps_delta norm_conv_dist [symmetric])
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1882
    apply (rule_tac x="e^2" in exI)
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1883
    apply (auto simp: Reals_def)
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1884
    by (metis linear not_less real_sqrt_less_iff real_sqrt_pow2_iff real_sqrt_power)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1885
next
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1886
  case False
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1887
    then show ?thesis   by (blast intro: continuous_within_csqrt)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1888
qed
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  1889
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1890
subsection\<open>Complex arctangent\<close>
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  1891
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1892
text\<open>The branch cut gives standard bounds in the real case.\<close>
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1893
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1894
definition Arctan :: "complex \<Rightarrow> complex" where
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1895
    "Arctan \<equiv> \<lambda>z. (\<i>/2) * Ln((1 - \<i>*z) / (1 + \<i>*z))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1896
62049
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1897
lemma Arctan_def_moebius: "Arctan z = \<i>/2 * Ln (moebius (-\<i>) 1 \<i> 1 z)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1898
  by (simp add: Arctan_def moebius_def add_ac)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1899
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1900
lemma Ln_conv_Arctan:
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1901
  assumes "z \<noteq> -1"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1902
  shows   "Ln z = -2*\<i> * Arctan (moebius 1 (- 1) (- \<i>) (- \<i>) z)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1903
proof -
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1904
  have "Arctan (moebius 1 (- 1) (- \<i>) (- \<i>) z) =
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1905
             \<i>/2 * Ln (moebius (- \<i>) 1 \<i> 1 (moebius 1 (- 1) (- \<i>) (- \<i>) z))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1906
    by (simp add: Arctan_def_moebius)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1907
  also from assms have "\<i> * z \<noteq> \<i> * (-1)" by (subst mult_left_cancel) simp
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1908
  hence "\<i> * z - -\<i> \<noteq> 0" by (simp add: eq_neg_iff_add_eq_0)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1909
  from moebius_inverse'[OF _ this, of 1 1]
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1910
    have "moebius (- \<i>) 1 \<i> 1 (moebius 1 (- 1) (- \<i>) (- \<i>) z) = z" by simp
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1911
  finally show ?thesis by (simp add: field_simps)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1912
qed
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  1913
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1914
lemma Arctan_0 [simp]: "Arctan 0 = 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1915
  by (simp add: Arctan_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1916
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1917
lemma Im_complex_div_lemma: "Im((1 - \<i>*z) / (1 + \<i>*z)) = 0 \<longleftrightarrow> Re z = 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1918
  by (auto simp: Im_complex_div_eq_0 algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1919
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1920
lemma Re_complex_div_lemma: "0 < Re((1 - \<i>*z) / (1 + \<i>*z)) \<longleftrightarrow> norm z < 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1921
  by (simp add: Re_complex_div_gt_0 algebra_simps cmod_def power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1922
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1923
lemma tan_Arctan:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1924
  assumes "z\<^sup>2 \<noteq> -1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1925
    shows [simp]:"tan(Arctan z) = z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1926
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1927
  have "1 + \<i>*z \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1928
    by (metis assms complex_i_mult_minus i_squared minus_unique power2_eq_square power2_minus)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1929
  moreover
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1930
  have "1 - \<i>*z \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1931
    by (metis assms complex_i_mult_minus i_squared power2_eq_square power2_minus right_minus_eq)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1932
  ultimately
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1933
  show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1934
    by (simp add: Arctan_def tan_def sin_exp_eq cos_exp_eq exp_minus csqrt_exp_Ln [symmetric]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1935
                  divide_simps power2_eq_square [symmetric])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1936
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1937
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1938
lemma Arctan_tan [simp]:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1939
  assumes "\<bar>Re z\<bar> < pi/2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1940
    shows "Arctan(tan z) = z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1941
proof -
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  1942
  have ge_pi2: "\<And>n::int. \<bar>of_int (2*n + 1) * pi/2\<bar> \<ge> pi/2"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1943
    by (case_tac n rule: int_cases) (auto simp: abs_mult)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1944
  have "exp (\<i>*z)*exp (\<i>*z) = -1 \<longleftrightarrow> exp (2*\<i>*z) = -1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1945
    by (metis distrib_right exp_add mult_2)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1946
  also have "... \<longleftrightarrow> exp (2*\<i>*z) = exp (\<i>*pi)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1947
    using cis_conv_exp cis_pi by auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1948
  also have "... \<longleftrightarrow> exp (2*\<i>*z - \<i>*pi) = 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1949
    by (metis (no_types) diff_add_cancel diff_minus_eq_add exp_add exp_minus_inverse mult.commute)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1950
  also have "... \<longleftrightarrow> Re(\<i>*2*z - \<i>*pi) = 0 \<and> (\<exists>n::int. Im(\<i>*2*z - \<i>*pi) = of_int (2 * n) * pi)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1951
    by (simp add: exp_eq_1)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1952
  also have "... \<longleftrightarrow> Im z = 0 \<and> (\<exists>n::int. 2 * Re z = of_int (2*n + 1) * pi)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1953
    by (simp add: algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1954
  also have "... \<longleftrightarrow> False"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1955
    using assms ge_pi2
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1956
    apply (auto simp: algebra_simps)
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  1957
    by (metis abs_mult_pos not_less of_nat_less_0_iff of_nat_numeral)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1958
  finally have *: "exp (\<i>*z)*exp (\<i>*z) + 1 \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1959
    by (auto simp: add.commute minus_unique)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1960
  show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1961
    using assms *
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1962
    apply (simp add: Arctan_def tan_def sin_exp_eq cos_exp_eq exp_minus divide_simps
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1963
                     ii_times_eq_iff power2_eq_square [symmetric])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1964
    apply (rule Ln_unique)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1965
    apply (auto simp: divide_simps exp_minus)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1966
    apply (simp add: algebra_simps exp_double [symmetric])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1967
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1968
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1969
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1970
lemma
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  1971
  assumes "Re z = 0 \<Longrightarrow> \<bar>Im z\<bar> < 1"
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  1972
  shows Re_Arctan_bounds: "\<bar>Re(Arctan z)\<bar> < pi/2"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1973
    and has_field_derivative_Arctan: "(Arctan has_field_derivative inverse(1 + z\<^sup>2)) (at z)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1974
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1975
  have nz0: "1 + \<i>*z \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1976
    using assms
60141
833adf7db7d8 New material, mostly about limits. Consolidation.
paulson <lp15@cam.ac.uk>
parents: 60020
diff changeset
  1977
    by (metis abs_one complex_i_mult_minus diff_0_right diff_minus_eq_add ii.simps(1) ii.simps(2)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1978
              less_irrefl minus_diff_eq mult.right_neutral right_minus_eq)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1979
  have "z \<noteq> -\<i>" using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1980
    by auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1981
  then have zz: "1 + z * z \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1982
    by (metis abs_one assms i_squared ii.simps less_irrefl minus_unique square_eq_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1983
  have nz1: "1 - \<i>*z \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1984
    using assms by (force simp add: ii_times_eq_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1985
  have nz2: "inverse (1 + \<i>*z) \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1986
    using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1987
    by (metis Im_complex_div_lemma Re_complex_div_lemma cmod_eq_Im divide_complex_def
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1988
              less_irrefl mult_zero_right zero_complex.simps(1) zero_complex.simps(2))
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1989
  have nzi: "((1 - \<i>*z) * inverse (1 + \<i>*z)) \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1990
    using nz1 nz2 by auto
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1991
  have "Im ((1 - \<i>*z) / (1 + \<i>*z)) = 0 \<Longrightarrow> 0 < Re ((1 - \<i>*z) / (1 + \<i>*z))"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1992
    apply (simp add: divide_complex_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1993
    apply (simp add: divide_simps split: split_if_asm)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1994
    using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1995
    apply (auto simp: algebra_simps abs_square_less_1 [unfolded power2_eq_square])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  1996
    done
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1997
  then have *: "((1 - \<i>*z) / (1 + \<i>*z)) \<notin> \<real>\<^sub>\<le>\<^sub>0"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  1998
    by (auto simp add: complex_nonpos_Reals_iff)
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  1999
  show "\<bar>Re(Arctan z)\<bar> < pi/2"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2000
    unfolding Arctan_def divide_complex_def
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2001
    using mpi_less_Im_Ln [OF nzi]
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2002
    apply (auto simp: abs_if intro!: Im_Ln_less_pi * [unfolded divide_complex_def])
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2003
    done
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2004
  show "(Arctan has_field_derivative inverse(1 + z\<^sup>2)) (at z)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2005
    unfolding Arctan_def scaleR_conv_of_real
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2006
    apply (rule DERIV_cong)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2007
    apply (intro derivative_eq_intros | simp add: nz0 *)+
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2008
    using nz0 nz1 zz
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2009
    apply (simp add: divide_simps power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2010
    apply (auto simp: algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2011
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2012
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2013
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2014
lemma complex_differentiable_at_Arctan: "(Re z = 0 \<Longrightarrow> \<bar>Im z\<bar> < 1) \<Longrightarrow> Arctan complex_differentiable at z"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2015
  using has_field_derivative_Arctan
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2016
  by (auto simp: complex_differentiable_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2017
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2018
lemma complex_differentiable_within_Arctan:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2019
    "(Re z = 0 \<Longrightarrow> \<bar>Im z\<bar> < 1) \<Longrightarrow> Arctan complex_differentiable (at z within s)"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2020
  using complex_differentiable_at_Arctan complex_differentiable_at_within by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2021
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2022
declare has_field_derivative_Arctan [derivative_intros]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2023
declare has_field_derivative_Arctan [THEN DERIV_chain2, derivative_intros]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2024
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2025
lemma continuous_at_Arctan:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2026
    "(Re z = 0 \<Longrightarrow> \<bar>Im z\<bar> < 1) \<Longrightarrow> continuous (at z) Arctan"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2027
  by (simp add: complex_differentiable_imp_continuous_at complex_differentiable_within_Arctan)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2028
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2029
lemma continuous_within_Arctan:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2030
    "(Re z = 0 \<Longrightarrow> \<bar>Im z\<bar> < 1) \<Longrightarrow> continuous (at z within s) Arctan"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2031
  using continuous_at_Arctan continuous_at_imp_continuous_within by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2032
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2033
lemma continuous_on_Arctan [continuous_intros]:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2034
    "(\<And>z. z \<in> s \<Longrightarrow> Re z = 0 \<Longrightarrow> \<bar>Im z\<bar> < 1) \<Longrightarrow> continuous_on s Arctan"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2035
  by (auto simp: continuous_at_imp_continuous_on continuous_within_Arctan)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2036
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2037
lemma holomorphic_on_Arctan:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2038
    "(\<And>z. z \<in> s \<Longrightarrow> Re z = 0 \<Longrightarrow> \<bar>Im z\<bar> < 1) \<Longrightarrow> Arctan holomorphic_on s"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2039
  by (simp add: complex_differentiable_within_Arctan holomorphic_on_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2040
62049
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2041
lemma Arctan_series:
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2042
  assumes z: "norm (z :: complex) < 1"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2043
  defines "g \<equiv> \<lambda>n. if odd n then -\<i>*\<i>^n / n else 0"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2044
  defines "h \<equiv> \<lambda>z n. (-1)^n / of_nat (2*n+1) * (z::complex)^(2*n+1)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2045
  shows   "(\<lambda>n. g n * z^n) sums Arctan z"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2046
  and     "h z sums Arctan z"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2047
proof -
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2048
  def G \<equiv> "\<lambda>z. (\<Sum>n. g n * z^n)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2049
  have summable: "summable (\<lambda>n. g n * u^n)" if "norm u < 1" for u
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2050
  proof (cases "u = 0")
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2051
    assume u: "u \<noteq> 0"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2052
    have "(\<lambda>n. ereal (norm (h u n) / norm (h u (Suc n)))) = (\<lambda>n. ereal (inverse (norm u)^2) * 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2053
              ereal ((2 + inverse (real (Suc n))) / (2 - inverse (real (Suc n)))))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2054
    proof
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2055
      fix n
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2056
      have "ereal (norm (h u n) / norm (h u (Suc n))) = 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2057
             ereal (inverse (norm u)^2) * ereal ((of_nat (2*Suc n+1) / of_nat (Suc n)) / 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2058
                 (of_nat (2*Suc n-1) / of_nat (Suc n)))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2059
      by (simp add: h_def norm_mult norm_power norm_divide divide_simps 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2060
                    power2_eq_square eval_nat_numeral del: of_nat_add of_nat_Suc)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2061
      also have "of_nat (2*Suc n+1) / of_nat (Suc n) = (2::real) + inverse (real (Suc n))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2062
        by (auto simp: divide_simps simp del: of_nat_Suc) simp_all?
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2063
      also have "of_nat (2*Suc n-1) / of_nat (Suc n) = (2::real) - inverse (real (Suc n))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2064
        by (auto simp: divide_simps simp del: of_nat_Suc) simp_all?      
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2065
      finally show "ereal (norm (h u n) / norm (h u (Suc n))) = ereal (inverse (norm u)^2) * 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2066
              ereal ((2 + inverse (real (Suc n))) / (2 - inverse (real (Suc n))))" .
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2067
    qed
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2068
    also have "\<dots> \<longlonglongrightarrow> ereal (inverse (norm u)^2) * ereal ((2 + 0) / (2 - 0))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2069
      by (intro tendsto_intros LIMSEQ_inverse_real_of_nat) simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2070
    finally have "liminf (\<lambda>n. ereal (cmod (h u n) / cmod (h u (Suc n)))) = inverse (norm u)^2"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2071
      by (intro lim_imp_Liminf) simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2072
    moreover from power_strict_mono[OF that, of 2] u have "inverse (norm u)^2 > 1"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2073
      by (simp add: divide_simps)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2074
    ultimately have A: "liminf (\<lambda>n. ereal (cmod (h u n) / cmod (h u (Suc n)))) > 1" by simp
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2075
    from u have "summable (h u)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2076
      by (intro summable_norm_cancel[OF ratio_test_convergence[OF _ A]])
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2077
         (auto simp: h_def norm_divide norm_mult norm_power simp del: of_nat_Suc 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2078
               intro!: mult_pos_pos divide_pos_pos always_eventually)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2079
    thus "summable (\<lambda>n. g n * u^n)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2080
      by (subst summable_mono_reindex[of "\<lambda>n. 2*n+1", symmetric])
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2081
         (auto simp: power_mult subseq_def g_def h_def elim!: oddE)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2082
  qed (simp add: h_def)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2083
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2084
  have "\<exists>c. \<forall>u\<in>ball 0 1. Arctan u - G u = c"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2085
  proof (rule has_field_derivative_zero_constant)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2086
    fix u :: complex assume "u \<in> ball 0 1"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2087
    hence u: "norm u < 1" by (simp add: dist_0_norm)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2088
    def K \<equiv> "(norm u + 1) / 2"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2089
    from u and abs_Im_le_cmod[of u] have Im_u: "\<bar>Im u\<bar> < 1" by linarith
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2090
    from u have K: "0 \<le> K" "norm u < K" "K < 1" by (simp_all add: K_def)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2091
    hence "(G has_field_derivative (\<Sum>n. diffs g n * u ^ n)) (at u)" unfolding G_def
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2092
      by (intro termdiffs_strong[of _ "of_real K"] summable) simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2093
    also have "(\<lambda>n. diffs g n * u^n) = (\<lambda>n. if even n then (\<i>*u)^n else 0)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2094
      by (intro ext) (simp_all del: of_nat_Suc add: g_def diffs_def power_mult_distrib)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2095
    also have "suminf \<dots> = (\<Sum>n. (-(u^2))^n)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2096
      by (subst suminf_mono_reindex[of "\<lambda>n. 2*n", symmetric]) 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2097
         (auto elim!: evenE simp: subseq_def power_mult power_mult_distrib)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2098
    also from u have "norm u^2 < 1^2" by (intro power_strict_mono) simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2099
    hence "(\<Sum>n. (-(u^2))^n) = inverse (1 + u^2)" 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2100
      by (subst suminf_geometric) (simp_all add: norm_power inverse_eq_divide)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2101
    finally have "(G has_field_derivative inverse (1 + u\<^sup>2)) (at u)" .
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2102
    from DERIV_diff[OF has_field_derivative_Arctan this] Im_u u
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2103
      show "((\<lambda>u. Arctan u - G u) has_field_derivative 0) (at u within ball 0 1)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2104
      by (simp_all add: dist_0_norm at_within_open[OF _ open_ball])
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2105
  qed simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2106
  then obtain c where c: "\<And>u. norm u < 1 \<Longrightarrow> Arctan u - G u = c" by (auto simp: dist_0_norm)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2107
  from this[of 0] have "c = 0" by (simp add: G_def g_def powser_zero)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2108
  with c z have "Arctan z = G z" by simp
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2109
  with summable[OF z] show "(\<lambda>n. g n * z^n) sums Arctan z" unfolding G_def by (simp add: sums_iff)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2110
  thus "h z sums Arctan z" by (subst (asm) sums_mono_reindex[of "\<lambda>n. 2*n+1", symmetric])
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2111
                              (auto elim!: oddE simp: subseq_def power_mult g_def h_def)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2112
qed
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2113
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2114
text \<open>A quickly-converging series for the logarithm, based on the arctangent.\<close>
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2115
lemma ln_series_quadratic:
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2116
  assumes x: "x > (0::real)"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2117
  shows "(\<lambda>n. (2*((x - 1) / (x + 1)) ^ (2*n+1) / of_nat (2*n+1))) sums ln x"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2118
proof -
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2119
  def y \<equiv> "of_real ((x-1)/(x+1)) :: complex"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2120
  from x have x': "complex_of_real x \<noteq> of_real (-1)"  by (subst of_real_eq_iff) auto
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2121
  from x have "\<bar>x - 1\<bar> < \<bar>x + 1\<bar>" by linarith
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2122
  hence "norm (complex_of_real (x - 1) / complex_of_real (x + 1)) < 1"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2123
    by (simp add: norm_divide del: of_real_add of_real_diff)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2124
  hence "norm (\<i> * y) < 1" unfolding y_def by (subst norm_mult) simp
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2125
  hence "(\<lambda>n. (-2*\<i>) * ((-1)^n / of_nat (2*n+1) * (\<i>*y)^(2*n+1))) sums ((-2*\<i>) * Arctan (\<i>*y))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2126
    by (intro Arctan_series sums_mult) simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2127
  also have "(\<lambda>n. (-2*\<i>) * ((-1)^n / of_nat (2*n+1) * (\<i>*y)^(2*n+1))) = 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2128
                 (\<lambda>n. (-2*\<i>) * ((-1)^n * (\<i>*y*(-y\<^sup>2)^n)/of_nat (2*n+1)))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2129
    by (intro ext) (simp_all add: power_mult power_mult_distrib)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2130
  also have "\<dots> = (\<lambda>n. 2*y* ((-1) * (-y\<^sup>2))^n/of_nat (2*n+1))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2131
    by (intro ext, subst power_mult_distrib) (simp add: algebra_simps power_mult)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2132
  also have "\<dots> = (\<lambda>n. 2*y^(2*n+1) / of_nat (2*n+1))" 
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2133
    by (subst power_add, subst power_mult) (simp add: mult_ac)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2134
  also have "\<dots> = (\<lambda>n. of_real (2*((x-1)/(x+1))^(2*n+1) / of_nat (2*n+1)))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2135
    by (intro ext) (simp add: y_def)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2136
  also have "\<i> * y = (of_real x - 1) / (-\<i> * (of_real x + 1))"
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2137
    by (subst divide_divide_eq_left [symmetric]) (simp add: y_def)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2138
  also have "\<dots> = moebius 1 (-1) (-\<i>) (-\<i>) (of_real x)" by (simp add: moebius_def algebra_simps)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2139
  also from x' have "-2*\<i>*Arctan \<dots> = Ln (of_real x)" by (intro Ln_conv_Arctan [symmetric]) simp_all
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2140
  also from x have "\<dots> = ln x" by (rule Ln_of_real)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2141
  finally show ?thesis by (subst (asm) sums_of_real_iff)
b0f941e207cf Added lots of material on infinite sums, convergence radii, harmonic numbers, Gamma function
eberlm
parents: 61973
diff changeset
  2142
qed
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2143
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2144
subsection \<open>Real arctangent\<close>
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2145
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2146
lemma norm_exp_ii_times [simp]: "norm (exp(\<i> * of_real y)) = 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2147
  by simp
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2148
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2149
lemma norm_exp_imaginary: "norm(exp z) = 1 \<Longrightarrow> Re z = 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2150
  by (simp add: complex_norm_eq_1_exp)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2151
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2152
lemma Im_Arctan_of_real [simp]: "Im (Arctan (of_real x)) = 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2153
  unfolding Arctan_def divide_complex_def
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2154
  apply (simp add: complex_eq_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2155
  apply (rule norm_exp_imaginary)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2156
  apply (subst exp_Ln, auto)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2157
  apply (simp_all add: cmod_def complex_eq_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2158
  apply (auto simp: divide_simps)
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61524
diff changeset
  2159
  apply (metis power_one sum_power2_eq_zero_iff zero_neq_one, algebra)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2160
  done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2161
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2162
lemma arctan_eq_Re_Arctan: "arctan x = Re (Arctan (of_real x))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2163
proof (rule arctan_unique)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2164
  show "- (pi / 2) < Re (Arctan (complex_of_real x))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2165
    apply (simp add: Arctan_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2166
    apply (rule Im_Ln_less_pi)
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2167
    apply (auto simp: Im_complex_div_lemma complex_nonpos_Reals_iff)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2168
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2169
next
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2170
  have *: " (1 - \<i>*x) / (1 + \<i>*x) \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2171
    by (simp add: divide_simps) ( simp add: complex_eq_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2172
  show "Re (Arctan (complex_of_real x)) < pi / 2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2173
    using mpi_less_Im_Ln [OF *]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2174
    by (simp add: Arctan_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2175
next
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2176
  have "tan (Re (Arctan (of_real x))) = Re (tan (Arctan (of_real x)))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2177
    apply (auto simp: tan_def Complex.Re_divide Re_sin Re_cos Im_sin Im_cos)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2178
    apply (simp add: field_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2179
    by (simp add: power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2180
  also have "... = x"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2181
    apply (subst tan_Arctan, auto)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2182
    by (metis diff_0_right minus_diff_eq mult_zero_left not_le of_real_1 of_real_eq_iff of_real_minus of_real_power power2_eq_square real_minus_mult_self_le zero_less_one)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2183
  finally show "tan (Re (Arctan (complex_of_real x))) = x" .
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2184
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2185
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2186
lemma Arctan_of_real: "Arctan (of_real x) = of_real (arctan x)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2187
  unfolding arctan_eq_Re_Arctan divide_complex_def
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2188
  by (simp add: complex_eq_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2189
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2190
lemma Arctan_in_Reals [simp]: "z \<in> \<real> \<Longrightarrow> Arctan z \<in> \<real>"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2191
  by (metis Reals_cases Reals_of_real Arctan_of_real)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2192
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2193
declare arctan_one [simp]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2194
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2195
lemma arctan_less_pi4_pos: "x < 1 \<Longrightarrow> arctan x < pi/4"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2196
  by (metis arctan_less_iff arctan_one)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2197
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2198
lemma arctan_less_pi4_neg: "-1 < x \<Longrightarrow> -(pi/4) < arctan x"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2199
  by (metis arctan_less_iff arctan_minus arctan_one)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2200
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2201
lemma arctan_less_pi4: "\<bar>x\<bar> < 1 \<Longrightarrow> \<bar>arctan x\<bar> < pi/4"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2202
  by (metis abs_less_iff arctan_less_pi4_pos arctan_minus)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2203
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2204
lemma arctan_le_pi4: "\<bar>x\<bar> \<le> 1 \<Longrightarrow> \<bar>arctan x\<bar> \<le> pi/4"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2205
  by (metis abs_le_iff arctan_le_iff arctan_minus arctan_one)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2206
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2207
lemma abs_arctan: "\<bar>arctan x\<bar> = arctan \<bar>x\<bar>"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2208
  by (simp add: abs_if arctan_minus)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2209
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2210
lemma arctan_add_raw:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2211
  assumes "\<bar>arctan x + arctan y\<bar> < pi/2"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2212
    shows "arctan x + arctan y = arctan((x + y) / (1 - x * y))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2213
proof (rule arctan_unique [symmetric])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2214
  show 12: "- (pi / 2) < arctan x + arctan y" "arctan x + arctan y < pi / 2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2215
    using assms by linarith+
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2216
  show "tan (arctan x + arctan y) = (x + y) / (1 - x * y)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2217
    using cos_gt_zero_pi [OF 12]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2218
    by (simp add: arctan tan_add)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2219
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2220
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2221
lemma arctan_inverse:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2222
  assumes "0 < x"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2223
    shows "arctan(inverse x) = pi/2 - arctan x"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2224
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2225
  have "arctan(inverse x) = arctan(inverse(tan(arctan x)))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2226
    by (simp add: arctan)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2227
  also have "... = arctan (tan (pi / 2 - arctan x))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2228
    by (simp add: tan_cot)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2229
  also have "... = pi/2 - arctan x"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2230
  proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2231
    have "0 < pi - arctan x"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2232
    using arctan_ubound [of x] pi_gt_zero by linarith
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2233
    with assms show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2234
      by (simp add: Transcendental.arctan_tan)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2235
  qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2236
  finally show ?thesis .
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2237
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2238
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2239
lemma arctan_add_small:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2240
  assumes "\<bar>x * y\<bar> < 1"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2241
    shows "(arctan x + arctan y = arctan((x + y) / (1 - x * y)))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2242
proof (cases "x = 0 \<or> y = 0")
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2243
  case True then show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2244
    by auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2245
next
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2246
  case False
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2247
  then have *: "\<bar>arctan x\<bar> < pi / 2 - \<bar>arctan y\<bar>" using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2248
    apply (auto simp add: abs_arctan arctan_inverse [symmetric] arctan_less_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2249
    apply (simp add: divide_simps abs_mult)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2250
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2251
  show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2252
    apply (rule arctan_add_raw)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2253
    using * by linarith
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2254
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2255
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2256
lemma abs_arctan_le:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2257
  fixes x::real shows "\<bar>arctan x\<bar> \<le> \<bar>x\<bar>"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2258
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2259
  { fix w::complex and z::complex
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2260
    assume *: "w \<in> \<real>" "z \<in> \<real>"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2261
    have "cmod (Arctan w - Arctan z) \<le> 1 * cmod (w-z)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2262
      apply (rule complex_differentiable_bound [OF convex_Reals, of Arctan _ 1])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2263
      apply (rule has_field_derivative_at_within [OF has_field_derivative_Arctan])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2264
      apply (force simp add: Reals_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2265
      apply (simp add: norm_divide divide_simps in_Reals_norm complex_is_Real_iff power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2266
      using * by auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2267
  }
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2268
  then have "cmod (Arctan (of_real x) - Arctan 0) \<le> 1 * cmod (of_real x -0)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2269
    using Reals_0 Reals_of_real by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2270
  then show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2271
    by (simp add: Arctan_of_real)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2272
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2273
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2274
lemma arctan_le_self: "0 \<le> x \<Longrightarrow> arctan x \<le> x"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2275
  by (metis abs_arctan_le abs_of_nonneg zero_le_arctan_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2276
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2277
lemma abs_tan_ge: "\<bar>x\<bar> < pi/2 \<Longrightarrow> \<bar>x\<bar> \<le> \<bar>tan x\<bar>"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2278
  by (metis abs_arctan_le abs_less_iff arctan_tan minus_less_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2279
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2280
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2281
subsection\<open>Inverse Sine\<close>
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2282
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2283
definition Arcsin :: "complex \<Rightarrow> complex" where
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2284
   "Arcsin \<equiv> \<lambda>z. -\<i> * Ln(\<i> * z + csqrt(1 - z\<^sup>2))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2285
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2286
lemma Arcsin_body_lemma: "\<i> * z + csqrt(1 - z\<^sup>2) \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2287
  using power2_csqrt [of "1 - z\<^sup>2"]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2288
  apply auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2289
  by (metis complex_i_mult_minus diff_add_cancel diff_minus_eq_add diff_self mult.assoc mult.left_commute numeral_One power2_csqrt power2_eq_square zero_neq_numeral)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2290
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2291
lemma Arcsin_range_lemma: "\<bar>Re z\<bar> < 1 \<Longrightarrow> 0 < Re(\<i> * z + csqrt(1 - z\<^sup>2))"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2292
  using Complex.cmod_power2 [of z, symmetric]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2293
  by (simp add: real_less_rsqrt algebra_simps Re_power2 cmod_square_less_1_plus)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2294
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2295
lemma Re_Arcsin: "Re(Arcsin z) = Im (Ln (\<i> * z + csqrt(1 - z\<^sup>2)))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2296
  by (simp add: Arcsin_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2297
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2298
lemma Im_Arcsin: "Im(Arcsin z) = - ln (cmod (\<i> * z + csqrt (1 - z\<^sup>2)))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2299
  by (simp add: Arcsin_def Arcsin_body_lemma)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2300
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2301
lemma one_minus_z2_notin_nonpos_Reals:
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2302
  assumes "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1)"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2303
  shows "1 - z\<^sup>2 \<notin> \<real>\<^sub>\<le>\<^sub>0"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2304
    using assms  
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2305
    apply (auto simp: complex_nonpos_Reals_iff Re_power2 Im_power2)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2306
    using power2_less_0 [of "Im z"] apply force
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2307
    using abs_square_less_1 not_le by blast
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2308
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2309
lemma isCont_Arcsin_lemma:
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2310
  assumes le0: "Re (\<i> * z + csqrt (1 - z\<^sup>2)) \<le> 0" and "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1)"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2311
    shows False
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2312
proof (cases "Im z = 0")
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2313
  case True
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2314
  then show ?thesis
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2315
    using assms by (fastforce simp: cmod_def abs_square_less_1 [symmetric])
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2316
next
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2317
  case False
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2318
  have neq: "(cmod z)\<^sup>2 \<noteq> 1 + cmod (1 - z\<^sup>2)"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2319
  proof (clarsimp simp add: cmod_def)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2320
    assume "(Re z)\<^sup>2 + (Im z)\<^sup>2 = 1 + sqrt ((1 - Re (z\<^sup>2))\<^sup>2 + (Im (z\<^sup>2))\<^sup>2)"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2321
    then have "((Re z)\<^sup>2 + (Im z)\<^sup>2 - 1)\<^sup>2 = ((1 - Re (z\<^sup>2))\<^sup>2 + (Im (z\<^sup>2))\<^sup>2)"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2322
      by simp
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2323
    then show False using False
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2324
      by (simp add: power2_eq_square algebra_simps)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2325
  qed
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2326
  moreover have 2: "(Im z)\<^sup>2 = (1 + ((Im z)\<^sup>2 + cmod (1 - z\<^sup>2)) - (Re z)\<^sup>2) / 2"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2327
    using le0
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2328
    apply simp
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2329
    apply (drule sqrt_le_D)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2330
    using cmod_power2 [of z] norm_triangle_ineq2 [of "z^2" 1]
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2331
    apply (simp add: norm_power Re_power2 norm_minus_commute [of 1])
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2332
    done
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2333
  ultimately show False
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2334
    by (simp add: Re_power2 Im_power2 cmod_power2)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2335
qed
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2336
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2337
lemma isCont_Arcsin:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2338
  assumes "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2339
    shows "isCont Arcsin z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2340
proof -
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2341
  have *: "\<i> * z + csqrt (1 - z\<^sup>2) \<notin> \<real>\<^sub>\<le>\<^sub>0"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2342
    by (metis isCont_Arcsin_lemma assms complex_nonpos_Reals_iff)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2343
  show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2344
    using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2345
    apply (simp add: Arcsin_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2346
    apply (rule isCont_Ln' isCont_csqrt' continuous_intros)+
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2347
    apply (simp add: one_minus_z2_notin_nonpos_Reals assms)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2348
    apply (rule *)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2349
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2350
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2351
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2352
lemma isCont_Arcsin' [simp]:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2353
  shows "isCont f z \<Longrightarrow> (Im (f z) = 0 \<Longrightarrow> \<bar>Re (f z)\<bar> < 1) \<Longrightarrow> isCont (\<lambda>x. Arcsin (f x)) z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2354
  by (blast intro: isCont_o2 [OF _ isCont_Arcsin])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2355
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2356
lemma sin_Arcsin [simp]: "sin(Arcsin z) = z"
60141
833adf7db7d8 New material, mostly about limits. Consolidation.
paulson <lp15@cam.ac.uk>
parents: 60020
diff changeset
  2357
proof -
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2358
  have "\<i>*z*2 + csqrt (1 - z\<^sup>2)*2 = 0 \<longleftrightarrow> (\<i>*z)*2 + csqrt (1 - z\<^sup>2)*2 = 0"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61806
diff changeset
  2359
    by (simp add: algebra_simps)  \<comment>\<open>Cancelling a factor of 2\<close>
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2360
  moreover have "... \<longleftrightarrow> (\<i>*z) + csqrt (1 - z\<^sup>2) = 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2361
    by (metis Arcsin_body_lemma distrib_right no_zero_divisors zero_neq_numeral)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2362
  ultimately show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2363
    apply (simp add: sin_exp_eq Arcsin_def Arcsin_body_lemma exp_minus divide_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2364
    apply (simp add: algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2365
    apply (simp add: power2_eq_square [symmetric] algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2366
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2367
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2368
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2369
lemma Re_eq_pihalf_lemma:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2370
    "\<bar>Re z\<bar> = pi/2 \<Longrightarrow> Im z = 0 \<Longrightarrow>
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2371
      Re ((exp (\<i>*z) + inverse (exp (\<i>*z))) / 2) = 0 \<and> 0 \<le> Im ((exp (\<i>*z) + inverse (exp (\<i>*z))) / 2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2372
  apply (simp add: cos_ii_times [symmetric] Re_cos Im_cos abs_if del: eq_divide_eq_numeral1)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2373
  by (metis cos_minus cos_pi_half)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2374
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2375
lemma Re_less_pihalf_lemma:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2376
  assumes "\<bar>Re z\<bar> < pi / 2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2377
    shows "0 < Re ((exp (\<i>*z) + inverse (exp (\<i>*z))) / 2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2378
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2379
  have "0 < cos (Re z)" using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2380
    using cos_gt_zero_pi by auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2381
  then show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2382
    by (simp add: cos_ii_times [symmetric] Re_cos Im_cos add_pos_pos)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2383
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2384
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2385
lemma Arcsin_sin:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2386
    assumes "\<bar>Re z\<bar> < pi/2 \<or> (\<bar>Re z\<bar> = pi/2 \<and> Im z = 0)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2387
      shows "Arcsin(sin z) = z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2388
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2389
  have "Arcsin(sin z) = - (\<i> * Ln (csqrt (1 - (\<i> * (exp (\<i>*z) - inverse (exp (\<i>*z))))\<^sup>2 / 4) - (inverse (exp (\<i>*z)) - exp (\<i>*z)) / 2))"
61694
6571c78c9667 Removed some legacy theorems; minor adjustments to simplification rules; new material on homotopic paths
paulson <lp15@cam.ac.uk>
parents: 61649
diff changeset
  2390
    by (simp add: sin_exp_eq Arcsin_def exp_minus power_divide)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2391
  also have "... = - (\<i> * Ln (csqrt (((exp (\<i>*z) + inverse (exp (\<i>*z)))/2)\<^sup>2) - (inverse (exp (\<i>*z)) - exp (\<i>*z)) / 2))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2392
    by (simp add: field_simps power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2393
  also have "... = - (\<i> * Ln (((exp (\<i>*z) + inverse (exp (\<i>*z)))/2) - (inverse (exp (\<i>*z)) - exp (\<i>*z)) / 2))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2394
    apply (subst csqrt_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2395
    using assms Re_eq_pihalf_lemma Re_less_pihalf_lemma
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2396
    apply auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2397
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2398
  also have "... =  - (\<i> * Ln (exp (\<i>*z)))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2399
    by (simp add: field_simps power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2400
  also have "... = z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2401
    apply (subst Complex_Transcendental.Ln_exp)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2402
    using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2403
    apply (auto simp: abs_if simp del: eq_divide_eq_numeral1 split: split_if_asm)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2404
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2405
  finally show ?thesis .
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2406
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2407
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2408
lemma Arcsin_unique:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2409
    "\<lbrakk>sin z = w; \<bar>Re z\<bar> < pi/2 \<or> (\<bar>Re z\<bar> = pi/2 \<and> Im z = 0)\<rbrakk> \<Longrightarrow> Arcsin w = z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2410
  by (metis Arcsin_sin)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2411
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2412
lemma Arcsin_0 [simp]: "Arcsin 0 = 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2413
  by (metis Arcsin_sin norm_zero pi_half_gt_zero real_norm_def sin_zero zero_complex.simps(1))
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2414
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2415
lemma Arcsin_1 [simp]: "Arcsin 1 = pi/2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2416
  by (metis Arcsin_sin Im_complex_of_real Re_complex_of_real numeral_One of_real_numeral pi_half_ge_zero real_sqrt_abs real_sqrt_pow2 real_sqrt_power sin_of_real sin_pi_half)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2417
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2418
lemma Arcsin_minus_1 [simp]: "Arcsin(-1) = - (pi/2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2419
  by (metis Arcsin_1 Arcsin_sin Im_complex_of_real Re_complex_of_real abs_of_nonneg of_real_minus pi_half_ge_zero power2_minus real_sqrt_abs sin_Arcsin sin_minus)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2420
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2421
lemma has_field_derivative_Arcsin:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2422
  assumes "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2423
    shows "(Arcsin has_field_derivative inverse(cos(Arcsin z))) (at z)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2424
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2425
  have "(sin (Arcsin z))\<^sup>2 \<noteq> 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2426
    using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2427
    apply atomize
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2428
    apply (auto simp: complex_eq_iff Re_power2 Im_power2 abs_square_eq_1)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2429
    apply (metis abs_minus_cancel abs_one abs_power2 numeral_One numeral_neq_neg_one)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2430
    by (metis abs_minus_cancel abs_one abs_power2 one_neq_neg_one)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2431
  then have "cos (Arcsin z) \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2432
    by (metis diff_0_right power_zero_numeral sin_squared_eq)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2433
  then show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2434
    apply (rule has_complex_derivative_inverse_basic [OF DERIV_sin])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2435
    apply (auto intro: isCont_Arcsin open_ball [of z 1] assms)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2436
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2437
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2438
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2439
declare has_field_derivative_Arcsin [derivative_intros]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2440
declare has_field_derivative_Arcsin [THEN DERIV_chain2, derivative_intros]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2441
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2442
lemma complex_differentiable_at_Arcsin:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2443
    "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1) \<Longrightarrow> Arcsin complex_differentiable at z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2444
  using complex_differentiable_def has_field_derivative_Arcsin by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2445
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2446
lemma complex_differentiable_within_Arcsin:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2447
    "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1) \<Longrightarrow> Arcsin complex_differentiable (at z within s)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2448
  using complex_differentiable_at_Arcsin complex_differentiable_within_subset by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2449
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2450
lemma continuous_within_Arcsin:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2451
    "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1) \<Longrightarrow> continuous (at z within s) Arcsin"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2452
  using continuous_at_imp_continuous_within isCont_Arcsin by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2453
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2454
lemma continuous_on_Arcsin [continuous_intros]:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2455
    "(\<And>z. z \<in> s \<Longrightarrow> Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1) \<Longrightarrow> continuous_on s Arcsin"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2456
  by (simp add: continuous_at_imp_continuous_on)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2457
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2458
lemma holomorphic_on_Arcsin: "(\<And>z. z \<in> s \<Longrightarrow> Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1) \<Longrightarrow> Arcsin holomorphic_on s"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2459
  by (simp add: complex_differentiable_within_Arcsin holomorphic_on_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2460
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2461
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2462
subsection\<open>Inverse Cosine\<close>
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2463
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2464
definition Arccos :: "complex \<Rightarrow> complex" where
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2465
   "Arccos \<equiv> \<lambda>z. -\<i> * Ln(z + \<i> * csqrt(1 - z\<^sup>2))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2466
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2467
lemma Arccos_range_lemma: "\<bar>Re z\<bar> < 1 \<Longrightarrow> 0 < Im(z + \<i> * csqrt(1 - z\<^sup>2))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2468
  using Arcsin_range_lemma [of "-z"]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2469
  by simp
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2470
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2471
lemma Arccos_body_lemma: "z + \<i> * csqrt(1 - z\<^sup>2) \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2472
  using Arcsin_body_lemma [of z]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2473
  by (metis complex_i_mult_minus diff_add_cancel minus_diff_eq minus_unique mult.assoc mult.left_commute
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2474
           power2_csqrt power2_eq_square zero_neq_one)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2475
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2476
lemma Re_Arccos: "Re(Arccos z) = Im (Ln (z + \<i> * csqrt(1 - z\<^sup>2)))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2477
  by (simp add: Arccos_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2478
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2479
lemma Im_Arccos: "Im(Arccos z) = - ln (cmod (z + \<i> * csqrt (1 - z\<^sup>2)))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2480
  by (simp add: Arccos_def Arccos_body_lemma)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2481
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2482
text\<open>A very tricky argument to find!\<close>
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2483
lemma isCont_Arccos_lemma:
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2484
  assumes eq0: "Im (z + \<i> * csqrt (1 - z\<^sup>2)) = 0" and "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1)" 
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2485
    shows False
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2486
proof (cases "Im z = 0")
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2487
  case True
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2488
  then show ?thesis
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2489
    using assms by (fastforce simp add: cmod_def abs_square_less_1 [symmetric])
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2490
next
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2491
  case False
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2492
  have Imz: "Im z = - sqrt ((1 + ((Im z)\<^sup>2 + cmod (1 - z\<^sup>2)) - (Re z)\<^sup>2) / 2)"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2493
    using eq0 abs_Re_le_cmod [of "1-z\<^sup>2"]
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2494
    by (simp add: Re_power2 algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2495
  have "(cmod z)\<^sup>2 - 1 \<noteq> cmod (1 - z\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2496
  proof (clarsimp simp add: cmod_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2497
    assume "(Re z)\<^sup>2 + (Im z)\<^sup>2 - 1 = sqrt ((1 - Re (z\<^sup>2))\<^sup>2 + (Im (z\<^sup>2))\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2498
    then have "((Re z)\<^sup>2 + (Im z)\<^sup>2 - 1)\<^sup>2 = ((1 - Re (z\<^sup>2))\<^sup>2 + (Im (z\<^sup>2))\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2499
      by simp
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2500
    then show False using False
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2501
      by (simp add: power2_eq_square algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2502
  qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2503
  moreover have "(Im z)\<^sup>2 = ((1 + ((Im z)\<^sup>2 + cmod (1 - z\<^sup>2)) - (Re z)\<^sup>2) / 2)"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2504
    apply (subst Imz)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2505
    using abs_Re_le_cmod [of "1-z\<^sup>2"]
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2506
    apply (simp add: Re_power2)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2507
    done
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2508
  ultimately show False
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2509
    by (simp add: cmod_power2)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2510
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2511
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2512
lemma isCont_Arccos:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2513
  assumes "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2514
    shows "isCont Arccos z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2515
proof -
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2516
  have "z + \<i> * csqrt (1 - z\<^sup>2) \<notin> \<real>\<^sub>\<le>\<^sub>0"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2517
    by (metis complex_nonpos_Reals_iff isCont_Arccos_lemma assms)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2518
  with assms show ?thesis
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2519
    apply (simp add: Arccos_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2520
    apply (rule isCont_Ln' isCont_csqrt' continuous_intros)+
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 62087
diff changeset
  2521
    apply (simp_all add: one_minus_z2_notin_nonpos_Reals assms)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2522
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2523
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2524
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2525
lemma isCont_Arccos' [simp]:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2526
  shows "isCont f z \<Longrightarrow> (Im (f z) = 0 \<Longrightarrow> \<bar>Re (f z)\<bar> < 1) \<Longrightarrow> isCont (\<lambda>x. Arccos (f x)) z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2527
  by (blast intro: isCont_o2 [OF _ isCont_Arccos])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2528
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2529
lemma cos_Arccos [simp]: "cos(Arccos z) = z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2530
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2531
  have "z*2 + \<i> * (2 * csqrt (1 - z\<^sup>2)) = 0 \<longleftrightarrow> z*2 + \<i> * csqrt (1 - z\<^sup>2)*2 = 0"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61806
diff changeset
  2532
    by (simp add: algebra_simps)  \<comment>\<open>Cancelling a factor of 2\<close>
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2533
  moreover have "... \<longleftrightarrow> z + \<i> * csqrt (1 - z\<^sup>2) = 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2534
    by (metis distrib_right mult_eq_0_iff zero_neq_numeral)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2535
  ultimately show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2536
    apply (simp add: cos_exp_eq Arccos_def Arccos_body_lemma exp_minus field_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2537
    apply (simp add: power2_eq_square [symmetric])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2538
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2539
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2540
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2541
lemma Arccos_cos:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2542
    assumes "0 < Re z & Re z < pi \<or>
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2543
             Re z = 0 & 0 \<le> Im z \<or>
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2544
             Re z = pi & Im z \<le> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2545
      shows "Arccos(cos z) = z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2546
proof -
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2547
  have *: "((\<i> - (exp (\<i> * z))\<^sup>2 * \<i>) / (2 * exp (\<i> * z))) = sin z"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2548
    by (simp add: sin_exp_eq exp_minus field_simps power2_eq_square)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2549
  have "1 - (exp (\<i> * z) + inverse (exp (\<i> * z)))\<^sup>2 / 4 = ((\<i> - (exp (\<i> * z))\<^sup>2 * \<i>) / (2 * exp (\<i> * z)))\<^sup>2"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2550
    by (simp add: field_simps power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2551
  then have "Arccos(cos z) = - (\<i> * Ln ((exp (\<i> * z) + inverse (exp (\<i> * z))) / 2 +
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2552
                           \<i> * csqrt (((\<i> - (exp (\<i> * z))\<^sup>2 * \<i>) / (2 * exp (\<i> * z)))\<^sup>2)))"
61694
6571c78c9667 Removed some legacy theorems; minor adjustments to simplification rules; new material on homotopic paths
paulson <lp15@cam.ac.uk>
parents: 61649
diff changeset
  2553
    by (simp add: cos_exp_eq Arccos_def exp_minus power_divide)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2554
  also have "... = - (\<i> * Ln ((exp (\<i> * z) + inverse (exp (\<i> * z))) / 2 +
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2555
                              \<i> * ((\<i> - (exp (\<i> * z))\<^sup>2 * \<i>) / (2 * exp (\<i> * z)))))"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2556
    apply (subst csqrt_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2557
    using assms Re_sin_pos [of z] Im_sin_nonneg [of z] Im_sin_nonneg2 [of z]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2558
    apply (auto simp: * Re_sin Im_sin)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2559
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2560
  also have "... =  - (\<i> * Ln (exp (\<i>*z)))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2561
    by (simp add: field_simps power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2562
  also have "... = z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2563
    using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2564
    apply (subst Complex_Transcendental.Ln_exp, auto)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2565
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2566
  finally show ?thesis .
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2567
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2568
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2569
lemma Arccos_unique:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2570
    "\<lbrakk>cos z = w;
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2571
      0 < Re z \<and> Re z < pi \<or>
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2572
      Re z = 0 \<and> 0 \<le> Im z \<or>
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2573
      Re z = pi \<and> Im z \<le> 0\<rbrakk> \<Longrightarrow> Arccos w = z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2574
  using Arccos_cos by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2575
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2576
lemma Arccos_0 [simp]: "Arccos 0 = pi/2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2577
  by (rule Arccos_unique) (auto simp: of_real_numeral)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2578
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2579
lemma Arccos_1 [simp]: "Arccos 1 = 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2580
  by (rule Arccos_unique) auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2581
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2582
lemma Arccos_minus1: "Arccos(-1) = pi"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2583
  by (rule Arccos_unique) auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2584
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2585
lemma has_field_derivative_Arccos:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2586
  assumes "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2587
    shows "(Arccos has_field_derivative - inverse(sin(Arccos z))) (at z)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2588
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2589
  have "(cos (Arccos z))\<^sup>2 \<noteq> 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2590
    using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2591
    apply atomize
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2592
    apply (auto simp: complex_eq_iff Re_power2 Im_power2 abs_square_eq_1)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2593
    apply (metis abs_minus_cancel abs_one abs_power2 numeral_One numeral_neq_neg_one)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2594
    apply (metis left_minus less_irrefl power_one sum_power2_gt_zero_iff zero_neq_neg_one)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2595
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2596
  then have "- sin (Arccos z) \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2597
    by (metis cos_squared_eq diff_0_right mult_zero_left neg_0_equal_iff_equal power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2598
  then have "(Arccos has_field_derivative inverse(- sin(Arccos z))) (at z)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2599
    apply (rule has_complex_derivative_inverse_basic [OF DERIV_cos])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2600
    apply (auto intro: isCont_Arccos open_ball [of z 1] assms)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2601
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2602
  then show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2603
    by simp
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2604
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2605
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2606
declare has_field_derivative_Arcsin [derivative_intros]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2607
declare has_field_derivative_Arcsin [THEN DERIV_chain2, derivative_intros]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2608
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2609
lemma complex_differentiable_at_Arccos:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2610
    "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1) \<Longrightarrow> Arccos complex_differentiable at z"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2611
  using complex_differentiable_def has_field_derivative_Arccos by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2612
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2613
lemma complex_differentiable_within_Arccos:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2614
    "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1) \<Longrightarrow> Arccos complex_differentiable (at z within s)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2615
  using complex_differentiable_at_Arccos complex_differentiable_within_subset by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2616
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2617
lemma continuous_within_Arccos:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2618
    "(Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1) \<Longrightarrow> continuous (at z within s) Arccos"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2619
  using continuous_at_imp_continuous_within isCont_Arccos by blast
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2620
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2621
lemma continuous_on_Arccos [continuous_intros]:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2622
    "(\<And>z. z \<in> s \<Longrightarrow> Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1) \<Longrightarrow> continuous_on s Arccos"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2623
  by (simp add: continuous_at_imp_continuous_on)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2624
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2625
lemma holomorphic_on_Arccos: "(\<And>z. z \<in> s \<Longrightarrow> Im z = 0 \<Longrightarrow> \<bar>Re z\<bar> < 1) \<Longrightarrow> Arccos holomorphic_on s"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2626
  by (simp add: complex_differentiable_within_Arccos holomorphic_on_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2627
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2628
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2629
subsection\<open>Upper and Lower Bounds for Inverse Sine and Cosine\<close>
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2630
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2631
lemma Arcsin_bounds: "\<bar>Re z\<bar> < 1 \<Longrightarrow> \<bar>Re(Arcsin z)\<bar> < pi/2"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2632
  unfolding Re_Arcsin
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2633
  by (blast intro: Re_Ln_pos_lt_imp Arcsin_range_lemma)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2634
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2635
lemma Arccos_bounds: "\<bar>Re z\<bar> < 1 \<Longrightarrow> 0 < Re(Arccos z) \<and> Re(Arccos z) < pi"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2636
  unfolding Re_Arccos
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2637
  by (blast intro!: Im_Ln_pos_lt_imp Arccos_range_lemma)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2638
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2639
lemma Re_Arccos_bounds: "-pi < Re(Arccos z) \<and> Re(Arccos z) \<le> pi"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2640
  unfolding Re_Arccos
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2641
  by (blast intro!: mpi_less_Im_Ln Im_Ln_le_pi Arccos_body_lemma)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2642
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2643
lemma Re_Arccos_bound: "\<bar>Re(Arccos z)\<bar> \<le> pi"
61649
268d88ec9087 Tweaks for "real": Removal of [iff] status for some lemmas, adding [simp] for others. Plus fixes.
paulson <lp15@cam.ac.uk>
parents: 61610
diff changeset
  2644
  by (meson Re_Arccos_bounds abs_le_iff less_eq_real_def minus_less_iff)
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2645
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2646
lemma Re_Arcsin_bounds: "-pi < Re(Arcsin z) & Re(Arcsin z) \<le> pi"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2647
  unfolding Re_Arcsin
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2648
  by (blast intro!: mpi_less_Im_Ln Im_Ln_le_pi Arcsin_body_lemma)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2649
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2650
lemma Re_Arcsin_bound: "\<bar>Re(Arcsin z)\<bar> \<le> pi"
61649
268d88ec9087 Tweaks for "real": Removal of [iff] status for some lemmas, adding [simp] for others. Plus fixes.
paulson <lp15@cam.ac.uk>
parents: 61610
diff changeset
  2651
  by (meson Re_Arcsin_bounds abs_le_iff less_eq_real_def minus_less_iff)
61762
d50b993b4fb9 Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
paulson <lp15@cam.ac.uk>
parents: 61711
diff changeset
  2652
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2653
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2654
subsection\<open>Interrelations between Arcsin and Arccos\<close>
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2655
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2656
lemma cos_Arcsin_nonzero:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2657
  assumes "z\<^sup>2 \<noteq> 1" shows "cos(Arcsin z) \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2658
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2659
  have eq: "(\<i> * z * (csqrt (1 - z\<^sup>2)))\<^sup>2 = z\<^sup>2 * (z\<^sup>2 - 1)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2660
    by (simp add: power_mult_distrib algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2661
  have "\<i> * z * (csqrt (1 - z\<^sup>2)) \<noteq> z\<^sup>2 - 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2662
  proof
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2663
    assume "\<i> * z * (csqrt (1 - z\<^sup>2)) = z\<^sup>2 - 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2664
    then have "(\<i> * z * (csqrt (1 - z\<^sup>2)))\<^sup>2 = (z\<^sup>2 - 1)\<^sup>2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2665
      by simp
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2666
    then have "z\<^sup>2 * (z\<^sup>2 - 1) = (z\<^sup>2 - 1)*(z\<^sup>2 - 1)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2667
      using eq power2_eq_square by auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2668
    then show False
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2669
      using assms by simp
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2670
  qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2671
  then have "1 + \<i> * z * (csqrt (1 - z * z)) \<noteq> z\<^sup>2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2672
    by (metis add_minus_cancel power2_eq_square uminus_add_conv_diff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2673
  then have "2*(1 + \<i> * z * (csqrt (1 - z * z))) \<noteq> 2*z\<^sup>2"  (*FIXME cancel_numeral_factor*)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2674
    by (metis mult_cancel_left zero_neq_numeral)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2675
  then have "(\<i> * z + csqrt (1 - z\<^sup>2))\<^sup>2 \<noteq> -1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2676
    using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2677
    apply (auto simp: power2_sum)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2678
    apply (simp add: power2_eq_square algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2679
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2680
  then show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2681
    apply (simp add: cos_exp_eq Arcsin_def exp_minus)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2682
    apply (simp add: divide_simps Arcsin_body_lemma)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2683
    apply (metis add.commute minus_unique power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2684
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2685
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2686
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2687
lemma sin_Arccos_nonzero:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2688
  assumes "z\<^sup>2 \<noteq> 1" shows "sin(Arccos z) \<noteq> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2689
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2690
  have eq: "(\<i> * z * (csqrt (1 - z\<^sup>2)))\<^sup>2 = -(z\<^sup>2) * (1 - z\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2691
    by (simp add: power_mult_distrib algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2692
  have "\<i> * z * (csqrt (1 - z\<^sup>2)) \<noteq> 1 - z\<^sup>2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2693
  proof
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2694
    assume "\<i> * z * (csqrt (1 - z\<^sup>2)) = 1 - z\<^sup>2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2695
    then have "(\<i> * z * (csqrt (1 - z\<^sup>2)))\<^sup>2 = (1 - z\<^sup>2)\<^sup>2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2696
      by simp
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2697
    then have "-(z\<^sup>2) * (1 - z\<^sup>2) = (1 - z\<^sup>2)*(1 - z\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2698
      using eq power2_eq_square by auto
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2699
    then have "-(z\<^sup>2) = (1 - z\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2700
      using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2701
      by (metis add.commute add.right_neutral diff_add_cancel mult_right_cancel)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2702
    then show False
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2703
      using assms by simp
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2704
  qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2705
  then have "z\<^sup>2 + \<i> * z * (csqrt (1 - z\<^sup>2)) \<noteq> 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2706
    by (simp add: algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2707
  then have "2*(z\<^sup>2 + \<i> * z * (csqrt (1 - z\<^sup>2))) \<noteq> 2*1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2708
    by (metis mult_cancel_left2 zero_neq_numeral)  (*FIXME cancel_numeral_factor*)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2709
  then have "(z + \<i> * csqrt (1 - z\<^sup>2))\<^sup>2 \<noteq> 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2710
    using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2711
    apply (auto simp: Power.comm_semiring_1_class.power2_sum power_mult_distrib)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2712
    apply (simp add: power2_eq_square algebra_simps)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2713
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2714
  then show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2715
    apply (simp add: sin_exp_eq Arccos_def exp_minus)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2716
    apply (simp add: divide_simps Arccos_body_lemma)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2717
    apply (simp add: power2_eq_square)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2718
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2719
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2720
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2721
lemma cos_sin_csqrt:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2722
  assumes "0 < cos(Re z)  \<or>  cos(Re z) = 0 \<and> Im z * sin(Re z) \<le> 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2723
    shows "cos z = csqrt(1 - (sin z)\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2724
  apply (rule csqrt_unique [THEN sym])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2725
  apply (simp add: cos_squared_eq)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2726
  using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2727
  apply (auto simp: Re_cos Im_cos add_pos_pos mult_le_0_iff zero_le_mult_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2728
  done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2729
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2730
lemma sin_cos_csqrt:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2731
  assumes "0 < sin(Re z)  \<or>  sin(Re z) = 0 \<and> 0 \<le> Im z * cos(Re z)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2732
    shows "sin z = csqrt(1 - (cos z)\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2733
  apply (rule csqrt_unique [THEN sym])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2734
  apply (simp add: sin_squared_eq)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2735
  using assms
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2736
  apply (auto simp: Re_sin Im_sin add_pos_pos mult_le_0_iff zero_le_mult_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2737
  done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2738
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2739
lemma Arcsin_Arccos_csqrt_pos:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2740
    "(0 < Re z | Re z = 0 & 0 \<le> Im z) \<Longrightarrow> Arcsin z = Arccos(csqrt(1 - z\<^sup>2))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2741
  by (simp add: Arcsin_def Arccos_def Complex.csqrt_square add.commute)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2742
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2743
lemma Arccos_Arcsin_csqrt_pos:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2744
    "(0 < Re z | Re z = 0 & 0 \<le> Im z) \<Longrightarrow> Arccos z = Arcsin(csqrt(1 - z\<^sup>2))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2745
  by (simp add: Arcsin_def Arccos_def Complex.csqrt_square add.commute)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2746
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2747
lemma sin_Arccos:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2748
    "0 < Re z | Re z = 0 & 0 \<le> Im z \<Longrightarrow> sin(Arccos z) = csqrt(1 - z\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2749
  by (simp add: Arccos_Arcsin_csqrt_pos)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2750
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2751
lemma cos_Arcsin:
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2752
    "0 < Re z | Re z = 0 & 0 \<le> Im z \<Longrightarrow> cos(Arcsin z) = csqrt(1 - z\<^sup>2)"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2753
  by (simp add: Arcsin_Arccos_csqrt_pos)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2754
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2755
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2756
subsection\<open>Relationship with Arcsin on the Real Numbers\<close>
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2757
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2758
lemma Im_Arcsin_of_real:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2759
  assumes "\<bar>x\<bar> \<le> 1"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2760
    shows "Im (Arcsin (of_real x)) = 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2761
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2762
  have "csqrt (1 - (of_real x)\<^sup>2) = (if x^2 \<le> 1 then sqrt (1 - x^2) else \<i> * sqrt (x^2 - 1))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2763
    by (simp add: of_real_sqrt del: csqrt_of_real_nonneg)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2764
  then have "cmod (\<i> * of_real x + csqrt (1 - (of_real x)\<^sup>2))^2 = 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2765
    using assms abs_square_le_1
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2766
    by (force simp add: Complex.cmod_power2)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2767
  then have "cmod (\<i> * of_real x + csqrt (1 - (of_real x)\<^sup>2)) = 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2768
    by (simp add: norm_complex_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2769
  then show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2770
    by (simp add: Im_Arcsin exp_minus)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2771
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2772
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2773
corollary Arcsin_in_Reals [simp]: "z \<in> \<real> \<Longrightarrow> \<bar>Re z\<bar> \<le> 1 \<Longrightarrow> Arcsin z \<in> \<real>"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2774
  by (metis Im_Arcsin_of_real Re_complex_of_real Reals_cases complex_is_Real_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2775
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2776
lemma arcsin_eq_Re_Arcsin:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2777
  assumes "\<bar>x\<bar> \<le> 1"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2778
    shows "arcsin x = Re (Arcsin (of_real x))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2779
unfolding arcsin_def
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2780
proof (rule the_equality, safe)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2781
  show "- (pi / 2) \<le> Re (Arcsin (complex_of_real x))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2782
    using Re_Ln_pos_le [OF Arcsin_body_lemma, of "of_real x"]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2783
    by (auto simp: Complex.in_Reals_norm Re_Arcsin)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2784
next
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2785
  show "Re (Arcsin (complex_of_real x)) \<le> pi / 2"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2786
    using Re_Ln_pos_le [OF Arcsin_body_lemma, of "of_real x"]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2787
    by (auto simp: Complex.in_Reals_norm Re_Arcsin)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2788
next
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2789
  show "sin (Re (Arcsin (complex_of_real x))) = x"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2790
    using Re_sin [of "Arcsin (of_real x)"] Arcsin_body_lemma [of "of_real x"]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2791
    by (simp add: Im_Arcsin_of_real assms)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2792
next
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2793
  fix x'
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2794
  assume "- (pi / 2) \<le> x'" "x' \<le> pi / 2" "x = sin x'"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2795
  then show "x' = Re (Arcsin (complex_of_real (sin x')))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2796
    apply (simp add: sin_of_real [symmetric])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2797
    apply (subst Arcsin_sin)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2798
    apply (auto simp: )
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2799
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2800
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2801
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2802
lemma of_real_arcsin: "\<bar>x\<bar> \<le> 1 \<Longrightarrow> of_real(arcsin x) = Arcsin(of_real x)"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2803
  by (metis Im_Arcsin_of_real add.right_neutral arcsin_eq_Re_Arcsin complex_eq mult_zero_right of_real_0)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2804
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2805
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2806
subsection\<open>Relationship with Arccos on the Real Numbers\<close>
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2807
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2808
lemma Im_Arccos_of_real:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2809
  assumes "\<bar>x\<bar> \<le> 1"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2810
    shows "Im (Arccos (of_real x)) = 0"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2811
proof -
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2812
  have "csqrt (1 - (of_real x)\<^sup>2) = (if x^2 \<le> 1 then sqrt (1 - x^2) else \<i> * sqrt (x^2 - 1))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2813
    by (simp add: of_real_sqrt del: csqrt_of_real_nonneg)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2814
  then have "cmod (of_real x + \<i> * csqrt (1 - (of_real x)\<^sup>2))^2 = 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2815
    using assms abs_square_le_1
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2816
    by (force simp add: Complex.cmod_power2)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2817
  then have "cmod (of_real x + \<i> * csqrt (1 - (of_real x)\<^sup>2)) = 1"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2818
    by (simp add: norm_complex_def)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2819
  then show ?thesis
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2820
    by (simp add: Im_Arccos exp_minus)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2821
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2822
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2823
corollary Arccos_in_Reals [simp]: "z \<in> \<real> \<Longrightarrow> \<bar>Re z\<bar> \<le> 1 \<Longrightarrow> Arccos z \<in> \<real>"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2824
  by (metis Im_Arccos_of_real Re_complex_of_real Reals_cases complex_is_Real_iff)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2825
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2826
lemma arccos_eq_Re_Arccos:
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2827
  assumes "\<bar>x\<bar> \<le> 1"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2828
    shows "arccos x = Re (Arccos (of_real x))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2829
unfolding arccos_def
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2830
proof (rule the_equality, safe)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2831
  show "0 \<le> Re (Arccos (complex_of_real x))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2832
    using Im_Ln_pos_le [OF Arccos_body_lemma, of "of_real x"]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2833
    by (auto simp: Complex.in_Reals_norm Re_Arccos)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2834
next
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2835
  show "Re (Arccos (complex_of_real x)) \<le> pi"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2836
    using Im_Ln_pos_le [OF Arccos_body_lemma, of "of_real x"]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2837
    by (auto simp: Complex.in_Reals_norm Re_Arccos)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2838
next
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2839
  show "cos (Re (Arccos (complex_of_real x))) = x"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2840
    using Re_cos [of "Arccos (of_real x)"] Arccos_body_lemma [of "of_real x"]
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2841
    by (simp add: Im_Arccos_of_real assms)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2842
next
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2843
  fix x'
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2844
  assume "0 \<le> x'" "x' \<le> pi" "x = cos x'"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2845
  then show "x' = Re (Arccos (complex_of_real (cos x')))"
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2846
    apply (simp add: cos_of_real [symmetric])
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2847
    apply (subst Arccos_cos)
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2848
    apply (auto simp: )
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2849
    done
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2850
qed
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2851
61945
1135b8de26c3 more symbols;
wenzelm
parents: 61942
diff changeset
  2852
lemma of_real_arccos: "\<bar>x\<bar> \<le> 1 \<Longrightarrow> of_real(arccos x) = Arccos(of_real x)"
59870
68d6b6aa4450 HOL Light Libraries for complex Arctan, Arcsin, Arccos
paulson <lp15@cam.ac.uk>
parents: 59862
diff changeset
  2853
  by (metis Im_Arccos_of_real add.right_neutral arccos_eq_Re_Arccos complex_eq mult_zero_right of_real_0)
59751
916c0f6c83e3 New material for complex sin, cos, tan, Ln, also some reorganisation
paulson <lp15@cam.ac.uk>
parents: 59746
diff changeset
  2854
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2855
subsection\<open>Some interrelationships among the real inverse trig functions.\<close>
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2856
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2857
lemma arccos_arctan:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2858
  assumes "-1 < x" "x < 1"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2859
    shows "arccos x = pi/2 - arctan(x / sqrt(1 - x\<^sup>2))"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2860
proof -
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2861
  have "arctan(x / sqrt(1 - x\<^sup>2)) - (pi/2 - arccos x) = 0"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2862
  proof (rule sin_eq_0_pi)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2863
    show "- pi < arctan (x / sqrt (1 - x\<^sup>2)) - (pi / 2 - arccos x)"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2864
      using arctan_lbound [of "x / sqrt(1 - x\<^sup>2)"]  arccos_bounded [of x] assms
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2865
      by (simp add: algebra_simps)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2866
  next
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2867
    show "arctan (x / sqrt (1 - x\<^sup>2)) - (pi / 2 - arccos x) < pi"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2868
      using arctan_ubound [of "x / sqrt(1 - x\<^sup>2)"]  arccos_bounded [of x] assms
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2869
      by (simp add: algebra_simps)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2870
  next
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2871
    show "sin (arctan (x / sqrt (1 - x\<^sup>2)) - (pi / 2 - arccos x)) = 0"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2872
      using assms
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2873
      by (simp add: algebra_simps sin_diff cos_add sin_arccos sin_arctan cos_arctan
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2874
                    power2_eq_square square_eq_1_iff)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2875
  qed
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2876
  then show ?thesis
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2877
    by simp
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2878
qed
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2879
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2880
lemma arcsin_plus_arccos:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2881
  assumes "-1 \<le> x" "x \<le> 1"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2882
    shows "arcsin x + arccos x = pi/2"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2883
proof -
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2884
  have "arcsin x = pi/2 - arccos x"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2885
    apply (rule sin_inj_pi)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2886
    using assms arcsin [OF assms] arccos [OF assms]
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2887
    apply (auto simp: algebra_simps sin_diff)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2888
    done
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2889
  then show ?thesis
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2890
    by (simp add: algebra_simps)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2891
qed
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2892
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2893
lemma arcsin_arccos_eq: "-1 \<le> x \<Longrightarrow> x \<le> 1 \<Longrightarrow> arcsin x = pi/2 - arccos x"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2894
  using arcsin_plus_arccos by force
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2895
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2896
lemma arccos_arcsin_eq: "-1 \<le> x \<Longrightarrow> x \<le> 1 \<Longrightarrow> arccos x = pi/2 - arcsin x"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2897
  using arcsin_plus_arccos by force
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2898
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2899
lemma arcsin_arctan: "-1 < x \<Longrightarrow> x < 1 \<Longrightarrow> arcsin x = arctan(x / sqrt(1 - x\<^sup>2))"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2900
  by (simp add: arccos_arctan arcsin_arccos_eq)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2901
60162
645058aa9d6f tidying some messy proofs
paulson <lp15@cam.ac.uk>
parents: 60150
diff changeset
  2902
lemma csqrt_1_diff_eq: "csqrt (1 - (of_real x)\<^sup>2) = (if x^2 \<le> 1 then sqrt (1 - x^2) else \<i> * sqrt (x^2 - 1))"
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2903
  by ( simp add: of_real_sqrt del: csqrt_of_real_nonneg)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2904
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2905
lemma arcsin_arccos_sqrt_pos: "0 \<le> x \<Longrightarrow> x \<le> 1 \<Longrightarrow> arcsin x = arccos(sqrt(1 - x\<^sup>2))"
61762
d50b993b4fb9 Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
paulson <lp15@cam.ac.uk>
parents: 61711
diff changeset
  2906
  apply (simp add: abs_square_le_1 arcsin_eq_Re_Arcsin arccos_eq_Re_Arccos)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2907
  apply (subst Arcsin_Arccos_csqrt_pos)
60162
645058aa9d6f tidying some messy proofs
paulson <lp15@cam.ac.uk>
parents: 60150
diff changeset
  2908
  apply (auto simp: power_le_one csqrt_1_diff_eq)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2909
  done
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2910
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2911
lemma arcsin_arccos_sqrt_neg: "-1 \<le> x \<Longrightarrow> x \<le> 0 \<Longrightarrow> arcsin x = -arccos(sqrt(1 - x\<^sup>2))"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2912
  using arcsin_arccos_sqrt_pos [of "-x"]
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2913
  by (simp add: arcsin_minus)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2914
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2915
lemma arccos_arcsin_sqrt_pos: "0 \<le> x \<Longrightarrow> x \<le> 1 \<Longrightarrow> arccos x = arcsin(sqrt(1 - x\<^sup>2))"
61762
d50b993b4fb9 Removal of redundant lemmas (diff_less_iff, diff_le_iff) and of the abbreviation Exp. Addition of some new material.
paulson <lp15@cam.ac.uk>
parents: 61711
diff changeset
  2916
  apply (simp add: abs_square_le_1 arcsin_eq_Re_Arcsin arccos_eq_Re_Arccos)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2917
  apply (subst Arccos_Arcsin_csqrt_pos)
60162
645058aa9d6f tidying some messy proofs
paulson <lp15@cam.ac.uk>
parents: 60150
diff changeset
  2918
  apply (auto simp: power_le_one csqrt_1_diff_eq)
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2919
  done
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2920
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2921
lemma arccos_arcsin_sqrt_neg: "-1 \<le> x \<Longrightarrow> x \<le> 0 \<Longrightarrow> arccos x = pi - arcsin(sqrt(1 - x\<^sup>2))"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2922
  using arccos_arcsin_sqrt_pos [of "-x"]
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2923
  by (simp add: arccos_minus)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2924
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2925
subsection\<open>continuity results for arcsin and arccos.\<close>
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2926
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2927
lemma continuous_on_Arcsin_real [continuous_intros]:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2928
    "continuous_on {w \<in> \<real>. \<bar>Re w\<bar> \<le> 1} Arcsin"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2929
proof -
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2930
  have "continuous_on {w \<in> \<real>. \<bar>Re w\<bar> \<le> 1} (\<lambda>x. complex_of_real (arcsin (Re x))) =
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2931
        continuous_on {w \<in> \<real>. \<bar>Re w\<bar> \<le> 1} (\<lambda>x. complex_of_real (Re (Arcsin (of_real (Re x)))))"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2932
    by (rule continuous_on_cong [OF refl]) (simp add: arcsin_eq_Re_Arcsin)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2933
  also have "... = ?thesis"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2934
    by (rule continuous_on_cong [OF refl]) simp
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2935
  finally show ?thesis
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2936
    using continuous_on_arcsin [OF continuous_on_Re [OF continuous_on_id], of "{w \<in> \<real>. \<bar>Re w\<bar> \<le> 1}"]
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2937
          continuous_on_of_real
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2938
    by fastforce
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2939
qed
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2940
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2941
lemma continuous_within_Arcsin_real:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2942
    "continuous (at z within {w \<in> \<real>. \<bar>Re w\<bar> \<le> 1}) Arcsin"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2943
proof (cases "z \<in> {w \<in> \<real>. \<bar>Re w\<bar> \<le> 1}")
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2944
  case True then show ?thesis
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2945
    using continuous_on_Arcsin_real continuous_on_eq_continuous_within
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2946
    by blast
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2947
next
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2948
  case False
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2949
  with closed_real_abs_le [of 1] show ?thesis
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2950
    by (rule continuous_within_closed_nontrivial)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2951
qed
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2952
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2953
lemma continuous_on_Arccos_real:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2954
    "continuous_on {w \<in> \<real>. \<bar>Re w\<bar> \<le> 1} Arccos"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2955
proof -
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2956
  have "continuous_on {w \<in> \<real>. \<bar>Re w\<bar> \<le> 1} (\<lambda>x. complex_of_real (arccos (Re x))) =
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2957
        continuous_on {w \<in> \<real>. \<bar>Re w\<bar> \<le> 1} (\<lambda>x. complex_of_real (Re (Arccos (of_real (Re x)))))"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2958
    by (rule continuous_on_cong [OF refl]) (simp add: arccos_eq_Re_Arccos)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2959
  also have "... = ?thesis"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2960
    by (rule continuous_on_cong [OF refl]) simp
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2961
  finally show ?thesis
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2962
    using continuous_on_arccos [OF continuous_on_Re [OF continuous_on_id], of "{w \<in> \<real>. \<bar>Re w\<bar> \<le> 1}"]
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2963
          continuous_on_of_real
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2964
    by fastforce
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2965
qed
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2966
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2967
lemma continuous_within_Arccos_real:
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2968
    "continuous (at z within {w \<in> \<real>. \<bar>Re w\<bar> \<le> 1}) Arccos"
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2969
proof (cases "z \<in> {w \<in> \<real>. \<bar>Re w\<bar> \<le> 1}")
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2970
  case True then show ?thesis
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2971
    using continuous_on_Arccos_real continuous_on_eq_continuous_within
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2972
    by blast
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2973
next
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2974
  case False
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2975
  with closed_real_abs_le [of 1] show ?thesis
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2976
    by (rule continuous_within_closed_nontrivial)
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2977
qed
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2978
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59870
diff changeset
  2979
60420
884f54e01427 isabelle update_cartouches;
wenzelm
parents: 60162
diff changeset
  2980
subsection\<open>Roots of unity\<close>
60020
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2981
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2982
lemma complex_root_unity:
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2983
  fixes j::nat
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2984
  assumes "n \<noteq> 0"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2985
    shows "exp(2 * of_real pi * \<i> * of_nat j / of_nat n)^n = 1"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2986
proof -
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2987
  have *: "of_nat j * (complex_of_real pi * 2) = complex_of_real (2 * real j * pi)"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2988
    by (simp add: of_real_numeral)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2989
  then show ?thesis
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2990
    apply (simp add: exp_of_nat_mult [symmetric] mult_ac exp_Euler)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2991
    apply (simp only: * cos_of_real sin_of_real)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2992
    apply (simp add: )
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2993
    done
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2994
qed
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2995
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2996
lemma complex_root_unity_eq:
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2997
  fixes j::nat and k::nat
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2998
  assumes "1 \<le> n"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  2999
    shows "(exp(2 * of_real pi * \<i> * of_nat j / of_nat n) = exp(2 * of_real pi * \<i> * of_nat k / of_nat n)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3000
           \<longleftrightarrow> j mod n = k mod n)"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3001
proof -
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3002
    have "(\<exists>z::int. \<i> * (of_nat j * (of_real pi * 2)) =
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3003
               \<i> * (of_nat k * (of_real pi * 2)) + \<i> * (of_int z * (of_nat n * (of_real pi * 2)))) \<longleftrightarrow>
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3004
          (\<exists>z::int. of_nat j * (\<i> * (of_real pi * 2)) =
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3005
              (of_nat k + of_nat n * of_int z) * (\<i> * (of_real pi * 2)))"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3006
      by (simp add: algebra_simps)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3007
    also have "... \<longleftrightarrow> (\<exists>z::int. of_nat j = of_nat k + of_nat n * (of_int z :: complex))"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3008
      by simp
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3009
    also have "... \<longleftrightarrow> (\<exists>z::int. of_nat j = of_nat k + of_nat n * z)"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3010
      apply (rule HOL.iff_exI)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3011
      apply (auto simp: )
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3012
      using of_int_eq_iff apply fastforce
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3013
      by (metis of_int_add of_int_mult of_int_of_nat_eq)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3014
    also have "... \<longleftrightarrow> int j mod int n = int k mod int n"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3015
      by (auto simp: zmod_eq_dvd_iff dvd_def algebra_simps)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3016
    also have "... \<longleftrightarrow> j mod n = k mod n"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3017
      by (metis of_nat_eq_iff zmod_int)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3018
    finally have "(\<exists>z. \<i> * (of_nat j * (of_real pi * 2)) =
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3019
             \<i> * (of_nat k * (of_real pi * 2)) + \<i> * (of_int z * (of_nat n * (of_real pi * 2)))) \<longleftrightarrow> j mod n = k mod n" .
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3020
   note * = this
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3021
  show ?thesis
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3022
    using assms
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3023
    by (simp add: exp_eq divide_simps mult_ac of_real_numeral *)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3024
qed
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3025
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3026
corollary bij_betw_roots_unity:
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3027
    "bij_betw (\<lambda>j. exp(2 * of_real pi * \<i> * of_nat j / of_nat n))
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3028
              {..<n}  {exp(2 * of_real pi * \<i> * of_nat j / of_nat n) | j. j < n}"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3029
  by (auto simp: bij_betw_def inj_on_def complex_root_unity_eq)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3030
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3031
lemma complex_root_unity_eq_1:
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3032
  fixes j::nat and k::nat
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3033
  assumes "1 \<le> n"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3034
    shows "exp(2 * of_real pi * \<i> * of_nat j / of_nat n) = 1 \<longleftrightarrow> n dvd j"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3035
proof -
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3036
  have "1 = exp(2 * of_real pi * \<i> * (of_nat n / of_nat n))"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3037
    using assms by simp
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3038
  then have "exp(2 * of_real pi * \<i> * (of_nat j / of_nat n)) = 1 \<longleftrightarrow> j mod n = n mod n"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3039
     using complex_root_unity_eq [of n j n] assms
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3040
     by simp
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3041
  then show ?thesis
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3042
    by auto
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3043
qed
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3044
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3045
lemma finite_complex_roots_unity_explicit:
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3046
     "finite {exp(2 * of_real pi * \<i> * of_nat j / of_nat n) | j::nat. j < n}"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3047
by simp
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3048
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3049
lemma card_complex_roots_unity_explicit:
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3050
     "card {exp(2 * of_real pi * \<i> * of_nat j / of_nat n) | j::nat. j < n} = n"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3051
  by (simp add:  Finite_Set.bij_betw_same_card [OF bij_betw_roots_unity, symmetric])
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3052
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3053
lemma complex_roots_unity:
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3054
  assumes "1 \<le> n"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3055
    shows "{z::complex. z^n = 1} = {exp(2 * of_real pi * \<i> * of_nat j / of_nat n) | j::nat. j < n}"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3056
  apply (rule Finite_Set.card_seteq [symmetric])
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3057
  using assms
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3058
  apply (auto simp: card_complex_roots_unity_explicit finite_roots_unity complex_root_unity card_roots_unity)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3059
  done
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3060
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3061
lemma card_complex_roots_unity: "1 \<le> n \<Longrightarrow> card {z::complex. z^n = 1} = n"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3062
  by (simp add: card_complex_roots_unity_explicit complex_roots_unity)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3063
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3064
lemma complex_not_root_unity:
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3065
    "1 \<le> n \<Longrightarrow> \<exists>u::complex. norm u = 1 \<and> u^n \<noteq> 1"
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3066
  apply (rule_tac x="exp (of_real pi * \<i> * of_real (1 / n))" in exI)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3067
  apply (auto simp: Re_complex_div_eq_0 exp_of_nat_mult [symmetric] mult_ac exp_Euler)
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3068
  done
065ecea354d0 Complex roots of unity. Better definition of ln for complex numbers. Used [code del] to stop code generation for powr.
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  3069
59745
390476a0ef13 new file for complex transcendental functions
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  3070
end