src/HOL/Analysis/Complex_Transcendental.thy
changeset 65583 8d53b3bebab4
parent 65578 e4997c181cce
child 65585 a043de9ad41e
equal deleted inserted replaced
65580:66351f79c295 65583:8d53b3bebab4
  1044   apply (rule exp_complex_eqI)
  1044   apply (rule exp_complex_eqI)
  1045   using assms mpi_less_Im_Ln  [of "exp z"] Im_Ln_le_pi [of "exp z"]
  1045   using assms mpi_less_Im_Ln  [of "exp z"] Im_Ln_le_pi [of "exp z"]
  1046   apply auto
  1046   apply auto
  1047   done
  1047   done
  1048 
  1048 
       
  1049 lemma Ln_eq_zero_iff [simp]: "x \<notin> \<real>\<^sub>\<le>\<^sub>0 \<Longrightarrow> Ln x = 0 \<longleftrightarrow> x = 1"
       
  1050   by auto (metis exp_Ln exp_zero nonpos_Reals_zero_I)
       
  1051 
  1049 subsection\<open>Relation to Real Logarithm\<close>
  1052 subsection\<open>Relation to Real Logarithm\<close>
  1050 
  1053 
  1051 lemma Ln_of_real:
  1054 lemma Ln_of_real:
  1052   assumes "0 < z"
  1055   assumes "0 < z"
  1053     shows "ln(of_real z::complex) = of_real(ln z)"
  1056     shows "ln(of_real z::complex) = of_real(ln z)"
  1677 
  1680 
  1678 lemma powr_nat:
  1681 lemma powr_nat:
  1679   fixes n::nat and z::complex shows "z powr n = (if z = 0 then 0 else z^n)"
  1682   fixes n::nat and z::complex shows "z powr n = (if z = 0 then 0 else z^n)"
  1680   by (simp add: exp_of_nat_mult powr_def)
  1683   by (simp add: exp_of_nat_mult powr_def)
  1681 
  1684 
  1682 lemma powr_add_complex:
       
  1683   fixes w::complex shows "w powr (z1 + z2) = w powr z1 * w powr z2"
       
  1684   by (simp add: powr_def algebra_simps exp_add)
       
  1685 
       
  1686 lemma powr_minus_complex:
       
  1687   fixes w::complex shows  "w powr (-z) = inverse(w powr z)"
       
  1688   by (simp add: powr_def exp_minus)
       
  1689 
       
  1690 lemma powr_diff_complex:
       
  1691   fixes w::complex shows  "w powr (z1 - z2) = w powr z1 / w powr z2"
       
  1692   by (simp add: powr_def algebra_simps exp_diff)
       
  1693 
       
  1694 lemma norm_powr_real: "w \<in> \<real> \<Longrightarrow> 0 < Re w \<Longrightarrow> norm(w powr z) = exp(Re z * ln(Re w))"
  1685 lemma norm_powr_real: "w \<in> \<real> \<Longrightarrow> 0 < Re w \<Longrightarrow> norm(w powr z) = exp(Re z * ln(Re w))"
  1695   apply (simp add: powr_def)
  1686   apply (simp add: powr_def)
  1696   using Im_Ln_eq_0 complex_is_Real_iff norm_complex_def
  1687   using Im_Ln_eq_0 complex_is_Real_iff norm_complex_def
  1697   by auto
  1688   by auto
       
  1689 
       
  1690 lemma powr_complexpow [simp]:
       
  1691   fixes x::complex shows "x \<noteq> 0 \<Longrightarrow> x powr (of_nat n) = x^n"
       
  1692   by (induct n) (auto simp: ac_simps powr_add)
       
  1693 
       
  1694 lemma powr_complexnumeral [simp]:
       
  1695   fixes x::complex shows "x \<noteq> 0 \<Longrightarrow> x powr (numeral n) = x ^ (numeral n)"
       
  1696   by (metis of_nat_numeral powr_complexpow)
  1698 
  1697 
  1699 lemma cnj_powr:
  1698 lemma cnj_powr:
  1700   assumes "Im a = 0 \<Longrightarrow> Re a \<ge> 0"
  1699   assumes "Im a = 0 \<Longrightarrow> Re a \<ge> 0"
  1701   shows   "cnj (a powr b) = cnj a powr cnj b"
  1700   shows   "cnj (a powr b) = cnj a powr cnj b"
  1702 proof (cases "a = 0")
  1701 proof (cases "a = 0")
  1757     "w \<noteq> 0 \<Longrightarrow> ((\<lambda>z. w powr z) has_field_derivative Ln w * w powr z) (at z)"
  1756     "w \<noteq> 0 \<Longrightarrow> ((\<lambda>z. w powr z) has_field_derivative Ln w * w powr z) (at z)"
  1758   apply (simp add: powr_def)
  1757   apply (simp add: powr_def)
  1759   apply (intro derivative_eq_intros | simp)+
  1758   apply (intro derivative_eq_intros | simp)+
  1760   done
  1759   done
  1761 
  1760 
  1762 lemma field_differentiable_powr_right:
  1761 lemma field_differentiable_powr_right [derivative_intros]:
  1763   fixes w::complex
  1762   fixes w::complex
  1764   shows
  1763   shows "w \<noteq> 0 \<Longrightarrow> (\<lambda>z. w powr z) field_differentiable (at z)"
  1765     "w \<noteq> 0 \<Longrightarrow> (\<lambda>z. w powr z) field_differentiable (at z)"
       
  1766 using field_differentiable_def has_field_derivative_powr_right by blast
  1764 using field_differentiable_def has_field_derivative_powr_right by blast
  1767 
  1765 
  1768 lemma holomorphic_on_powr_right:
  1766 lemma holomorphic_on_powr_right [holomorphic_intros]:
  1769     "f holomorphic_on s \<Longrightarrow> w \<noteq> 0 \<Longrightarrow> (\<lambda>z. w powr (f z)) holomorphic_on s"
  1767     "f holomorphic_on s \<Longrightarrow> w \<noteq> 0 \<Longrightarrow> (\<lambda>z. w powr (f z)) holomorphic_on s"
  1770     unfolding holomorphic_on_def field_differentiable_def
  1768   unfolding holomorphic_on_def field_differentiable_def
  1771 by (metis (full_types) DERIV_chain' has_field_derivative_powr_right)
  1769   by (metis (full_types) DERIV_chain' has_field_derivative_powr_right)
  1772 
  1770 
  1773 lemma norm_powr_real_powr:
  1771 lemma norm_powr_real_powr:
  1774   "w \<in> \<real> \<Longrightarrow> 0 \<le> Re w \<Longrightarrow> cmod (w powr z) = Re w powr Re z"
  1772   "w \<in> \<real> \<Longrightarrow> 0 \<le> Re w \<Longrightarrow> cmod (w powr z) = Re w powr Re z"
  1775   by (cases "w = 0") (auto simp add: norm_powr_real powr_def Im_Ln_eq_0
  1773   by (cases "w = 0") (auto simp add: norm_powr_real powr_def Im_Ln_eq_0
  1776                                      complex_is_Real_iff in_Reals_norm complex_eq_iff)
  1774                                      complex_is_Real_iff in_Reals_norm complex_eq_iff)
  2560 lemma pi_approx: "3.141592653588 \<le> pi" "pi \<le> 3.1415926535899"
  2558 lemma pi_approx: "3.141592653588 \<le> pi" "pi \<le> 3.1415926535899"
  2561   unfolding pi_machin
  2559   unfolding pi_machin
  2562   using arctan_bounds[of "1/5"   4]
  2560   using arctan_bounds[of "1/5"   4]
  2563         arctan_bounds[of "1/239" 4]
  2561         arctan_bounds[of "1/239" 4]
  2564   by (simp_all add: eval_nat_numeral)
  2562   by (simp_all add: eval_nat_numeral)
       
  2563     
       
  2564 corollary pi_gt3: "pi > 3"
       
  2565   using pi_approx by simp
  2565 
  2566 
  2566 
  2567 
  2567 subsection\<open>Inverse Sine\<close>
  2568 subsection\<open>Inverse Sine\<close>
  2568 
  2569 
  2569 definition Arcsin :: "complex \<Rightarrow> complex" where
  2570 definition Arcsin :: "complex \<Rightarrow> complex" where