Transcendental.thy: add tendsto_intros lemmas;
authorhuffman
Fri, 19 Aug 2011 14:17:28 -0700
changeset 4518242c5cbf68052
parent 45181 ba3d031b5dbb
child 45183 471ff02a8574
Transcendental.thy: add tendsto_intros lemmas;
new isCont theorems;
simplify some proofs.
src/HOL/Transcendental.thy
     1.1 --- a/src/HOL/Transcendental.thy	Fri Aug 19 11:49:53 2011 -0700
     1.2 +++ b/src/HOL/Transcendental.thy	Fri Aug 19 14:17:28 2011 -0700
     1.3 @@ -871,8 +871,15 @@
     1.4  apply (simp del: of_real_add)
     1.5  done
     1.6  
     1.7 -lemma isCont_exp [simp]: "isCont exp x"
     1.8 -by (rule DERIV_exp [THEN DERIV_isCont])
     1.9 +lemma isCont_exp: "isCont exp x"
    1.10 +  by (rule DERIV_exp [THEN DERIV_isCont])
    1.11 +
    1.12 +lemma isCont_exp' [simp]: "isCont f a \<Longrightarrow> isCont (\<lambda>x. exp (f x)) a"
    1.13 +  by (rule isCont_o2 [OF _ isCont_exp])
    1.14 +
    1.15 +lemma tendsto_exp [tendsto_intros]:
    1.16 +  "(f ---> a) F \<Longrightarrow> ((\<lambda>x. exp (f x)) ---> exp a) F"
    1.17 +  by (rule isCont_tendsto_compose [OF isCont_exp])
    1.18  
    1.19  
    1.20  subsubsection {* Properties of the Exponential Function *}
    1.21 @@ -1271,12 +1278,25 @@
    1.22  apply (auto intro: sin_converges cos_converges sums_summable intro!: sums_minus [THEN sums_summable] simp add: cos_fdiffs sin_fdiffs diffs_minus)
    1.23  done
    1.24  
    1.25 -lemma isCont_sin [simp]: "isCont sin x"
    1.26 -by (rule DERIV_sin [THEN DERIV_isCont])
    1.27 -
    1.28 -lemma isCont_cos [simp]: "isCont cos x"
    1.29 -by (rule DERIV_cos [THEN DERIV_isCont])
    1.30 -
    1.31 +lemma isCont_sin: "isCont sin x"
    1.32 +  by (rule DERIV_sin [THEN DERIV_isCont])
    1.33 +
    1.34 +lemma isCont_cos: "isCont cos x"
    1.35 +  by (rule DERIV_cos [THEN DERIV_isCont])
    1.36 +
    1.37 +lemma isCont_sin' [simp]: "isCont f a \<Longrightarrow> isCont (\<lambda>x. sin (f x)) a"
    1.38 +  by (rule isCont_o2 [OF _ isCont_sin])
    1.39 +
    1.40 +lemma isCont_cos' [simp]: "isCont f a \<Longrightarrow> isCont (\<lambda>x. cos (f x)) a"
    1.41 +  by (rule isCont_o2 [OF _ isCont_cos])
    1.42 +
    1.43 +lemma tendsto_sin [tendsto_intros]:
    1.44 +  "(f ---> a) F \<Longrightarrow> ((\<lambda>x. sin (f x)) ---> sin a) F"
    1.45 +  by (rule isCont_tendsto_compose [OF isCont_sin])
    1.46 +
    1.47 +lemma tendsto_cos [tendsto_intros]:
    1.48 +  "(f ---> a) F \<Longrightarrow> ((\<lambda>x. cos (f x)) ---> cos a) F"
    1.49 +  by (rule isCont_tendsto_compose [OF isCont_cos])
    1.50  
    1.51  declare
    1.52    DERIV_exp[THEN DERIV_chain2, THEN DERIV_cong, DERIV_intros]
    1.53 @@ -1287,10 +1307,10 @@
    1.54  subsection {* Properties of Sine and Cosine *}
    1.55  
    1.56  lemma sin_zero [simp]: "sin 0 = 0"
    1.57 -unfolding sin_def sin_coeff_def by (simp add: powser_zero)
    1.58 +  unfolding sin_def sin_coeff_def by (simp add: powser_zero)
    1.59  
    1.60  lemma cos_zero [simp]: "cos 0 = 1"
    1.61 -unfolding cos_def cos_coeff_def by (simp add: powser_zero)
    1.62 +  unfolding cos_def cos_coeff_def by (simp add: powser_zero)
    1.63  
    1.64  lemma lemma_DERIV_subst: "[| DERIV f x :> D; D = E |] ==> DERIV f x :> E"
    1.65    by (rule DERIV_cong) (* TODO: delete *)
    1.66 @@ -1336,32 +1356,19 @@
    1.67  
    1.68  lemma DERIV_fun_pow: "DERIV g x :> m ==>
    1.69        DERIV (%x. (g x) ^ n) x :> real n * (g x) ^ (n - 1) * m"
    1.70 -unfolding One_nat_def
    1.71 -apply (rule DERIV_cong)
    1.72 -apply (rule_tac f = "(%x. x ^ n)" in DERIV_chain2)
    1.73 -apply (rule DERIV_pow, auto)
    1.74 -done
    1.75 +  by (auto intro!: DERIV_intros)
    1.76  
    1.77  lemma DERIV_fun_exp:
    1.78       "DERIV g x :> m ==> DERIV (%x. exp(g x)) x :> exp(g x) * m"
    1.79 -apply (rule DERIV_cong)
    1.80 -apply (rule_tac f = exp in DERIV_chain2)
    1.81 -apply (rule DERIV_exp, auto)
    1.82 -done
    1.83 +  by (auto intro!: DERIV_intros)
    1.84  
    1.85  lemma DERIV_fun_sin:
    1.86       "DERIV g x :> m ==> DERIV (%x. sin(g x)) x :> cos(g x) * m"
    1.87 -apply (rule DERIV_cong)
    1.88 -apply (rule_tac f = sin in DERIV_chain2)
    1.89 -apply (rule DERIV_sin, auto)
    1.90 -done
    1.91 +  by (auto intro!: DERIV_intros)
    1.92  
    1.93  lemma DERIV_fun_cos:
    1.94       "DERIV g x :> m ==> DERIV (%x. cos(g x)) x :> -sin(g x) * m"
    1.95 -apply (rule DERIV_cong)
    1.96 -apply (rule_tac f = cos in DERIV_chain2)
    1.97 -apply (rule DERIV_cos, auto)
    1.98 -done
    1.99 +  by (auto intro!: DERIV_intros)
   1.100  
   1.101  lemma sin_cos_add_lemma:
   1.102       "(sin (x + y) - (sin x * cos y + cos x * sin y)) ^ 2 +
   1.103 @@ -1485,10 +1492,10 @@
   1.104  done
   1.105  
   1.106  lemma sin_gt_zero1: "[|0 < x; x < 2 |] ==> 0 < sin x"
   1.107 -by (auto intro: sin_gt_zero)
   1.108 +  by (rule sin_gt_zero)
   1.109  
   1.110  lemma cos_double_less_one: "[| 0 < x; x < 2 |] ==> cos (2 * x) < 1"
   1.111 -apply (cut_tac x = x in sin_gt_zero1)
   1.112 +apply (cut_tac x = x in sin_gt_zero)
   1.113  apply (auto simp add: cos_squared_eq cos_double)
   1.114  done
   1.115  
   1.116 @@ -1888,59 +1895,41 @@
   1.117  
   1.118  subsection {* Tangent *}
   1.119  
   1.120 -definition
   1.121 -  tan :: "real => real" where
   1.122 -  "tan x = (sin x)/(cos x)"
   1.123 +definition tan :: "real \<Rightarrow> real" where
   1.124 +  "tan = (\<lambda>x. sin x / cos x)"
   1.125  
   1.126  lemma tan_zero [simp]: "tan 0 = 0"
   1.127 -by (simp add: tan_def)
   1.128 +  by (simp add: tan_def)
   1.129  
   1.130  lemma tan_pi [simp]: "tan pi = 0"
   1.131 -by (simp add: tan_def)
   1.132 +  by (simp add: tan_def)
   1.133  
   1.134  lemma tan_npi [simp]: "tan (real (n::nat) * pi) = 0"
   1.135 -by (simp add: tan_def)
   1.136 +  by (simp add: tan_def)
   1.137  
   1.138  lemma tan_minus [simp]: "tan (-x) = - tan x"
   1.139 -by (simp add: tan_def minus_mult_left)
   1.140 +  by (simp add: tan_def)
   1.141  
   1.142  lemma tan_periodic [simp]: "tan (x + 2*pi) = tan x"
   1.143 -by (simp add: tan_def)
   1.144 +  by (simp add: tan_def)
   1.145  
   1.146  lemma lemma_tan_add1:
   1.147 -      "[| cos x \<noteq> 0; cos y \<noteq> 0 |]
   1.148 -        ==> 1 - tan(x)*tan(y) = cos (x + y)/(cos x * cos y)"
   1.149 -apply (simp add: tan_def divide_inverse)
   1.150 -apply (auto simp del: inverse_mult_distrib
   1.151 -            simp add: inverse_mult_distrib [symmetric] mult_ac)
   1.152 -apply (rule_tac c1 = "cos x * cos y" in real_mult_right_cancel [THEN subst])
   1.153 -apply (auto simp del: inverse_mult_distrib
   1.154 -            simp add: mult_assoc left_diff_distrib cos_add)
   1.155 -done
   1.156 +  "\<lbrakk>cos x \<noteq> 0; cos y \<noteq> 0\<rbrakk> \<Longrightarrow> 1 - tan x * tan y = cos (x + y)/(cos x * cos y)"
   1.157 +  by (simp add: tan_def cos_add field_simps)
   1.158  
   1.159  lemma add_tan_eq:
   1.160 -      "[| cos x \<noteq> 0; cos y \<noteq> 0 |]
   1.161 -       ==> tan x + tan y = sin(x + y)/(cos x * cos y)"
   1.162 -apply (simp add: tan_def)
   1.163 -apply (rule_tac c1 = "cos x * cos y" in real_mult_right_cancel [THEN subst])
   1.164 -apply (auto simp add: mult_assoc left_distrib)
   1.165 -apply (simp add: sin_add)
   1.166 -done
   1.167 +  "\<lbrakk>cos x \<noteq> 0; cos y \<noteq> 0\<rbrakk> \<Longrightarrow> tan x + tan y = sin(x + y)/(cos x * cos y)"
   1.168 +  by (simp add: tan_def sin_add field_simps)
   1.169  
   1.170  lemma tan_add:
   1.171       "[| cos x \<noteq> 0; cos y \<noteq> 0; cos (x + y) \<noteq> 0 |]
   1.172        ==> tan(x + y) = (tan(x) + tan(y))/(1 - tan(x) * tan(y))"
   1.173 -apply (simp (no_asm_simp) add: add_tan_eq lemma_tan_add1)
   1.174 -apply (simp add: tan_def)
   1.175 -done
   1.176 +  by (simp add: add_tan_eq lemma_tan_add1, simp add: tan_def)
   1.177  
   1.178  lemma tan_double:
   1.179       "[| cos x \<noteq> 0; cos (2 * x) \<noteq> 0 |]
   1.180        ==> tan (2 * x) = (2 * tan x)/(1 - (tan(x) ^ 2))"
   1.181 -apply (insert tan_add [of x x])
   1.182 -apply (simp add: mult_2 [symmetric])
   1.183 -apply (auto simp add: numeral_2_eq_2)
   1.184 -done
   1.185 +  using tan_add [of x x] by (simp add: power2_eq_square)
   1.186  
   1.187  lemma tan_gt_zero: "[| 0 < x; x < pi/2 |] ==> 0 < tan x"
   1.188  by (simp add: tan_def zero_less_divide_iff sin_gt_zero2 cos_gt_zero_pi)
   1.189 @@ -1968,26 +1957,23 @@
   1.190    finally show ?thesis .
   1.191  qed
   1.192  
   1.193 -lemma lemma_DERIV_tan:
   1.194 -     "cos x \<noteq> 0 ==> DERIV (%x. sin(x)/cos(x)) x :> inverse((cos x)\<twosuperior>)"
   1.195 -  by (auto intro!: DERIV_intros simp add: field_simps numeral_2_eq_2)
   1.196 -
   1.197 -lemma DERIV_tan [simp]: "cos x \<noteq> 0 ==> DERIV tan x :> inverse((cos x)\<twosuperior>)"
   1.198 -by (auto dest: lemma_DERIV_tan simp add: tan_def [symmetric])
   1.199 -
   1.200 -lemma isCont_tan [simp]: "cos x \<noteq> 0 ==> isCont tan x"
   1.201 -by (rule DERIV_tan [THEN DERIV_isCont])
   1.202 -
   1.203 -lemma LIM_cos_div_sin [simp]: "(%x. cos(x)/sin(x)) -- pi/2 --> 0"
   1.204 -apply (subgoal_tac "(\<lambda>x. cos x * inverse (sin x)) -- pi * inverse 2 --> 0*1")
   1.205 -apply (simp add: divide_inverse [symmetric])
   1.206 -apply (rule LIM_mult)
   1.207 -apply (rule_tac [2] inverse_1 [THEN subst])
   1.208 -apply (rule_tac [2] LIM_inverse)
   1.209 -apply (simp_all add: divide_inverse [symmetric])
   1.210 -apply (simp_all only: isCont_def [symmetric] cos_pi_half [symmetric] sin_pi_half [symmetric])
   1.211 -apply (blast intro!: DERIV_isCont DERIV_sin DERIV_cos)+
   1.212 -done
   1.213 +lemma DERIV_tan [simp]: "cos x \<noteq> 0 \<Longrightarrow> DERIV tan x :> inverse ((cos x)\<twosuperior>)"
   1.214 +  unfolding tan_def
   1.215 +  by (auto intro!: DERIV_intros, simp add: divide_inverse power2_eq_square)
   1.216 +
   1.217 +lemma isCont_tan: "cos x \<noteq> 0 \<Longrightarrow> isCont tan x"
   1.218 +  by (rule DERIV_tan [THEN DERIV_isCont])
   1.219 +
   1.220 +lemma isCont_tan' [simp]:
   1.221 +  "\<lbrakk>isCont f a; cos (f a) \<noteq> 0\<rbrakk> \<Longrightarrow> isCont (\<lambda>x. tan (f x)) a"
   1.222 +  by (rule isCont_o2 [OF _ isCont_tan])
   1.223 +
   1.224 +lemma tendsto_tan [tendsto_intros]:
   1.225 +  "\<lbrakk>(f ---> a) F; cos a \<noteq> 0\<rbrakk> \<Longrightarrow> ((\<lambda>x. tan (f x)) ---> tan a) F"
   1.226 +  by (rule isCont_tendsto_compose [OF isCont_tan])
   1.227 +
   1.228 +lemma LIM_cos_div_sin: "(%x. cos(x)/sin(x)) -- pi/2 --> 0"
   1.229 +  by (rule LIM_cong_limit, (rule tendsto_intros)+, simp_all)
   1.230  
   1.231  lemma lemma_tan_total: "0 < y ==> \<exists>x. 0 < x & x < pi/2 & y < tan x"
   1.232  apply (cut_tac LIM_cos_div_sin)