(* Title: HOL/Nonstandard_Analysis/HTranscendental.thy Author: Jacques D. Fleuriot Copyright: 2001 University of Edinburgh Converted to Isar and polished by lcp *)
section‹Nonstandard Extensions of Transcendental Functions›
theory HTranscendental imports Complex_Main HSeries HDeriv begin
definition
exphr :: "real ==> hypreal"where 🍋‹define exponential function using standard part› "exphr x ≡ st(sumhr (0, whn, λn. inverse (fact n) * (x ^ n)))"
definition
sinhr :: "real ==> hypreal"where "sinhr x ≡ st(sumhr (0, whn, λn. sin_coeff n * x ^ n))"
definition
coshr :: "real ==> hypreal"where "coshr x ≡ st(sumhr (0, whn, λn. cos_coeff n * x ^ n))"
subsection‹Nonstandard Extension of Square Root Function›
lemma hypreal_sqrt_gt_zero: "∧x. 0 < x ==> 0 < ( *f* sqrt)(x)" by transfer (simp add: real_sqrt_gt_zero)
lemma hypreal_sqrt_ge_zero: "0 ≤ x ==> 0 ≤ ( *f* sqrt)(x)" by (auto intro: hypreal_sqrt_gt_zero simp add: order_le_less)
lemma hypreal_sqrt_lessI: "∧x u. [0 < u; x < u🪙2]==> ( *f* sqrt) x < u" proof transfer show"∧x u. [0 < u; x < u🪙2]==> sqrt x < u" by (metis less_le real_sqrt_less_iff real_sqrt_pow2 real_sqrt_power) qed
lemma hypreal_sqrt_hrabs [simp]: "∧x. ( *f* sqrt)(x🪙2) = ∣x∣" by transfer simp
lemma hypreal_sqrt_hrabs2 [simp]: "∧x. ( *f* sqrt)(x*x) = ∣x∣" by transfer simp
lemma hypreal_sqrt_hyperpow_hrabs [simp]: "∧x. ( *f* sqrt)(x pow (hypnat_of_nat 2)) = ∣x∣" by transfer simp
lemma star_sqrt_HFinite: "[x ∈ HFinite; 0 ≤ x]==> ( *f* sqrt) x ∈ HFinite" by (metis HFinite_square_iff hypreal_sqrt_pow2_iff power2_eq_square)
lemma hypreal_sqrt_sum_squares_ge1 [simp]: "∧x y. x ≤ ( *f* sqrt)(x🪙2 + y🪙2)" by transfer (rule real_sqrt_sum_squares_ge1)
lemma HFinite_hypreal_sqrt_imp_HFinite: "[0 ≤ x; ( *f* sqrt) x ∈ HFinite]==> x ∈ HFinite" by (metis HFinite_mult hypreal_sqrt_pow2_iff power2_eq_square)
lemma HFinite_hypreal_sqrt_iff [simp]: "0 ≤ x ==> (( *f* sqrt) x ∈ HFinite) = (x ∈ HFinite)" by (blast intro: star_sqrt_HFinite HFinite_hypreal_sqrt_imp_HFinite)
lemma Infinitesimal_hypreal_sqrt: "[0 ≤ x; x ∈ Infinitesimal]==> ( *f* sqrt) x ∈ Infinitesimal" by (simp add: mem_infmal_iff)
lemma Infinitesimal_hypreal_sqrt_imp_Infinitesimal: "[0 ≤ x; ( *f* sqrt) x ∈ Infinitesimal]==> x ∈ Infinitesimal" using hypreal_sqrt_approx_zero2 mem_infmal_iff by blast
lemma Infinitesimal_hypreal_sqrt_iff [simp]: "0 ≤ x ==> (( *f* sqrt) x ∈ Infinitesimal) = (x ∈ Infinitesimal)" by (blast intro: Infinitesimal_hypreal_sqrt_imp_Infinitesimal Infinitesimal_hypreal_sqrt)
lemma HInfinite_hypreal_sqrt: "[0 ≤ x; x ∈ HInfinite]==> ( *f* sqrt) x ∈ HInfinite" by (simp add: HInfinite_HFinite_iff)
lemma HInfinite_hypreal_sqrt_imp_HInfinite: "[0 ≤ x; ( *f* sqrt) x ∈ HInfinite]==> x ∈ HInfinite" using HFinite_hypreal_sqrt_iff HInfinite_HFinite_iff by blast
lemma HInfinite_hypreal_sqrt_iff [simp]: "0 ≤ x ==> (( *f* sqrt) x ∈ HInfinite) = (x ∈ HInfinite)" by (blast intro: HInfinite_hypreal_sqrt HInfinite_hypreal_sqrt_imp_HInfinite)
lemma coshr_zero [simp]: "coshr 0 = 1" proof - have"∀x>1. 1 = sumhr (0, 1, λn. cos_coeff n * 0 ^ n) + sumhr (1, x, λn. cos_coeff n * 0 ^ n)" unfolding sumhr_app by transfer (simp add: power_0_left) thenhave"sumhr (0, 1, λn. cos_coeff n * 0 ^ n) + sumhr (1, whn, λn. cos_coeff n * 0 ^ n) ≈ 1" by auto thenshow ?thesis unfolding coshr_def using sumhr_split_add [OF hypnat_one_less_hypnat_omega] st_unique by auto qed
lemma STAR_exp_zero_approx_one [simp]: "( *f* exp) (0::hypreal) ≈ 1" proof - have"(*f* exp) (0::real star) = 1" by transfer simp thenshow ?thesis by auto qed
lemma STAR_exp_Infinitesimal: assumes"x ∈ Infinitesimal"shows"( *f* exp) (x::hypreal) ≈ 1" proof (cases "x = 0") case False have"NSDERIV exp 0 :> 1" by (metis DERIV_exp NSDERIV_DERIV_iff exp_zero) thenhave"((*f* exp) x - 1) / x ≈ 1" using nsderiv_def False NSDERIVD2 assms by fastforce thenhave"(*f* exp) x - 1 \ x" using NSDERIVD4 ‹NSDERIV exp 0 :> 1› assms by fastforce thenshow ?thesis by (meson Infinitesimal_approx approx_minus_iff approx_trans2 assms not_Infinitesimal_not_zero) qed auto
lemma starfun_ln_inverse: "∧x. 0 < x ==> ( *f* real_ln) (inverse x) = -( *f* ln) x" by transfer (rule ln_inverse)
lemma starfun_abs_exp_cancel: "∧x. ∣( *f* exp) (x::hypreal)∣ = ( *f* exp) x" by transfer (rule abs_exp_cancel)
lemma starfun_exp_less_mono: "∧x y::hypreal. x < y ==> ( *f* exp) x < ( *f* exp) y" by transfer (rule exp_less_mono)
lemma starfun_exp_HFinite: fixes x :: hypreal assumes"x ∈ HFinite" shows"( *f* exp) x ∈ HFinite" proof - obtain u where"u ∈ℝ""∣x∣ < u" using HFiniteD assms by force with assms have"∣(*f* exp) x∣ < (*f* exp) u" using starfun_abs_exp_cancel starfun_exp_less_mono by auto with‹u ∈ℝ›show ?thesis by (force simp: HFinite_def Reals_eq_Standard) qed
lemma starfun_exp_add_HFinite_Infinitesimal_approx: fixes x :: hypreal shows"[x ∈ Infinitesimal; z ∈ HFinite]==> ( *f* exp) (z + x::hypreal) ≈ ( *f* exp) z" using STAR_exp_Infinitesimal approx_mult2 starfun_exp_HFinite by (fastforce simp add: STAR_exp_add)
lemma starfun_ln_HInfinite: "[x ∈ HInfinite; 0 < x]==> ( *f* real_ln) x ∈ HInfinite" by (metis HInfinite_HFinite_iff starfun_exp_HFinite starfun_exp_ln_iff)
lemma starfun_exp_HInfinite_Infinitesimal_disj: fixes x :: hypreal shows"x ∈ HInfinite ==> ( *f* exp) x ∈ HInfinite ∨ ( *f* exp) (x::hypreal) ∈ Infinitesimal" by (meson linear starfun_exp_HInfinite starfun_exp_Infinitesimal)
(* we do proof by considering ln of 1/x *) lemma starfun_ln_Infinitesimal_HInfinite: assumes"x ∈ Infinitesimal""0 < x" shows"( *f* real_ln) x ∈ HInfinite" proof - have"inverse x ∈ HInfinite" using Infinitesimal_inverse_HInfinite assms by blast thenshow ?thesis using HInfinite_minus_iff assms(2) starfun_ln_HInfinite starfun_ln_inverse by fastforce qed
lemma starfun_ln_less_zero: "∧x. [0 < x; x < 1]==> ( *f* real_ln) x < 0" by transfer (rule ln_less_zero)
lemma HFinite_sin [simp]: "sumhr (0, whn, λn. sin_coeff n * x ^ n) ∈ HFinite" proof - have"summable (λi. sin_coeff i * x ^ i)" using summable_norm_sin [of x] by (simp add: summable_rabs_cancel) thenhave"(*f* (\n. \n HFinite" unfolding summable_sums_iff sums_NSsums_iff NSsums_def NSLIMSEQ_def using HFinite_star_of HNatInfinite_whn approx_HFinite approx_sym by blast thenshow ?thesis unfolding sumhr_app by (simp only: star_zero_def starfun2_star_of atLeast0LessThan) qed
lemma STAR_sin_zero [simp]: "( *f* sin) 0 = 0" by transfer (rule sin_zero)
lemma STAR_sin_Infinitesimal [simp]: fixes x :: "'a::{real_normed_field,banach} star" assumes"x ∈ Infinitesimal" shows"( *f* sin) x ≈ x" proof (cases "x = 0") case False have"NSDERIV sin 0 :> 1" by (metis DERIV_sin NSDERIV_DERIV_iff cos_zero) thenhave"(*f* sin) x / x \ 1" using False NSDERIVD2 assms by fastforce with assms show ?thesis unfolding star_one_def by (metis False Infinitesimal_approx Infinitesimal_ratio approx_star_of_HFinite) qed auto
lemma HFinite_cos [simp]: "sumhr (0, whn, λn. cos_coeff n * x ^ n) ∈ HFinite" proof - have"summable (λi. cos_coeff i * x ^ i)" using summable_norm_cos [of x] by (simp add: summable_rabs_cancel) thenhave"(*f* (\n. \n HFinite" unfolding summable_sums_iff sums_NSsums_iff NSsums_def NSLIMSEQ_def using HFinite_star_of HNatInfinite_whn approx_HFinite approx_sym by blast thenshow ?thesis unfolding sumhr_app by (simp only: star_zero_def starfun2_star_of atLeast0LessThan) qed
lemma STAR_cos_zero [simp]: "( *f* cos) 0 = 1" by transfer (rule cos_zero)
lemma STAR_cos_Infinitesimal [simp]: fixes x :: "'a::{real_normed_field,banach} star" assumes"x ∈ Infinitesimal" shows"( *f* cos) x ≈ 1" proof (cases "x = 0") case False have"NSDERIV cos 0 :> 0" by (metis DERIV_cos NSDERIV_DERIV_iff add.inverse_neutral sin_zero) thenhave"(*f* cos) x - 1 \ 0" using NSDERIV_approx assms by fastforce with assms show ?thesis using approx_minus_iff by blast qed auto
lemma STAR_tan_zero [simp]: "( *f* tan) 0 = 0" by transfer (rule tan_zero)
lemma STAR_tan_Infinitesimal [simp]: assumes"x ∈ Infinitesimal" shows"( *f* tan) x ≈ x" proof (cases "x = 0") case False have"NSDERIV tan 0 :> 1" using DERIV_tan [of 0] by (simp add: NSDERIV_DERIV_iff) thenhave"(*f* tan) x / x \ 1" using False NSDERIVD2 assms by fastforce with assms show ?thesis unfolding star_one_def by (metis False Infinitesimal_approx Infinitesimal_ratio approx_star_of_HFinite) qed auto
lemma STAR_sin_cos_Infinitesimal_mult: fixes x :: "'a::{real_normed_field,banach} star" shows"x ∈ Infinitesimal ==> ( *f* sin) x * ( *f* cos) x ≈ x" using approx_mult_HFinite [of "( *f* sin) x" _ "( *f* cos) x" 1] by (simp add: Infinitesimal_subset_HFinite [THEN subsetD])
lemma HFinite_pi: "hypreal_of_real pi ∈ HFinite" by simp
lemma STAR_sin_Infinitesimal_divide: fixes x :: "'a::{real_normed_field,banach} star" shows"[x ∈ Infinitesimal; x ≠ 0]==> ( *f* sin) x/x ≈ 1" using DERIV_sin [of "0::'a"] by (simp add: NSDERIV_DERIV_iff [symmetric] nsderiv_def)
lemma starfunNat_pi_divide_n_Infinitesimal: "N ∈ HNatInfinite ==> ( *f* (λx. pi / real x)) N ∈ Infinitesimal" by (simp add: Infinitesimal_HFinite_mult2 divide_inverse starfunNat_real_of_nat)
lemma STAR_sin_pi_divide_n_approx: assumes"N ∈ HNatInfinite" shows"( *f* sin) (( *f* (λx. pi / real x)) N) ≈ hypreal_of_real pi/(hypreal_of_hypnat N)" proof - have"∃s. (*f* sin) ((*f* (λn. pi / real n)) N) ≈ s ∧ hypreal_of_real pi / hypreal_of_hypnat N ≈ s" by (metis (lifting) Infinitesimal_approx Infinitesimal_pi_divide_HNatInfinite STAR_sin_Infinitesimal assms starfunNat_pi_divide_n_Infinitesimal) thenshow ?thesis by (meson approx_trans2) qed
lemma NSLIMSEQ_sin_pi: "(λn. real n * sin (pi / real n)) <----🪙N🪙S pi" proof - have *: "hypreal_of_hypnat N * (*f* sin) ((*f* (λx. pi / real x)) N) ≈ hypreal_of_real pi" if"N ∈ HNatInfinite" for N :: "nat star" using that by simp (metis STAR_sin_pi_divide_HNatInfinite_approx_pi2 starfunNat_real_of_nat) show ?thesis by (simp add: NSLIMSEQ_def starfunNat_real_of_nat) (metis * starfun_o2) qed
lemma NSLIMSEQ_cos_one: "(λn. cos (pi / real n))<----🪙N🪙S 1" proof - have"(*f* cos) ((*f* (\x. pi / real x)) N) \ 1" if"N ∈ HNatInfinite"for N using that STAR_cos_Infinitesimal starfunNat_pi_divide_n_Infinitesimal by blast thenshow ?thesis by (simp add: NSLIMSEQ_def) (metis STAR_cos_Infinitesimal starfunNat_pi_divide_n_Infinitesimal starfun_o2) qed
lemma NSLIMSEQ_sin_cos_pi: "(λn. real n * sin (pi / real n) * cos (pi / real n)) <----🪙N🪙S pi" using NSLIMSEQ_cos_one NSLIMSEQ_mult NSLIMSEQ_sin_pi by force
text‹A familiar approximation to 🍋‹cos x› when 🍋‹x›is small›
lemma STAR_cos_Infinitesimal_approx: fixes x :: "'a::{real_normed_field,banach} star" shows"x ∈ Infinitesimal ==> ( *f* cos) x ≈ 1 - x🪙2" by (metis Infinitesimal_square_iff STAR_cos_Infinitesimal approx_diff approx_sym diff_zero mem_infmal_iff power2_eq_square)
lemma STAR_cos_Infinitesimal_approx2: fixes x :: hypreal assumes"x ∈ Infinitesimal" shows"( *f* cos) x ≈ 1 - (x🪙2)/2" proof - have"1 ≈ 1 - x🪙2 / 2" using assms by (auto intro: Infinitesimal_SReal_divide simp add: Infinitesimal_approx_minus [symmetric] numeral_2_eq_2) thenshow ?thesis using STAR_cos_Infinitesimal approx_trans assms by blast qed
end
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.16Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-04-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.