src/HOL/Transcendental.thy
author huffman
Mon, 05 Sep 2011 22:30:25 -0700
changeset 44746 9e4f7d3b5376
parent 44745 b068207a7400
child 44755 257ac9da021f
permissions -rw-r--r--
add lemmas about arctan; simplify some proofs about arctan;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
     1
(*  Title:      HOL/Transcendental.thy
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
     2
    Author:     Jacques D. Fleuriot, University of Cambridge, University of Edinburgh
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
     3
    Author:     Lawrence C Paulson
12196
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     4
*)
a3be6b3a9c0b new theories from Jacques Fleuriot
paulson
parents:
diff changeset
     5
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
     6
header{*Power Series, Transcendental Functions etc.*}
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
     7
15131
c69542757a4d New theory header syntax.
nipkow
parents: 15086
diff changeset
     8
theory Transcendental
25600
73431bd8c4c4 joined EvenOdd theory with Parity
haftmann
parents: 25153
diff changeset
     9
imports Fact Series Deriv NthRoot
15131
c69542757a4d New theory header syntax.
nipkow
parents: 15086
diff changeset
    10
begin
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    11
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
    12
subsection {* Properties of Power Series *}
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    13
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    14
lemma lemma_realpow_diff:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
    15
  fixes y :: "'a::monoid_mult"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    16
  shows "p \<le> n \<Longrightarrow> y ^ (Suc n - p) = (y ^ (n - p)) * y"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    17
proof -
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    18
  assume "p \<le> n"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    19
  hence "Suc n - p = Suc (n - p)" by (rule Suc_diff_le)
30273
ecd6f0ca62ea declare power_Suc [simp]; remove redundant type-specific versions of power_Suc
huffman
parents: 30082
diff changeset
    20
  thus ?thesis by (simp add: power_commutes)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    21
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    22
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    23
lemma lemma_realpow_diff_sumr:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
    24
  fixes y :: "'a::{comm_semiring_0,monoid_mult}" shows
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
    25
     "(\<Sum>p=0..<Suc n. (x ^ p) * y ^ (Suc n - p)) =
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    26
      y * (\<Sum>p=0..<Suc n. (x ^ p) * y ^ (n - p))"
29163
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
    27
by (simp add: setsum_right_distrib lemma_realpow_diff mult_ac
33549
39f2855ce41b tuned proofs;
wenzelm
parents: 32960
diff changeset
    28
         del: setsum_op_ivl_Suc)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    29
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
    30
lemma lemma_realpow_diff_sumr2:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
    31
  fixes y :: "'a::{comm_ring,monoid_mult}" shows
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
    32
     "x ^ (Suc n) - y ^ (Suc n) =
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    33
      (x - y) * (\<Sum>p=0..<Suc n. (x ^ p) * y ^ (n - p))"
30273
ecd6f0ca62ea declare power_Suc [simp]; remove redundant type-specific versions of power_Suc
huffman
parents: 30082
diff changeset
    34
apply (induct n, simp)
ecd6f0ca62ea declare power_Suc [simp]; remove redundant type-specific versions of power_Suc
huffman
parents: 30082
diff changeset
    35
apply (simp del: setsum_op_ivl_Suc)
15561
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15546
diff changeset
    36
apply (subst setsum_op_ivl_Suc)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    37
apply (subst lemma_realpow_diff_sumr)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    38
apply (simp add: right_distrib del: setsum_op_ivl_Suc)
34974
18b41bba42b5 new theory Algebras.thy for generic algebraic structures
haftmann
parents: 33667
diff changeset
    39
apply (subst mult_left_commute [of "x - y"])
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    40
apply (erule subst)
30273
ecd6f0ca62ea declare power_Suc [simp]; remove redundant type-specific versions of power_Suc
huffman
parents: 30082
diff changeset
    41
apply (simp add: algebra_simps)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    42
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    43
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
    44
lemma lemma_realpow_rev_sumr:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
    45
     "(\<Sum>p=0..<Suc n. (x ^ p) * (y ^ (n - p))) =
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    46
      (\<Sum>p=0..<Suc n. (x ^ (n - p)) * (y ^ p))"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    47
apply (rule setsum_reindex_cong [where f="\<lambda>i. n - i"])
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    48
apply (rule inj_onI, simp)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    49
apply auto
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    50
apply (rule_tac x="n - x" in image_eqI, simp, simp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    51
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    52
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    53
text{*Power series has a `circle` of convergence, i.e. if it sums for @{term
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    54
x}, then it sums absolutely for @{term z} with @{term "\<bar>z\<bar> < \<bar>x\<bar>"}.*}
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    55
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
    56
lemma powser_insidea:
44726
8478eab380e9 generalize some lemmas
huffman
parents: 44725
diff changeset
    57
  fixes x z :: "'a::real_normed_field"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    58
  assumes 1: "summable (\<lambda>n. f n * x ^ n)"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    59
  assumes 2: "norm z < norm x"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    60
  shows "summable (\<lambda>n. norm (f n * z ^ n))"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    61
proof -
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    62
  from 2 have x_neq_0: "x \<noteq> 0" by clarsimp
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    63
  from 1 have "(\<lambda>n. f n * x ^ n) ----> 0"
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    64
    by (rule summable_LIMSEQ_zero)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    65
  hence "convergent (\<lambda>n. f n * x ^ n)"
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    66
    by (rule convergentI)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    67
  hence "Cauchy (\<lambda>n. f n * x ^ n)"
44726
8478eab380e9 generalize some lemmas
huffman
parents: 44725
diff changeset
    68
    by (rule convergent_Cauchy)
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    69
  hence "Bseq (\<lambda>n. f n * x ^ n)"
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    70
    by (rule Cauchy_Bseq)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    71
  then obtain K where 3: "0 < K" and 4: "\<forall>n. norm (f n * x ^ n) \<le> K"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    72
    by (simp add: Bseq_def, safe)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    73
  have "\<exists>N. \<forall>n\<ge>N. norm (norm (f n * z ^ n)) \<le>
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    74
                   K * norm (z ^ n) * inverse (norm (x ^ n))"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    75
  proof (intro exI allI impI)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    76
    fix n::nat assume "0 \<le> n"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    77
    have "norm (norm (f n * z ^ n)) * norm (x ^ n) =
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    78
          norm (f n * x ^ n) * norm (z ^ n)"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    79
      by (simp add: norm_mult abs_mult)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    80
    also have "\<dots> \<le> K * norm (z ^ n)"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    81
      by (simp only: mult_right_mono 4 norm_ge_zero)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    82
    also have "\<dots> = K * norm (z ^ n) * (inverse (norm (x ^ n)) * norm (x ^ n))"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    83
      by (simp add: x_neq_0)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    84
    also have "\<dots> = K * norm (z ^ n) * inverse (norm (x ^ n)) * norm (x ^ n)"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    85
      by (simp only: mult_assoc)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    86
    finally show "norm (norm (f n * z ^ n)) \<le>
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    87
                  K * norm (z ^ n) * inverse (norm (x ^ n))"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    88
      by (simp add: mult_le_cancel_right x_neq_0)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    89
  qed
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    90
  moreover have "summable (\<lambda>n. K * norm (z ^ n) * inverse (norm (x ^ n)))"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    91
  proof -
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    92
    from 2 have "norm (norm (z * inverse x)) < 1"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    93
      using x_neq_0
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    94
      by (simp add: nonzero_norm_divide divide_inverse [symmetric])
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    95
    hence "summable (\<lambda>n. norm (z * inverse x) ^ n)"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    96
      by (rule summable_geometric)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    97
    hence "summable (\<lambda>n. K * norm (z * inverse x) ^ n)"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
    98
      by (rule summable_mult)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
    99
    thus "summable (\<lambda>n. K * norm (z ^ n) * inverse (norm (x ^ n)))"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   100
      using x_neq_0
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   101
      by (simp add: norm_mult nonzero_norm_inverse power_mult_distrib
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   102
                    power_inverse norm_power mult_assoc)
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   103
  qed
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   104
  ultimately show "summable (\<lambda>n. norm (f n * z ^ n))"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   105
    by (rule summable_comparison_test)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   106
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   107
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
   108
lemma powser_inside:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   109
  fixes f :: "nat \<Rightarrow> 'a::{real_normed_field,banach}" shows
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   110
     "[| summable (%n. f(n) * (x ^ n)); norm z < norm x |]
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   111
      ==> summable (%n. f(n) * (z ^ n))"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   112
by (rule powser_insidea [THEN summable_norm_cancel])
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   113
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   114
lemma sum_split_even_odd: fixes f :: "nat \<Rightarrow> real" shows
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   115
  "(\<Sum> i = 0 ..< 2 * n. if even i then f i else g i) =
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   116
   (\<Sum> i = 0 ..< n. f (2 * i)) + (\<Sum> i = 0 ..< n. g (2 * i + 1))"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   117
proof (induct n)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   118
  case (Suc n)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   119
  have "(\<Sum> i = 0 ..< 2 * Suc n. if even i then f i else g i) =
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   120
        (\<Sum> i = 0 ..< n. f (2 * i)) + (\<Sum> i = 0 ..< n. g (2 * i + 1)) + (f (2 * n) + g (2 * n + 1))"
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
   121
    using Suc.hyps unfolding One_nat_def by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   122
  also have "\<dots> = (\<Sum> i = 0 ..< Suc n. f (2 * i)) + (\<Sum> i = 0 ..< Suc n. g (2 * i + 1))" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   123
  finally show ?case .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   124
qed auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   125
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   126
lemma sums_if': fixes g :: "nat \<Rightarrow> real" assumes "g sums x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   127
  shows "(\<lambda> n. if even n then 0 else g ((n - 1) div 2)) sums x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   128
  unfolding sums_def
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   129
proof (rule LIMSEQ_I)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   130
  fix r :: real assume "0 < r"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   131
  from `g sums x`[unfolded sums_def, THEN LIMSEQ_D, OF this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   132
  obtain no where no_eq: "\<And> n. n \<ge> no \<Longrightarrow> (norm (setsum g { 0..<n } - x) < r)" by blast
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   133
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   134
  let ?SUM = "\<lambda> m. \<Sum> i = 0 ..< m. if even i then 0 else g ((i - 1) div 2)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   135
  { fix m assume "m \<ge> 2 * no" hence "m div 2 \<ge> no" by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   136
    have sum_eq: "?SUM (2 * (m div 2)) = setsum g { 0 ..< m div 2 }"
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   137
      using sum_split_even_odd by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   138
    hence "(norm (?SUM (2 * (m div 2)) - x) < r)" using no_eq unfolding sum_eq using `m div 2 \<ge> no` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   139
    moreover
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   140
    have "?SUM (2 * (m div 2)) = ?SUM m"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   141
    proof (cases "even m")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   142
      case True show ?thesis unfolding even_nat_div_two_times_two[OF True, unfolded numeral_2_eq_2[symmetric]] ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   143
    next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   144
      case False hence "even (Suc m)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   145
      from even_nat_div_two_times_two[OF this, unfolded numeral_2_eq_2[symmetric]] odd_nat_plus_one_div_two[OF False, unfolded numeral_2_eq_2[symmetric]]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   146
      have eq: "Suc (2 * (m div 2)) = m" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   147
      hence "even (2 * (m div 2))" using `odd m` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   148
      have "?SUM m = ?SUM (Suc (2 * (m div 2)))" unfolding eq ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   149
      also have "\<dots> = ?SUM (2 * (m div 2))" using `even (2 * (m div 2))` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   150
      finally show ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   151
    qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   152
    ultimately have "(norm (?SUM m - x) < r)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   153
  }
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   154
  thus "\<exists> no. \<forall> m \<ge> no. norm (?SUM m - x) < r" by blast
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   155
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   156
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   157
lemma sums_if: fixes g :: "nat \<Rightarrow> real" assumes "g sums x" and "f sums y"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   158
  shows "(\<lambda> n. if even n then f (n div 2) else g ((n - 1) div 2)) sums (x + y)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   159
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   160
  let ?s = "\<lambda> n. if even n then 0 else f ((n - 1) div 2)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   161
  { fix B T E have "(if B then (0 :: real) else E) + (if B then T else 0) = (if B then T else E)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   162
      by (cases B) auto } note if_sum = this
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   163
  have g_sums: "(\<lambda> n. if even n then 0 else g ((n - 1) div 2)) sums x" using sums_if'[OF `g sums x`] .
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   164
  {
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   165
    have "?s 0 = 0" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   166
    have Suc_m1: "\<And> n. Suc n - 1 = n" by auto
41550
efa734d9b221 eliminated global prems;
wenzelm
parents: 38642
diff changeset
   167
    have if_eq: "\<And>B T E. (if \<not> B then T else E) = (if B then E else T)" by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   168
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   169
    have "?s sums y" using sums_if'[OF `f sums y`] .
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   170
    from this[unfolded sums_def, THEN LIMSEQ_Suc]
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   171
    have "(\<lambda> n. if even n then f (n div 2) else 0) sums y"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   172
      unfolding sums_def setsum_shift_lb_Suc0_0_upt[where f="?s", OF `?s 0 = 0`, symmetric]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   173
                image_Suc_atLeastLessThan[symmetric] setsum_reindex[OF inj_Suc, unfolded comp_def]
31148
7ba7c1f8bc22 Cleaned up Parity a little
nipkow
parents: 31017
diff changeset
   174
                even_Suc Suc_m1 if_eq .
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   175
  } from sums_add[OF g_sums this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   176
  show ?thesis unfolding if_sum .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   177
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   178
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   179
subsection {* Alternating series test / Leibniz formula *}
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   180
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   181
lemma sums_alternating_upper_lower:
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   182
  fixes a :: "nat \<Rightarrow> real"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   183
  assumes mono: "\<And>n. a (Suc n) \<le> a n" and a_pos: "\<And>n. 0 \<le> a n" and "a ----> 0"
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   184
  shows "\<exists>l. ((\<forall>n. (\<Sum>i=0..<2*n. -1^i*a i) \<le> l) \<and> (\<lambda> n. \<Sum>i=0..<2*n. -1^i*a i) ----> l) \<and>
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   185
             ((\<forall>n. l \<le> (\<Sum>i=0..<2*n + 1. -1^i*a i)) \<and> (\<lambda> n. \<Sum>i=0..<2*n + 1. -1^i*a i) ----> l)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   186
  (is "\<exists>l. ((\<forall>n. ?f n \<le> l) \<and> _) \<and> ((\<forall>n. l \<le> ?g n) \<and> _)")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   187
proof -
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
   188
  have fg_diff: "\<And>n. ?f n - ?g n = - a (2 * n)" unfolding One_nat_def by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   189
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   190
  have "\<forall> n. ?f n \<le> ?f (Suc n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   191
  proof fix n show "?f n \<le> ?f (Suc n)" using mono[of "2*n"] by auto qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   192
  moreover
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   193
  have "\<forall> n. ?g (Suc n) \<le> ?g n"
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
   194
  proof fix n show "?g (Suc n) \<le> ?g n" using mono[of "Suc (2*n)"]
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
   195
    unfolding One_nat_def by auto qed
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   196
  moreover
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   197
  have "\<forall> n. ?f n \<le> ?g n"
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
   198
  proof fix n show "?f n \<le> ?g n" using fg_diff a_pos
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
   199
    unfolding One_nat_def by auto qed
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   200
  moreover
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   201
  have "(\<lambda> n. ?f n - ?g n) ----> 0" unfolding fg_diff
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   202
  proof (rule LIMSEQ_I)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   203
    fix r :: real assume "0 < r"
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   204
    with `a ----> 0`[THEN LIMSEQ_D]
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   205
    obtain N where "\<And> n. n \<ge> N \<Longrightarrow> norm (a n - 0) < r" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   206
    hence "\<forall> n \<ge> N. norm (- a (2 * n) - 0) < r" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   207
    thus "\<exists> N. \<forall> n \<ge> N. norm (- a (2 * n) - 0) < r" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   208
  qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   209
  ultimately
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   210
  show ?thesis by (rule lemma_nest_unique)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   211
qed
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   212
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   213
lemma summable_Leibniz': fixes a :: "nat \<Rightarrow> real"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   214
  assumes a_zero: "a ----> 0" and a_pos: "\<And> n. 0 \<le> a n"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   215
  and a_monotone: "\<And> n. a (Suc n) \<le> a n"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   216
  shows summable: "summable (\<lambda> n. (-1)^n * a n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   217
  and "\<And>n. (\<Sum>i=0..<2*n. (-1)^i*a i) \<le> (\<Sum>i. (-1)^i*a i)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   218
  and "(\<lambda>n. \<Sum>i=0..<2*n. (-1)^i*a i) ----> (\<Sum>i. (-1)^i*a i)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   219
  and "\<And>n. (\<Sum>i. (-1)^i*a i) \<le> (\<Sum>i=0..<2*n+1. (-1)^i*a i)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   220
  and "(\<lambda>n. \<Sum>i=0..<2*n+1. (-1)^i*a i) ----> (\<Sum>i. (-1)^i*a i)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   221
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   222
  let "?S n" = "(-1)^n * a n"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   223
  let "?P n" = "\<Sum>i=0..<n. ?S i"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   224
  let "?f n" = "?P (2 * n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   225
  let "?g n" = "?P (2 * n + 1)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   226
  obtain l :: real where below_l: "\<forall> n. ?f n \<le> l" and "?f ----> l" and above_l: "\<forall> n. l \<le> ?g n" and "?g ----> l"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   227
    using sums_alternating_upper_lower[OF a_monotone a_pos a_zero] by blast
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   228
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   229
  let ?Sa = "\<lambda> m. \<Sum> n = 0..<m. ?S n"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   230
  have "?Sa ----> l"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   231
  proof (rule LIMSEQ_I)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   232
    fix r :: real assume "0 < r"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   233
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   234
    with `?f ----> l`[THEN LIMSEQ_D]
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   235
    obtain f_no where f: "\<And> n. n \<ge> f_no \<Longrightarrow> norm (?f n - l) < r" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   236
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   237
    from `0 < r` `?g ----> l`[THEN LIMSEQ_D]
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   238
    obtain g_no where g: "\<And> n. n \<ge> g_no \<Longrightarrow> norm (?g n - l) < r" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   239
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   240
    { fix n :: nat
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   241
      assume "n \<ge> (max (2 * f_no) (2 * g_no))" hence "n \<ge> 2 * f_no" and "n \<ge> 2 * g_no" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   242
      have "norm (?Sa n - l) < r"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   243
      proof (cases "even n")
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   244
        case True from even_nat_div_two_times_two[OF this]
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   245
        have n_eq: "2 * (n div 2) = n" unfolding numeral_2_eq_2[symmetric] by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   246
        with `n \<ge> 2 * f_no` have "n div 2 \<ge> f_no" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   247
        from f[OF this]
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   248
        show ?thesis unfolding n_eq atLeastLessThanSuc_atLeastAtMost .
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   249
      next
35213
b9866ad4e3be fix looping call to simplifier
huffman
parents: 35038
diff changeset
   250
        case False hence "even (n - 1)" by simp
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   251
        from even_nat_div_two_times_two[OF this]
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   252
        have n_eq: "2 * ((n - 1) div 2) = n - 1" unfolding numeral_2_eq_2[symmetric] by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   253
        hence range_eq: "n - 1 + 1 = n" using odd_pos[OF False] by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   254
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   255
        from n_eq `n \<ge> 2 * g_no` have "(n - 1) div 2 \<ge> g_no" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   256
        from g[OF this]
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   257
        show ?thesis unfolding n_eq atLeastLessThanSuc_atLeastAtMost range_eq .
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   258
      qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   259
    }
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   260
    thus "\<exists> no. \<forall> n \<ge> no. norm (?Sa n - l) < r" by blast
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   261
  qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   262
  hence sums_l: "(\<lambda>i. (-1)^i * a i) sums l" unfolding sums_def atLeastLessThanSuc_atLeastAtMost[symmetric] .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   263
  thus "summable ?S" using summable_def by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   264
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   265
  have "l = suminf ?S" using sums_unique[OF sums_l] .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   266
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   267
  { fix n show "suminf ?S \<le> ?g n" unfolding sums_unique[OF sums_l, symmetric] using above_l by auto }
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   268
  { fix n show "?f n \<le> suminf ?S" unfolding sums_unique[OF sums_l, symmetric] using below_l by auto }
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   269
  show "?g ----> suminf ?S" using `?g ----> l` `l = suminf ?S` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   270
  show "?f ----> suminf ?S" using `?f ----> l` `l = suminf ?S` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   271
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   272
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   273
theorem summable_Leibniz: fixes a :: "nat \<Rightarrow> real"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   274
  assumes a_zero: "a ----> 0" and "monoseq a"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   275
  shows "summable (\<lambda> n. (-1)^n * a n)" (is "?summable")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   276
  and "0 < a 0 \<longrightarrow> (\<forall>n. (\<Sum>i. -1^i*a i) \<in> { \<Sum>i=0..<2*n. -1^i * a i .. \<Sum>i=0..<2*n+1. -1^i * a i})" (is "?pos")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   277
  and "a 0 < 0 \<longrightarrow> (\<forall>n. (\<Sum>i. -1^i*a i) \<in> { \<Sum>i=0..<2*n+1. -1^i * a i .. \<Sum>i=0..<2*n. -1^i * a i})" (is "?neg")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   278
  and "(\<lambda>n. \<Sum>i=0..<2*n. -1^i*a i) ----> (\<Sum>i. -1^i*a i)" (is "?f")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   279
  and "(\<lambda>n. \<Sum>i=0..<2*n+1. -1^i*a i) ----> (\<Sum>i. -1^i*a i)" (is "?g")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   280
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   281
  have "?summable \<and> ?pos \<and> ?neg \<and> ?f \<and> ?g"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   282
  proof (cases "(\<forall> n. 0 \<le> a n) \<and> (\<forall>m. \<forall>n\<ge>m. a n \<le> a m)")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   283
    case True
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   284
    hence ord: "\<And>n m. m \<le> n \<Longrightarrow> a n \<le> a m" and ge0: "\<And> n. 0 \<le> a n" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   285
    { fix n have "a (Suc n) \<le> a n" using ord[where n="Suc n" and m=n] by auto }
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   286
    note leibniz = summable_Leibniz'[OF `a ----> 0` ge0] and mono = this
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   287
    from leibniz[OF mono]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   288
    show ?thesis using `0 \<le> a 0` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   289
  next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   290
    let ?a = "\<lambda> n. - a n"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   291
    case False
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   292
    with monoseq_le[OF `monoseq a` `a ----> 0`]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   293
    have "(\<forall> n. a n \<le> 0) \<and> (\<forall>m. \<forall>n\<ge>m. a m \<le> a n)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   294
    hence ord: "\<And>n m. m \<le> n \<Longrightarrow> ?a n \<le> ?a m" and ge0: "\<And> n. 0 \<le> ?a n" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   295
    { fix n have "?a (Suc n) \<le> ?a n" using ord[where n="Suc n" and m=n] by auto }
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   296
    note monotone = this
44568
e6f291cb5810 discontinue many legacy theorems about LIM and LIMSEQ, in favor of tendsto theorems
huffman
parents: 44319
diff changeset
   297
    note leibniz = summable_Leibniz'[OF _ ge0, of "\<lambda>x. x", OF tendsto_minus[OF `a ----> 0`, unfolded minus_zero] monotone]
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   298
    have "summable (\<lambda> n. (-1)^n * ?a n)" using leibniz(1) by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   299
    then obtain l where "(\<lambda> n. (-1)^n * ?a n) sums l" unfolding summable_def by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   300
    from this[THEN sums_minus]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   301
    have "(\<lambda> n. (-1)^n * a n) sums -l" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   302
    hence ?summable unfolding summable_def by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   303
    moreover
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   304
    have "\<And> a b :: real. \<bar> - a - - b \<bar> = \<bar>a - b\<bar>" unfolding minus_diff_minus by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   305
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   306
    from suminf_minus[OF leibniz(1), unfolded mult_minus_right minus_minus]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   307
    have move_minus: "(\<Sum>n. - (-1 ^ n * a n)) = - (\<Sum>n. -1 ^ n * a n)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   308
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   309
    have ?pos using `0 \<le> ?a 0` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   310
    moreover have ?neg using leibniz(2,4) unfolding mult_minus_right setsum_negf move_minus neg_le_iff_le by auto
44568
e6f291cb5810 discontinue many legacy theorems about LIM and LIMSEQ, in favor of tendsto theorems
huffman
parents: 44319
diff changeset
   311
    moreover have ?f and ?g using leibniz(3,5)[unfolded mult_minus_right setsum_negf move_minus, THEN tendsto_minus_cancel] by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   312
    ultimately show ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   313
  qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   314
  from this[THEN conjunct1] this[THEN conjunct2, THEN conjunct1] this[THEN conjunct2, THEN conjunct2, THEN conjunct1] this[THEN conjunct2, THEN conjunct2, THEN conjunct2, THEN conjunct1]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   315
       this[THEN conjunct2, THEN conjunct2, THEN conjunct2, THEN conjunct2]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   316
  show ?summable and ?pos and ?neg and ?f and ?g .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   317
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   318
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
   319
subsection {* Term-by-Term Differentiability of Power Series *}
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
   320
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
   321
definition
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   322
  diffs :: "(nat => 'a::ring_1) => nat => 'a" where
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   323
  "diffs c = (%n. of_nat (Suc n) * c(Suc n))"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   324
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   325
text{*Lemma about distributing negation over it*}
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   326
lemma diffs_minus: "diffs (%n. - c n) = (%n. - diffs c n)"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   327
by (simp add: diffs_def)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   328
29163
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   329
lemma sums_Suc_imp:
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   330
  assumes f: "f 0 = 0"
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   331
  shows "(\<lambda>n. f (Suc n)) sums s \<Longrightarrow> (\<lambda>n. f n) sums s"
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   332
unfolding sums_def
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   333
apply (rule LIMSEQ_imp_Suc)
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   334
apply (subst setsum_shift_lb_Suc0_0_upt [where f=f, OF f, symmetric])
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   335
apply (simp only: setsum_shift_bounds_Suc_ivl)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   336
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   337
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
   338
lemma diffs_equiv:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   339
  fixes x :: "'a::{real_normed_vector, ring_1}"
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   340
  shows "summable (%n. (diffs c)(n) * (x ^ n)) ==>
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   341
      (%n. of_nat n * c(n) * (x ^ (n - Suc 0))) sums
15546
5188ce7316b7 suminf -> \<Sum>
nipkow
parents: 15544
diff changeset
   342
         (\<Sum>n. (diffs c)(n) * (x ^ n))"
29163
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   343
unfolding diffs_def
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   344
apply (drule summable_sums)
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   345
apply (rule sums_Suc_imp, simp_all)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   346
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   347
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   348
lemma lemma_termdiff1:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   349
  fixes z :: "'a :: {monoid_mult,comm_ring}" shows
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   350
  "(\<Sum>p=0..<m. (((z + h) ^ (m - p)) * (z ^ p)) - (z ^ m)) =
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   351
   (\<Sum>p=0..<m. (z ^ p) * (((z + h) ^ (m - p)) - (z ^ (m - p))))"
41550
efa734d9b221 eliminated global prems;
wenzelm
parents: 38642
diff changeset
   352
by(auto simp add: algebra_simps power_add [symmetric])
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   353
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   354
lemma sumr_diff_mult_const2:
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   355
  "setsum f {0..<n} - of_nat n * (r::'a::ring_1) = (\<Sum>i = 0..<n. f i - r)"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   356
by (simp add: setsum_subtractf)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   357
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
   358
lemma lemma_termdiff2:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   359
  fixes h :: "'a :: {field}"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   360
  assumes h: "h \<noteq> 0" shows
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   361
  "((z + h) ^ n - z ^ n) / h - of_nat n * z ^ (n - Suc 0) =
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   362
   h * (\<Sum>p=0..< n - Suc 0. \<Sum>q=0..< n - Suc 0 - p.
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   363
        (z + h) ^ q * z ^ (n - 2 - q))" (is "?lhs = ?rhs")
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   364
apply (subgoal_tac "h * ?lhs = h * ?rhs", simp add: h)
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   365
apply (simp add: right_diff_distrib diff_divide_distrib h)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   366
apply (simp add: mult_assoc [symmetric])
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   367
apply (cases "n", simp)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   368
apply (simp add: lemma_realpow_diff_sumr2 h
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   369
                 right_diff_distrib [symmetric] mult_assoc
30273
ecd6f0ca62ea declare power_Suc [simp]; remove redundant type-specific versions of power_Suc
huffman
parents: 30082
diff changeset
   370
            del: power_Suc setsum_op_ivl_Suc of_nat_Suc)
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   371
apply (subst lemma_realpow_rev_sumr)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   372
apply (subst sumr_diff_mult_const2)
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   373
apply simp
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   374
apply (simp only: lemma_termdiff1 setsum_right_distrib)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   375
apply (rule setsum_cong [OF refl])
15539
333a88244569 comprehensive cleanup, replacing sumr by setsum
nipkow
parents: 15536
diff changeset
   376
apply (simp add: diff_minus [symmetric] less_iff_Suc_add)
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   377
apply (clarify)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   378
apply (simp add: setsum_right_distrib lemma_realpow_diff_sumr2 mult_ac
30273
ecd6f0ca62ea declare power_Suc [simp]; remove redundant type-specific versions of power_Suc
huffman
parents: 30082
diff changeset
   379
            del: setsum_op_ivl_Suc power_Suc)
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   380
apply (subst mult_assoc [symmetric], subst power_add [symmetric])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   381
apply (simp add: mult_ac)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   382
done
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   383
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   384
lemma real_setsum_nat_ivl_bounded2:
35028
108662d50512 more consistent naming of type classes involving orderings (and lattices) -- c.f. NEWS
haftmann
parents: 34974
diff changeset
   385
  fixes K :: "'a::linordered_semidom"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   386
  assumes f: "\<And>p::nat. p < n \<Longrightarrow> f p \<le> K"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   387
  assumes K: "0 \<le> K"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   388
  shows "setsum f {0..<n-k} \<le> of_nat n * K"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   389
apply (rule order_trans [OF setsum_mono])
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   390
apply (rule f, simp)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   391
apply (simp add: mult_right_mono K)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   392
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   393
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
   394
lemma lemma_termdiff3:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   395
  fixes h z :: "'a::{real_normed_field}"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   396
  assumes 1: "h \<noteq> 0"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   397
  assumes 2: "norm z \<le> K"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   398
  assumes 3: "norm (z + h) \<le> K"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   399
  shows "norm (((z + h) ^ n - z ^ n) / h - of_nat n * z ^ (n - Suc 0))
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   400
          \<le> of_nat n * of_nat (n - Suc 0) * K ^ (n - 2) * norm h"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   401
proof -
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   402
  have "norm (((z + h) ^ n - z ^ n) / h - of_nat n * z ^ (n - Suc 0)) =
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   403
        norm (\<Sum>p = 0..<n - Suc 0. \<Sum>q = 0..<n - Suc 0 - p.
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   404
          (z + h) ^ q * z ^ (n - 2 - q)) * norm h"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   405
    apply (subst lemma_termdiff2 [OF 1])
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   406
    apply (subst norm_mult)
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   407
    apply (rule mult_commute)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   408
    done
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   409
  also have "\<dots> \<le> of_nat n * (of_nat (n - Suc 0) * K ^ (n - 2)) * norm h"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   410
  proof (rule mult_right_mono [OF _ norm_ge_zero])
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   411
    from norm_ge_zero 2 have K: "0 \<le> K" by (rule order_trans)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   412
    have le_Kn: "\<And>i j n. i + j = n \<Longrightarrow> norm ((z + h) ^ i * z ^ j) \<le> K ^ n"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   413
      apply (erule subst)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   414
      apply (simp only: norm_mult norm_power power_add)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   415
      apply (intro mult_mono power_mono 2 3 norm_ge_zero zero_le_power K)
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   416
      done
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   417
    show "norm (\<Sum>p = 0..<n - Suc 0. \<Sum>q = 0..<n - Suc 0 - p.
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   418
              (z + h) ^ q * z ^ (n - 2 - q))
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   419
          \<le> of_nat n * (of_nat (n - Suc 0) * K ^ (n - 2))"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   420
      apply (intro
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   421
         order_trans [OF norm_setsum]
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   422
         real_setsum_nat_ivl_bounded2
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   423
         mult_nonneg_nonneg
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   424
         zero_le_imp_of_nat
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   425
         zero_le_power K)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   426
      apply (rule le_Kn, simp)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   427
      done
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   428
  qed
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   429
  also have "\<dots> = of_nat n * of_nat (n - Suc 0) * K ^ (n - 2) * norm h"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   430
    by (simp only: mult_assoc)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   431
  finally show ?thesis .
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   432
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   433
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   434
lemma lemma_termdiff4:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   435
  fixes f :: "'a::{real_normed_field} \<Rightarrow>
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   436
              'b::real_normed_vector"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   437
  assumes k: "0 < (k::real)"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   438
  assumes le: "\<And>h. \<lbrakk>h \<noteq> 0; norm h < k\<rbrakk> \<Longrightarrow> norm (f h) \<le> K * norm h"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   439
  shows "f -- 0 --> 0"
31338
d41a8ba25b67 generalize constants from Lim.thy to class metric_space
huffman
parents: 31271
diff changeset
   440
unfolding LIM_eq diff_0_right
29163
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   441
proof (safe)
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   442
  let ?h = "of_real (k / 2)::'a"
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   443
  have "?h \<noteq> 0" and "norm ?h < k" using k by simp_all
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   444
  hence "norm (f ?h) \<le> K * norm ?h" by (rule le)
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   445
  hence "0 \<le> K * norm ?h" by (rule order_trans [OF norm_ge_zero])
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   446
  hence zero_le_K: "0 \<le> K" using k by (simp add: zero_le_mult_iff)
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   447
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   448
  fix r::real assume r: "0 < r"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   449
  show "\<exists>s. 0 < s \<and> (\<forall>x. x \<noteq> 0 \<and> norm x < s \<longrightarrow> norm (f x) < r)"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   450
  proof (cases)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   451
    assume "K = 0"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   452
    with k r le have "0 < k \<and> (\<forall>x. x \<noteq> 0 \<and> norm x < k \<longrightarrow> norm (f x) < r)"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   453
      by simp
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   454
    thus "\<exists>s. 0 < s \<and> (\<forall>x. x \<noteq> 0 \<and> norm x < s \<longrightarrow> norm (f x) < r)" ..
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   455
  next
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   456
    assume K_neq_zero: "K \<noteq> 0"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   457
    with zero_le_K have K: "0 < K" by simp
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   458
    show "\<exists>s. 0 < s \<and> (\<forall>x. x \<noteq> 0 \<and> norm x < s \<longrightarrow> norm (f x) < r)"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   459
    proof (rule exI, safe)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   460
      from k r K show "0 < min k (r * inverse K / 2)"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   461
        by (simp add: mult_pos_pos positive_imp_inverse_positive)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   462
    next
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   463
      fix x::'a
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   464
      assume x1: "x \<noteq> 0" and x2: "norm x < min k (r * inverse K / 2)"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   465
      from x2 have x3: "norm x < k" and x4: "norm x < r * inverse K / 2"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   466
        by simp_all
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   467
      from x1 x3 le have "norm (f x) \<le> K * norm x" by simp
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   468
      also from x4 K have "K * norm x < K * (r * inverse K / 2)"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   469
        by (rule mult_strict_left_mono)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   470
      also have "\<dots> = r / 2"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   471
        using K_neq_zero by simp
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   472
      also have "r / 2 < r"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   473
        using r by simp
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   474
      finally show "norm (f x) < r" .
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   475
    qed
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   476
  qed
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   477
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   478
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
   479
lemma lemma_termdiff5:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   480
  fixes g :: "'a::{real_normed_field} \<Rightarrow>
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   481
              nat \<Rightarrow> 'b::banach"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   482
  assumes k: "0 < (k::real)"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   483
  assumes f: "summable f"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   484
  assumes le: "\<And>h n. \<lbrakk>h \<noteq> 0; norm h < k\<rbrakk> \<Longrightarrow> norm (g h n) \<le> f n * norm h"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   485
  shows "(\<lambda>h. suminf (g h)) -- 0 --> 0"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   486
proof (rule lemma_termdiff4 [OF k])
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   487
  fix h::'a assume "h \<noteq> 0" and "norm h < k"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   488
  hence A: "\<forall>n. norm (g h n) \<le> f n * norm h"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   489
    by (simp add: le)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   490
  hence "\<exists>N. \<forall>n\<ge>N. norm (norm (g h n)) \<le> f n * norm h"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   491
    by simp
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   492
  moreover from f have B: "summable (\<lambda>n. f n * norm h)"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   493
    by (rule summable_mult2)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   494
  ultimately have C: "summable (\<lambda>n. norm (g h n))"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   495
    by (rule summable_comparison_test)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   496
  hence "norm (suminf (g h)) \<le> (\<Sum>n. norm (g h n))"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   497
    by (rule summable_norm)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   498
  also from A C B have "(\<Sum>n. norm (g h n)) \<le> (\<Sum>n. f n * norm h)"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   499
    by (rule summable_le)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   500
  also from f have "(\<Sum>n. f n * norm h) = suminf f * norm h"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   501
    by (rule suminf_mult2 [symmetric])
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   502
  finally show "norm (suminf (g h)) \<le> suminf f * norm h" .
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   503
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   504
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   505
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   506
text{* FIXME: Long proofs*}
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   507
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   508
lemma termdiffs_aux:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   509
  fixes x :: "'a::{real_normed_field,banach}"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   510
  assumes 1: "summable (\<lambda>n. diffs (diffs c) n * K ^ n)"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   511
  assumes 2: "norm x < norm K"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   512
  shows "(\<lambda>h. \<Sum>n. c n * (((x + h) ^ n - x ^ n) / h
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   513
             - of_nat n * x ^ (n - Suc 0))) -- 0 --> 0"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   514
