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 |