# HG changeset patch # User paulson # Date 1556631772 -3600 # Node ID 1f04832cbfcfd686463ca6467a02e31be2033bfe # Parent 40f19372a7230f926ed53f9527eb928d42daa4c6 more tidying up diff -r 40f19372a723 -r 1f04832cbfcf src/HOL/Nonstandard_Analysis/HDeriv.thy --- a/src/HOL/Nonstandard_Analysis/HDeriv.thy Tue Apr 30 13:01:22 2019 +0100 +++ b/src/HOL/Nonstandard_Analysis/HDeriv.thy Tue Apr 30 14:42:52 2019 +0100 @@ -34,9 +34,6 @@ lemma NS_DERIV_D: "DERIV f x :> D \ (\h. (f (x + h) - f x) / h) \0\\<^sub>N\<^sub>S D" by (simp add: DERIV_def LIM_NSLIM_iff) -lemma hnorm_of_hypreal: "\r. hnorm (( *f* of_real) r::'a::real_normed_div_algebra star) = \r\" - by transfer (rule norm_of_real) - lemma Infinitesimal_of_hypreal: "x \ Infinitesimal \ (( *f* of_real) x::'a::real_normed_div_algebra star) \ Infinitesimal" by (metis Infinitesimal_of_hypreal_iff of_hypreal_def) diff -r 40f19372a723 -r 1f04832cbfcf src/HOL/Nonstandard_Analysis/NSCA.thy --- a/src/HOL/Nonstandard_Analysis/NSCA.thy Tue Apr 30 13:01:22 2019 +0100 +++ b/src/HOL/Nonstandard_Analysis/NSCA.thy Tue Apr 30 14:42:52 2019 +0100 @@ -72,12 +72,12 @@ "hcmod (hcomplex_of_complex r) \ HFinite" by (auto intro!: SReal_subset_HFinite [THEN subsetD]) -lemma HFinite_hcmod_iff: "(x \ HFinite) = (hcmod x \ HFinite)" +lemma HFinite_hcmod_iff [simp]: "hcmod x \ HFinite \ x \ HFinite" by (simp add: HFinite_def) lemma HFinite_bounded_hcmod: "\x \ HFinite; y \ hcmod x; 0 \ y\ \ y \ HFinite" - by (auto intro: HFinite_bounded simp add: HFinite_hcmod_iff) + using HFinite_bounded HFinite_hcmod_iff by blast subsection\The Complex Infinitesimals form a Subring\ @@ -91,7 +91,7 @@ lemma HFinite_diff_Infinitesimal_hcmod: "x \ HFinite - Infinitesimal \ hcmod x \ HFinite - Infinitesimal" - by (simp add: HFinite_hcmod_iff Infinitesimal_hcmod_iff) + by (simp add: Infinitesimal_hcmod_iff) lemma hcmod_less_Infinitesimal: "\e \ Infinitesimal; hcmod x < hcmod e\ \ x \ Infinitesimal" @@ -193,16 +193,21 @@ using Infinitesimal_hcmod_iff abs_hIm_le_hcmod hrabs_le_Infinitesimal by blast lemma Infinitesimal_HComplex: - "\x \ Infinitesimal; y \ Infinitesimal\ \ HComplex x y \ Infinitesimal" -apply (rule Infinitesimal_hcmod_iff [THEN iffD2]) -apply (simp add: hcmod_i) -apply (rule Infinitesimal_add) -apply (erule Infinitesimal_hrealpow, simp) -apply (erule Infinitesimal_hrealpow, simp) -done + assumes x: "x \ Infinitesimal" and y: "y \ Infinitesimal" + shows "HComplex x y \ Infinitesimal" +proof - + have "hcmod (HComplex 0 y) \ Infinitesimal" + by (simp add: hcmod_i y) + moreover have "hcmod (hcomplex_of_hypreal x) \ Infinitesimal" + using Infinitesimal_hcmod_iff Infinitesimal_of_hypreal_iff x by blast + ultimately have "hcmod (HComplex x y) \ Infinitesimal" + by (metis Infinitesimal_add Infinitesimal_hcmod_iff add.right_neutral hcomplex_of_hypreal_add_HComplex) + then show ?thesis + by (simp add: Infinitesimal_hnorm_iff) +qed lemma hcomplex_Infinitesimal_iff: - "(x \ Infinitesimal) = (hRe x \ Infinitesimal \ hIm x \ Infinitesimal)" + "(x \ Infinitesimal) \ (hRe x \ Infinitesimal \ hIm x \ Infinitesimal)" using Infinitesimal_HComplex Infinitesimal_hIm Infinitesimal_hRe by fastforce lemma hRe_diff [simp]: "\x y. hRe (x - y) = hRe x - hRe y" @@ -232,12 +237,16 @@ using HFinite_bounded_hcmod abs_ge_zero abs_hIm_le_hcmod by blast lemma HFinite_HComplex: - "\x \ HFinite; y \ HFinite\ \ HComplex x y \ HFinite" -apply (subgoal_tac "HComplex x 0 + HComplex 0 y \ HFinite", simp) -apply (rule HFinite_add) -apply (simp add: HFinite_hcmod_iff hcmod_i) -apply (simp add: HFinite_hcmod_iff hcmod_i) -done + assumes "x \ HFinite" "y \ HFinite" + shows "HComplex x y \ HFinite" +proof - + have "HComplex x 0 \ HFinite" "HComplex 0 y \ HFinite" + using HFinite_hcmod_iff assms hcmod_i by fastforce+ + then have "HComplex x 0 + HComplex 0 y \ HFinite" + using HFinite_add by blast + then show ?thesis + by simp +qed lemma hcomplex_HFinite_iff: "(x \ HFinite) = (hRe x \ HFinite \ hIm x \ HFinite)" @@ -252,12 +261,17 @@ by (simp add: hcomplex_approx_iff) (* Here we go - easy proof now!! *) -lemma stc_part_Ex: "x \ HFinite \ \t \ SComplex. x \ t" -apply (simp add: hcomplex_HFinite_iff hcomplex_approx_iff) -apply (rule_tac x="HComplex (st (hRe x)) (st (hIm x))" in bexI) -apply (simp add: st_approx_self [THEN approx_sym]) -apply (simp add: Standard_HComplex st_SReal [unfolded Reals_eq_Standard]) -done +lemma stc_part_Ex: + assumes "x \ HFinite" + shows "\t \ SComplex. x \ t" +proof - + let ?t = "HComplex (st (hRe x)) (st (hIm x))" + have "?t \ SComplex" + using HFinite_hIm HFinite_hRe Reals_eq_Standard assms st_SReal by auto + moreover have "x \ ?t" + by (simp add: HFinite_hIm HFinite_hRe assms hcomplex_approx_iff st_HFinite st_eq_approx) + ultimately show ?thesis .. +qed lemma stc_part_Ex1: "x \ HFinite \ \!t. t \ SComplex \ x \ t" using approx_sym approx_unique_complex stc_part_Ex by blast @@ -342,9 +356,7 @@ lemma stc_inverse: "\x \ HFinite; stc x \ 0\ \ stc(inverse x) = inverse (stc x)" - apply (drule stc_not_Infinitesimal) - apply (simp add: stc_unique stc_SComplex stc_approx_self approx_inverse) - done + by (simp add: stc_unique stc_SComplex stc_approx_self approx_inverse stc_not_Infinitesimal) lemma stc_divide [simp]: "\x \ HFinite; y \ HFinite; stc y \ 0\ @@ -364,27 +376,15 @@ lemma stc_hcomplex_of_hypreal: "z \ HFinite \ stc(hcomplex_of_hypreal z) = hcomplex_of_hypreal (st z)" -apply (rule stc_unique) -apply (rule SComplex_SReal_hcomplex_of_hypreal) -apply (erule st_SReal) -apply (simp add: hcomplex_of_hypreal_approx_iff st_approx_self) -done + by (simp add: SComplex_SReal_hcomplex_of_hypreal st_SReal st_approx_self stc_unique) -(* -Goal "x \ HFinite \ hcmod(stc x) = st(hcmod x)" -by (dtac stc_approx_self 1) -by (auto_tac (claset(),simpset() addsimps [bex_Infinitesimal_iff2 RS sym])); - - -approx_hcmod_add_hcmod -*) +lemma hmod_stc_eq: + assumes "x \ HFinite" + shows "hcmod(stc x) = st(hcmod x)" + by (metis SReal_hcmod_SComplex approx_HFinite approx_hnorm assms st_unique stc_SComplex_eq stc_eq_approx_iff stc_part_Ex) lemma Infinitesimal_hcnj_iff [simp]: - "(hcnj z \ Infinitesimal) = (z \ Infinitesimal)" -by (simp add: Infinitesimal_hcmod_iff) - -lemma Infinitesimal_hcomplex_of_hypreal_epsilon [simp]: - "hcomplex_of_hypreal \ \ Infinitesimal" -by (simp add: Infinitesimal_hcmod_iff) + "(hcnj z \ Infinitesimal) \ (z \ Infinitesimal)" + by (simp add: Infinitesimal_hcmod_iff) end