proof -
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   515
  from dense [OF 2]
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   516
  obtain r where r1: "norm x < r" and r2: "r < norm K" by fast
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   517
  from norm_ge_zero r1 have r: "0 < r"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   518
    by (rule order_le_less_trans)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   519
  hence r_neq_0: "r \<noteq> 0" by simp
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   520
  show ?thesis
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   521
  proof (rule lemma_termdiff5)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   522
    show "0 < r - norm x" using r1 by simp
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   523
  next
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   524
    from r r2 have "norm (of_real r::'a) < norm K"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   525
      by simp
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   526
    with 1 have "summable (\<lambda>n. norm (diffs (diffs c) n * (of_real r ^ n)))"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   527
      by (rule powser_insidea)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   528
    hence "summable (\<lambda>n. diffs (diffs (\<lambda>n. norm (c n))) n * r ^ n)"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   529
      using r
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   530
      by (simp add: diffs_def norm_mult norm_power del: of_nat_Suc)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   531
    hence "summable (\<lambda>n. of_nat n * diffs (\<lambda>n. norm (c n)) n * r ^ (n - Suc 0))"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   532
      by (rule diffs_equiv [THEN sums_summable])
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   533
    also have "(\<lambda>n. of_nat n * diffs (\<lambda>n. norm (c n)) n * r ^ (n - Suc 0))
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   534
      = (\<lambda>n. diffs (%m. of_nat (m - Suc 0) * norm (c m) * inverse r) n * (r ^ n))"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   535
      apply (rule ext)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   536
      apply (simp add: diffs_def)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   537
      apply (case_tac n, simp_all add: r_neq_0)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   538
      done
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   539
    finally have "summable
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   540
      (\<lambda>n. of_nat n * (of_nat (n - Suc 0) * norm (c n) * inverse r) * r ^ (n - Suc 0))"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   541
      by (rule diffs_equiv [THEN sums_summable])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   542
    also have
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   543
      "(\<lambda>n. of_nat n * (of_nat (n - Suc 0) * norm (c n) * inverse r) *
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   544
           r ^ (n - Suc 0)) =
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   545
       (\<lambda>n. norm (c n) * of_nat n * of_nat (n - Suc 0) * r ^ (n - 2))"
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   546
      apply (rule ext)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   547
      apply (case_tac "n", simp)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   548
      apply (case_tac "nat", simp)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   549
      apply (simp add: r_neq_0)
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   550
      done
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   551
    finally show
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   552
      "summable (\<lambda>n. norm (c n) * of_nat n * of_nat (n - Suc 0) * r ^ (n - 2))" .
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   553
  next
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   554
    fix h::'a and n::nat
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   555
    assume h: "h \<noteq> 0"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   556
    assume "norm h < r - norm x"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   557
    hence "norm x + norm h < r" by simp
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   558
    with norm_triangle_ineq have xh: "norm (x + h) < r"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   559
      by (rule order_le_less_trans)
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   560
    show "norm (c n * (((x + h) ^ n - x ^ n) / h - of_nat n * x ^ (n - Suc 0)))
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   561
          \<le> norm (c n) * of_nat n * of_nat (n - Suc 0) * r ^ (n - 2) * norm h"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   562
      apply (simp only: norm_mult mult_assoc)
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   563
      apply (rule mult_left_mono [OF _ norm_ge_zero])
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   564
      apply (simp (no_asm) add: mult_assoc [symmetric])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   565
      apply (rule lemma_termdiff3)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   566
      apply (rule h)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   567
      apply (rule r1 [THEN order_less_imp_le])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   568
      apply (rule xh [THEN order_less_imp_le])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   569
      done
20849
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   570
  qed
389cd9c8cfe1 rewrite proofs of powser_insidea and termdiffs_aux
huffman
parents: 20692
diff changeset
   571
qed
20217
25b068a99d2b linear arithmetic splits certain operators (e.g. min, max, abs)
webertj
parents: 19765
diff changeset
   572
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   573
lemma termdiffs:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   574
  fixes K x :: "'a::{real_normed_field,banach}"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   575
  assumes 1: "summable (\<lambda>n. c n * K ^ n)"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   576
  assumes 2: "summable (\<lambda>n. (diffs c) n * K ^ n)"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   577
  assumes 3: "summable (\<lambda>n. (diffs (diffs c)) n * K ^ n)"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   578
  assumes 4: "norm x < norm K"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   579
  shows "DERIV (\<lambda>x. \<Sum>n. c n * x ^ n) x :> (\<Sum>n. (diffs c) n * x ^ n)"
29163
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   580
unfolding deriv_def
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   581
proof (rule LIM_zero_cancel)
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   582
  show "(\<lambda>h. (suminf (\<lambda>n. c n * (x + h) ^ n) - suminf (\<lambda>n. c n * x ^ n)) / h
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   583
            - suminf (\<lambda>n. diffs c n * x ^ n)) -- 0 --> 0"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   584
  proof (rule LIM_equal2)
29163
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   585
    show "0 < norm K - norm x" using 4 by (simp add: less_diff_eq)
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   586
  next
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   587
    fix h :: 'a
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   588
    assume "h \<noteq> 0"
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   589
    assume "norm (h - 0) < norm K - norm x"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   590
    hence "norm x + norm h < norm K" by simp
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   591
    hence 5: "norm (x + h) < norm K"
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   592
      by (rule norm_triangle_ineq [THEN order_le_less_trans])
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   593
    have A: "summable (\<lambda>n. c n * x ^ n)"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   594
      by (rule powser_inside [OF 1 4])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   595
    have B: "summable (\<lambda>n. c n * (x + h) ^ n)"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   596
      by (rule powser_inside [OF 1 5])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   597
    have C: "summable (\<lambda>n. diffs c n * x ^ n)"
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   598
      by (rule powser_inside [OF 2 4])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   599
    show "((\<Sum>n. c n * (x + h) ^ n) - (\<Sum>n. c n * x ^ n)) / h
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   600
             - (\<Sum>n. diffs c n * x ^ n) =
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   601
          (\<Sum>n. c n * (((x + h) ^ n - x ^ n) / h - of_nat n * x ^ (n - Suc 0)))"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   602
      apply (subst sums_unique [OF diffs_equiv [OF C]])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   603
      apply (subst suminf_diff [OF B A])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   604
      apply (subst suminf_divide [symmetric])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   605
      apply (rule summable_diff [OF B A])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   606
      apply (subst suminf_diff)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   607
      apply (rule summable_divide)
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   608
      apply (rule summable_diff [OF B A])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   609
      apply (rule sums_summable [OF diffs_equiv [OF C]])
29163
e72d07a878f8 clean up some proofs; remove unused lemmas
huffman
parents: 28952
diff changeset
   610
      apply (rule arg_cong [where f="suminf"], rule ext)
29667
53103fc8ffa3 Replaced group_ and ring_simps by algebra_simps;
nipkow
parents: 29171
diff changeset
   611
      apply (simp add: algebra_simps)
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   612
      done
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   613
  next
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   614
    show "(\<lambda>h. \<Sum>n. c n * (((x + h) ^ n - x ^ n) / h -
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   615
               of_nat n * x ^ (n - Suc 0))) -- 0 --> 0"
