src/HOL/Complex/CLim.thy
changeset 20563 44eda2314aab
parent 20559 2116b7a371c7
child 20659 66b8455090b8
equal deleted inserted replaced
20562:c2f672be8522 20563:44eda2314aab
   662 
   662 
   663 lemma NSCDERIV_CDERIV_iff: "(NSCDERIV f x :> D) = (CDERIV f x :> D)"
   663 lemma NSCDERIV_CDERIV_iff: "(NSCDERIV f x :> D) = (CDERIV f x :> D)"
   664 by (simp add: cderiv_def NSCDERIV_NSCLIM_iff CLIM_NSCLIM_iff)
   664 by (simp add: cderiv_def NSCDERIV_NSCLIM_iff CLIM_NSCLIM_iff)
   665 
   665 
   666 lemma NSCDERIV_isNSContc: "NSCDERIV f x :> D ==> isNSContc f x"
   666 lemma NSCDERIV_isNSContc: "NSCDERIV f x :> D ==> isNSContc f x"
   667 apply (auto simp add: nscderiv_def isNSContc_NSCLIM_iff NSCLIM_def diff_minus)
   667 apply (auto simp add: nscderiv_def isNSContc_NSCLIM_iff NSCLIM_def)
   668 apply (drule approx_minus_iff [THEN iffD1])
   668 apply (drule approx_minus_iff [THEN iffD1])
   669 apply (subgoal_tac "xa + - (hcomplex_of_complex x) \<noteq> 0")
   669 apply (subgoal_tac "xa - (hcomplex_of_complex x) \<noteq> 0")
   670  prefer 2 apply (simp add: compare_rls) 
   670  prefer 2 apply (simp add: compare_rls) 
   671 apply (drule_tac x = "- hcomplex_of_complex x + xa" in bspec)
   671 apply (drule_tac x = "xa - hcomplex_of_complex x" in bspec)
   672  prefer 2 apply (simp add: add_assoc [symmetric]) 
   672 apply (simp add: mem_infmal_iff)
       
   673 apply (simp add: add_assoc [symmetric]) 
   673 apply (auto simp add: mem_infmal_iff [symmetric] add_commute)
   674 apply (auto simp add: mem_infmal_iff [symmetric] add_commute)
   674 apply (drule_tac c = "xa + - hcomplex_of_complex x" in approx_mult1)
   675 apply (drule_tac c = "xa - hcomplex_of_complex x" in approx_mult1)
   675 apply (auto intro: Infinitesimal_subset_HFinite [THEN subsetD]
   676 apply (auto intro: Infinitesimal_subset_HFinite [THEN subsetD]
   676             simp add: mult_assoc)
   677             simp add: mult_assoc)
   677 apply (drule_tac x3 = D in 
   678 apply (drule_tac x3 = D in 
   678        HFinite_hcomplex_of_complex [THEN [2] Infinitesimal_HFinite_mult,
   679        HFinite_hcomplex_of_complex [THEN [2] Infinitesimal_HFinite_mult,
   679                                     THEN mem_infmal_iff [THEN iffD1]])
   680                                     THEN mem_infmal_iff [THEN iffD1]])
   712 
   713 
   713 lemma lemma_nscderiv1: "((a::hcomplex)*b) - (c*d) = (b*(a - c)) + (c*(b - d))"
   714 lemma lemma_nscderiv1: "((a::hcomplex)*b) - (c*d) = (b*(a - c)) + (c*(b - d))"
   714 by (simp add: right_diff_distrib)
   715 by (simp add: right_diff_distrib)
   715 
   716 
   716 lemma lemma_nscderiv2:
   717 lemma lemma_nscderiv2:
   717      "[| (x + y) / z = hcomplex_of_complex D + yb; z \<noteq> 0;
   718      "[| (x - y) / z = hcomplex_of_complex D + yb; z \<noteq> 0;
   718          z : Infinitesimal; yb : Infinitesimal |]
   719          z : Infinitesimal; yb : Infinitesimal |]
   719       ==> x + y @= 0"
   720       ==> x - y @= 0"
   720 apply (frule_tac c1 = z in hcomplex_mult_right_cancel [THEN iffD2], assumption)
   721 apply (frule_tac c1 = z in hcomplex_mult_right_cancel [THEN iffD2], assumption)
   721 apply (erule_tac V = " (x + y) / z = hcomplex_of_complex D + yb" in thin_rl)
   722 apply (erule_tac V = " (x - y) / z = hcomplex_of_complex D + yb" in thin_rl)
   722 apply (auto intro!: Infinitesimal_HFinite_mult2 HFinite_add 
   723 apply (auto intro!: Infinitesimal_HFinite_mult2 HFinite_add 
   723             simp add: mem_infmal_iff [symmetric])
   724             simp add: mem_infmal_iff [symmetric])
   724 apply (erule Infinitesimal_subset_HFinite [THEN subsetD])
   725 apply (erule Infinitesimal_subset_HFinite [THEN subsetD])
   725 done
   726 done
   726 
   727 
   727 lemma NSCDERIV_mult:
   728 lemma NSCDERIV_mult:
   728      "[| NSCDERIV f x :> Da; NSCDERIV g x :> Db |]
   729      "[| NSCDERIV f x :> Da; NSCDERIV g x :> Db |]
   729       ==> NSCDERIV (%x. f x * g x) x :> (Da * g(x)) + (Db * f(x))"
   730       ==> NSCDERIV (%x. f x * g x) x :> (Da * g(x)) + (Db * f(x))"
   730 apply (simp add: NSCDERIV_NSCLIM_iff NSCLIM_def, clarify) 
   731 apply (auto simp add: NSCDERIV_NSCLIM_iff NSCLIM_def)
   731 apply (auto dest!: spec
   732 apply (auto dest!: spec
   732             simp add: starfun_lambda_cancel lemma_nscderiv1)
   733       simp add: starfun_lambda_cancel lemma_nscderiv1)
   733 apply (simp (no_asm) add: add_divide_distrib)
   734 apply (simp (no_asm) add: add_divide_distrib diff_divide_distrib)
   734 apply (drule bex_Infinitesimal_iff2 [THEN iffD2])+
   735 apply (drule bex_Infinitesimal_iff2 [THEN iffD2])+
   735 apply (auto simp del: times_divide_eq_right simp add: times_divide_eq_right [symmetric])
   736 apply (auto simp add: times_divide_eq_right [symmetric]
   736 apply (simp add: diff_minus)
   737             simp del: times_divide_eq)
   737 apply (drule_tac D = Db in lemma_nscderiv2)
   738 apply (drule_tac D = Db in lemma_nscderiv2, assumption+)
   738 apply (drule_tac [4]
   739 apply (drule_tac
   739         approx_minus_iff [THEN iffD2, THEN bex_Infinitesimal_iff2 [THEN iffD2]])
   740         approx_minus_iff [THEN iffD2, THEN bex_Infinitesimal_iff2 [THEN iffD2]])
   740 apply (auto intro!: approx_add_mono1 simp add: left_distrib right_distrib mult_commute add_assoc)
   741 apply (auto intro!: approx_add_mono1 simp add: left_distrib right_distrib mult_commute add_assoc)
   741 apply (rule_tac b1 = "hcomplex_of_complex Db * hcomplex_of_complex (f x) " in add_commute [THEN subst])
   742 apply (rule_tac b1 = "hcomplex_of_complex Db * hcomplex_of_complex (f x) " in add_commute [THEN subst])
   742 apply (auto intro!: Infinitesimal_add_approx_self2 [THEN approx_sym] 
   743 apply (auto intro!: Infinitesimal_add_approx_self2 [THEN approx_sym] 
   743 		    Infinitesimal_add Infinitesimal_mult
   744 		    Infinitesimal_add Infinitesimal_mult