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 |