20860
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   616
        by (rule termdiffs_aux [OF 3 4])
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   617
  qed
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   618
qed
1a8efd618190 reorganize and speed up termdiffs proofs
huffman
parents: 20849
diff changeset
   619
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   620
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   621
subsection {* Derivability of power series *}
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   622
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   623
lemma DERIV_series': fixes f :: "real \<Rightarrow> nat \<Rightarrow> real"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   624
  assumes DERIV_f: "\<And> n. DERIV (\<lambda> x. f x n) x0 :> (f' x0 n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   625
  and allf_summable: "\<And> x. x \<in> {a <..< b} \<Longrightarrow> summable (f x)" and x0_in_I: "x0 \<in> {a <..< b}"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   626
  and "summable (f' x0)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   627
  and "summable L" and L_def: "\<And> n x y. \<lbrakk> x \<in> { a <..< b} ; y \<in> { a <..< b} \<rbrakk> \<Longrightarrow> \<bar> f x n - f y n \<bar> \<le> L n * \<bar> x - y \<bar>"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   628
  shows "DERIV (\<lambda> x. suminf (f x)) x0 :> (suminf (f' x0))"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   629
  unfolding deriv_def
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   630
proof (rule LIM_I)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   631
  fix r :: real assume "0 < r" hence "0 < r/3" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   632
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   633
  obtain N_L where N_L: "\<And> n. N_L \<le> n \<Longrightarrow> \<bar> \<Sum> i. L (i + n) \<bar> < r/3"
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   634
    using suminf_exist_split[OF `0 < r/3` `summable L`] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   635
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   636
  obtain N_f' where N_f': "\<And> n. N_f' \<le> n \<Longrightarrow> \<bar> \<Sum> i. f' x0 (i + n) \<bar> < r/3"
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   637
    using suminf_exist_split[OF `0 < r/3` `summable (f' x0)`] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   638
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   639
  let ?N = "Suc (max N_L N_f')"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   640
  have "\<bar> \<Sum> i. f' x0 (i + ?N) \<bar> < r/3" (is "?f'_part < r/3") and
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   641
    L_estimate: "\<bar> \<Sum> i. L (i + ?N) \<bar> < r/3" using N_L[of "?N"] and N_f' [of "?N"] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   642
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   643
  let "?diff i x" = "(f (x0 + x) i - f x0 i) / x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   644
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   645
  let ?r = "r / (3 * real ?N)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   646
  have "0 < 3 * real ?N" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   647
  from divide_pos_pos[OF `0 < r` this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   648
  have "0 < ?r" .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   649
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   650
  let "?s n" = "SOME s. 0 < s \<and> (\<forall> x. x \<noteq> 0 \<and> \<bar> x \<bar> < s \<longrightarrow> \<bar> ?diff n x - f' x0 n \<bar> < ?r)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   651
  def S' \<equiv> "Min (?s ` { 0 ..< ?N })"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   652
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   653
  have "0 < S'" unfolding S'_def
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   654
  proof (rule iffD2[OF Min_gr_iff])
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   655
    show "\<forall> x \<in> (?s ` { 0 ..< ?N }). 0 < x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   656
    proof (rule ballI)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   657
      fix x assume "x \<in> ?s ` {0..<?N}"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   658
      then obtain n where "x = ?s n" and "n \<in> {0..<?N}" using image_iff[THEN iffD1] by blast
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   659
      from DERIV_D[OF DERIV_f[where n=n], THEN LIM_D, OF `0 < ?r`, unfolded real_norm_def]
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   660
      obtain s where s_bound: "0 < s \<and> (\<forall>x. x \<noteq> 0 \<and> \<bar>x\<bar> < s \<longrightarrow> \<bar>?diff n x - f' x0 n\<bar> < ?r)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   661
      have "0 < ?s n" by (rule someI2[where a=s], auto simp add: s_bound)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   662
      thus "0 < x" unfolding `x = ?s n` .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   663
    qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   664
  qed auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   665
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   666
  def S \<equiv> "min (min (x0 - a) (b - x0)) S'"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   667
  hence "0 < S" and S_a: "S \<le> x0 - a" and S_b: "S \<le> b - x0" and "S \<le> S'" using x0_in_I and `0 < S'`
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   668
    by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   669
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   670
  { fix x assume "x \<noteq> 0" and "\<bar> x \<bar> < S"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   671
    hence x_in_I: "x0 + x \<in> { a <..< b }" using S_a S_b by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   672
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   673
    note diff_smbl = summable_diff[OF allf_summable[OF x_in_I] allf_summable[OF x0_in_I]]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   674
    note div_smbl = summable_divide[OF diff_smbl]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   675
    note all_smbl = summable_diff[OF div_smbl `summable (f' x0)`]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   676
    note ign = summable_ignore_initial_segment[where k="?N"]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   677
    note diff_shft_smbl = summable_diff[OF ign[OF allf_summable[OF x_in_I]] ign[OF allf_summable[OF x0_in_I]]]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   678
    note div_shft_smbl = summable_divide[OF diff_shft_smbl]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   679
    note all_shft_smbl = summable_diff[OF div_smbl ign[OF `summable (f' x0)`]]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   680
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   681
    { fix n
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   682
      have "\<bar> ?diff (n + ?N) x \<bar> \<le> L (n + ?N) * \<bar> (x0 + x) - x0 \<bar> / \<bar> x \<bar>"
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   683
        using divide_right_mono[OF L_def[OF x_in_I x0_in_I] abs_ge_zero] unfolding abs_divide .
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   684
      hence "\<bar> ( \<bar> ?diff (n + ?N) x \<bar>) \<bar> \<le> L (n + ?N)" using `x \<noteq> 0` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   685
    } note L_ge = summable_le2[OF allI[OF this] ign[OF `summable L`]]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   686
    from order_trans[OF summable_rabs[OF conjunct1[OF L_ge]] L_ge[THEN conjunct2]]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   687
    have "\<bar> \<Sum> i. ?diff (i + ?N) x \<bar> \<le> (\<Sum> i. L (i + ?N))" .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   688
    hence "\<bar> \<Sum> i. ?diff (i + ?N) x \<bar> \<le> r / 3" (is "?L_part \<le> r/3") using L_estimate by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   689
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   690
    have "\<bar>\<Sum>n \<in> { 0 ..< ?N}. ?diff n x - f' x0 n \<bar> \<le> (\<Sum>n \<in> { 0 ..< ?N}. \<bar>?diff n x - f' x0 n \<bar>)" ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   691
    also have "\<dots> < (\<Sum>n \<in> { 0 ..< ?N}. ?r)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   692
    proof (rule setsum_strict_mono)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   693
      fix n assume "n \<in> { 0 ..< ?N}"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   694
      have "\<bar> x \<bar> < S" using `\<bar> x \<bar> < S` .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   695
      also have "S \<le> S'" using `S \<le> S'` .
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   696
      also have "S' \<le> ?s n" unfolding S'_def
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   697
      proof (rule Min_le_iff[THEN iffD2])
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   698
        have "?s n \<in> (?s ` {0..<?N}) \<and> ?s n \<le> ?s n" using `n \<in> { 0 ..< ?N}` by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   699
        thus "\<exists> a \<in> (?s ` {0..<?N}). a \<le> ?s n" by blast
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   700
      qed auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   701
      finally have "\<bar> x \<bar> < ?s n" .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   702
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   703
      from DERIV_D[OF DERIV_f[where n=n], THEN LIM_D, OF `0 < ?r`, unfolded real_norm_def diff_0_right, unfolded some_eq_ex[symmetric], THEN conjunct2]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   704
      have "\<forall>x. x \<noteq> 0 \<and> \<bar>x\<bar> < ?s n \<longrightarrow> \<bar>?diff n x - f' x0 n\<bar> < ?r" .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   705
      with `x \<noteq> 0` and `\<bar>x\<bar> < ?s n`
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   706
      show "\<bar>?diff n x - f' x0 n\<bar> < ?r" by blast
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   707
    qed auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   708
    also have "\<dots> = of_nat (card {0 ..< ?N}) * ?r" by (rule setsum_constant)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   709
    also have "\<dots> = real ?N * ?r" unfolding real_eq_of_nat by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   710
    also have "\<dots> = r/3" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   711
    finally have "\<bar>\<Sum>n \<in> { 0 ..< ?N}. ?diff n x - f' x0 n \<bar> < r / 3" (is "?diff_part < r / 3") .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   712
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   713
    from suminf_diff[OF allf_summable[OF x_in_I] allf_summable[OF x0_in_I]]
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   714
    have "\<bar> (suminf (f (x0 + x)) - (suminf (f x0))) / x - suminf (f' x0) \<bar> =
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   715
                    \<bar> \<Sum>n. ?diff n x - f' x0 n \<bar>" unfolding suminf_diff[OF div_smbl `summable (f' x0)`, symmetric] using suminf_divide[OF diff_smbl, symmetric] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   716
    also have "\<dots> \<le> ?diff_part + \<bar> (\<Sum>n. ?diff (n + ?N) x) - (\<Sum> n. f' x0 (n + ?N)) \<bar>" unfolding suminf_split_initial_segment[OF all_smbl, where k="?N"] unfolding suminf_diff[OF div_shft_smbl ign[OF `summable (f' x0)`]] by (rule abs_triangle_ineq)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   717
    also have "\<dots> \<le> ?diff_part + ?L_part + ?f'_part" using abs_triangle_ineq4 by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   718
    also have "\<dots> < r /3 + r/3 + r/3"
36842
99745a4b9cc9 fix some linarith_split_limit warnings
huffman
parents: 36824
diff changeset
   719
      using `?diff_part < r/3` `?L_part \<le> r/3` and `?f'_part < r/3`
99745a4b9cc9 fix some linarith_split_limit warnings
huffman
parents: 36824
diff changeset
   720
      by (rule add_strict_mono [OF add_less_le_mono])
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   721
    finally have "\<bar> (suminf (f (x0 + x)) - (suminf (f x0))) / x - suminf (f' x0) \<bar> < r"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   722
      by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   723
  } thus "\<exists> s > 0. \<forall> x. x \<noteq> 0 \<and> norm (x - 0) < s \<longrightarrow>
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   724
      norm (((\<Sum>n. f (x0 + x) n) - (\<Sum>n. f x0 n)) / x - (\<Sum>n. f' x0 n)) < r" using `0 < S`
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   725
    unfolding real_norm_def diff_0_right by blast
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   726
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   727
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   728
lemma DERIV_power_series': fixes f :: "nat \<Rightarrow> real"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   729
  assumes converges: "\<And> x. x \<in> {-R <..< R} \<Longrightarrow> summable (\<lambda> n. f n * real (Suc n) * x^n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   730
  and x0_in_I: "x0 \<in> {-R <..< R}" and "0 < R"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   731
  shows "DERIV (\<lambda> x. (\<Sum> n. f n * x^(Suc n))) x0 :> (\<Sum> n. f n * real (Suc n) * x0^n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   732
  (is "DERIV (\<lambda> x. (suminf (?f x))) x0 :> (suminf (?f' x0))")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   733
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   734
  { fix R' assume "0 < R'" and "R' < R" and "-R' < x0" and "x0 < R'"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   735
    hence "x0 \<in> {-R' <..< R'}" and "R' \<in> {-R <..< R}" and "x0 \<in> {-R <..< R}" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   736
    have "DERIV (\<lambda> x. (suminf (?f x))) x0 :> (suminf (?f' x0))"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   737
    proof (rule DERIV_series')
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   738
      show "summable (\<lambda> n. \<bar>f n * real (Suc n) * R'^n\<bar>)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   739
      proof -
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   740
        have "(R' + R) / 2 < R" and "0 < (R' + R) / 2" using `0 < R'` `0 < R` `R' < R` by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   741
        hence in_Rball: "(R' + R) / 2 \<in> {-R <..< R}" using `R' < R` by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   742
        have "norm R' < norm ((R' + R) / 2)" using `0 < R'` `0 < R` `R' < R` by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   743
        from powser_insidea[OF converges[OF in_Rball] this] show ?thesis by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   744
      qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   745
      { fix n x y assume "x \<in> {-R' <..< R'}" and "y \<in> {-R' <..< R'}"
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   746
        show "\<bar>?f x n - ?f y n\<bar> \<le> \<bar>f n * real (Suc n) * R'^n\<bar> * \<bar>x-y\<bar>"
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   747
        proof -
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   748
          have "\<bar>f n * x ^ (Suc n) - f n * y ^ (Suc n)\<bar> = (\<bar>f n\<bar> * \<bar>x-y\<bar>) * \<bar>\<Sum>p = 0..<Suc n. x ^ p * y ^ (n - p)\<bar>"
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   749
            unfolding right_diff_distrib[symmetric] lemma_realpow_diff_sumr2 abs_mult by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   750
          also have "\<dots> \<le> (\<bar>f n\<bar> * \<bar>x-y\<bar>) * (\<bar>real (Suc n)\<bar> * \<bar>R' ^ n\<bar>)"
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   751
          proof (rule mult_left_mono)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   752
            have "\<bar>\<Sum>p = 0..<Suc n. x ^ p * y ^ (n - p)\<bar> \<le> (\<Sum>p = 0..<Suc n. \<bar>x ^ p * y ^ (n - p)\<bar>)" by (rule setsum_abs)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   753
            also have "\<dots> \<le> (\<Sum>p = 0..<Suc n. R' ^ n)"
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   754
            proof (rule setsum_mono)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   755
              fix p assume "p \<in> {0..<Suc n}" hence "p \<le> n" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   756
              { fix n fix x :: real assume "x \<in> {-R'<..<R'}"
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   757
                hence "\<bar>x\<bar> \<le> R'"  by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   758
                hence "\<bar>x^n\<bar> \<le> R'^n" unfolding power_abs by (rule power_mono, auto)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   759
              } from mult_mono[OF this[OF `x \<in> {-R'<..<R'}`, of p] this[OF `y \<in> {-R'<..<R'}`, of "n-p"]] `0 < R'`
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   760
              have "\<bar>x^p * y^(n-p)\<bar> \<le> R'^p * R'^(n-p)" unfolding abs_mult by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   761
              thus "\<bar>x^p * y^(n-p)\<bar> \<le> R'^n" unfolding power_add[symmetric] using `p \<le> n` by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   762
            qed
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   763
            also have "\<dots> = real (Suc n) * R' ^ n" unfolding setsum_constant card_atLeastLessThan real_of_nat_def by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   764
            finally show "\<bar>\<Sum>p = 0..<Suc n. x ^ p * y ^ (n - p)\<bar> \<le> \<bar>real (Suc n)\<bar> * \<bar>R' ^ n\<bar>" unfolding abs_real_of_nat_cancel abs_of_nonneg[OF zero_le_power[OF less_imp_le[OF `0 < R'`]]] .
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   765
            show "0 \<le> \<bar>f n\<bar> * \<bar>x - y\<bar>" unfolding abs_mult[symmetric] by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   766
          qed
36777
be5461582d0f avoid using real-specific versions of generic lemmas
huffman
parents: 36776
diff changeset
   767
          also have "\<dots> = \<bar>f n * real (Suc n) * R' ^ n\<bar> * \<bar>x - y\<bar>" unfolding abs_mult mult_assoc[symmetric] by algebra
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   768
          finally show ?thesis .
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   769
        qed }
31881
eba74a5790d2 use DERIV_intros
hoelzl
parents: 31880
diff changeset
   770
      { fix n show "DERIV (\<lambda> x. ?f x n) x0 :> (?f' x0 n)"
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   771
          by (auto intro!: DERIV_intros simp del: power_Suc) }
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   772
      { fix x assume "x \<in> {-R' <..< R'}" hence "R' \<in> {-R <..< R}" and "norm x < norm R'" using assms `R' < R` by auto
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   773
        have "summable (\<lambda> n. f n * x^n)"
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   774
        proof (rule summable_le2[THEN conjunct1, OF _ powser_insidea[OF converges[OF `R' \<in> {-R <..< R}`] `norm x < norm R'`]], rule allI)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   775
          fix n
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   776
          have le: "\<bar>f n\<bar> * 1 \<le> \<bar>f n\<bar> * real (Suc n)" by (rule mult_left_mono, auto)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   777
          show "\<bar>f n * x ^ n\<bar> \<le> norm (f n * real (Suc n) * x ^ n)" unfolding real_norm_def abs_mult
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   778
            by (rule mult_right_mono, auto simp add: le[unfolded mult_1_right])
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   779
        qed
36777
be5461582d0f avoid using real-specific versions of generic lemmas
huffman
parents: 36776
diff changeset
   780
        from this[THEN summable_mult2[where c=x], unfolded mult_assoc, unfolded mult_commute]
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
   781
        show "summable (?f x)" by auto }
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   782
      show "summable (?f' x0)" using converges[OF `x0 \<in> {-R <..< R}`] .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   783
      show "x0 \<in> {-R' <..< R'}" using `x0 \<in> {-R' <..< R'}` .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   784
    qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   785
  } note for_subinterval = this
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   786
  let ?R = "(R + \<bar>x0\<bar>) / 2"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   787
  have "\<bar>x0\<bar> < ?R" using assms by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   788
  hence "- ?R < x0"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   789
  proof (cases "x0 < 0")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   790
    case True
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   791
    hence "- x0 < ?R" using `\<bar>x0\<bar> < ?R` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   792
    thus ?thesis unfolding neg_less_iff_less[symmetric, of "- x0"] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   793
  next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   794
    case False
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   795
    have "- ?R < 0" using assms by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   796
    also have "\<dots> \<le> x0" using False by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   797
    finally show ?thesis .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   798
  qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   799
  hence "0 < ?R" "?R < R" "- ?R < x0" and "x0 < ?R" using assms by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   800
  from for_subinterval[OF this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   801
  show ?thesis .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
   802
qed
29695
171146a93106 Added real related theorems from Fact.thy
chaieb
parents: 29667
diff changeset
   803
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
   804
subsection {* Exponential Function *}
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
   805
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
   806
definition exp :: "'a \<Rightarrow> 'a::{real_normed_field,banach}" where
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
   807
  "exp = (\<lambda>x. \<Sum>n. x ^ n /\<^sub>R real (fact n))"
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
   808
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   809
lemma summable_exp_generic:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   810
  fixes x :: "'a::{real_normed_algebra_1,banach}"
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   811
  defines S_def: "S \<equiv> \<lambda>n. x ^ n /\<^sub>R real (fact n)"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   812
  shows "summable S"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   813
proof -
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   814
  have S_Suc: "\<And>n. S (Suc n) = (x * S n) /\<^sub>R real (Suc n)"
30273
ecd6f0ca62ea declare power_Suc [simp]; remove redundant type-specific versions of power_Suc
huffman
parents: 30082
diff changeset
   815
    unfolding S_def by (simp del: mult_Suc)
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   816
  obtain r :: real where r0: "0 < r" and r1: "r < 1"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   817
    using dense [OF zero_less_one] by fast
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   818
  obtain N :: nat where N: "norm x < real N * r"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   819
    using reals_Archimedean3 [OF r0] by fast
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   820
  from r1 show ?thesis
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   821
  proof (rule ratio_test [rule_format])
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   822
    fix n :: nat
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   823
    assume n: "N \<le> n"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   824
    have "norm x \<le> real N * r"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   825
      using N by (rule order_less_imp_le)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   826
    also have "real N * r \<le> real (Suc n) * r"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   827
      using r0 n by (simp add: mult_right_mono)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   828
    finally have "norm x * norm (S n) \<le> real (Suc n) * r * norm (S n)"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   829
      using norm_ge_zero by (rule mult_right_mono)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   830
    hence "norm (x * S n) \<le> real (Suc n) * r * norm (S n)"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   831
      by (rule order_trans [OF norm_mult_ineq])
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   832
    hence "norm (x * S n) / real (Suc n) \<le> r * norm (S n)"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   833
      by (simp add: pos_divide_le_eq mult_ac)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   834
    thus "norm (S (Suc n)) \<le> r * norm (S n)"
35216
7641e8d831d2 get rid of many duplicate simp rule warnings
huffman
parents: 35213
diff changeset
   835
      by (simp add: S_Suc inverse_eq_divide)
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   836
  qed
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   837
qed
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   838
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   839
lemma summable_norm_exp:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   840
  fixes x :: "'a::{real_normed_algebra_1,banach}"
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   841
  shows "summable (\<lambda>n. norm (x ^ n /\<^sub>R real (fact n)))"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   842
proof (rule summable_norm_comparison_test [OF exI, rule_format])
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   843
  show "summable (\<lambda>n. norm x ^ n /\<^sub>R real (fact n))"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   844
    by (rule summable_exp_generic)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   845
next
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   846
  fix n show "norm (x ^ n /\<^sub>R real (fact n)) \<le> norm x ^ n /\<^sub>R real (fact n)"
35216
7641e8d831d2 get rid of many duplicate simp rule warnings
huffman
parents: 35213
diff changeset
   847
    by (simp add: norm_power_ineq)
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   848
qed
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   849
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
   850
lemma summable_exp: "summable (%n. inverse (real (fact n)) * x ^ n)"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   851
by (insert summable_exp_generic [where x=x], simp)
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
   852
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   853
lemma exp_converges: "(\<lambda>n. x ^ n /\<^sub>R real (fact n)) sums exp x"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   854
unfolding exp_def by (rule summable_exp_generic [THEN summable_sums])
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
   855
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
   856
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
   857
lemma exp_fdiffs:
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   858
      "diffs (%n. inverse(real (fact n))) = (%n. inverse(real (fact n)))"
23431
25ca91279a9b change simp rules for of_nat to work like int did previously (reorient of_nat_Suc, remove of_nat_mult [simp]); preserve original variable names in legacy int theorems
huffman
parents: 23413
diff changeset
   859
by (simp add: diffs_def mult_assoc [symmetric] real_of_nat_def of_nat_mult
23082
ffef77eed382 generalize powerseries and termdiffs lemmas using axclasses
huffman
parents: 23069
diff changeset
   860
         del: mult_Suc of_nat_Suc)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   861
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   862
lemma diffs_of_real: "diffs (\<lambda>n. of_real (f n)) = (\<lambda>n. of_real (diffs f n))"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   863
by (simp add: diffs_def)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   864
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   865
lemma DERIV_exp [simp]: "DERIV exp x :> exp(x)"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
   866
unfolding exp_def scaleR_conv_of_real
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
   867
apply (rule DERIV_cong)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
   868
apply (rule termdiffs [where K="of_real (1 + norm x)"])
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   869
apply (simp_all only: diffs_of_real scaleR_conv_of_real exp_fdiffs)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   870
apply (rule exp_converges [THEN sums_summable, unfolded scaleR_conv_of_real])+
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   871
apply (simp del: of_real_add)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   872
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   873
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
   874
lemma isCont_exp: "isCont exp x"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
   875
  by (rule DERIV_exp [THEN DERIV_isCont])
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
   876
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
   877
lemma isCont_exp' [simp]: "isCont f a \<Longrightarrow> isCont (\<lambda>x. exp (f x)) a"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
   878
  by (rule isCont_o2 [OF _ isCont_exp])
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
   879
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
   880
lemma tendsto_exp [tendsto_intros]:
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
   881
  "(f ---> a) F \<Longrightarrow> ((\<lambda>x. exp (f x)) ---> exp a) F"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
   882
  by (rule isCont_tendsto_compose [OF isCont_exp])
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
   883
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
   884
29167
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   885
subsubsection {* Properties of the Exponential Function *}
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   886
23278
375335bf619f clean up proofs of exp_zero, sin_zero, cos_zero
huffman
parents: 23255
diff changeset
   887
lemma powser_zero:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   888
  fixes f :: "nat \<Rightarrow> 'a::{real_normed_algebra_1}"
23278
375335bf619f clean up proofs of exp_zero, sin_zero, cos_zero
huffman
parents: 23255
diff changeset
   889
  shows "(\<Sum>n. f n * 0 ^ n) = f 0"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   890
proof -
23278
375335bf619f clean up proofs of exp_zero, sin_zero, cos_zero
huffman
parents: 23255
diff changeset
   891
  have "(\<Sum>n = 0..<1. f n * 0 ^ n) = (\<Sum>n. f n * 0 ^ n)"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   892
    by (rule sums_unique [OF series_zero], simp add: power_0_left)
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
   893
  thus ?thesis unfolding One_nat_def by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   894
qed
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   895
23278
375335bf619f clean up proofs of exp_zero, sin_zero, cos_zero
huffman
parents: 23255
diff changeset
   896
lemma exp_zero [simp]: "exp 0 = 1"
375335bf619f clean up proofs of exp_zero, sin_zero, cos_zero
huffman
parents: 23255
diff changeset
   897
unfolding exp_def by (simp add: scaleR_conv_of_real powser_zero)
375335bf619f clean up proofs of exp_zero, sin_zero, cos_zero
huffman
parents: 23255
diff changeset
   898
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   899
lemma setsum_cl_ivl_Suc2:
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   900
  "(\<Sum>i=m..Suc n. f i) = (if Suc n < m then 0 else f m + (\<Sum>i=m..n. f (Suc i)))"
28069
ba4de3022862 moved lemma into SetInterval where it belongs
nipkow
parents: 27483
diff changeset
   901
by (simp add: setsum_head_Suc setsum_shift_bounds_cl_Suc_ivl
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   902
         del: setsum_cl_ivl_Suc)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   903
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   904
lemma exp_series_add:
31017
2c227493ea56 stripped class recpower further
haftmann
parents: 30273
diff changeset
   905
  fixes x y :: "'a::{real_field}"
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   906
  defines S_def: "S \<equiv> \<lambda>x n. x ^ n /\<^sub>R real (fact n)"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   907
  shows "S (x + y) n = (\<Sum>i=0..n. S x i * S y (n - i))"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   908
proof (induct n)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   909
  case 0
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   910
  show ?case
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   911
    unfolding S_def by simp
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   912
next
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   913
  case (Suc n)
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   914
  have S_Suc: "\<And>x n. S x (Suc n) = (x * S x n) /\<^sub>R real (Suc n)"
30273
ecd6f0ca62ea declare power_Suc [simp]; remove redundant type-specific versions of power_Suc
huffman
parents: 30082
diff changeset
   915
    unfolding S_def by (simp del: mult_Suc)
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   916
  hence times_S: "\<And>x n. x * S x n = real (Suc n) *\<^sub>R S x (Suc n)"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   917
    by simp
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   918
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   919
  have "real (Suc n) *\<^sub>R S (x + y) (Suc n) = (x + y) * S (x + y) n"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   920
    by (simp only: times_S)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   921
  also have "\<dots> = (x + y) * (\<Sum>i=0..n. S x i * S y (n-i))"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   922
    by (simp only: Suc)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   923
  also have "\<dots> = x * (\<Sum>i=0..n. S x i * S y (n-i))
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   924
                + y * (\<Sum>i=0..n. S x i * S y (n-i))"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   925
    by (rule left_distrib)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   926
  also have "\<dots> = (\<Sum>i=0..n. (x * S x i) * S y (n-i))
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   927
                + (\<Sum>i=0..n. S x i * (y * S y (n-i)))"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   928
    by (simp only: setsum_right_distrib mult_ac)
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   929
  also have "\<dots> = (\<Sum>i=0..n. real (Suc i) *\<^sub>R (S x (Suc i) * S y (n-i)))
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   930
                + (\<Sum>i=0..n. real (Suc n-i) *\<^sub>R (S x i * S y (Suc n-i)))"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   931
    by (simp add: times_S Suc_diff_le)
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   932
  also have "(\<Sum>i=0..n. real (Suc i) *\<^sub>R (S x (Suc i) * S y (n-i))) =
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   933
             (\<Sum>i=0..Suc n. real i *\<^sub>R (S x i * S y (Suc n-i)))"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   934
    by (subst setsum_cl_ivl_Suc2, simp)
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   935
  also have "(\<Sum>i=0..n. real (Suc n-i) *\<^sub>R (S x i * S y (Suc n-i))) =
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   936
             (\<Sum>i=0..Suc n. real (Suc n-i) *\<^sub>R (S x i * S y (Suc n-i)))"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   937
    by (subst setsum_cl_ivl_Suc, simp)
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   938
  also have "(\<Sum>i=0..Suc n. real i *\<^sub>R (S x i * S y (Suc n-i))) +
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   939
             (\<Sum>i=0..Suc n. real (Suc n-i) *\<^sub>R (S x i * S y (Suc n-i))) =
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   940
             (\<Sum>i=0..Suc n. real (Suc n) *\<^sub>R (S x i * S y (Suc n-i)))"
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   941
    by (simp only: setsum_addf [symmetric] scaleR_left_distrib [symmetric]
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   942
              real_of_nat_add [symmetric], simp)
25062
af5ef0d4d655 global class syntax
haftmann
parents: 23477
diff changeset
   943
  also have "\<dots> = real (Suc n) *\<^sub>R (\<Sum>i=0..Suc n. S x i * S y (Suc n-i))"
23127
56ee8105c002 simplify names of locale interpretations
huffman
parents: 23115
diff changeset
   944
    by (simp only: scaleR_right.setsum)
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   945
  finally show
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   946
    "S (x + y) (Suc n) = (\<Sum>i=0..Suc n. S x i * S y (Suc n - i))"
35216
7641e8d831d2 get rid of many duplicate simp rule warnings
huffman
parents: 35213
diff changeset
   947
    by (simp del: setsum_cl_ivl_Suc)
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   948
qed
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   949
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   950
lemma exp_add: "exp (x + y) = exp x * exp y"
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   951
unfolding exp_def
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   952
by (simp only: Cauchy_product summable_norm_exp exp_series_add)
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   953
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   954
lemma mult_exp_exp: "exp x * exp y = exp (x + y)"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   955
by (rule exp_add [symmetric])
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   956
23241
5f12b40a95bf add lemma exp_of_real
huffman
parents: 23177
diff changeset
   957
lemma exp_of_real: "exp (of_real x) = of_real (exp x)"
5f12b40a95bf add lemma exp_of_real
huffman
parents: 23177
diff changeset
   958
unfolding exp_def
44282
f0de18b62d63 remove bounded_(bi)linear locale interpretations, to avoid duplicating so many lemmas
huffman
parents: 43335
diff changeset
   959
apply (subst suminf_of_real)
23241
5f12b40a95bf add lemma exp_of_real
huffman
parents: 23177
diff changeset
   960
apply (rule summable_exp_generic)
5f12b40a95bf add lemma exp_of_real
huffman
parents: 23177
diff changeset
   961
apply (simp add: scaleR_conv_of_real)
5f12b40a95bf add lemma exp_of_real
huffman
parents: 23177
diff changeset
   962
done
5f12b40a95bf add lemma exp_of_real
huffman
parents: 23177
diff changeset
   963
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   964
lemma exp_not_eq_zero [simp]: "exp x \<noteq> 0"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   965
proof
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   966
  have "exp x * exp (- x) = 1" by (simp add: mult_exp_exp)
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   967
  also assume "exp x = 0"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   968
  finally show "False" by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   969
qed
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   970
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   971
lemma exp_minus: "exp (- x) = inverse (exp x)"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   972
by (rule inverse_unique [symmetric], simp add: mult_exp_exp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   973
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   974
lemma exp_diff: "exp (x - y) = exp x / exp y"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   975
  unfolding diff_minus divide_inverse
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   976
  by (simp add: exp_add exp_minus)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   977
29167
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   978
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   979
subsubsection {* Properties of the Exponential Function on Reals *}
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   980
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   981
text {* Comparisons of @{term "exp x"} with zero. *}
29167
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   982
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   983
text{*Proof: because every exponential can be seen as a square.*}
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   984
lemma exp_ge_zero [simp]: "0 \<le> exp (x::real)"
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   985
proof -
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   986
  have "0 \<le> exp (x/2) * exp (x/2)" by simp
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   987
  thus ?thesis by (simp add: exp_add [symmetric])
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   988
qed
37a952bb9ebc rearranged subsections; cleaned up some proofs
huffman
parents: 29166
diff changeset
   989
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   990
lemma exp_gt_zero [simp]: "0 < exp (x::real)"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   991
by (simp add: order_less_le)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   992
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   993
lemma not_exp_less_zero [simp]: "\<not> exp (x::real) < 0"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   994
by (simp add: not_less)
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   995
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   996
lemma not_exp_le_zero [simp]: "\<not> exp (x::real) \<le> 0"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
   997
by (simp add: not_le)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
   998
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
   999
lemma abs_exp_cancel [simp]: "\<bar>exp x::real\<bar> = exp x"
29165
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1000
by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1001
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1002
lemma exp_real_of_nat_mult: "exp(real n * x) = exp(x) ^ n"
15251
bb6f072c8d10 converted some induct_tac to induct
paulson
parents: 15241
diff changeset
  1003
apply (induct "n")
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1004
apply (auto simp add: real_of_nat_Suc right_distrib exp_add mult_commute)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1005
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1006
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1007
text {* Strict monotonicity of exponential. *}
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1008
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1009
lemma exp_ge_add_one_self_aux: "0 \<le> (x::real) ==> (1 + x) \<le> exp(x)"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1010
apply (drule order_le_imp_less_or_eq, auto)
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1011
apply (simp add: exp_def)
36777
be5461582d0f avoid using real-specific versions of generic lemmas
huffman
parents: 36776
diff changeset
  1012
apply (rule order_trans)
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1013
apply (rule_tac [2] n = 2 and f = "(%n. inverse (real (fact n)) * x ^ n)" in series_pos_le)
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1014
apply (auto intro: summable_exp simp add: numeral_2_eq_2 zero_le_mult_iff)
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1015
done
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1016
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1017
lemma exp_gt_one: "0 < (x::real) \<Longrightarrow> 1 < exp x"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1018
proof -
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1019
  assume x: "0 < x"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1020
  hence "1 < 1 + x" by simp
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1021
  also from x have "1 + x \<le> exp x"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1022
    by (simp add: exp_ge_add_one_self_aux)
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1023
  finally show ?thesis .
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1024
qed
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1025
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1026
lemma exp_less_mono:
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
  1027
  fixes x y :: real
29165
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1028
  assumes "x < y" shows "exp x < exp y"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1029
proof -
29165
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1030
  from `x < y` have "0 < y - x" by simp
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1031
  hence "1 < exp (y - x)" by (rule exp_gt_one)
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1032
  hence "1 < exp y / exp x" by (simp only: exp_diff)
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1033
  thus "exp x < exp y" by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1034
qed
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1035
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
  1036
lemma exp_less_cancel: "exp (x::real) < exp y ==> x < y"
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1037
apply (simp add: linorder_not_le [symmetric])
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1038
apply (auto simp add: order_le_less exp_less_mono)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1039
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1040
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1041
lemma exp_less_cancel_iff [iff]: "exp (x::real) < exp y \<longleftrightarrow> x < y"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1042
by (auto intro: exp_less_mono exp_less_cancel)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1043
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1044
lemma exp_le_cancel_iff [iff]: "exp (x::real) \<le> exp y \<longleftrightarrow> x \<le> y"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1045
by (auto simp add: linorder_not_less [symmetric])
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1046
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1047
lemma exp_inj_iff [iff]: "exp (x::real) = exp y \<longleftrightarrow> x = y"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1048
by (simp add: order_eq_iff)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1049
29170
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1050
text {* Comparisons of @{term "exp x"} with one. *}
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1051
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1052
lemma one_less_exp_iff [simp]: "1 < exp (x::real) \<longleftrightarrow> 0 < x"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1053
  using exp_less_cancel_iff [where x=0 and y=x] by simp
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1054
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1055
lemma exp_less_one_iff [simp]: "exp (x::real) < 1 \<longleftrightarrow> x < 0"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1056
  using exp_less_cancel_iff [where x=x and y=0] by simp
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1057
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1058
lemma one_le_exp_iff [simp]: "1 \<le> exp (x::real) \<longleftrightarrow> 0 \<le> x"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1059
  using exp_le_cancel_iff [where x=0 and y=x] by simp
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1060
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1061
lemma exp_le_one_iff [simp]: "exp (x::real) \<le> 1 \<longleftrightarrow> x \<le> 0"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1062
  using exp_le_cancel_iff [where x=x and y=0] by simp
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1063
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1064
lemma exp_eq_one_iff [simp]: "exp (x::real) = 1 \<longleftrightarrow> x = 0"
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1065
  using exp_inj_iff [where x=x and y=0] by simp
dad3933c88dd clean up lemmas about exp
huffman
parents: 29167
diff changeset
  1066
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
  1067
lemma lemma_exp_total: "1 \<le> y ==> \<exists>x. 0 \<le> x & x \<le> y - 1 & exp(x::real) = y"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1068
apply (rule IVT)
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  1069
apply (auto intro: isCont_exp simp add: le_diff_eq)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1070
apply (subgoal_tac "1 + (y - 1) \<le> exp (y - 1)")
29165
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1071
apply simp
17014
ad5ceb90877d renamed exp_ge_add_one_self to exp_ge_add_one_self_aux
avigad
parents: 16924
diff changeset
  1072
apply (rule exp_ge_add_one_self_aux, simp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1073
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1074
23115
4615b2078592 generalized exp to work over any complete field; new proof of exp_add
huffman
parents: 23112
diff changeset
  1075
lemma exp_total: "0 < (y::real) ==> \<exists>x. exp x = y"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1076
apply (rule_tac x = 1 and y = y in linorder_cases)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1077
apply (drule order_less_imp_le [THEN lemma_exp_total])
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1078
apply (rule_tac [2] x = 0 in exI)
36776
c137ae7673d3 remove a couple of redundant lemmas; simplify some proofs
huffman
parents: 35216
diff changeset
  1079
apply (frule_tac [3] one_less_inverse)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1080
apply (drule_tac [4] order_less_imp_le [THEN lemma_exp_total], auto)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1081
apply (rule_tac x = "-x" in exI)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1082
apply (simp add: exp_minus)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1083
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1084
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1085
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1086
subsection {* Natural Logarithm *}
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1087
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1088
definition ln :: "real \<Rightarrow> real" where
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  1089
  "ln x = (THE u. exp u = x)"
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  1090
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  1091
lemma ln_exp [simp]: "ln (exp x) = x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1092
  by (simp add: ln_def)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1093
22654
c2b6b5a9e136 new simp rule exp_ln; new standard proof of DERIV_exp_ln_one; changed imports
huffman
parents: 22653
diff changeset
  1094
lemma exp_ln [simp]: "0 < x \<Longrightarrow> exp (ln x) = x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1095
  by (auto dest: exp_total)
22654
c2b6b5a9e136 new simp rule exp_ln; new standard proof of DERIV_exp_ln_one; changed imports
huffman
parents: 22653
diff changeset
  1096
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1097
lemma exp_ln_iff [simp]: "exp (ln x) = x \<longleftrightarrow> 0 < x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1098
  by (metis exp_gt_zero exp_ln)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1099
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1100
lemma ln_unique: "exp y = x \<Longrightarrow> ln x = y"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1101
  by (erule subst, rule ln_exp)
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1102
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1103
lemma ln_one [simp]: "ln 1 = 0"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1104
  by (rule ln_unique, simp)
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1105
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1106
lemma ln_mult: "\<lbrakk>0 < x; 0 < y\<rbrakk> \<Longrightarrow> ln (x * y) = ln x + ln y"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1107
  by (rule ln_unique, simp add: exp_add)
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1108
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1109
lemma ln_inverse: "0 < x \<Longrightarrow> ln (inverse x) = - ln x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1110
  by (rule ln_unique, simp add: exp_minus)
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1111
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1112
lemma ln_div: "\<lbrakk>0 < x; 0 < y\<rbrakk> \<Longrightarrow> ln (x / y) = ln x - ln y"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1113
  by (rule ln_unique, simp add: exp_diff)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1114
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1115
lemma ln_realpow: "0 < x \<Longrightarrow> ln (x ^ n) = real n * ln x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1116
  by (rule ln_unique, simp add: exp_real_of_nat_mult)
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1117
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1118
lemma ln_less_cancel_iff [simp]: "\<lbrakk>0 < x; 0 < y\<rbrakk> \<Longrightarrow> ln x < ln y \<longleftrightarrow> x < y"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1119
  by (subst exp_less_cancel_iff [symmetric], simp)
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1120
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1121
lemma ln_le_cancel_iff [simp]: "\<lbrakk>0 < x; 0 < y\<rbrakk> \<Longrightarrow> ln x \<le> ln y \<longleftrightarrow> x \<le> y"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1122
  by (simp add: linorder_not_less [symmetric])
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1123
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1124
lemma ln_inj_iff [simp]: "\<lbrakk>0 < x; 0 < y\<rbrakk> \<Longrightarrow> ln x = ln y \<longleftrightarrow> x = y"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1125
  by (simp add: order_eq_iff)
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1126
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1127
lemma ln_add_one_self_le_self [simp]: "0 \<le> x \<Longrightarrow> ln (1 + x) \<le> x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1128
  apply (rule exp_le_cancel_iff [THEN iffD1])
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1129
  apply (simp add: exp_ge_add_one_self_aux)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1130
  done
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1131
29171
5eff800a695f clean up lemmas about ln
huffman
parents: 29170
diff changeset
  1132
lemma ln_less_self [simp]: "0 < x \<Longrightarrow> ln x < x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1133
  by (rule order_less_le_trans [where y="ln (1 + x)"]) simp_all
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1134
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1135
lemma ln_ge_zero [simp]: "1 \<le> x \<Longrightarrow> 0 \<le> ln x"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1136
  using ln_le_cancel_iff [of 1 x] by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1137
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1138
lemma ln_ge_zero_imp_ge_one: "\<lbrakk>0 \<le> ln x; 0 < x\<rbrakk> \<Longrightarrow> 1 \<le> x"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1139
  using ln_le_cancel_iff [of 1 x] by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1140
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1141
lemma ln_ge_zero_iff [simp]: "0 < x \<Longrightarrow> (0 \<le> ln x) = (1 \<le> x)"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1142
  using ln_le_cancel_iff [of 1 x] by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1143
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1144
lemma ln_less_zero_iff [simp]: "0 < x \<Longrightarrow> (ln x < 0) = (x < 1)"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1145
  using ln_less_cancel_iff [of x 1] by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1146
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1147
lemma ln_gt_zero: "1 < x \<Longrightarrow> 0 < ln x"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1148
  using ln_less_cancel_iff [of 1 x] by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1149
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1150
lemma ln_gt_zero_imp_gt_one: "\<lbrakk>0 < ln x; 0 < x\<rbrakk> \<Longrightarrow> 1 < x"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1151
  using ln_less_cancel_iff [of 1 x] by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1152
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1153
lemma ln_gt_zero_iff [simp]: "0 < x \<Longrightarrow> (0 < ln x) = (1 < x)"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1154
  using ln_less_cancel_iff [of 1 x] by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1155
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1156
lemma ln_eq_zero_iff [simp]: "0 < x \<Longrightarrow> (ln x = 0) = (x = 1)"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1157
  using ln_inj_iff [of x 1] by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1158
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1159
lemma ln_less_zero: "\<lbrakk>0 < x; x < 1\<rbrakk> \<Longrightarrow> ln x < 0"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1160
  by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1161
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  1162
lemma isCont_ln: "0 < x \<Longrightarrow> isCont ln x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1163
  apply (subgoal_tac "isCont ln (exp (ln x))", simp)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1164
  apply (rule isCont_inverse_function [where f=exp], simp_all)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1165
  done
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  1166
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  1167
lemma DERIV_ln: "0 < x \<Longrightarrow> DERIV ln x :> inverse x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1168
  apply (rule DERIV_inverse_function [where f=exp and a=0 and b="x+1"])
44317
b7e9fa025f15 remove redundant lemma lemma_DERIV_subst in favor of DERIV_cong
huffman
parents: 44316
diff changeset
  1169
  apply (erule DERIV_cong [OF DERIV_exp exp_ln])
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1170
  apply (simp_all add: abs_if isCont_ln)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1171
  done
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  1172
33667
958dc9f03611 A little rationalisation
paulson
parents: 33549
diff changeset
  1173
lemma DERIV_ln_divide: "0 < x ==> DERIV ln x :> 1 / x"
958dc9f03611 A little rationalisation
paulson
parents: 33549
diff changeset
  1174
  by (rule DERIV_ln[THEN DERIV_cong], simp, simp add: divide_inverse)
958dc9f03611 A little rationalisation
paulson
parents: 33549
diff changeset
  1175
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1176
lemma ln_series: assumes "0 < x" and "x < 2"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1177
  shows "ln x = (\<Sum> n. (-1)^n * (1 / real (n + 1)) * (x - 1)^(Suc n))" (is "ln x = suminf (?f (x - 1))")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1178
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1179
  let "?f' x n" = "(-1)^n * (x - 1)^n"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1180
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1181
  have "ln x - suminf (?f (x - 1)) = ln 1 - suminf (?f (1 - 1))"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1182
  proof (rule DERIV_isconst3[where x=x])
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1183
    fix x :: real assume "x \<in> {0 <..< 2}" hence "0 < x" and "x < 2" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1184
    have "norm (1 - x) < 1" using `0 < x` and `x < 2` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1185
    have "1 / x = 1 / (1 - (1 - x))" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1186
    also have "\<dots> = (\<Sum> n. (1 - x)^n)" using geometric_sums[OF `norm (1 - x) < 1`] by (rule sums_unique)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1187
    also have "\<dots> = suminf (?f' x)" unfolding power_mult_distrib[symmetric] by (rule arg_cong[where f=suminf], rule arg_cong[where f="op ^"], auto)
36777
be5461582d0f avoid using real-specific versions of generic lemmas
huffman
parents: 36776
diff changeset
  1188
    finally have "DERIV ln x :> suminf (?f' x)" using DERIV_ln[OF `0 < x`] unfolding divide_inverse by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1189
    moreover
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1190
    have repos: "\<And> h x :: real. h - 1 + x = h + x - 1" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1191
    have "DERIV (\<lambda>x. suminf (?f x)) (x - 1) :> (\<Sum>n. (-1)^n * (1 / real (n + 1)) * real (Suc n) * (x - 1) ^ n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1192
    proof (rule DERIV_power_series')
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1193
      show "x - 1 \<in> {- 1<..<1}" and "(0 :: real) < 1" using `0 < x` `x < 2` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1194
      { fix x :: real assume "x \<in> {- 1<..<1}" hence "norm (-x) < 1" by auto
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  1195
        show "summable (\<lambda>n. -1 ^ n * (1 / real (n + 1)) * real (Suc n) * x ^ n)"
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
  1196
          unfolding One_nat_def
35216
7641e8d831d2 get rid of many duplicate simp rule warnings
huffman
parents: 35213
diff changeset
  1197
          by (auto simp add: power_mult_distrib[symmetric] summable_geometric[OF `norm (-x) < 1`])
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1198
      }
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1199
    qed
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
  1200
    hence "DERIV (\<lambda>x. suminf (?f x)) (x - 1) :> suminf (?f' x)" unfolding One_nat_def by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1201
    hence "DERIV (\<lambda>x. suminf (?f (x - 1))) x :> suminf (?f' x)" unfolding DERIV_iff repos .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1202
    ultimately have "DERIV (\<lambda>x. ln x - suminf (?f (x - 1))) x :> (suminf (?f' x) - suminf (?f' x))"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1203
      by (rule DERIV_diff)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1204
    thus "DERIV (\<lambda>x. ln x - suminf (?f (x - 1))) x :> 0" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1205
  qed (auto simp add: assms)
44289
d81d09cdab9c optimize some proofs
huffman
parents: 44282
diff changeset
  1206
  thus ?thesis by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1207
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1208
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1209
subsection {* Sine and Cosine *}
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1210
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1211
definition sin_coeff :: "nat \<Rightarrow> real" where
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1212
  "sin_coeff = (\<lambda>n. if even n then 0 else -1 ^ ((n - Suc 0) div 2) / real (fact n))"
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1213
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1214
definition cos_coeff :: "nat \<Rightarrow> real" where
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1215
  "cos_coeff = (\<lambda>n. if even n then (-1 ^ (n div 2)) / real (fact n) else 0)"
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1216
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1217
definition sin :: "real \<Rightarrow> real" where
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1218
  "sin = (\<lambda>x. \<Sum>n. sin_coeff n * x ^ n)"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1219
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1220
definition cos :: "real \<Rightarrow> real" where
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1221
  "cos = (\<lambda>x. \<Sum>n. cos_coeff n * x ^ n)"
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1222
44319
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1223
lemma sin_coeff_0 [simp]: "sin_coeff 0 = 0"
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1224
  unfolding sin_coeff_def by simp
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1225
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1226
lemma cos_coeff_0 [simp]: "cos_coeff 0 = 1"
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1227
  unfolding cos_coeff_def by simp
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1228
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1229
lemma sin_coeff_Suc: "sin_coeff (Suc n) = cos_coeff n / real (Suc n)"
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1230
  unfolding cos_coeff_def sin_coeff_def
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1231
  by (simp del: mult_Suc)
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1232
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1233
lemma cos_coeff_Suc: "cos_coeff (Suc n) = - sin_coeff n / real (Suc n)"
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1234
  unfolding cos_coeff_def sin_coeff_def
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1235
  by (simp del: mult_Suc, auto simp add: odd_Suc_mult_two_ex)
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1236
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1237
lemma summable_sin: "summable (\<lambda>n. sin_coeff n * x ^ n)"
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1238
unfolding sin_coeff_def
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1239
apply (rule summable_comparison_test [OF _ summable_exp [where x="\<bar>x\<bar>"]])
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1240
apply (auto simp add: divide_inverse abs_mult power_abs [symmetric] zero_le_mult_iff)
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1241
done
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1242
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1243
lemma summable_cos: "summable (\<lambda>n. cos_coeff n * x ^ n)"
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1244
unfolding cos_coeff_def
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1245
apply (rule summable_comparison_test [OF _ summable_exp [where x="\<bar>x\<bar>"]])
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1246
apply (auto simp add: divide_inverse abs_mult power_abs [symmetric] zero_le_mult_iff)
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1247
done
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1248
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1249
lemma sin_converges: "(\<lambda>n. sin_coeff n * x ^ n) sums sin(x)"
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1250
unfolding sin_def by (rule summable_sin [THEN summable_sums])
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1251
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1252
lemma cos_converges: "(\<lambda>n. cos_coeff n * x ^ n) sums cos(x)"
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1253
unfolding cos_def by (rule summable_cos [THEN summable_sums])
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1254
44319
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1255
lemma diffs_sin_coeff: "diffs sin_coeff = cos_coeff"
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1256
  by (simp add: diffs_def sin_coeff_Suc real_of_nat_def del: of_nat_Suc)
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1257
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1258
lemma diffs_cos_coeff: "diffs cos_coeff = (\<lambda>n. - sin_coeff n)"
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1259
  by (simp add: diffs_def cos_coeff_Suc real_of_nat_def del: of_nat_Suc)
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1260
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1261
text{*Now at last we can get the derivatives of exp, sin and cos*}
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1262
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1263
lemma DERIV_sin [simp]: "DERIV sin x :> cos(x)"
44319
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1264
  unfolding sin_def cos_def
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1265
  apply (rule DERIV_cong, rule termdiffs [where K="1 + \<bar>x\<bar>"])
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1266
  apply (simp_all add: diffs_sin_coeff diffs_cos_coeff
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1267
    summable_minus summable_sin summable_cos)
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1268
  done
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1269
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1270
lemma DERIV_cos [simp]: "DERIV cos x :> -sin(x)"
44319
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1271
  unfolding cos_def sin_def
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1272
  apply (rule DERIV_cong, rule termdiffs [where K="1 + \<bar>x\<bar>"])
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1273
  apply (simp_all add: diffs_sin_coeff diffs_cos_coeff diffs_minus
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1274
    summable_minus summable_sin summable_cos suminf_minus)
806e0390de53 move sin_coeff and cos_coeff lemmas to Transcendental.thy; simplify some proofs
huffman
parents: 44318
diff changeset
  1275
  done
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1276
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1277
lemma isCont_sin: "isCont sin x"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1278
  by (rule DERIV_sin [THEN DERIV_isCont])
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1279
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1280
lemma isCont_cos: "isCont cos x"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1281
  by (rule DERIV_cos [THEN DERIV_isCont])
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1282
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1283
lemma isCont_sin' [simp]: "isCont f a \<Longrightarrow> isCont (\<lambda>x. sin (f x)) a"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1284
  by (rule isCont_o2 [OF _ isCont_sin])
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1285
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1286
lemma isCont_cos' [simp]: "isCont f a \<Longrightarrow> isCont (\<lambda>x. cos (f x)) a"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1287
  by (rule isCont_o2 [OF _ isCont_cos])
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1288
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1289
lemma tendsto_sin [tendsto_intros]:
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1290
  "(f ---> a) F \<Longrightarrow> ((\<lambda>x. sin (f x)) ---> sin a) F"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1291
  by (rule isCont_tendsto_compose [OF isCont_sin])
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1292
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1293
lemma tendsto_cos [tendsto_intros]:
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1294
  "(f ---> a) F \<Longrightarrow> ((\<lambda>x. cos (f x)) ---> cos a) F"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1295
  by (rule isCont_tendsto_compose [OF isCont_cos])
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1296
31880
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  1297
declare
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  1298
  DERIV_exp[THEN DERIV_chain2, THEN DERIV_cong, DERIV_intros]
43335
9f8766a8ebe0 use divide instead of inverse for the derivative of ln
hoelzl
parents: 41970
diff changeset
  1299
  DERIV_ln_divide[THEN DERIV_chain2, THEN DERIV_cong, DERIV_intros]
31880
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  1300
  DERIV_sin[THEN DERIV_chain2, THEN DERIV_cong, DERIV_intros]
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  1301
  DERIV_cos[THEN DERIV_chain2, THEN DERIV_cong, DERIV_intros]
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  1302
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1303
subsection {* Properties of Sine and Cosine *}
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1304
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1305
lemma sin_zero [simp]: "sin 0 = 0"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1306
  unfolding sin_def sin_coeff_def by (simp add: powser_zero)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1307
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1308
lemma cos_zero [simp]: "cos 0 = 1"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1309
  unfolding cos_def cos_coeff_def by (simp add: powser_zero)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1310
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1311
lemma sin_cos_squared_add [simp]: "(sin x)\<twosuperior> + (cos x)\<twosuperior> = 1"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1312
proof -
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1313
  have "\<forall>x. DERIV (\<lambda>x. (sin x)\<twosuperior> + (cos x)\<twosuperior>) x :> 0"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1314
    by (auto intro!: DERIV_intros)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1315
  hence "(sin x)\<twosuperior> + (cos x)\<twosuperior> = (sin 0)\<twosuperior> + (cos 0)\<twosuperior>"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1316
    by (rule DERIV_isconst_all)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1317
  thus "(sin x)\<twosuperior> + (cos x)\<twosuperior> = 1" by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1318
qed
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1319
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1320
lemma sin_cos_squared_add2 [simp]: "(cos x)\<twosuperior> + (sin x)\<twosuperior> = 1"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1321
  by (subst add_commute, rule sin_cos_squared_add)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1322
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1323
lemma sin_cos_squared_add3 [simp]: "cos x * cos x + sin x * sin x = 1"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1324
  using sin_cos_squared_add2 [unfolded power2_eq_square] .
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1325
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1326
lemma sin_squared_eq: "(sin x)\<twosuperior> = 1 - (cos x)\<twosuperior>"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1327
  unfolding eq_diff_eq by (rule sin_cos_squared_add)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1328
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1329
lemma cos_squared_eq: "(cos x)\<twosuperior> = 1 - (sin x)\<twosuperior>"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1330
  unfolding eq_diff_eq by (rule sin_cos_squared_add2)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1331
15081
32402f5624d1 abs notation
paulson
parents: 15079
diff changeset
  1332
lemma abs_sin_le_one [simp]: "\<bar>sin x\<bar> \<le> 1"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1333
  by (rule power2_le_imp_le, simp_all add: sin_squared_eq)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1334
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1335
lemma sin_ge_minus_one [simp]: "-1 \<le> sin x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1336
  using abs_sin_le_one [of x] unfolding abs_le_iff by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1337
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1338
lemma sin_le_one [simp]: "sin x \<le> 1"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1339
  using abs_sin_le_one [of x] unfolding abs_le_iff by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1340
15081
32402f5624d1 abs notation
paulson
parents: 15079
diff changeset
  1341
lemma abs_cos_le_one [simp]: "\<bar>cos x\<bar> \<le> 1"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1342
  by (rule power2_le_imp_le, simp_all add: cos_squared_eq)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1343
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1344
lemma cos_ge_minus_one [simp]: "-1 \<le> cos x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1345
  using abs_cos_le_one [of x] unfolding abs_le_iff by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1346
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1347
lemma cos_le_one [simp]: "cos x \<le> 1"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1348
  using abs_cos_le_one [of x] unfolding abs_le_iff by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1349
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1350
lemma DERIV_fun_pow: "DERIV g x :> m ==>
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1351
      DERIV (%x. (g x) ^ n) x :> real n * (g x) ^ (n - 1) * m"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1352
  by (auto intro!: DERIV_intros)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1353
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1354
lemma DERIV_fun_exp:
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1355
     "DERIV g x :> m ==> DERIV (%x. exp(g x)) x :> exp(g x) * m"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1356
  by (auto intro!: DERIV_intros)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1357
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1358
lemma DERIV_fun_sin:
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1359
     "DERIV g x :> m ==> DERIV (%x. sin(g x)) x :> cos(g x) * m"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1360
  by (auto intro!: DERIV_intros)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1361
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1362
lemma DERIV_fun_cos:
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1363
     "DERIV g x :> m ==> DERIV (%x. cos(g x)) x :> -sin(g x) * m"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1364
  by (auto intro!: DERIV_intros)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1365
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1366
lemma sin_cos_add_lemma:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1367
     "(sin (x + y) - (sin x * cos y + cos x * sin y)) ^ 2 +
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1368
      (cos (x + y) - (cos x * cos y - sin x * sin y)) ^ 2 = 0"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1369
  (is "?f x = 0")
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1370
proof -
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1371
  have "\<forall>x. DERIV (\<lambda>x. ?f x) x :> 0"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1372
    by (auto intro!: DERIV_intros simp add: algebra_simps)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1373
  hence "?f x = ?f 0"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1374
    by (rule DERIV_isconst_all)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1375
  thus ?thesis by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1376
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1377
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1378
lemma sin_add: "sin (x + y) = sin x * cos y + cos x * sin y"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1379
  using sin_cos_add_lemma unfolding realpow_two_sum_zero_iff by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1380
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1381
lemma cos_add: "cos (x + y) = cos x * cos y - sin x * sin y"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1382
  using sin_cos_add_lemma unfolding realpow_two_sum_zero_iff by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1383
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1384
lemma sin_cos_minus_lemma:
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1385
  "(sin(-x) + sin(x))\<twosuperior> + (cos(-x) - cos(x))\<twosuperior> = 0" (is "?f x = 0")
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1386
proof -
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1387
  have "\<forall>x. DERIV (\<lambda>x. ?f x) x :> 0"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1388
    by (auto intro!: DERIV_intros simp add: algebra_simps)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1389
  hence "?f x = ?f 0"
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1390
    by (rule DERIV_isconst_all)
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1391
  thus ?thesis by simp
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1392
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1393
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1394
lemma sin_minus [simp]: "sin (-x) = -sin(x)"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1395
  using sin_cos_minus_lemma [where x=x] by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1396
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1397
lemma cos_minus [simp]: "cos (-x) = cos(x)"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1398
  using sin_cos_minus_lemma [where x=x] by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1399
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1400
lemma sin_diff: "sin (x - y) = sin x * cos y - cos x * sin y"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1401
  by (simp add: diff_minus sin_add)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1402
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1403
lemma sin_diff2: "sin (x - y) = cos y * sin x - sin y * cos x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1404
  by (simp add: sin_diff mult_commute)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1405
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1406
lemma cos_diff: "cos (x - y) = cos x * cos y + sin x * sin y"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1407
  by (simp add: diff_minus cos_add)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1408
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1409
lemma cos_diff2: "cos (x - y) = cos y * cos x + sin y * sin x"
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1410
  by (simp add: cos_diff mult_commute)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1411
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1412
lemma sin_double [simp]: "sin(2 * x) = 2* sin x * cos x"
29165
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1413
  using sin_add [where x=x and y=x] by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1414
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1415
lemma cos_double: "cos(2* x) = ((cos x)\<twosuperior>) - ((sin x)\<twosuperior>)"
29165
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1416
  using cos_add [where x=x and y=x]
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1417
  by (simp add: power2_eq_square)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1418
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1419
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1420
subsection {* The Constant Pi *}
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1421
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  1422
definition pi :: "real" where
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1423
  "pi = 2 * (THE x. 0 \<le> (x::real) & x \<le> 2 & cos x = 0)"
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  1424
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1425
text{*Show that there's a least positive @{term x} with @{term "cos(x) = 0"};
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1426
   hence define pi.*}
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1427
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1428
lemma sin_paired:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1429
     "(%n. -1 ^ n /(real (fact (2 * n + 1))) * x ^ (2 * n + 1))
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1430
      sums  sin x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1431
proof -
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1432
  have "(\<lambda>n. \<Sum>k = n * 2..<n * 2 + 2. sin_coeff k * x ^ k) sums sin x"
44727
d45acd50a894 modify lemma sums_group, and shorten proofs that use it
huffman
parents: 44726
diff changeset
  1433
    by (rule sin_converges [THEN sums_group], simp)
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1434
  thus ?thesis unfolding One_nat_def sin_coeff_def by (simp add: mult_ac)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1435
qed
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1436
44728
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1437
lemma sin_gt_zero:
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1438
  assumes "0 < x" and "x < 2" shows "0 < sin x"
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1439
proof -
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1440
  let ?f = "\<lambda>n. \<Sum>k = n*2..<n*2+2. -1 ^ k / real (fact (2*k+1)) * x^(2*k+1)"
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1441
  have pos: "\<forall>n. 0 < ?f n"
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1442
  proof
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1443
    fix n :: nat
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1444
    let ?k2 = "real (Suc (Suc (4 * n)))"
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1445
    let ?k3 = "real (Suc (Suc (Suc (4 * n))))"
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1446
    have "x * x < ?k2 * ?k3"
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1447
      using assms by (intro mult_strict_mono', simp_all)
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1448
    hence "x * x * x * x ^ (n * 4) < ?k2 * ?k3 * x * x ^ (n * 4)"
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1449
      by (intro mult_strict_right_mono zero_less_power `0 < x`)
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1450
    thus "0 < ?f n"
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1451
      by (simp del: mult_Suc,
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1452
        simp add: less_divide_eq mult_pos_pos field_simps del: mult_Suc)
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1453
  qed
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1454
  have sums: "?f sums sin x"
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1455
    by (rule sin_paired [THEN sums_group], simp)
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1456
  show "0 < sin x"
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1457
    unfolding sums_unique [OF sums]
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1458
    using sums_summable [OF sums] pos
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1459
    by (rule suminf_gt_zero)
86f43cca4886 convert lemma sin_gt_zero to Isar style;
huffman
parents: 44727
diff changeset
  1460
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1461
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1462
lemma cos_double_less_one: "[| 0 < x; x < 2 |] ==> cos (2 * x) < 1"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1463
apply (cut_tac x = x in sin_gt_zero)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1464
apply (auto simp add: cos_squared_eq cos_double)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1465
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1466
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1467
lemma cos_paired:
23177
3004310c95b1 replace (- 1) with -1
huffman
parents: 23176
diff changeset
  1468
     "(%n. -1 ^ n /(real (fact (2 * n))) * x ^ (2 * n)) sums cos x"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1469
proof -
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1470
  have "(\<lambda>n. \<Sum>k = n * 2..<n * 2 + 2. cos_coeff k * x ^ k) sums cos x"
44727
d45acd50a894 modify lemma sums_group, and shorten proofs that use it
huffman
parents: 44726
diff changeset
  1471
    by (rule cos_converges [THEN sums_group], simp)
31271
0237e5e40b71 add constants sin_coeff, cos_coeff
huffman
parents: 31148
diff changeset
  1472
  thus ?thesis unfolding cos_coeff_def by (simp add: mult_ac)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1473
qed
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1474
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1475
lemma fact_lemma: "real (n::nat) * 4 = real (4 * n)"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1476
by simp
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1477
36824
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1478
lemma real_mult_inverse_cancel:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1479
     "[|(0::real) < x; 0 < x1; x1 * y < x * u |]
36824
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1480
      ==> inverse x * y < inverse x1 * u"
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1481
apply (rule_tac c=x in mult_less_imp_less_left)
36824
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1482
apply (auto simp add: mult_assoc [symmetric])
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1483
apply (simp (no_asm) add: mult_ac)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1484
apply (rule_tac c=x1 in mult_less_imp_less_right)
36824
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1485
apply (auto simp add: mult_ac)
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1486
done
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1487
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1488
lemma real_mult_inverse_cancel2:
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1489
     "[|(0::real) < x;0 < x1; x1 * y < x * u |] ==> y * inverse x < u * inverse x1"
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1490
apply (auto dest: real_mult_inverse_cancel simp add: mult_ac)
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1491
done
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1492
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1493
lemma realpow_num_eq_if:
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1494
  fixes m :: "'a::power"
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1495
  shows "m ^ n = (if n=0 then 1 else m * m ^ (n - 1))"
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1496
by (cases n, auto)
2e9a866141b8 move some theorems from RealPow.thy to Transcendental.thy
huffman
parents: 36777
diff changeset
  1497
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1498
lemma cos_two_less_zero [simp]: "cos (2) < 0"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1499
apply (cut_tac x = 2 in cos_paired)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1500
apply (drule sums_minus)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1501
apply (rule neg_less_iff_less [THEN iffD1])
15539
333a88244569 comprehensive cleanup, replacing sumr by setsum
nipkow
parents: 15536
diff changeset
  1502
apply (frule sums_unique, auto)
333a88244569 comprehensive cleanup, replacing sumr by setsum
nipkow
parents: 15536
diff changeset
  1503
apply (rule_tac y =
23177
3004310c95b1 replace (- 1) with -1
huffman
parents: 23176
diff changeset
  1504
 "\<Sum>n=0..< Suc(Suc(Suc 0)). - (-1 ^ n / (real(fact (2*n))) * 2 ^ (2*n))"
15481
fc075ae929e4 the new subst tactic, by Lucas Dixon
paulson
parents: 15383
diff changeset
  1505
       in order_less_trans)
32047
c141f139ce26 Changed fact_Suc_nat back to fact_Suc
avigad
parents: 32036
diff changeset
  1506
apply (simp (no_asm) add: fact_num_eq_if_nat realpow_num_eq_if del: fact_Suc)
15561
045a07ac35a7 another reorganization of setsums and intervals
nipkow
parents: 15546
diff changeset
  1507
apply (simp (no_asm) add: mult_assoc del: setsum_op_ivl_Suc)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1508
apply (rule sumr_pos_lt_pair)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1509
apply (erule sums_summable, safe)
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
  1510
unfolding One_nat_def
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1511
apply (simp (no_asm) add: divide_inverse real_0_less_add_iff mult_assoc [symmetric]
32047
c141f139ce26 Changed fact_Suc_nat back to fact_Suc
avigad
parents: 32036
diff changeset
  1512
            del: fact_Suc)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1513
apply (rule real_mult_inverse_cancel2)
44305
3bdc02eb1637 remove some redundant simp rules
huffman
parents: 44289
diff changeset
  1514
apply (simp del: fact_Suc)
3bdc02eb1637 remove some redundant simp rules
huffman
parents: 44289
diff changeset
  1515
apply (simp del: fact_Suc)
32047
c141f139ce26 Changed fact_Suc_nat back to fact_Suc
avigad
parents: 32036
diff changeset
  1516
apply (simp (no_asm) add: mult_assoc [symmetric] del: fact_Suc)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1517
apply (subst fact_lemma)
32047
c141f139ce26 Changed fact_Suc_nat back to fact_Suc
avigad
parents: 32036
diff changeset
  1518
apply (subst fact_Suc [of "Suc (Suc (Suc (Suc (Suc (Suc (Suc (4 * d)))))))"])
15481
fc075ae929e4 the new subst tactic, by Lucas Dixon
paulson
parents: 15383
diff changeset
  1519
apply (simp only: real_of_nat_mult)
23007
e025695d9b0e use mult_strict_mono instead of real_mult_less_mono
huffman
parents: 22998
diff changeset
  1520
apply (rule mult_strict_mono, force)
27483
7c58324cd418 use real_of_nat_ge_zero instead of real_of_nat_fact_ge_zero
huffman
parents: 25875
diff changeset
  1521
  apply (rule_tac [3] real_of_nat_ge_zero)
15481
fc075ae929e4 the new subst tactic, by Lucas Dixon
paulson
parents: 15383
diff changeset
  1522
 prefer 2 apply force
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1523
apply (rule real_of_nat_less_iff [THEN iffD2])
32036
8a9228872fbd Moved factorial lemmas from Binomial.thy to Fact.thy and merged.
avigad
parents: 31881
diff changeset
  1524
apply (rule fact_less_mono_nat, auto)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1525
done
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1526
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1527
lemmas cos_two_neq_zero [simp] = cos_two_less_zero [THEN less_imp_neq]
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1528
lemmas cos_two_le_zero [simp] = cos_two_less_zero [THEN order_less_imp_le]
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1529
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1530
lemma cos_is_zero: "EX! x. 0 \<le> x & x \<le> 2 & cos x = 0"
44730
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1531
proof (rule ex_ex1I)
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1532
  show "\<exists>x. 0 \<le> x & x \<le> 2 & cos x = 0"
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1533
    by (rule IVT2, simp_all)
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1534
next
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1535
  fix x y
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1536
  assume x: "0 \<le> x \<and> x \<le> 2 \<and> cos x = 0"
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1537
  assume y: "0 \<le> y \<and> y \<le> 2 \<and> cos y = 0"
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1538
  have [simp]: "\<forall>x. cos differentiable x"
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1539
    unfolding differentiable_def by (auto intro: DERIV_cos)
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1540
  from x y show "x = y"
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1541
    apply (cut_tac less_linear [of x y], auto)
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1542
    apply (drule_tac f = cos in Rolle)
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1543
    apply (drule_tac [5] f = cos in Rolle)
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1544
    apply (auto dest!: DERIV_cos [THEN DERIV_unique])
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1545
    apply (metis order_less_le_trans less_le sin_gt_zero)
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1546
    apply (metis order_less_le_trans less_le sin_gt_zero)
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1547
    done
11a1290fd0ac convert lemma cos_is_zero to Isar-style
huffman
parents: 44728
diff changeset
  1548
qed
31880
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  1549
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1550
lemma pi_half: "pi/2 = (THE x. 0 \<le> x & x \<le> 2 & cos x = 0)"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1551
by (simp add: pi_def)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1552
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1553
lemma cos_pi_half [simp]: "cos (pi / 2) = 0"
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1554
by (simp add: pi_half cos_is_zero [THEN theI'])
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1555
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1556
lemma pi_half_gt_zero [simp]: "0 < pi / 2"
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1557
apply (rule order_le_neq_trans)
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1558
apply (simp add: pi_half cos_is_zero [THEN theI'])
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1559
apply (rule notI, drule arg_cong [where f=cos], simp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1560
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1561
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1562
lemmas pi_half_neq_zero [simp] = pi_half_gt_zero [THEN less_imp_neq, symmetric]
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1563
lemmas pi_half_ge_zero [simp] = pi_half_gt_zero [THEN order_less_imp_le]
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1564
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1565
lemma pi_half_less_two [simp]: "pi / 2 < 2"
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1566
apply (rule order_le_neq_trans)
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1567
apply (simp add: pi_half cos_is_zero [THEN theI'])
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1568
apply (rule notI, drule arg_cong [where f=cos], simp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1569
done
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1570
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1571
lemmas pi_half_neq_two [simp] = pi_half_less_two [THEN less_imp_neq]
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1572
lemmas pi_half_le_two [simp] =  pi_half_less_two [THEN order_less_imp_le]
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1573
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1574
lemma pi_gt_zero [simp]: "0 < pi"
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1575
by (insert pi_half_gt_zero, simp)
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1576
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1577
lemma pi_ge_zero [simp]: "0 \<le> pi"
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1578
by (rule pi_gt_zero [THEN order_less_imp_le])
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1579
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1580
lemma pi_neq_zero [simp]: "pi \<noteq> 0"
22998
97e1f9c2cc46 avoid using redundant lemmas from RealDef.thy
huffman
parents: 22978
diff changeset
  1581
by (rule pi_gt_zero [THEN less_imp_neq, THEN not_sym])
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1582
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1583
lemma pi_not_less_zero [simp]: "\<not> pi < 0"
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1584
by (simp add: linorder_not_less)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1585
29165
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1586
lemma minus_pi_half_less_zero: "-(pi/2) < 0"
562f95f06244 cleaned up some proofs; removed redundant simp rules
huffman
parents: 29164
diff changeset
  1587
by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1588
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1589
lemma m2pi_less_pi: "- (2 * pi) < pi"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1590
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1591
  have "- (2 * pi) < 0" and "0 < pi" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1592
  from order_less_trans[OF this] show ?thesis .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1593
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1594
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1595
lemma sin_pi_half [simp]: "sin(pi/2) = 1"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1596
apply (cut_tac x = "pi/2" in sin_cos_squared_add2)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1597
apply (cut_tac sin_gt_zero [OF pi_half_gt_zero pi_half_less_two])
36970
fb3fdb4b585e remove simp attribute from square_eq_1_iff
huffman
parents: 36842
diff changeset
  1598
apply (simp add: power2_eq_1_iff)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1599
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1600
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1601
lemma cos_pi [simp]: "cos pi = -1"
15539
333a88244569 comprehensive cleanup, replacing sumr by setsum
nipkow
parents: 15536
diff changeset
  1602
by (cut_tac x = "pi/2" and y = "pi/2" in cos_add, simp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1603
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1604
lemma sin_pi [simp]: "sin pi = 0"
15539
333a88244569 comprehensive cleanup, replacing sumr by setsum
nipkow
parents: 15536
diff changeset
  1605
by (cut_tac x = "pi/2" and y = "pi/2" in sin_add, simp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1606
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1607
lemma sin_cos_eq: "sin x = cos (pi/2 - x)"
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1608
by (simp add: diff_minus cos_add)
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1609
declare sin_cos_eq [symmetric, simp]
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1610
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1611
lemma minus_sin_cos_eq: "-sin x = cos (x + pi/2)"
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1612
by (simp add: cos_add)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1613
declare minus_sin_cos_eq [symmetric, simp]
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1614
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1615
lemma cos_sin_eq: "cos x = sin (pi/2 - x)"
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1616
by (simp add: diff_minus sin_add)
23053
03fe1dafa418 define pi with THE instead of SOME; cleaned up
huffman
parents: 23052
diff changeset
  1617
declare cos_sin_eq [symmetric, simp]
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1618
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1619
lemma sin_periodic_pi [simp]: "sin (x + pi) = - sin x"
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1620
by (simp add: sin_add)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1621
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1622
lemma sin_periodic_pi2 [simp]: "sin (pi + x) = - sin x"
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1623
by (simp add: sin_add)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1624
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1625
lemma cos_periodic_pi [simp]: "cos (x + pi) = - cos x"
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1626
by (simp add: cos_add)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1627
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1628
lemma sin_periodic [simp]: "sin (x + 2*pi) = sin x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1629
by (simp add: sin_add cos_double)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1630
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1631
lemma cos_periodic [simp]: "cos (x + 2*pi) = cos x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1632
by (simp add: cos_add cos_double)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1633
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1634
lemma cos_npi [simp]: "cos (real n * pi) = -1 ^ n"
15251
bb6f072c8d10 converted some induct_tac to induct
paulson
parents: 15241
diff changeset
  1635
apply (induct "n")
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1636
apply (auto simp add: real_of_nat_Suc left_distrib)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1637
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1638
15383
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  1639
lemma cos_npi2 [simp]: "cos (pi * real n) = -1 ^ n"
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  1640
proof -
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  1641
  have "cos (pi * real n) = cos (real n * pi)" by (simp only: mult_commute)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1642
  also have "... = -1 ^ n" by (rule cos_npi)
15383
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  1643
  finally show ?thesis .
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  1644
qed
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  1645
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1646
lemma sin_npi [simp]: "sin (real (n::nat) * pi) = 0"
15251
bb6f072c8d10 converted some induct_tac to induct
paulson
parents: 15241
diff changeset
  1647
apply (induct "n")
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1648
apply (auto simp add: real_of_nat_Suc left_distrib)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1649
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1650
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1651
lemma sin_npi2 [simp]: "sin (pi * real (n::nat)) = 0"
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1652
by (simp add: mult_commute [of pi])
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1653
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1654
lemma cos_two_pi [simp]: "cos (2 * pi) = 1"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1655
by (simp add: cos_double)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1656
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1657
lemma sin_two_pi [simp]: "sin (2 * pi) = 0"
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1658
by simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1659
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1660
lemma sin_gt_zero2: "[| 0 < x; x < pi/2 |] ==> 0 < sin x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1661
apply (rule sin_gt_zero, assumption)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1662
apply (rule order_less_trans, assumption)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1663
apply (rule pi_half_less_two)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1664
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1665
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1666
lemma sin_less_zero:
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1667
  assumes lb: "- pi/2 < x" and "x < 0" shows "sin x < 0"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1668
proof -
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1669
  have "0 < sin (- x)" using assms by (simp only: sin_gt_zero2)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1670
  thus ?thesis by simp
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1671
qed
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1672
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1673
lemma pi_less_4: "pi < 4"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1674
by (cut_tac pi_half_less_two, auto)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1675
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1676
lemma cos_gt_zero: "[| 0 < x; x < pi/2 |] ==> 0 < cos x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1677
apply (cut_tac pi_less_4)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1678
apply (cut_tac f = cos and a = 0 and b = x and y = 0 in IVT2_objl, safe, simp_all)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1679
apply (cut_tac cos_is_zero, safe)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1680
apply (rename_tac y z)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1681
apply (drule_tac x = y in spec)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1682
apply (drule_tac x = "pi/2" in spec, simp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1683
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1684
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1685
lemma cos_gt_zero_pi: "[| -(pi/2) < x; x < pi/2 |] ==> 0 < cos x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1686
apply (rule_tac x = x and y = 0 in linorder_cases)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1687
apply (rule cos_minus [THEN subst])
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1688
apply (rule cos_gt_zero)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1689
apply (auto intro: cos_gt_zero)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1690
done
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1691
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1692
lemma cos_ge_zero: "[| -(pi/2) \<le> x; x \<le> pi/2 |] ==> 0 \<le> cos x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1693
apply (auto simp add: order_le_less cos_gt_zero_pi)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1694
apply (subgoal_tac "x = pi/2", auto)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1695
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1696
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1697
lemma sin_gt_zero_pi: "[| 0 < x; x < pi  |] ==> 0 < sin x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1698
apply (subst sin_cos_eq)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1699
apply (rotate_tac 1)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1700
apply (drule real_sum_of_halves [THEN ssubst])
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1701
apply (auto intro!: cos_gt_zero_pi simp del: sin_cos_eq [symmetric])
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1702
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1703
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1704
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1705
lemma pi_ge_two: "2 \<le> pi"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1706
proof (rule ccontr)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1707
  assume "\<not> 2 \<le> pi" hence "pi < 2" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1708
  have "\<exists>y > pi. y < 2 \<and> y < 2 * pi"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1709
  proof (cases "2 < 2 * pi")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1710
    case True with dense[OF `pi < 2`] show ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1711
  next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1712
    case False have "pi < 2 * pi" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1713
    from dense[OF this] and False show ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1714
  qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1715
  then obtain y where "pi < y" and "y < 2" and "y < 2 * pi" by blast
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1716
  hence "0 < sin y" using sin_gt_zero by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1717
  moreover
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1718
  have "sin y < 0" using sin_gt_zero_pi[of "y - pi"] `pi < y` and `y < 2 * pi` sin_periodic_pi[of "y - pi"] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1719
  ultimately show False by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1720
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1721
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1722
lemma sin_ge_zero: "[| 0 \<le> x; x \<le> pi |] ==> 0 \<le> sin x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1723
by (auto simp add: order_le_less sin_gt_zero_pi)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1724
44745
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1725
text {* FIXME: This proof is almost identical to lemma @{text cos_is_zero}.
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1726
  It should be possible to factor out some of the common parts. *}
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1727
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1728
lemma cos_total: "[| -1 \<le> y; y \<le> 1 |] ==> EX! x. 0 \<le> x & x \<le> pi & (cos x = y)"
44745
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1729
proof (rule ex_ex1I)
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1730
  assume y: "-1 \<le> y" "y \<le> 1"
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1731
  show "\<exists>x. 0 \<le> x & x \<le> pi & cos x = y"
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1732
    by (rule IVT2, simp_all add: y)
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1733
next
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1734
  fix a b
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1735
  assume a: "0 \<le> a \<and> a \<le> pi \<and> cos a = y"
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1736
  assume b: "0 \<le> b \<and> b \<le> pi \<and> cos b = y"
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1737
  have [simp]: "\<forall>x. cos differentiable x"
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1738
    unfolding differentiable_def by (auto intro: DERIV_cos)
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1739
  from a b show "a = b"
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1740
    apply (cut_tac less_linear [of a b], auto)
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1741
    apply (drule_tac f = cos in Rolle)
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1742
    apply (drule_tac [5] f = cos in Rolle)
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1743
    apply (auto dest!: DERIV_cos [THEN DERIV_unique])
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1744
    apply (metis order_less_le_trans less_le sin_gt_zero_pi)
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1745
    apply (metis order_less_le_trans less_le sin_gt_zero_pi)
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1746
    done
b068207a7400 convert lemma cos_total to Isar-style proof
huffman
parents: 44730
diff changeset
  1747
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1748
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1749
lemma sin_total:
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1750
     "[| -1 \<le> y; y \<le> 1 |] ==> EX! x. -(pi/2) \<le> x & x \<le> pi/2 & (sin x = y)"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1751
apply (rule ccontr)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1752
apply (subgoal_tac "\<forall>x. (- (pi/2) \<le> x & x \<le> pi/2 & (sin x = y)) = (0 \<le> (x + pi/2) & (x + pi/2) \<le> pi & (cos (x + pi/2) = -y))")
18585
5d379fe2eb74 replaced swap by contrapos_np;
wenzelm
parents: 17318
diff changeset
  1753
apply (erule contrapos_np)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1754
apply (simp del: minus_sin_cos_eq [symmetric])
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1755
apply (cut_tac y="-y" in cos_total, simp) apply simp
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1756
apply (erule ex1E)
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1757
apply (rule_tac a = "x - (pi/2)" in ex1I)
23286
huffman
parents: 23278
diff changeset
  1758
apply (simp (no_asm) add: add_assoc)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1759
apply (rotate_tac 3)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1760
apply (drule_tac x = "xa + pi/2" in spec, safe, simp_all)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1761
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1762
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1763
lemma reals_Archimedean4:
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1764
     "[| 0 < y; 0 \<le> x |] ==> \<exists>n. real n * y \<le> x & x < real (Suc n) * y"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1765
apply (auto dest!: reals_Archimedean3)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1766
apply (drule_tac x = x in spec, clarify)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1767
apply (subgoal_tac "x < real(LEAST m::nat. x < real m * y) * y")
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1768
 prefer 2 apply (erule LeastI)
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1769
apply (case_tac "LEAST m::nat. x < real m * y", simp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1770
apply (subgoal_tac "~ x < real nat * y")
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1771
 prefer 2 apply (rule not_less_Least, simp, force)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1772
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1773
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1774
(* Pre Isabelle99-2 proof was simpler- numerals arithmetic
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1775
   now causes some unwanted re-arrangements of literals!   *)
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1776
lemma cos_zero_lemma:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1777
     "[| 0 \<le> x; cos x = 0 |] ==>
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1778
      \<exists>n::nat. ~even n & x = real n * (pi/2)"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1779
apply (drule pi_gt_zero [THEN reals_Archimedean4], safe)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1780
apply (subgoal_tac "0 \<le> x - real n * pi &
15086
e6a2a98d5ef5 removal of more iff-rules from RealDef.thy
paulson
parents: 15085
diff changeset
  1781
                    (x - real n * pi) \<le> pi & (cos (x - real n * pi) = 0) ")
29667
53103fc8ffa3 Replaced group_ and ring_simps by algebra_simps;
nipkow
parents: 29171
diff changeset
  1782
apply (auto simp add: algebra_simps real_of_nat_Suc)
53103fc8ffa3 Replaced group_ and ring_simps by algebra_simps;
nipkow
parents: 29171
diff changeset
  1783
 prefer 2 apply (simp add: cos_diff)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1784
apply (simp add: cos_diff)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1785
apply (subgoal_tac "EX! x. 0 \<le> x & x \<le> pi & cos x = 0")
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1786
apply (rule_tac [2] cos_total, safe)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1787
apply (drule_tac x = "x - real n * pi" in spec)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1788
apply (drule_tac x = "pi/2" in spec)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1789
apply (simp add: cos_diff)
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1790
apply (rule_tac x = "Suc (2 * n)" in exI)
29667
53103fc8ffa3 Replaced group_ and ring_simps by algebra_simps;
nipkow
parents: 29171
diff changeset
  1791
apply (simp add: real_of_nat_Suc algebra_simps, auto)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1792
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1793
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1794
lemma sin_zero_lemma:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1795
     "[| 0 \<le> x; sin x = 0 |] ==>
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1796
      \<exists>n::nat. even n & x = real n * (pi/2)"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1797
apply (subgoal_tac "\<exists>n::nat. ~ even n & x + pi/2 = real n * (pi/2) ")
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1798
 apply (clarify, rule_tac x = "n - 1" in exI)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1799
 apply (force simp add: odd_Suc_mult_two_ex real_of_nat_Suc left_distrib)
15085
5693a977a767 removed some [iff] declarations from RealDef.thy, concerning inequalities
paulson
parents: 15081
diff changeset
  1800
apply (rule cos_zero_lemma)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1801
apply (simp_all add: add_increasing)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1802
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1803
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1804
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1805
lemma cos_zero_iff:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1806
     "(cos x = 0) =
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1807
      ((\<exists>n::nat. ~even n & (x = real n * (pi/2))) |
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1808
       (\<exists>n::nat. ~even n & (x = -(real n * (pi/2)))))"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1809
apply (rule iffI)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1810
apply (cut_tac linorder_linear [of 0 x], safe)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1811
apply (drule cos_zero_lemma, assumption+)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1812
apply (cut_tac x="-x" in cos_zero_lemma, simp, simp)
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1813
apply (force simp add: minus_equation_iff [of x])
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1814
apply (auto simp only: odd_Suc_mult_two_ex real_of_nat_Suc left_distrib)
15539
333a88244569 comprehensive cleanup, replacing sumr by setsum
nipkow
parents: 15536
diff changeset
  1815
apply (auto simp add: cos_add)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1816
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1817
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1818
(* ditto: but to a lesser extent *)
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1819
lemma sin_zero_iff:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1820
     "(sin x = 0) =
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1821
      ((\<exists>n::nat. even n & (x = real n * (pi/2))) |
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1822
       (\<exists>n::nat. even n & (x = -(real n * (pi/2)))))"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1823
apply (rule iffI)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1824
apply (cut_tac linorder_linear [of 0 x], safe)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1825
apply (drule sin_zero_lemma, assumption+)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1826
apply (cut_tac x="-x" in sin_zero_lemma, simp, simp, safe)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1827
apply (force simp add: minus_equation_iff [of x])
15539
333a88244569 comprehensive cleanup, replacing sumr by setsum
nipkow
parents: 15536
diff changeset
  1828
apply (auto simp add: even_mult_two_ex)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1829
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1830
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1831
lemma cos_monotone_0_pi: assumes "0 \<le> y" and "y < x" and "x \<le> pi"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1832
  shows "cos x < cos y"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1833
proof -
33549
39f2855ce41b tuned proofs;
wenzelm
parents: 32960
diff changeset
  1834
  have "- (x - y) < 0" using assms by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1835
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1836
  from MVT2[OF `y < x` DERIV_cos[THEN impI, THEN allI]]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1837
  obtain z where "y < z" and "z < x" and cos_diff: "cos x - cos y = (x - y) * - sin z" by auto
33549
39f2855ce41b tuned proofs;
wenzelm
parents: 32960
diff changeset
  1838
  hence "0 < z" and "z < pi" using assms by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1839
  hence "0 < sin z" using sin_gt_zero_pi by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1840
  hence "cos x - cos y < 0" unfolding cos_diff minus_mult_commute[symmetric] using `- (x - y) < 0` by (rule mult_pos_neg2)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1841
  thus ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1842
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1843
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1844
lemma cos_monotone_0_pi': assumes "0 \<le> y" and "y \<le> x" and "x \<le> pi" shows "cos x \<le> cos y"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1845
proof (cases "y < x")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1846
  case True show ?thesis using cos_monotone_0_pi[OF `0 \<le> y` True `x \<le> pi`] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1847
next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1848
  case False hence "y = x" using `y \<le> x` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1849
  thus ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1850
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1851
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1852
lemma cos_monotone_minus_pi_0: assumes "-pi \<le> y" and "y < x" and "x \<le> 0"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1853
  shows "cos y < cos x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1854
proof -
33549
39f2855ce41b tuned proofs;
wenzelm
parents: 32960
diff changeset
  1855
  have "0 \<le> -x" and "-x < -y" and "-y \<le> pi" using assms by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1856
  from cos_monotone_0_pi[OF this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1857
  show ?thesis unfolding cos_minus .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1858
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1859
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1860
lemma cos_monotone_minus_pi_0': assumes "-pi \<le> y" and "y \<le> x" and "x \<le> 0" shows "cos y \<le> cos x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1861
proof (cases "y < x")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1862
  case True show ?thesis using cos_monotone_minus_pi_0[OF `-pi \<le> y` True `x \<le> 0`] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1863
next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1864
  case False hence "y = x" using `y \<le> x` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1865
  thus ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1866
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1867
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1868
lemma sin_monotone_2pi': assumes "- (pi / 2) \<le> y" and "y \<le> x" and "x \<le> pi / 2" shows "sin y \<le> sin x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1869
proof -
33549
39f2855ce41b tuned proofs;
wenzelm
parents: 32960
diff changeset
  1870
  have "0 \<le> y + pi / 2" and "y + pi / 2 \<le> x + pi / 2" and "x + pi /2 \<le> pi"
39f2855ce41b tuned proofs;
wenzelm
parents: 32960
diff changeset
  1871
    using pi_ge_two and assms by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1872
  from cos_monotone_0_pi'[OF this] show ?thesis unfolding minus_sin_cos_eq[symmetric] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1873
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1874
29164
0d49c5b55046 move sin and cos to their own subsection
huffman
parents: 29163
diff changeset
  1875
subsection {* Tangent *}
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1876
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1877
definition tan :: "real \<Rightarrow> real" where
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1878
  "tan = (\<lambda>x. sin x / cos x)"
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  1879
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1880
lemma tan_zero [simp]: "tan 0 = 0"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1881
  by (simp add: tan_def)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1882
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1883
lemma tan_pi [simp]: "tan pi = 0"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1884
  by (simp add: tan_def)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1885
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1886
lemma tan_npi [simp]: "tan (real (n::nat) * pi) = 0"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1887
  by (simp add: tan_def)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1888
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1889
lemma tan_minus [simp]: "tan (-x) = - tan x"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1890
  by (simp add: tan_def)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1891
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1892
lemma tan_periodic [simp]: "tan (x + 2*pi) = tan x"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1893
  by (simp add: tan_def)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1894
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1895
lemma lemma_tan_add1:
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1896
  "\<lbrakk>cos x \<noteq> 0; cos y \<noteq> 0\<rbrakk> \<Longrightarrow> 1 - tan x * tan y = cos (x + y)/(cos x * cos y)"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1897
  by (simp add: tan_def cos_add field_simps)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1898
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1899
lemma add_tan_eq:
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1900
  "\<lbrakk>cos x \<noteq> 0; cos y \<noteq> 0\<rbrakk> \<Longrightarrow> tan x + tan y = sin(x + y)/(cos x * cos y)"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1901
  by (simp add: tan_def sin_add field_simps)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1902
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1903
lemma tan_add:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1904
     "[| cos x \<noteq> 0; cos y \<noteq> 0; cos (x + y) \<noteq> 0 |]
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1905
      ==> tan(x + y) = (tan(x) + tan(y))/(1 - tan(x) * tan(y))"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1906
  by (simp add: add_tan_eq lemma_tan_add1, simp add: tan_def)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1907
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1908
lemma tan_double:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1909
     "[| cos x \<noteq> 0; cos (2 * x) \<noteq> 0 |]
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1910
      ==> tan (2 * x) = (2 * tan x)/(1 - (tan(x) ^ 2))"
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1911
  using tan_add [of x x] by (simp add: power2_eq_square)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1912
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1913
lemma tan_gt_zero: "[| 0 < x; x < pi/2 |] ==> 0 < tan x"
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1914
by (simp add: tan_def zero_less_divide_iff sin_gt_zero2 cos_gt_zero_pi)
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1915
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1916
lemma tan_less_zero:
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1917
  assumes lb: "- pi/2 < x" and "x < 0" shows "tan x < 0"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1918
proof -
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  1919
  have "0 < tan (- x)" using assms by (simp only: tan_gt_zero)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1920
  thus ?thesis by simp
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1921
qed
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1922
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1923
lemma tan_half: fixes x :: real assumes "- (pi / 2) < x" and "x < pi / 2"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1924
  shows "tan x = sin (2 * x) / (cos (2 * x) + 1)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1925
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1926
  from cos_gt_zero_pi[OF `- (pi / 2) < x` `x < pi / 2`]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1927
  have "cos x \<noteq> 0" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1928
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1929
  have minus_cos_2x: "\<And>X. X - cos (2*x) = X - (cos x) ^ 2 + (sin x) ^ 2" unfolding cos_double by algebra
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1930
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1931
  have "tan x = (tan x + tan x) / 2" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1932
  also have "\<dots> = sin (x + x) / (cos x * cos x) / 2" unfolding add_tan_eq[OF `cos x \<noteq> 0` `cos x \<noteq> 0`] ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1933
  also have "\<dots> = sin (2 * x) / ((cos x) ^ 2 + (cos x) ^ 2 + cos (2*x) - cos (2*x))" unfolding divide_divide_eq_left numeral_2_eq_2 by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1934
  also have "\<dots> = sin (2 * x) / ((cos x) ^ 2 + cos (2*x) + (sin x)^2)" unfolding minus_cos_2x by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1935
  also have "\<dots> = sin (2 * x) / (cos (2*x) + 1)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1936
  finally show ?thesis .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1937
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  1938
44311
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1939
lemma DERIV_tan [simp]: "cos x \<noteq> 0 \<Longrightarrow> DERIV tan x :> inverse ((cos x)\<twosuperior>)"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1940
  unfolding tan_def
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1941
  by (auto intro!: DERIV_intros, simp add: divide_inverse power2_eq_square)
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1942
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1943
lemma isCont_tan: "cos x \<noteq> 0 \<Longrightarrow> isCont tan x"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1944
  by (rule DERIV_tan [THEN DERIV_isCont])
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1945
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1946
lemma isCont_tan' [simp]:
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1947
  "\<lbrakk>isCont f a; cos (f a) \<noteq> 0\<rbrakk> \<Longrightarrow> isCont (\<lambda>x. tan (f x)) a"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1948
  by (rule isCont_o2 [OF _ isCont_tan])
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1949
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1950
lemma tendsto_tan [tendsto_intros]:
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1951
  "\<lbrakk>(f ---> a) F; cos a \<noteq> 0\<rbrakk> \<Longrightarrow> ((\<lambda>x. tan (f x)) ---> tan a) F"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1952
  by (rule isCont_tendsto_compose [OF isCont_tan])
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1953
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1954
lemma LIM_cos_div_sin: "(%x. cos(x)/sin(x)) -- pi/2 --> 0"
42c5cbf68052 Transcendental.thy: add tendsto_intros lemmas;
huffman
parents: 44308
diff changeset
  1955
  by (rule LIM_cong_limit, (rule tendsto_intros)+, simp_all)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1956
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1957
lemma lemma_tan_total: "0 < y ==> \<exists>x. 0 < x & x < pi/2 & y < tan x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1958
apply (cut_tac LIM_cos_div_sin)
31338
d41a8ba25b67 generalize constants from Lim.thy to class metric_space
huffman
parents: 31271
diff changeset
  1959
apply (simp only: LIM_eq)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1960
apply (drule_tac x = "inverse y" in spec, safe, force)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1961
apply (drule_tac ?d1.0 = s in pi_half_gt_zero [THEN [2] real_lbound_gt_zero], safe)
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1962
apply (rule_tac x = "(pi/2) - e" in exI)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1963
apply (simp (no_asm_simp))
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1964
apply (drule_tac x = "(pi/2) - e" in spec)
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1965
apply (auto simp add: tan_def)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1966
apply (rule inverse_less_iff_less [THEN iffD1])
15079
2ef899e4526d conversion of Hyperreal/MacLaurin_lemmas to Isar script
paulson
parents: 15077
diff changeset
  1967
apply (auto simp add: divide_inverse)
36777
be5461582d0f avoid using real-specific versions of generic lemmas
huffman
parents: 36776
diff changeset
  1968
apply (rule mult_pos_pos)
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  1969
apply (subgoal_tac [3] "0 < sin e & 0 < cos e")
36777
be5461582d0f avoid using real-specific versions of generic lemmas
huffman
parents: 36776
diff changeset
  1970
apply (auto intro: cos_gt_zero sin_gt_zero2 simp add: mult_commute)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1971
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1972
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1973
lemma tan_total_pos: "0 \<le> y ==> \<exists>x. 0 \<le> x & x < pi/2 & tan x = y"
22998
97e1f9c2cc46 avoid using redundant lemmas from RealDef.thy
huffman
parents: 22978
diff changeset
  1974
apply (frule order_le_imp_less_or_eq, safe)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1975
 prefer 2 apply force
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1976
apply (drule lemma_tan_total, safe)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1977
apply (cut_tac f = tan and a = 0 and b = x and y = y in IVT_objl)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1978
apply (auto intro!: DERIV_tan [THEN DERIV_isCont])
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1979
apply (drule_tac y = xa in order_le_imp_less_or_eq)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1980
apply (auto dest: cos_gt_zero)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1981
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1982
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1983
lemma lemma_tan_total1: "\<exists>x. -(pi/2) < x & x < (pi/2) & tan x = y"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1984
apply (cut_tac linorder_linear [of 0 y], safe)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1985
apply (drule tan_total_pos)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1986
apply (cut_tac [2] y="-y" in tan_total_pos, safe)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1987
apply (rule_tac [3] x = "-x" in exI)
44710
9caf6883f1f4 remove redundant lemmas about LIMSEQ
huffman
parents: 44568
diff changeset
  1988
apply (auto del: exI intro!: exI)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1989
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1990
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1991
lemma tan_total: "EX! x. -(pi/2) < x & x < (pi/2) & tan x = y"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1992
apply (cut_tac y = y in lemma_tan_total1, auto)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1993
apply (cut_tac x = xa and y = y in linorder_less_linear, auto)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1994
apply (subgoal_tac [2] "\<exists>z. y < z & z < xa & DERIV tan z :> 0")
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1995
apply (subgoal_tac "\<exists>z. xa < z & z < y & DERIV tan z :> 0")
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1996
apply (rule_tac [4] Rolle)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1997
apply (rule_tac [2] Rolle)
44710
9caf6883f1f4 remove redundant lemmas about LIMSEQ
huffman
parents: 44568
diff changeset
  1998
apply (auto del: exI intro!: DERIV_tan DERIV_isCont exI
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  1999
            simp add: differentiable_def)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2000
txt{*Now, simulate TRYALL*}
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2001
apply (rule_tac [!] DERIV_tan asm_rl)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2002
apply (auto dest!: DERIV_unique [OF _ DERIV_tan]
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2003
            simp add: cos_gt_zero_pi [THEN less_imp_neq, THEN not_sym])
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2004
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2005
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2006
lemma tan_monotone: assumes "- (pi / 2) < y" and "y < x" and "x < pi / 2"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2007
  shows "tan y < tan x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2008
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2009
  have "\<forall> x'. y \<le> x' \<and> x' \<le> x \<longrightarrow> DERIV tan x' :> inverse (cos x'^2)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2010
  proof (rule allI, rule impI)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2011
    fix x' :: real assume "y \<le> x' \<and> x' \<le> x"
33549
39f2855ce41b tuned proofs;
wenzelm
parents: 32960
diff changeset
  2012
    hence "-(pi/2) < x'" and "x' < pi/2" using assms by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2013
    from cos_gt_zero_pi[OF this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2014
    have "cos x' \<noteq> 0" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2015
    thus "DERIV tan x' :> inverse (cos x'^2)" by (rule DERIV_tan)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2016
  qed
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2017
  from MVT2[OF `y < x` this]
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2018
  obtain z where "y < z" and "z < x" and tan_diff: "tan x - tan y = (x - y) * inverse ((cos z)\<twosuperior>)" by auto
33549
39f2855ce41b tuned proofs;
wenzelm
parents: 32960
diff changeset
  2019
  hence "- (pi / 2) < z" and "z < pi / 2" using assms by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2020
  hence "0 < cos z" using cos_gt_zero_pi by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2021
  hence inv_pos: "0 < inverse ((cos z)\<twosuperior>)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2022
  have "0 < x - y" using `y < x` by auto
36777
be5461582d0f avoid using real-specific versions of generic lemmas
huffman
parents: 36776
diff changeset
  2023
  from mult_pos_pos [OF this inv_pos]
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2024
  have "0 < tan x - tan y" unfolding tan_diff by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2025
  thus ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2026
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2027
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2028
lemma tan_monotone': assumes "- (pi / 2) < y" and "y < pi / 2" and "- (pi / 2) < x" and "x < pi / 2"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2029
  shows "(y < x) = (tan y < tan x)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2030
proof
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2031
  assume "y < x" thus "tan y < tan x" using tan_monotone and `- (pi / 2) < y` and `x < pi / 2` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2032
next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2033
  assume "tan y < tan x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2034
  show "y < x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2035
  proof (rule ccontr)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2036
    assume "\<not> y < x" hence "x \<le> y" by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2037
    hence "tan x \<le> tan y"
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2038
    proof (cases "x = y")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2039
      case True thus ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2040
    next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2041
      case False hence "x < y" using `x \<le> y` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2042
      from tan_monotone[OF `- (pi/2) < x` this `y < pi / 2`] show ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2043
    qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2044
    thus False using `tan y < tan x` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2045
  qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2046
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2047
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2048
lemma tan_inverse: "1 / (tan y) = tan (pi / 2 - y)" unfolding tan_def sin_cos_eq[of y] cos_sin_eq[of y] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2049
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2050
lemma tan_periodic_pi[simp]: "tan (x + pi) = tan x"
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2051
  by (simp add: tan_def)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2052
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2053
lemma tan_periodic_nat[simp]: fixes n :: nat shows "tan (x + real n * pi) = tan x"
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2054
proof (induct n arbitrary: x)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2055
  case (Suc n)
36777
be5461582d0f avoid using real-specific versions of generic lemmas
huffman
parents: 36776
diff changeset
  2056
  have split_pi_off: "x + real (Suc n) * pi = (x + real n * pi) + pi" unfolding Suc_eq_plus1 real_of_nat_add real_of_one left_distrib by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2057
  show ?case unfolding split_pi_off using Suc by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2058
qed auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2059
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2060
lemma tan_periodic_int[simp]: fixes i :: int shows "tan (x + real i * pi) = tan x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2061
proof (cases "0 \<le> i")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2062
  case True hence i_nat: "real i = real (nat i)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2063
  show ?thesis unfolding i_nat by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2064
next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2065
  case False hence i_nat: "real i = - real (nat (-i))" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2066
  have "tan x = tan (x + real i * pi - real i * pi)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2067
  also have "\<dots> = tan (x + real i * pi)" unfolding i_nat mult_minus_left diff_minus_eq_add by (rule tan_periodic_nat)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2068
  finally show ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2069
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2070
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2071
lemma tan_periodic_n[simp]: "tan (x + number_of n * pi) = tan x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2072
  using tan_periodic_int[of _ "number_of n" ] unfolding real_number_of .
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2073
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2074
subsection {* Inverse Trigonometric Functions *}
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2075
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2076
definition
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2077
  arcsin :: "real => real" where
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2078
  "arcsin y = (THE x. -(pi/2) \<le> x & x \<le> pi/2 & sin x = y)"
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2079
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2080
definition
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2081
  arccos :: "real => real" where
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2082
  "arccos y = (THE x. 0 \<le> x & x \<le> pi & cos x = y)"
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2083
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2084
definition
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2085
  arctan :: "real => real" where
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2086
  "arctan y = (THE x. -(pi/2) < x & x < pi/2 & tan x = y)"
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2087
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  2088
lemma arcsin:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2089
     "[| -1 \<le> y; y \<le> 1 |]
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2090
      ==> -(pi/2) \<le> arcsin y &
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2091
           arcsin y \<le> pi/2 & sin(arcsin y) = y"
23011
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2092
unfolding arcsin_def by (rule theI' [OF sin_total])
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2093
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2094
lemma arcsin_pi:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2095
     "[| -1 \<le> y; y \<le> 1 |]
23011
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2096
      ==> -(pi/2) \<le> arcsin y & arcsin y \<le> pi & sin(arcsin y) = y"
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2097
apply (drule (1) arcsin)
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2098
apply (force intro: order_trans)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2099
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2100
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2101
lemma sin_arcsin [simp]: "[| -1 \<le> y; y \<le> 1 |] ==> sin(arcsin y) = y"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2102
by (blast dest: arcsin)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2103
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2104
lemma arcsin_bounded:
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2105
     "[| -1 \<le> y; y \<le> 1 |] ==> -(pi/2) \<le> arcsin y & arcsin y \<le> pi/2"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2106
by (blast dest: arcsin)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2107
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2108
lemma arcsin_lbound: "[| -1 \<le> y; y \<le> 1 |] ==> -(pi/2) \<le> arcsin y"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2109
by (blast dest: arcsin)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2110
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2111
lemma arcsin_ubound: "[| -1 \<le> y; y \<le> 1 |] ==> arcsin y \<le> pi/2"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2112
by (blast dest: arcsin)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2113
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2114
lemma arcsin_lt_bounded:
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2115
     "[| -1 < y; y < 1 |] ==> -(pi/2) < arcsin y & arcsin y < pi/2"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2116
apply (frule order_less_imp_le)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2117
apply (frule_tac y = y in order_less_imp_le)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2118
apply (frule arcsin_bounded)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2119
apply (safe, simp)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2120
apply (drule_tac y = "arcsin y" in order_le_imp_less_or_eq)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2121
apply (drule_tac [2] y = "pi/2" in order_le_imp_less_or_eq, safe)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2122
apply (drule_tac [!] f = sin in arg_cong, auto)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2123
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2124
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2125
lemma arcsin_sin: "[|-(pi/2) \<le> x; x \<le> pi/2 |] ==> arcsin(sin x) = x"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2126
apply (unfold arcsin_def)
23011
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2127
apply (rule the1_equality)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2128
apply (rule sin_total, auto)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2129
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2130
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2131
lemma arccos:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2132
     "[| -1 \<le> y; y \<le> 1 |]
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2133
      ==> 0 \<le> arccos y & arccos y \<le> pi & cos(arccos y) = y"
23011
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2134
unfolding arccos_def by (rule theI' [OF cos_total])
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2135
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2136
lemma cos_arccos [simp]: "[| -1 \<le> y; y \<le> 1 |] ==> cos(arccos y) = y"
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2137
by (blast dest: arccos)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2138
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2139
lemma arccos_bounded: "[| -1 \<le> y; y \<le> 1 |] ==> 0 \<le> arccos y & arccos y \<le> pi"
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2140
by (blast dest: arccos)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2141
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2142
lemma arccos_lbound: "[| -1 \<le> y; y \<le> 1 |] ==> 0 \<le> arccos y"
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2143
by (blast dest: arccos)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2144
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2145
lemma arccos_ubound: "[| -1 \<le> y; y \<le> 1 |] ==> arccos y \<le> pi"
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2146
by (blast dest: arccos)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2147
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2148
lemma arccos_lt_bounded:
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2149
     "[| -1 < y; y < 1 |]
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2150
      ==> 0 < arccos y & arccos y < pi"
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2151
apply (frule order_less_imp_le)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2152
apply (frule_tac y = y in order_less_imp_le)
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2153
apply (frule arccos_bounded, auto)
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2154
apply (drule_tac y = "arccos y" in order_le_imp_less_or_eq)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2155
apply (drule_tac [2] y = pi in order_le_imp_less_or_eq, auto)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2156
apply (drule_tac [!] f = cos in arg_cong, auto)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2157
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2158
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2159
lemma arccos_cos: "[|0 \<le> x; x \<le> pi |] ==> arccos(cos x) = x"
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2160
apply (simp add: arccos_def)
23011
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2161
apply (auto intro!: the1_equality cos_total)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2162
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2163
22975
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2164
lemma arccos_cos2: "[|x \<le> 0; -pi \<le> x |] ==> arccos(cos x) = -x"
03085c441c14 spelling: rename arcos -> arccos
huffman
parents: 22969
diff changeset
  2165
apply (simp add: arccos_def)
23011
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2166
apply (auto intro!: the1_equality cos_total)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2167
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2168
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2169
lemma cos_arcsin: "\<lbrakk>-1 \<le> x; x \<le> 1\<rbrakk> \<Longrightarrow> cos (arcsin x) = sqrt (1 - x\<twosuperior>)"
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2170
apply (subgoal_tac "x\<twosuperior> \<le> 1")
23052
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2171
apply (rule power2_eq_imp_eq)
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2172
apply (simp add: cos_squared_eq)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2173
apply (rule cos_ge_zero)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2174
apply (erule (1) arcsin_lbound)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2175
apply (erule (1) arcsin_ubound)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2176
apply simp
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2177
apply (subgoal_tac "\<bar>x\<bar>\<twosuperior> \<le> 1\<twosuperior>", simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2178
apply (rule power_mono, simp, simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2179
done
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2180
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2181
lemma sin_arccos: "\<lbrakk>-1 \<le> x; x \<le> 1\<rbrakk> \<Longrightarrow> sin (arccos x) = sqrt (1 - x\<twosuperior>)"
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2182
apply (subgoal_tac "x\<twosuperior> \<le> 1")
23052
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2183
apply (rule power2_eq_imp_eq)
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2184
apply (simp add: sin_squared_eq)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2185
apply (rule sin_ge_zero)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2186
apply (erule (1) arccos_lbound)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2187
apply (erule (1) arccos_ubound)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2188
apply simp
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2189
apply (subgoal_tac "\<bar>x\<bar>\<twosuperior> \<le> 1\<twosuperior>", simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2190
apply (rule power_mono, simp, simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2191
done
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2192
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2193
lemma arctan [simp]:
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2194
     "- (pi/2) < arctan y  & arctan y < pi/2 & tan (arctan y) = y"
23011
3eae3140b4b2 use THE instead of SOME
huffman
parents: 23007
diff changeset
  2195
unfolding arctan_def by (rule theI' [OF tan_total])
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2196
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2197
lemma tan_arctan: "tan(arctan y) = y"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2198
by auto
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2199
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2200
lemma arctan_bounded: "- (pi/2) < arctan y  & arctan y < pi/2"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2201
by (auto simp only: arctan)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2202
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2203
lemma arctan_lbound: "- (pi/2) < arctan y"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2204
by auto
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2205
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2206
lemma arctan_ubound: "arctan y < pi/2"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2207
by (auto simp only: arctan)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2208
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2209
lemma arctan_unique:
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2210
  assumes "-(pi/2) < x" and "x < pi/2" and "tan x = y"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2211
  shows "arctan y = x"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2212
  using assms arctan [of y] tan_total [of y] by (fast elim: ex1E)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2213
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2214
lemma arctan_tan:
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2215
      "[|-(pi/2) < x; x < pi/2 |] ==> arctan(tan x) = x"
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2216
  by (rule arctan_unique, simp_all)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2217
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2218
lemma arctan_zero_zero [simp]: "arctan 0 = 0"
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2219
  by (rule arctan_unique, simp_all)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2220
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2221
lemma arctan_minus: "arctan (- x) = - arctan x"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2222
  apply (rule arctan_unique)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2223
  apply (simp only: neg_less_iff_less arctan_ubound)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2224
  apply (metis minus_less_iff arctan_lbound)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2225
  apply simp
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2226
  done
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2227
44725
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2228
lemma cos_arctan_not_zero [simp]: "cos (arctan x) \<noteq> 0"
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2229
  by (intro less_imp_neq [symmetric] cos_gt_zero_pi
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2230
    arctan_lbound arctan_ubound)
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2231
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2232
lemma cos_arctan: "cos (arctan x) = 1 / sqrt (1 + x\<twosuperior>)"
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2233
proof (rule power2_eq_imp_eq)
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2234
  have "0 < 1 + x\<twosuperior>" by (simp add: add_pos_nonneg)
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2235
  show "0 \<le> 1 / sqrt (1 + x\<twosuperior>)" by simp
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2236
  show "0 \<le> cos (arctan x)"
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2237
    by (intro less_imp_le cos_gt_zero_pi arctan_lbound arctan_ubound)
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2238
  have "(cos (arctan x))\<twosuperior> * (1 + (tan (arctan x))\<twosuperior>) = 1"
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2239
    unfolding tan_def by (simp add: right_distrib power_divide)
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2240
  thus "(cos (arctan x))\<twosuperior> = (1 / sqrt (1 + x\<twosuperior>))\<twosuperior>"
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2241
    using `0 < 1 + x\<twosuperior>` by (simp add: power_divide eq_divide_eq)
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2242
qed
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2243
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2244
lemma sin_arctan: "sin (arctan x) = x / sqrt (1 + x\<twosuperior>)"
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2245
  using add_pos_nonneg [OF zero_less_one zero_le_power2 [of x]]
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2246
  using tan_arctan [of x] unfolding tan_def cos_arctan
d3bf0e33c98a add lemmas cos_arctan and sin_arctan
huffman
parents: 44710
diff changeset
  2247
  by (simp add: eq_divide_eq)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2248
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2249
lemma tan_sec: "cos x \<noteq> 0 ==> 1 + tan(x) ^ 2 = inverse(cos x) ^ 2"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2250
apply (rule power_inverse [THEN subst])
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2251
apply (rule_tac c1 = "(cos x)\<twosuperior>" in real_mult_right_cancel [THEN iffD1])
22960
114cf1906681 remove redundant lemmas
huffman
parents: 22956
diff changeset
  2252
apply (auto dest: field_power_not_zero
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2253
        simp add: power_mult_distrib left_distrib power_divide tan_def
30273
ecd6f0ca62ea declare power_Suc [simp]; remove redundant type-specific versions of power_Suc
huffman
parents: 30082
diff changeset
  2254
                  mult_assoc power_inverse [symmetric])
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2255
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2256
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2257
lemma arctan_less_iff: "arctan x < arctan y \<longleftrightarrow> x < y"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2258
  by (metis tan_monotone' arctan_lbound arctan_ubound tan_arctan)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2259
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2260
lemma arctan_le_iff: "arctan x \<le> arctan y \<longleftrightarrow> x \<le> y"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2261
  by (simp only: not_less [symmetric] arctan_less_iff)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2262
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2263
lemma arctan_eq_iff: "arctan x = arctan y \<longleftrightarrow> x = y"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2264
  by (simp only: eq_iff [where 'a=real] arctan_le_iff)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2265
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2266
lemma zero_less_arctan_iff [simp]: "0 < arctan x \<longleftrightarrow> 0 < x"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2267
  using arctan_less_iff [of 0 x] by simp
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2268
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2269
lemma arctan_less_zero_iff [simp]: "arctan x < 0 \<longleftrightarrow> x < 0"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2270
  using arctan_less_iff [of x 0] by simp
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2271
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2272
lemma zero_le_arctan_iff [simp]: "0 \<le> arctan x \<longleftrightarrow> 0 \<le> x"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2273
  using arctan_le_iff [of 0 x] by simp
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2274
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2275
lemma arctan_le_zero_iff [simp]: "arctan x \<le> 0 \<longleftrightarrow> x \<le> 0"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2276
  using arctan_le_iff [of x 0] by simp
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2277
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2278
lemma arctan_eq_zero_iff [simp]: "arctan x = 0 \<longleftrightarrow> x = 0"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2279
  using arctan_eq_iff [of x 0] by simp
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2280
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2281
lemma isCont_inverse_function2:
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2282
  fixes f g :: "real \<Rightarrow> real" shows
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2283
  "\<lbrakk>a < x; x < b;
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2284
    \<forall>z. a \<le> z \<and> z \<le> b \<longrightarrow> g (f z) = z;
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2285
    \<forall>z. a \<le> z \<and> z \<le> b \<longrightarrow> isCont f z\<rbrakk>
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2286
   \<Longrightarrow> isCont g (f x)"
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2287
apply (rule isCont_inverse_function
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2288
       [where f=f and d="min (x - a) (b - x)"])
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2289
apply (simp_all add: abs_le_iff)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2290
done
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2291
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2292
lemma isCont_arcsin: "\<lbrakk>-1 < x; x < 1\<rbrakk> \<Longrightarrow> isCont arcsin x"
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2293
apply (subgoal_tac "isCont arcsin (sin (arcsin x))", simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2294
apply (rule isCont_inverse_function2 [where f=sin])
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2295
apply (erule (1) arcsin_lt_bounded [THEN conjunct1])
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2296
apply (erule (1) arcsin_lt_bounded [THEN conjunct2])
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2297
apply (fast intro: arcsin_sin, simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2298
done
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2299
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2300
lemma isCont_arccos: "\<lbrakk>-1 < x; x < 1\<rbrakk> \<Longrightarrow> isCont arccos x"
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2301
apply (subgoal_tac "isCont arccos (cos (arccos x))", simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2302
apply (rule isCont_inverse_function2 [where f=cos])
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2303
apply (erule (1) arccos_lt_bounded [THEN conjunct1])
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2304
apply (erule (1) arccos_lt_bounded [THEN conjunct2])
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2305
apply (fast intro: arccos_cos, simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2306
done
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2307
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2308
lemma isCont_arctan: "isCont arctan x"
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2309
apply (rule arctan_lbound [of x, THEN dense, THEN exE], clarify)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2310
apply (rule arctan_ubound [of x, THEN dense, THEN exE], clarify)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2311
apply (subgoal_tac "isCont arctan (tan (arctan x))", simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2312
apply (erule (1) isCont_inverse_function2 [where f=tan])
33667
958dc9f03611 A little rationalisation
paulson
parents: 33549
diff changeset
  2313
apply (metis arctan_tan order_le_less_trans order_less_le_trans)
36777
be5461582d0f avoid using real-specific versions of generic lemmas
huffman
parents: 36776
diff changeset
  2314
apply (metis cos_gt_zero_pi isCont_tan order_less_le_trans less_le)
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2315
done
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2316
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2317
lemma DERIV_arcsin:
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2318
  "\<lbrakk>-1 < x; x < 1\<rbrakk> \<Longrightarrow> DERIV arcsin x :> inverse (sqrt (1 - x\<twosuperior>))"
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2319
apply (rule DERIV_inverse_function [where f=sin and a="-1" and b="1"])
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  2320
apply (rule DERIV_cong [OF DERIV_sin])
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2321
apply (simp add: cos_arcsin)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2322
apply (subgoal_tac "\<bar>x\<bar>\<twosuperior> < 1\<twosuperior>", simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2323
apply (rule power_strict_mono, simp, simp, simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2324
apply assumption
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2325
apply assumption
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2326
apply simp
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2327
apply (erule (1) isCont_arcsin)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2328
done
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2329
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2330
lemma DERIV_arccos:
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2331
  "\<lbrakk>-1 < x; x < 1\<rbrakk> \<Longrightarrow> DERIV arccos x :> inverse (- sqrt (1 - x\<twosuperior>))"
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2332
apply (rule DERIV_inverse_function [where f=cos and a="-1" and b="1"])
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  2333
apply (rule DERIV_cong [OF DERIV_cos])
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2334
apply (simp add: sin_arccos)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2335
apply (subgoal_tac "\<bar>x\<bar>\<twosuperior> < 1\<twosuperior>", simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2336
apply (rule power_strict_mono, simp, simp, simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2337
apply assumption
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2338
apply assumption
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2339
apply simp
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2340
apply (erule (1) isCont_arccos)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2341
done
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2342
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2343
lemma DERIV_arctan: "DERIV arctan x :> inverse (1 + x\<twosuperior>)"
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2344
apply (rule DERIV_inverse_function [where f=tan and a="x - 1" and b="x + 1"])
44308
d2a6f9af02f4 Transcendental.thy: remove several unused lemmas and simplify some proofs
huffman
parents: 44307
diff changeset
  2345
apply (rule DERIV_cong [OF DERIV_tan])
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2346
apply (rule cos_arctan_not_zero)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2347
apply (simp add: power_inverse tan_sec [symmetric])
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2348
apply (subgoal_tac "0 < 1 + x\<twosuperior>", simp)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2349
apply (simp add: add_pos_nonneg)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2350
apply (simp, simp, simp, rule isCont_arctan)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2351
done
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2352
31880
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  2353
declare
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  2354
  DERIV_arcsin[THEN DERIV_chain2, THEN DERIV_cong, DERIV_intros]
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  2355
  DERIV_arccos[THEN DERIV_chain2, THEN DERIV_cong, DERIV_intros]
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  2356
  DERIV_arctan[THEN DERIV_chain2, THEN DERIV_cong, DERIV_intros]
6fb86c61747c Added DERIV_intros
hoelzl
parents: 31790
diff changeset
  2357
23043
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2358
subsection {* More Theorems about Sin and Cos *}
5dbfd67516a4 rearranged sections
huffman
parents: 23011
diff changeset
  2359
23052
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2360
lemma cos_45: "cos (pi / 4) = sqrt 2 / 2"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2361
proof -
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2362
  let ?c = "cos (pi / 4)" and ?s = "sin (pi / 4)"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2363
  have nonneg: "0 \<le> ?c"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2364
    by (rule cos_ge_zero, rule order_trans [where y=0], simp_all)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2365
  have "0 = cos (pi / 4 + pi / 4)"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2366
    by simp
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2367
  also have "cos (pi / 4 + pi / 4) = ?c\<twosuperior> - ?s\<twosuperior>"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2368
    by (simp only: cos_add power2_eq_square)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2369
  also have "\<dots> = 2 * ?c\<twosuperior> - 1"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2370
    by (simp add: sin_squared_eq)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2371
  finally have "?c\<twosuperior> = (sqrt 2 / 2)\<twosuperior>"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2372
    by (simp add: power_divide)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2373
  thus ?thesis
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2374
    using nonneg by (rule power2_eq_imp_eq) simp
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2375
qed
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2376
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2377
lemma cos_30: "cos (pi / 6) = sqrt 3 / 2"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2378
proof -
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2379
  let ?c = "cos (pi / 6)" and ?s = "sin (pi / 6)"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2380
  have pos_c: "0 < ?c"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2381
    by (rule cos_gt_zero, simp, simp)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2382
  have "0 = cos (pi / 6 + pi / 6 + pi / 6)"
23066
26a9157b620a new field_combine_numerals simproc, which uses fractions as coefficients
huffman
parents: 23053
diff changeset
  2383
    by simp
23052
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2384
  also have "\<dots> = (?c * ?c - ?s * ?s) * ?c - (?s * ?c + ?c * ?s) * ?s"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2385
    by (simp only: cos_add sin_add)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2386
  also have "\<dots> = ?c * (?c\<twosuperior> - 3 * ?s\<twosuperior>)"
29667
53103fc8ffa3 Replaced group_ and ring_simps by algebra_simps;
nipkow
parents: 29171
diff changeset
  2387
    by (simp add: algebra_simps power2_eq_square)
23052
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2388
  finally have "?c\<twosuperior> = (sqrt 3 / 2)\<twosuperior>"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2389
    using pos_c by (simp add: sin_squared_eq power_divide)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2390
  thus ?thesis
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2391
    using pos_c [THEN order_less_imp_le]
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2392
    by (rule power2_eq_imp_eq) simp
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2393
qed
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2394
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2395
lemma sin_45: "sin (pi / 4) = sqrt 2 / 2"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2396
proof -
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2397
  have "sin (pi / 4) = cos (pi / 2 - pi / 4)" by (rule sin_cos_eq)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2398
  also have "pi / 2 - pi / 4 = pi / 4" by simp
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2399
  also have "cos (pi / 4) = sqrt 2 / 2" by (rule cos_45)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2400
  finally show ?thesis .
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2401
qed
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2402
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2403
lemma sin_60: "sin (pi / 3) = sqrt 3 / 2"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2404
proof -
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2405
  have "sin (pi / 3) = cos (pi / 2 - pi / 3)" by (rule sin_cos_eq)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2406
  also have "pi / 2 - pi / 3 = pi / 6" by simp
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2407
  also have "cos (pi / 6) = sqrt 3 / 2" by (rule cos_30)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2408
  finally show ?thesis .
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2409
qed
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2410
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2411
lemma cos_60: "cos (pi / 3) = 1 / 2"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2412
apply (rule power2_eq_imp_eq)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2413
apply (simp add: cos_squared_eq sin_60 power_divide)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2414
apply (rule cos_ge_zero, rule order_trans [where y=0], simp_all)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2415
done
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2416
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2417
lemma sin_30: "sin (pi / 6) = 1 / 2"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2418
proof -
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2419
  have "sin (pi / 6) = cos (pi / 2 - pi / 6)" by (rule sin_cos_eq)
23066
26a9157b620a new field_combine_numerals simproc, which uses fractions as coefficients
huffman
parents: 23053
diff changeset
  2420
  also have "pi / 2 - pi / 6 = pi / 3" by simp
23052
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2421
  also have "cos (pi / 3) = 1 / 2" by (rule cos_60)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2422
  finally show ?thesis .
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2423
qed
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2424
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2425
lemma tan_30: "tan (pi / 6) = 1 / sqrt 3"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2426
unfolding tan_def by (simp add: sin_30 cos_30)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2427
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2428
lemma tan_45: "tan (pi / 4) = 1"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2429
unfolding tan_def by (simp add: sin_45 cos_45)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2430
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2431
lemma tan_60: "tan (pi / 3) = sqrt 3"
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2432
unfolding tan_def by (simp add: sin_60 cos_60)
0e36f0dbfa1c add lemmas for sin,cos,tan of 30,45,60 degrees; cleaned up
huffman
parents: 23049
diff changeset
  2433
15383
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  2434
lemma sin_cos_npi [simp]: "sin (real (Suc (2 * n)) * pi / 2) = (-1) ^ n"
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  2435
proof -
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  2436
  have "sin ((real n + 1/2) * pi) = cos (real n * pi)"
29667
53103fc8ffa3 Replaced group_ and ring_simps by algebra_simps;
nipkow
parents: 29171
diff changeset
  2437
    by (auto simp add: algebra_simps sin_add)
15383
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  2438
  thus ?thesis
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2439
    by (simp add: real_of_nat_Suc left_distrib add_divide_distrib
15383
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  2440
                  mult_commute [of pi])
c49e4225ef4f made proofs more robust
paulson
parents: 15251
diff changeset
  2441
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2442
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2443
lemma cos_2npi [simp]: "cos (2 * real (n::nat) * pi) = 1"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2444
by (simp add: cos_double mult_assoc power_add [symmetric] numeral_2_eq_2)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2445
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2446
lemma cos_3over2_pi [simp]: "cos (3 / 2 * pi) = 0"
23066
26a9157b620a new field_combine_numerals simproc, which uses fractions as coefficients
huffman
parents: 23053
diff changeset
  2447
apply (subgoal_tac "cos (pi + pi/2) = 0", simp)
26a9157b620a new field_combine_numerals simproc, which uses fractions as coefficients
huffman
parents: 23053
diff changeset
  2448
apply (subst cos_add, simp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2449
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2450
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2451
lemma sin_2npi [simp]: "sin (2 * real (n::nat) * pi) = 0"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2452
by (auto simp add: mult_assoc)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2453
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2454
lemma sin_3over2_pi [simp]: "sin (3 / 2 * pi) = - 1"
23066
26a9157b620a new field_combine_numerals simproc, which uses fractions as coefficients
huffman
parents: 23053
diff changeset
  2455
apply (subgoal_tac "sin (pi + pi/2) = - 1", simp)
26a9157b620a new field_combine_numerals simproc, which uses fractions as coefficients
huffman
parents: 23053
diff changeset
  2456
apply (subst sin_add, simp)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2457
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2458
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2459
lemma cos_pi_eq_zero [simp]: "cos (pi * real (Suc (2 * m)) / 2) = 0"
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  2460
by (simp only: cos_add sin_add real_of_nat_Suc left_distrib right_distrib add_divide_distrib, auto)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2461
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2462
lemma DERIV_cos_add [simp]: "DERIV (%x. cos (x + k)) xa :> - sin (xa + k)"
31881
eba74a5790d2 use DERIV_intros
hoelzl
parents: 31880
diff changeset
  2463
  by (auto intro!: DERIV_intros)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2464
15081
32402f5624d1 abs notation
paulson
parents: 15079
diff changeset
  2465
lemma sin_zero_abs_cos_one: "sin x = 0 ==> \<bar>cos x\<bar> = 1"
15539
333a88244569 comprehensive cleanup, replacing sumr by setsum
nipkow
parents: 15536
diff changeset
  2466
by (auto simp add: sin_zero_iff even_mult_two_ex)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2467
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2468
lemma cos_one_sin_zero: "cos x = 1 ==> sin x = 0"
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2469
by (cut_tac x = x in sin_cos_squared_add3, auto)
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2470
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2471
subsection {* Machins formula *}
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2472
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2473
lemma arctan_one: "arctan 1 = pi / 4"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2474
  by (rule arctan_unique, simp_all add: tan_45 m2pi_less_pi)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2475
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2476
lemma tan_total_pi4: assumes "\<bar>x\<bar> < 1"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2477
  shows "\<exists> z. - (pi / 4) < z \<and> z < pi / 4 \<and> tan z = x"
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2478
proof
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2479
  show "- (pi / 4) < arctan x \<and> arctan x < pi / 4 \<and> tan (arctan x) = x"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2480
    unfolding arctan_one [symmetric] arctan_minus [symmetric]
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2481
    unfolding arctan_less_iff using assms by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2482
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2483
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2484
lemma arctan_add: assumes "\<bar>x\<bar> \<le> 1" and "\<bar>y\<bar> < 1"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2485
  shows "arctan x + arctan y = arctan ((x + y) / (1 - x * y))"
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2486
proof (rule arctan_unique [symmetric])
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2487
  have "- (pi / 4) \<le> arctan x" and "- (pi / 4) < arctan y"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2488
    unfolding arctan_one [symmetric] arctan_minus [symmetric]
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2489
    unfolding arctan_le_iff arctan_less_iff using assms by auto
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2490
  from add_le_less_mono [OF this]
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2491
  show 1: "- (pi / 2) < arctan x + arctan y" by simp
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2492
  have "arctan x \<le> pi / 4" and "arctan y < pi / 4"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2493
    unfolding arctan_one [symmetric]
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2494
    unfolding arctan_le_iff arctan_less_iff using assms by auto
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2495
  from add_le_less_mono [OF this]
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2496
  show 2: "arctan x + arctan y < pi / 2" by simp
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2497
  show "tan (arctan x + arctan y) = (x + y) / (1 - x * y)"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2498
    using cos_gt_zero_pi [OF 1 2] by (simp add: tan_add)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2499
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2500
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2501
theorem machin: "pi / 4 = 4 * arctan (1/5) - arctan (1 / 239)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2502
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2503
  have "\<bar>1 / 5\<bar> < (1 :: real)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2504
  from arctan_add[OF less_imp_le[OF this] this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2505
  have "2 * arctan (1 / 5) = arctan (5 / 12)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2506
  moreover
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2507
  have "\<bar>5 / 12\<bar> < (1 :: real)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2508
  from arctan_add[OF less_imp_le[OF this] this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2509
  have "2 * arctan (5 / 12) = arctan (120 / 119)" by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2510
  moreover
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2511
  have "\<bar>1\<bar> \<le> (1::real)" and "\<bar>1 / 239\<bar> < (1::real)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2512
  from arctan_add[OF this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2513
  have "arctan 1 + arctan (1 / 239) = arctan (120 / 119)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2514
  ultimately have "arctan 1 + arctan (1 / 239) = 4 * arctan (1 / 5)" by auto
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2515
  thus ?thesis unfolding arctan_one by algebra
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2516
qed
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2517
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2518
subsection {* Introducing the arcus tangens power series *}
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2519
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2520
lemma monoseq_arctan_series: fixes x :: real
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2521
  assumes "\<bar>x\<bar> \<le> 1" shows "monoseq (\<lambda> n. 1 / real (n*2+1) * x^(n*2+1))" (is "monoseq ?a")
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
  2522
proof (cases "x = 0") case True thus ?thesis unfolding monoseq_def One_nat_def by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2523
next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2524
  case False
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2525
  have "norm x \<le> 1" and "x \<le> 1" and "-1 \<le> x" using assms by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2526
  show "monoseq ?a"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2527
  proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2528
    { fix n fix x :: real assume "0 \<le> x" and "x \<le> 1"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2529
      have "1 / real (Suc (Suc n * 2)) * x ^ Suc (Suc n * 2) \<le> 1 / real (Suc (n * 2)) * x ^ Suc (n * 2)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2530
      proof (rule mult_mono)
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2531
        show "1 / real (Suc (Suc n * 2)) \<le> 1 / real (Suc (n * 2))" by (rule frac_le) simp_all
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2532
        show "0 \<le> 1 / real (Suc (n * 2))" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2533
        show "x ^ Suc (Suc n * 2) \<le> x ^ Suc (n * 2)" by (rule power_decreasing) (simp_all add: `0 \<le> x` `x \<le> 1`)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2534
        show "0 \<le> x ^ Suc (Suc n * 2)" by (rule zero_le_power) (simp add: `0 \<le> x`)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2535
      qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2536
    } note mono = this
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2537
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2538
    show ?thesis
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2539
    proof (cases "0 \<le> x")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2540
      case True from mono[OF this `x \<le> 1`, THEN allI]
31790
05c92381363c corrected and unified thm names
nipkow
parents: 31338
diff changeset
  2541
      show ?thesis unfolding Suc_eq_plus1[symmetric] by (rule mono_SucI2)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2542
    next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2543
      case False hence "0 \<le> -x" and "-x \<le> 1" using `-1 \<le> x` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2544
      from mono[OF this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2545
      have "\<And>n. 1 / real (Suc (Suc n * 2)) * x ^ Suc (Suc n * 2) \<ge> 1 / real (Suc (n * 2)) * x ^ Suc (n * 2)" using `0 \<le> -x` by auto
31790
05c92381363c corrected and unified thm names
nipkow
parents: 31338
diff changeset
  2546
      thus ?thesis unfolding Suc_eq_plus1[symmetric] by (rule mono_SucI1[OF allI])
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2547
    qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2548
  qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2549
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2550
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2551
lemma zeroseq_arctan_series: fixes x :: real
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2552
  assumes "\<bar>x\<bar> \<le> 1" shows "(\<lambda> n. 1 / real (n*2+1) * x^(n*2+1)) ----> 0" (is "?a ----> 0")
44568
e6f291cb5810 discontinue many legacy theorems about LIM and LIMSEQ, in favor of tendsto theorems
huffman
parents: 44319
diff changeset
  2553
proof (cases "x = 0") case True thus ?thesis unfolding One_nat_def by (auto simp add: tendsto_const)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2554
next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2555
  case False
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2556
  have "norm x \<le> 1" and "x \<le> 1" and "-1 \<le> x" using assms by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2557
  show "?a ----> 0"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2558
  proof (cases "\<bar>x\<bar> < 1")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2559
    case True hence "norm x < 1" by auto
44568
e6f291cb5810 discontinue many legacy theorems about LIM and LIMSEQ, in favor of tendsto theorems
huffman
parents: 44319
diff changeset
  2560
    from tendsto_mult[OF LIMSEQ_inverse_real_of_nat LIMSEQ_power_zero[OF `norm x < 1`, THEN LIMSEQ_Suc]]
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
  2561
    have "(\<lambda>n. 1 / real (n + 1) * x ^ (n + 1)) ----> 0"
31790
05c92381363c corrected and unified thm names
nipkow
parents: 31338
diff changeset
  2562
      unfolding inverse_eq_divide Suc_eq_plus1 by simp
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
  2563
    then show ?thesis using pos2 by (rule LIMSEQ_linear)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2564
  next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2565
    case False hence "x = -1 \<or> x = 1" using `\<bar>x\<bar> \<le> 1` by auto
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
  2566
    hence n_eq: "\<And> n. x ^ (n * 2 + 1) = x" unfolding One_nat_def by auto
44568
e6f291cb5810 discontinue many legacy theorems about LIM and LIMSEQ, in favor of tendsto theorems
huffman
parents: 44319
diff changeset
  2567
    from tendsto_mult[OF LIMSEQ_inverse_real_of_nat[THEN LIMSEQ_linear, OF pos2, unfolded inverse_eq_divide] tendsto_const[of x]]
31790
05c92381363c corrected and unified thm names
nipkow
parents: 31338
diff changeset
  2568
    show ?thesis unfolding n_eq Suc_eq_plus1 by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2569
  qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2570
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2571
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2572
lemma summable_arctan_series: fixes x :: real and n :: nat
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2573
  assumes "\<bar>x\<bar> \<le> 1" shows "summable (\<lambda> k. (-1)^k * (1 / real (k*2+1) * x ^ (k*2+1)))" (is "summable (?c x)")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2574
  by (rule summable_Leibniz(1), rule zeroseq_arctan_series[OF assms], rule monoseq_arctan_series[OF assms])
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2575
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2576
lemma less_one_imp_sqr_less_one: fixes x :: real assumes "\<bar>x\<bar> < 1" shows "x^2 < 1"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2577
proof -
38642
8fa437809c67 dropped type classes mult_mono and mult_mono1; tuned names of technical rule duplicates
haftmann
parents: 37887
diff changeset
  2578
  from mult_left_mono[OF less_imp_le[OF `\<bar>x\<bar> < 1`] abs_ge_zero[of x]]
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2579
  have "\<bar> x^2 \<bar> < 1" using `\<bar> x \<bar> < 1` unfolding numeral_2_eq_2 power_Suc2 by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2580
  thus ?thesis using zero_le_power2 by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2581
qed
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2582
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2583
lemma DERIV_arctan_series: assumes "\<bar> x \<bar> < 1"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2584
  shows "DERIV (\<lambda> x'. \<Sum> k. (-1)^k * (1 / real (k*2+1) * x' ^ (k*2+1))) x :> (\<Sum> k. (-1)^k * x^(k*2))" (is "DERIV ?arctan _ :> ?Int")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2585
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2586
  let "?f n" = "if even n then (-1)^(n div 2) * 1 / real (Suc n) else 0"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2587
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2588
  { fix n :: nat assume "even n" hence "2 * (n div 2) = n" by presburger } note n_even=this
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2589
  have if_eq: "\<And> n x'. ?f n * real (Suc n) * x'^n = (if even n then (-1)^(n div 2) * x'^(2 * (n div 2)) else 0)" using n_even by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2590
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2591
  { fix x :: real assume "\<bar>x\<bar> < 1" hence "x^2 < 1" by (rule less_one_imp_sqr_less_one)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2592
    have "summable (\<lambda> n. -1 ^ n * (x^2) ^n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2593
      by (rule summable_Leibniz(1), auto intro!: LIMSEQ_realpow_zero monoseq_realpow `x^2 < 1` order_less_imp_le[OF `x^2 < 1`])
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2594
    hence "summable (\<lambda> n. -1 ^ n * x^(2*n))" unfolding power_mult .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2595
  } note summable_Integral = this
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2596
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2597
  { fix f :: "nat \<Rightarrow> real"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2598
    have "\<And> x. f sums x = (\<lambda> n. if even n then f (n div 2) else 0) sums x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2599
    proof
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2600
      fix x :: real assume "f sums x"
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2601
      from sums_if[OF sums_zero this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2602
      show "(\<lambda> n. if even n then f (n div 2) else 0) sums x" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2603
    next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2604
      fix x :: real assume "(\<lambda> n. if even n then f (n div 2) else 0) sums x"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2605
      from LIMSEQ_linear[OF this[unfolded sums_def] pos2, unfolded sum_split_even_odd[unfolded mult_commute]]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2606
      show "f sums x" unfolding sums_def by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2607
    qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2608
    hence "op sums f = op sums (\<lambda> n. if even n then f (n div 2) else 0)" ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2609
  } note sums_even = this
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2610
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2611
  have Int_eq: "(\<Sum> n. ?f n * real (Suc n) * x^n) = ?Int" unfolding if_eq mult_commute[of _ 2] suminf_def sums_even[of "\<lambda> n. -1 ^ n * x ^ (2 * n)", symmetric]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2612
    by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2613
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2614
  { fix x :: real
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2615
    have if_eq': "\<And> n. (if even n then -1 ^ (n div 2) * 1 / real (Suc n) else 0) * x ^ Suc n =
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2616
      (if even n then -1 ^ (n div 2) * (1 / real (Suc (2 * (n div 2))) * x ^ Suc (2 * (n div 2))) else 0)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2617
      using n_even by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2618
    have idx_eq: "\<And> n. n * 2 + 1 = Suc (2 * n)" by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2619
    have "(\<Sum> n. ?f n * x^(Suc n)) = ?arctan x" unfolding if_eq' idx_eq suminf_def sums_even[of "\<lambda> n. -1 ^ n * (1 / real (Suc (2 * n)) * x ^ Suc (2 * n))", symmetric]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2620
      by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2621
  } note arctan_eq = this
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2622
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2623
  have "DERIV (\<lambda> x. \<Sum> n. ?f n * x^(Suc n)) x :> (\<Sum> n. ?f n * real (Suc n) * x^n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2624
  proof (rule DERIV_power_series')
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2625
    show "x \<in> {- 1 <..< 1}" using `\<bar> x \<bar> < 1` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2626
    { fix x' :: real assume x'_bounds: "x' \<in> {- 1 <..< 1}"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2627
      hence "\<bar>x'\<bar> < 1" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2628
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2629
      let ?S = "\<Sum> n. (-1)^n * x'^(2 * n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2630
      show "summable (\<lambda> n. ?f n * real (Suc n) * x'^n)" unfolding if_eq
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2631
        by (rule sums_summable[where l="0 + ?S"], rule sums_if, rule sums_zero, rule summable_sums, rule summable_Integral[OF `\<bar>x'\<bar> < 1`])
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2632
    }
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2633
  qed auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2634
  thus ?thesis unfolding Int_eq arctan_eq .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2635
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2636
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2637
lemma arctan_series: assumes "\<bar> x \<bar> \<le> 1"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2638
  shows "arctan x = (\<Sum> k. (-1)^k * (1 / real (k*2+1) * x ^ (k*2+1)))" (is "_ = suminf (\<lambda> n. ?c x n)")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2639
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2640
  let "?c' x n" = "(-1)^n * x^(n*2)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2641
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2642
  { fix r x :: real assume "0 < r" and "r < 1" and "\<bar> x \<bar> < r"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2643
    have "\<bar>x\<bar> < 1" using `r < 1` and `\<bar>x\<bar> < r` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2644
    from DERIV_arctan_series[OF this]
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2645
    have "DERIV (\<lambda> x. suminf (?c x)) x :> (suminf (?c' x))" .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2646
  } note DERIV_arctan_suminf = this
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2647
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2648
  { fix x :: real assume "\<bar>x\<bar> \<le> 1" note summable_Leibniz[OF zeroseq_arctan_series[OF this] monoseq_arctan_series[OF this]] }
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2649
  note arctan_series_borders = this
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2650
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2651
  { fix x :: real assume "\<bar>x\<bar> < 1" have "arctan x = (\<Sum> k. ?c x k)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2652
  proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2653
    obtain r where "\<bar>x\<bar> < r" and "r < 1" using dense[OF `\<bar>x\<bar> < 1`] by blast
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2654
    hence "0 < r" and "-r < x" and "x < r" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2655
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2656
    have suminf_eq_arctan_bounded: "\<And> x a b. \<lbrakk> -r < a ; b < r ; a < b ; a \<le> x ; x \<le> b \<rbrakk> \<Longrightarrow> suminf (?c x) - arctan x = suminf (?c a) - arctan a"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2657
    proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2658
      fix x a b assume "-r < a" and "b < r" and "a < b" and "a \<le> x" and "x \<le> b"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2659
      hence "\<bar>x\<bar> < r" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2660
      show "suminf (?c x) - arctan x = suminf (?c a) - arctan a"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2661
      proof (rule DERIV_isconst2[of "a" "b"])
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2662
        show "a < b" and "a \<le> x" and "x \<le> b" using `a < b` `a \<le> x` `x \<le> b` by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2663
        have "\<forall> x. -r < x \<and> x < r \<longrightarrow> DERIV (\<lambda> x. suminf (?c x) - arctan x) x :> 0"
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2664
        proof (rule allI, rule impI)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2665
          fix x assume "-r < x \<and> x < r" hence "\<bar>x\<bar> < r" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2666
          hence "\<bar>x\<bar> < 1" using `r < 1` by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2667
          have "\<bar> - (x^2) \<bar> < 1" using less_one_imp_sqr_less_one[OF `\<bar>x\<bar> < 1`] by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2668
          hence "(\<lambda> n. (- (x^2)) ^ n) sums (1 / (1 - (- (x^2))))" unfolding real_norm_def[symmetric] by (rule geometric_sums)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2669
          hence "(?c' x) sums (1 / (1 - (- (x^2))))" unfolding power_mult_distrib[symmetric] power_mult nat_mult_commute[of _ 2] by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2670
          hence suminf_c'_eq_geom: "inverse (1 + x^2) = suminf (?c' x)" using sums_unique unfolding inverse_eq_divide by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2671
          have "DERIV (\<lambda> x. suminf (?c x)) x :> (inverse (1 + x^2))" unfolding suminf_c'_eq_geom
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2672
            by (rule DERIV_arctan_suminf[OF `0 < r` `r < 1` `\<bar>x\<bar> < r`])
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2673
          from DERIV_add_minus[OF this DERIV_arctan]
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2674
          show "DERIV (\<lambda> x. suminf (?c x) - arctan x) x :> 0" unfolding diff_minus by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2675
        qed
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2676
        hence DERIV_in_rball: "\<forall> y. a \<le> y \<and> y \<le> b \<longrightarrow> DERIV (\<lambda> x. suminf (?c x) - arctan x) y :> 0" using `-r < a` `b < r` by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2677
        thus "\<forall> y. a < y \<and> y < b \<longrightarrow> DERIV (\<lambda> x. suminf (?c x) - arctan x) y :> 0" using `\<bar>x\<bar> < r` by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2678
        show "\<forall> y. a \<le> y \<and> y \<le> b \<longrightarrow> isCont (\<lambda> x. suminf (?c x) - arctan x) y" using DERIV_in_rball DERIV_isCont by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2679
      qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2680
    qed
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2681
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2682
    have suminf_arctan_zero: "suminf (?c 0) - arctan 0 = 0"
31790
05c92381363c corrected and unified thm names
nipkow
parents: 31338
diff changeset
  2683
      unfolding Suc_eq_plus1[symmetric] power_Suc2 mult_zero_right arctan_zero_zero suminf_zero by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2684
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2685
    have "suminf (?c x) - arctan x = 0"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2686
    proof (cases "x = 0")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2687
      case True thus ?thesis using suminf_arctan_zero by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2688
    next
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2689
      case False hence "0 < \<bar>x\<bar>" and "- \<bar>x\<bar> < \<bar>x\<bar>" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2690
      have "suminf (?c (-\<bar>x\<bar>)) - arctan (-\<bar>x\<bar>) = suminf (?c 0) - arctan 0"
35038
a1d93ce94235 more precise proofs
haftmann
parents: 35028
diff changeset
  2691
        by (rule suminf_eq_arctan_bounded[where x="0" and a="-\<bar>x\<bar>" and b="\<bar>x\<bar>", symmetric])
a1d93ce94235 more precise proofs
haftmann
parents: 35028
diff changeset
  2692
          (simp_all only: `\<bar>x\<bar> < r` `-\<bar>x\<bar> < \<bar>x\<bar>` neg_less_iff_less)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2693
      moreover
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2694
      have "suminf (?c x) - arctan x = suminf (?c (-\<bar>x\<bar>)) - arctan (-\<bar>x\<bar>)"
35038
a1d93ce94235 more precise proofs
haftmann
parents: 35028
diff changeset
  2695
        by (rule suminf_eq_arctan_bounded[where x="x" and a="-\<bar>x\<bar>" and b="\<bar>x\<bar>"])
a1d93ce94235 more precise proofs
haftmann
parents: 35028
diff changeset
  2696
          (simp_all only: `\<bar>x\<bar> < r` `-\<bar>x\<bar> < \<bar>x\<bar>` neg_less_iff_less)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2697
      ultimately
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2698
      show ?thesis using suminf_arctan_zero by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2699
    qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2700
    thus ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2701
  qed } note when_less_one = this
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2702
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2703
  show "arctan x = suminf (\<lambda> n. ?c x n)"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2704
  proof (cases "\<bar>x\<bar> < 1")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2705
    case True thus ?thesis by (rule when_less_one)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2706
  next case False hence "\<bar>x\<bar> = 1" using `\<bar>x\<bar> \<le> 1` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2707
    let "?a x n" = "\<bar>1 / real (n*2+1) * x^(n*2+1)\<bar>"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2708
    let "?diff x n" = "\<bar> arctan x - (\<Sum> i = 0..<n. ?c x i)\<bar>"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2709
    { fix n :: nat
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2710
      have "0 < (1 :: real)" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2711
      moreover
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2712
      { fix x :: real assume "0 < x" and "x < 1" hence "\<bar>x\<bar> \<le> 1" and "\<bar>x\<bar> < 1" by auto
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2713
        from `0 < x` have "0 < 1 / real (0 * 2 + (1::nat)) * x ^ (0 * 2 + 1)" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2714
        note bounds = mp[OF arctan_series_borders(2)[OF `\<bar>x\<bar> \<le> 1`] this, unfolded when_less_one[OF `\<bar>x\<bar> < 1`, symmetric], THEN spec]
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2715
        have "0 < 1 / real (n*2+1) * x^(n*2+1)" by (rule mult_pos_pos, auto simp only: zero_less_power[OF `0 < x`], auto)
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2716
        hence a_pos: "?a x n = 1 / real (n*2+1) * x^(n*2+1)" by (rule abs_of_pos)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2717
        have "?diff x n \<le> ?a x n"
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2718
        proof (cases "even n")
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2719
          case True hence sgn_pos: "(-1)^n = (1::real)" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2720
          from `even n` obtain m where "2 * m = n" unfolding even_mult_two_ex by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2721
          from bounds[of m, unfolded this atLeastAtMost_iff]
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2722
          have "\<bar>arctan x - (\<Sum>i = 0..<n. (?c x i))\<bar> \<le> (\<Sum>i = 0..<n + 1. (?c x i)) - (\<Sum>i = 0..<n. (?c x i))" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2723
          also have "\<dots> = ?c x n" unfolding One_nat_def by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2724
          also have "\<dots> = ?a x n" unfolding sgn_pos a_pos by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2725
          finally show ?thesis .
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2726
        next
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2727
          case False hence sgn_neg: "(-1)^n = (-1::real)" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2728
          from `odd n` obtain m where m_def: "2 * m + 1 = n" unfolding odd_Suc_mult_two_ex by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2729
          hence m_plus: "2 * (m + 1) = n + 1" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2730
          from bounds[of "m + 1", unfolded this atLeastAtMost_iff, THEN conjunct1] bounds[of m, unfolded m_def atLeastAtMost_iff, THEN conjunct2]
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2731
          have "\<bar>arctan x - (\<Sum>i = 0..<n. (?c x i))\<bar> \<le> (\<Sum>i = 0..<n. (?c x i)) - (\<Sum>i = 0..<n+1. (?c x i))" by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2732
          also have "\<dots> = - ?c x n" unfolding One_nat_def by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2733
          also have "\<dots> = ?a x n" unfolding sgn_neg a_pos by auto
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2734
          finally show ?thesis .
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2735
        qed
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2736
        hence "0 \<le> ?a x n - ?diff x n" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2737
      }
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2738
      hence "\<forall> x \<in> { 0 <..< 1 }. 0 \<le> ?a x n - ?diff x n" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2739
      moreover have "\<And>x. isCont (\<lambda> x. ?a x n - ?diff x n) x"
37887
2ae085b07f2f diff_minus subsumes diff_def
haftmann
parents: 36974
diff changeset
  2740
        unfolding diff_minus divide_inverse
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2741
        by (auto intro!: isCont_add isCont_rabs isCont_ident isCont_minus isCont_arctan isCont_inverse isCont_mult isCont_power isCont_const isCont_setsum)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2742
      ultimately have "0 \<le> ?a 1 n - ?diff 1 n" by (rule LIM_less_bound)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2743
      hence "?diff 1 n \<le> ?a 1 n" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2744
    }
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
  2745
    have "?a 1 ----> 0"
44568
e6f291cb5810 discontinue many legacy theorems about LIM and LIMSEQ, in favor of tendsto theorems
huffman
parents: 44319
diff changeset
  2746
      unfolding tendsto_rabs_zero_iff power_one divide_inverse One_nat_def
e6f291cb5810 discontinue many legacy theorems about LIM and LIMSEQ, in favor of tendsto theorems
huffman
parents: 44319
diff changeset
  2747
      by (auto intro!: tendsto_mult LIMSEQ_linear LIMSEQ_inverse_real_of_nat)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2748
    have "?diff 1 ----> 0"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2749
    proof (rule LIMSEQ_I)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2750
      fix r :: real assume "0 < r"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2751
      obtain N :: nat where N_I: "\<And> n. N \<le> n \<Longrightarrow> ?a 1 n < r" using LIMSEQ_D[OF `?a 1 ----> 0` `0 < r`] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2752
      { fix n assume "N \<le> n" from `?diff 1 n \<le> ?a 1 n` N_I[OF this]
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 32047
diff changeset
  2753
        have "norm (?diff 1 n - 0) < r" by auto }
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2754
      thus "\<exists> N. \<forall> n \<ge> N. norm (?diff 1 n - 0) < r" by blast
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2755
    qed
44710
9caf6883f1f4 remove redundant lemmas about LIMSEQ
huffman
parents: 44568
diff changeset
  2756
    from this [unfolded tendsto_rabs_zero_iff, THEN tendsto_add [OF _ tendsto_const], of "- arctan 1", THEN tendsto_minus]
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2757
    have "(?c 1) sums (arctan 1)" unfolding sums_def by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2758
    hence "arctan 1 = (\<Sum> i. ?c 1 i)" by (rule sums_unique)
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2759
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2760
    show ?thesis
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2761
    proof (cases "x = 1", simp add: `arctan 1 = (\<Sum> i. ?c 1 i)`)
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2762
      assume "x \<noteq> 1" hence "x = -1" using `\<bar>x\<bar> = 1` by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2763
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2764
      have "- (pi / 2) < 0" using pi_gt_zero by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2765
      have "- (2 * pi) < 0" using pi_gt_zero by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2766
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
  2767
      have c_minus_minus: "\<And> i. ?c (- 1) i = - ?c 1 i" unfolding One_nat_def by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2768
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2769
      have "arctan (- 1) = arctan (tan (-(pi / 4)))" unfolding tan_45 tan_minus ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2770
      also have "\<dots> = - (pi / 4)" by (rule arctan_tan, auto simp add: order_less_trans[OF `- (pi / 2) < 0` pi_gt_zero])
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2771
      also have "\<dots> = - (arctan (tan (pi / 4)))" unfolding neg_equal_iff_equal by (rule arctan_tan[symmetric], auto simp add: order_less_trans[OF `- (2 * pi) < 0` pi_gt_zero])
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2772
      also have "\<dots> = - (arctan 1)" unfolding tan_45 ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2773
      also have "\<dots> = - (\<Sum> i. ?c 1 i)" using `arctan 1 = (\<Sum> i. ?c 1 i)` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2774
      also have "\<dots> = (\<Sum> i. ?c (- 1) i)" using suminf_minus[OF sums_summable[OF `(?c 1) sums (arctan 1)`]] unfolding c_minus_minus by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2775
      finally show ?thesis using `x = -1` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2776
    qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2777
  qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2778
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2779
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2780
lemma arctan_half: fixes x :: real
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2781
  shows "arctan x = 2 * arctan (x / (1 + sqrt(1 + x^2)))"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2782
proof -
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2783
  obtain y where low: "- (pi / 2) < y" and high: "y < pi / 2" and y_eq: "tan y = x" using tan_total by blast
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2784
  hence low2: "- (pi / 2) < y / 2" and high2: "y / 2 < pi / 2" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2785
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2786
  have divide_nonzero_divide: "\<And> A B C :: real. C \<noteq> 0 \<Longrightarrow> A / B = (A / C) / (B / C)" by auto
41970
47d6e13d1710 generalize infinite sums
hoelzl
parents: 41550
diff changeset
  2787
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2788
  have "0 < cos y" using cos_gt_zero_pi[OF low high] .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2789
  hence "cos y \<noteq> 0" and cos_sqrt: "sqrt ((cos y) ^ 2) = cos y" by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2790
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2791
  have "1 + (tan y)^2 = 1 + sin y^2 / cos y^2" unfolding tan_def power_divide ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2792
  also have "\<dots> = cos y^2 / cos y^2 + sin y^2 / cos y^2" using `cos y \<noteq> 0` by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2793
  also have "\<dots> = 1 / cos y^2" unfolding add_divide_distrib[symmetric] sin_cos_squared_add2 ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2794
  finally have "1 + (tan y)^2 = 1 / cos y^2" .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2795
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2796
  have "sin y / (cos y + 1) = tan y / ((cos y + 1) / cos y)" unfolding tan_def divide_nonzero_divide[OF `cos y \<noteq> 0`, symmetric] ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2797
  also have "\<dots> = tan y / (1 + 1 / cos y)" using `cos y \<noteq> 0` unfolding add_divide_distrib by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2798
  also have "\<dots> = tan y / (1 + 1 / sqrt(cos y^2))" unfolding cos_sqrt ..
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2799
  also have "\<dots> = tan y / (1 + sqrt(1 / cos y^2))" unfolding real_sqrt_divide by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2800
  finally have eq: "sin y / (cos y + 1) = tan y / (1 + sqrt(1 + (tan y)^2))" unfolding `1 + (tan y)^2 = 1 / cos y^2` .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2801
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2802
  have "arctan x = y" using arctan_tan low high y_eq by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2803
  also have "\<dots> = 2 * (arctan (tan (y/2)))" using arctan_tan[OF low2 high2] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2804
  also have "\<dots> = 2 * (arctan (sin y / (cos y + 1)))" unfolding tan_half[OF low2 high2] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2805
  finally show ?thesis unfolding eq `tan y = x` .
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2806
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2807
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2808
lemma arctan_monotone: assumes "x < y"
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2809
  shows "arctan x < arctan y"
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2810
  using assms by (simp only: arctan_less_iff)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2811
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2812
lemma arctan_monotone': assumes "x \<le> y" shows "arctan x \<le> arctan y"
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2813
  using assms by (simp only: arctan_le_iff)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2814
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2815
lemma arctan_inverse:
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2816
  assumes "x \<noteq> 0" shows "arctan (1 / x) = sgn x * pi / 2 - arctan x"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2817
proof (rule arctan_unique)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2818
  show "- (pi / 2) < sgn x * pi / 2 - arctan x"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2819
    using arctan_bounded [of x] assms
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2820
    unfolding sgn_real_def
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2821
    apply (auto simp add: algebra_simps)
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2822
    apply (drule zero_less_arctan_iff [THEN iffD2])
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2823
    apply arith
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2824
    done
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2825
  show "sgn x * pi / 2 - arctan x < pi / 2"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2826
    using arctan_bounded [of "- x"] assms
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2827
    unfolding sgn_real_def arctan_minus
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2828
    by auto
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2829
  show "tan (sgn x * pi / 2 - arctan x) = 1 / x"
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2830
    unfolding tan_inverse [of "arctan x", unfolded tan_arctan]
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2831
    unfolding sgn_real_def
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2832
    by (simp add: tan_def cos_arctan sin_arctan sin_diff cos_diff)
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2833
qed
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2834
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2835
theorem pi_series: "pi / 4 = (\<Sum> k. (-1)^k * 1 / real (k*2+1))" (is "_ = ?SUM")
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2836
proof -
44746
9e4f7d3b5376 add lemmas about arctan;
huffman
parents: 44745
diff changeset
  2837
  have "pi / 4 = arctan 1" using arctan_one by auto
29803
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2838
  also have "\<dots> = ?SUM" using arctan_series[of 1] by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2839
  finally show ?thesis by auto
c56a5571f60a Added derivation lemmas for power series and theorems for the pi, arcus tangens and logarithm series
hoelzl
parents: 29695
diff changeset
  2840
qed
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2841
22978
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2842
subsection {* Existence of Polar Coordinates *}
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2843
22978
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2844
lemma cos_x_y_le_one: "\<bar>x / sqrt (x\<twosuperior> + y\<twosuperior>)\<bar> \<le> 1"
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2845
apply (rule power2_le_imp_le [OF _ zero_le_one])
35216
7641e8d831d2 get rid of many duplicate simp rule warnings
huffman
parents: 35213
diff changeset
  2846
apply (simp add: power_divide divide_le_eq not_sum_power2_lt_zero)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2847
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2848
22978
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2849
lemma cos_arccos_abs: "\<bar>y\<bar> \<le> 1 \<Longrightarrow> cos (arccos y) = y"
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2850
by (simp add: abs_le_iff)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2851
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2852
lemma sin_arccos_abs: "\<bar>y\<bar> \<le> 1 \<Longrightarrow> sin (arccos y) = sqrt (1 - y\<twosuperior>)"
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2853
by (simp add: sin_arccos abs_le_iff)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2854
22978
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2855
lemmas cos_arccos_lemma1 = cos_arccos_abs [OF cos_x_y_le_one]
15228
4d332d10fa3d revised simprules for division
paulson
parents: 15140
diff changeset
  2856
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2857
lemmas sin_arccos_lemma1 = sin_arccos_abs [OF cos_x_y_le_one]
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2858
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  2859
lemma polar_ex1:
22978
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2860
     "0 < y ==> \<exists>r a. x = r * cos a & y = r * sin a"
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  2861
apply (rule_tac x = "sqrt (x\<twosuperior> + y\<twosuperior>)" in exI)
22978
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2862
apply (rule_tac x = "arccos (x / sqrt (x\<twosuperior> + y\<twosuperior>))" in exI)
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2863
apply (simp add: cos_arccos_lemma1)
23045
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2864
apply (simp add: sin_arccos_lemma1)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2865
apply (simp add: power_divide)
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2866
apply (simp add: real_sqrt_mult [symmetric])
95e04f335940 add lemmas about inverse functions; cleaned up proof of polar_ex
huffman
parents: 23043
diff changeset
  2867
apply (simp add: right_diff_distrib)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2868
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2869
15229
1eb23f805c06 new simprules for abs and for things like a/b<1
paulson
parents: 15228
diff changeset
  2870
lemma polar_ex2:
22978
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2871
     "y < 0 ==> \<exists>r a. x = r * cos a & y = r * sin a"
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2872
apply (insert polar_ex1 [where x=x and y="-y"], simp, clarify)
33667
958dc9f03611 A little rationalisation
paulson
parents: 33549
diff changeset
  2873
apply (metis cos_minus minus_minus minus_mult_right sin_minus)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2874
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2875
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2876
lemma polar_Ex: "\<exists>r a. x = r * cos a & y = r * sin a"
22978
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2877
apply (rule_tac x=0 and y=y in linorder_cases)
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2878
apply (erule polar_ex1)
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2879
apply (rule_tac x=x in exI, rule_tac x=0 in exI, simp)
1cd8cc21a7c3 clean up polar_Ex proofs; remove unnecessary lemmas
huffman
parents: 22977
diff changeset
  2880
apply (erule polar_ex2)
15077
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2881
done
89840837108e converting Hyperreal/Transcendental to Isar script
paulson
parents: 15013
diff changeset
  2882
30082
43c5b7bfc791 make more proofs work whether or not One_nat_def is a simp rule
huffman
parents: 29803
diff changeset
  2883
end