30 Goalw [SReal_def] "x: SReal ==> inverse x : SReal"; |
30 Goalw [SReal_def] "x: SReal ==> inverse x : SReal"; |
31 by (auto_tac (claset(), simpset() addsimps [hypreal_of_real_inverse])); |
31 by (auto_tac (claset(), simpset() addsimps [hypreal_of_real_inverse])); |
32 qed "SReal_inverse"; |
32 qed "SReal_inverse"; |
33 |
33 |
34 Goalw [SReal_def] "x: SReal ==> -x : SReal"; |
34 Goalw [SReal_def] "x: SReal ==> -x : SReal"; |
35 by (auto_tac (claset(), simpset() addsimps [hypreal_of_real_minus RS sym])); |
35 by (blast_tac (claset() addIs [hypreal_of_real_minus RS sym]) 1); |
36 qed "SReal_minus"; |
36 qed "SReal_minus"; |
37 |
37 |
38 Goal "[| x + y : SReal; y: SReal |] ==> x: SReal"; |
38 Goal "[| x + y : SReal; y: SReal |] ==> x: SReal"; |
39 by (dres_inst_tac [("x","y")] SReal_minus 1); |
39 by (dres_inst_tac [("x","y")] SReal_minus 1); |
40 by (dtac SReal_add 1); |
40 by (dtac SReal_add 1); |
218 Goalw [HFinite_def] "[|x : HFinite;y : HFinite|] ==> (x*y) : HFinite"; |
218 Goalw [HFinite_def] "[|x : HFinite;y : HFinite|] ==> (x*y) : HFinite"; |
219 by (blast_tac (claset() addSIs [SReal_mult,hrabs_mult_less]) 1); |
219 by (blast_tac (claset() addSIs [SReal_mult,hrabs_mult_less]) 1); |
220 qed "HFinite_mult"; |
220 qed "HFinite_mult"; |
221 |
221 |
222 Goalw [HFinite_def] "(x:HFinite)=(-x:HFinite)"; |
222 Goalw [HFinite_def] "(x:HFinite)=(-x:HFinite)"; |
223 by (simp_tac (simpset() addsimps [hrabs_minus_cancel]) 1); |
223 by (Simp_tac 1); |
224 qed "HFinite_minus_iff"; |
224 qed "HFinite_minus_iff"; |
225 |
225 |
226 Goal "[| x: HFinite; y: HFinite|] ==> (x + -y): HFinite"; |
226 Goal "[| x: HFinite; y: HFinite|] ==> (x + -y): HFinite"; |
227 by (blast_tac (claset() addDs [HFinite_minus_iff RS iffD1] addIs [HFinite_add]) 1); |
227 by (blast_tac (claset() addDs [HFinite_minus_iff RS iffD1] addIs [HFinite_add]) 1); |
228 qed "HFinite_add_minus"; |
228 qed "HFinite_add_minus"; |
296 by (auto_tac (claset() addSDs [bspec] addIs [hrabs_add_less], simpset())); |
296 by (auto_tac (claset() addSDs [bspec] addIs [hrabs_add_less], simpset())); |
297 qed "Infinitesimal_add"; |
297 qed "Infinitesimal_add"; |
298 |
298 |
299 Goalw [Infinitesimal_def] |
299 Goalw [Infinitesimal_def] |
300 "(x:Infinitesimal) = (-x:Infinitesimal)"; |
300 "(x:Infinitesimal) = (-x:Infinitesimal)"; |
301 by (full_simp_tac (simpset() addsimps [hrabs_minus_cancel]) 1); |
301 by (Full_simp_tac 1); |
302 qed "Infinitesimal_minus_iff"; |
302 qed "Infinitesimal_minus_iff"; |
303 |
303 |
304 Goal "x ~:Infinitesimal = (-x ~:Infinitesimal)"; |
304 Goal "x ~:Infinitesimal = (-x ~:Infinitesimal)"; |
305 by (full_simp_tac (simpset() addsimps [Infinitesimal_minus_iff RS sym]) 1); |
305 by (full_simp_tac (simpset() addsimps [Infinitesimal_minus_iff RS sym]) 1); |
306 qed "not_Infinitesimal_minus_iff"; |
306 qed "not_Infinitesimal_minus_iff"; |
387 by (blast_tac (claset() addIs [HInfinite_add_ge_zero, |
387 by (blast_tac (claset() addIs [HInfinite_add_ge_zero, |
388 hypreal_less_imp_le]) 1); |
388 hypreal_less_imp_le]) 1); |
389 qed "HInfinite_add_gt_zero"; |
389 qed "HInfinite_add_gt_zero"; |
390 |
390 |
391 Goalw [HInfinite_def] "(-x: HInfinite) = (x: HInfinite)"; |
391 Goalw [HInfinite_def] "(-x: HInfinite) = (x: HInfinite)"; |
392 by (auto_tac (claset(),simpset() addsimps |
392 by Auto_tac; |
393 [hrabs_minus_cancel])); |
|
394 qed "HInfinite_minus_iff"; |
393 qed "HInfinite_minus_iff"; |
395 |
394 |
396 Goal "[|x: HInfinite; y <= 0; x <= 0|] ==> (x + y): HInfinite"; |
395 Goal "[|x: HInfinite; y <= 0; x <= 0|] ==> (x + y): HInfinite"; |
397 by (dtac (HInfinite_minus_iff RS iffD2) 1); |
396 by (dtac (HInfinite_minus_iff RS iffD2) 1); |
398 by (rtac (HInfinite_minus_iff RS iffD1) 1); |
397 by (rtac (HInfinite_minus_iff RS iffD1) 1); |
590 by (dtac (inf_close_minus_iff RS iffD1) 1); |
589 by (dtac (inf_close_minus_iff RS iffD1) 1); |
591 by (simp_tac (simpset() addsimps [hypreal_add_commute]) 1); |
590 by (simp_tac (simpset() addsimps [hypreal_add_commute]) 1); |
592 qed "inf_close_minus"; |
591 qed "inf_close_minus"; |
593 |
592 |
594 Goal "-a @= -b ==> a @= b"; |
593 Goal "-a @= -b ==> a @= b"; |
595 by (auto_tac (claset() addDs [inf_close_minus],simpset())); |
594 by (auto_tac (claset() addDs [inf_close_minus], simpset())); |
596 qed "inf_close_minus2"; |
595 qed "inf_close_minus2"; |
597 |
596 |
598 Goal "(-a @= -b) = (a @= b)"; |
597 Goal "(-a @= -b) = (a @= b)"; |
599 by (blast_tac (claset() addIs [inf_close_minus,inf_close_minus2]) 1); |
598 by (blast_tac (claset() addIs [inf_close_minus,inf_close_minus2]) 1); |
600 qed "inf_close_minus_cancel"; |
599 qed "inf_close_minus_cancel"; |
612 qed "inf_close_mult1"; |
611 qed "inf_close_mult1"; |
613 |
612 |
614 Goal "[|a @= b; c: HFinite|] ==> c*a @= c*b"; |
613 Goal "[|a @= b; c: HFinite|] ==> c*a @= c*b"; |
615 by (asm_simp_tac (simpset() addsimps [inf_close_mult1,hypreal_mult_commute]) 1); |
614 by (asm_simp_tac (simpset() addsimps [inf_close_mult1,hypreal_mult_commute]) 1); |
616 qed "inf_close_mult2"; |
615 qed "inf_close_mult2"; |
617 |
|
618 val [prem1,prem2,prem3,prem4] = |
|
619 goal thy "[|a @= b; c @= d; b: HFinite; c: HFinite|] ==> a*c @= b*d"; |
|
620 by (fast_tac (claset() addIs [([prem1,prem4] MRS inf_close_mult1), |
|
621 ([prem2,prem3] MRS inf_close_mult2),inf_close_trans]) 1); |
|
622 qed "inf_close_mult_HFinite"; |
|
623 |
616 |
624 Goal "[|u @= v*x; x @= y; v: HFinite|] ==> u @= v*y"; |
617 Goal "[|u @= v*x; x @= y; v: HFinite|] ==> u @= v*y"; |
625 by (fast_tac (claset() addIs [inf_close_mult2,inf_close_trans]) 1); |
618 by (fast_tac (claset() addIs [inf_close_mult2,inf_close_trans]) 1); |
626 qed "inf_close_mult_subst"; |
619 qed "inf_close_mult_subst"; |
627 |
620 |
728 |
721 |
729 Goal "[| x: HFinite; x @= y |] ==> y: HFinite"; |
722 Goal "[| x: HFinite; x @= y |] ==> y: HFinite"; |
730 by (dtac (bex_Infinitesimal_iff2 RS iffD2) 1); |
723 by (dtac (bex_Infinitesimal_iff2 RS iffD2) 1); |
731 by (Step_tac 1); |
724 by (Step_tac 1); |
732 by (dtac (Infinitesimal_subset_HFinite RS subsetD |
725 by (dtac (Infinitesimal_subset_HFinite RS subsetD |
733 RS (HFinite_minus_iff RS iffD1)) 1); |
726 RS (HFinite_minus_iff RS iffD1)) 1); |
734 by (dtac HFinite_add 1); |
727 by (dtac HFinite_add 1); |
735 by (auto_tac (claset(),simpset() addsimps [hypreal_add_assoc])); |
728 by (auto_tac (claset(),simpset() addsimps [hypreal_add_assoc])); |
736 qed "inf_close_HFinite"; |
729 qed "inf_close_HFinite"; |
737 |
730 |
738 Goal "x @= hypreal_of_real D ==> x: HFinite"; |
731 Goal "x @= hypreal_of_real D ==> x: HFinite"; |
739 by (rtac (inf_close_sym RSN (2,inf_close_HFinite)) 1); |
732 by (rtac (inf_close_sym RSN (2,inf_close_HFinite)) 1); |
740 by Auto_tac; |
733 by Auto_tac; |
741 qed "inf_close_hypreal_of_real_HFinite"; |
734 qed "inf_close_hypreal_of_real_HFinite"; |
742 |
735 |
|
736 Goal "[|a @= b; c @= d; b: HFinite; d: HFinite|] ==> a*c @= b*d"; |
|
737 by (rtac inf_close_trans 1); |
|
738 by (rtac inf_close_mult2 2); |
|
739 by (rtac inf_close_mult1 1); |
|
740 by (blast_tac (claset() addIs [inf_close_HFinite, inf_close_sym]) 2); |
|
741 by Auto_tac; |
|
742 qed "inf_close_mult_HFinite"; |
|
743 |
743 Goal "[|a @= hypreal_of_real b; c @= hypreal_of_real d |] \ |
744 Goal "[|a @= hypreal_of_real b; c @= hypreal_of_real d |] \ |
744 \ ==> a*c @= hypreal_of_real b*hypreal_of_real d"; |
745 \ ==> a*c @= hypreal_of_real b*hypreal_of_real d"; |
745 by (blast_tac (claset() addSIs [inf_close_mult_HFinite, |
746 by (blast_tac (claset() addSIs [inf_close_mult_HFinite, |
746 inf_close_hypreal_of_real_HFinite,HFinite_hypreal_of_real]) 1); |
747 inf_close_hypreal_of_real_HFinite,HFinite_hypreal_of_real]) 1); |
747 qed "inf_close_mult_hypreal_of_real"; |
748 qed "inf_close_mult_hypreal_of_real"; |
748 |
749 |
749 Goal "[| a: SReal; a ~= 0; a*x @= 0 |] ==> x @= 0"; |
750 Goal "[| a: SReal; a ~= 0; a*x @= 0 |] ==> x @= 0"; |
750 by (dtac (SReal_inverse RS (SReal_subset_HFinite RS subsetD)) 1); |
751 by (dtac (SReal_inverse RS (SReal_subset_HFinite RS subsetD)) 1); |
751 by (auto_tac (claset() addDs [inf_close_mult2], |
752 by (auto_tac (claset() addDs [inf_close_mult2], |
884 qed "inf_close_hypreal_of_real_not_zero"; |
885 qed "inf_close_hypreal_of_real_not_zero"; |
885 |
886 |
886 Goal "[| x @= y; y : HFinite - Infinitesimal |] \ |
887 Goal "[| x @= y; y : HFinite - Infinitesimal |] \ |
887 \ ==> x : HFinite - Infinitesimal"; |
888 \ ==> x : HFinite - Infinitesimal"; |
888 by (auto_tac (claset() addIs [inf_close_sym RSN (2,inf_close_HFinite)], |
889 by (auto_tac (claset() addIs [inf_close_sym RSN (2,inf_close_HFinite)], |
889 simpset() addsimps [mem_infmal_iff])); |
890 simpset() addsimps [mem_infmal_iff])); |
890 by (dtac inf_close_trans3 1 THEN assume_tac 1); |
891 by (dtac inf_close_trans3 1 THEN assume_tac 1); |
891 by (blast_tac (claset() addDs [inf_close_sym]) 1); |
892 by (blast_tac (claset() addDs [inf_close_sym]) 1); |
892 qed "HFinite_diff_Infinitesimal_inf_close"; |
893 qed "HFinite_diff_Infinitesimal_inf_close"; |
893 |
894 |
894 (*The premise y~=0 is essential; otherwise x/y =0 and we lose the |
895 (*The premise y~=0 is essential; otherwise x/y =0 and we lose the |
1455 "[| xa: Infinitesimal; hypreal_of_real x < hypreal_of_real y |] \ |
1456 "[| xa: Infinitesimal; hypreal_of_real x < hypreal_of_real y |] \ |
1456 \ ==> hypreal_of_real x + xa < hypreal_of_real y"; |
1457 \ ==> hypreal_of_real x + xa < hypreal_of_real y"; |
1457 by (dtac (hypreal_less_minus_iff RS iffD1) 1 THEN Step_tac 1); |
1458 by (dtac (hypreal_less_minus_iff RS iffD1) 1 THEN Step_tac 1); |
1458 by (rtac (hypreal_less_minus_iff RS iffD2) 1); |
1459 by (rtac (hypreal_less_minus_iff RS iffD2) 1); |
1459 by (dres_inst_tac [("x","hypreal_of_real y + -hypreal_of_real x")] bspec 1); |
1460 by (dres_inst_tac [("x","hypreal_of_real y + -hypreal_of_real x")] bspec 1); |
1460 by (auto_tac (claset(),simpset() addsimps [hypreal_add_commute, |
1461 by (auto_tac (claset(), |
1461 hypreal_of_real_minus RS sym, hypreal_of_real_add RS sym, |
1462 simpset() addsimps [hypreal_add_commute, |
1462 hrabs_interval_iff])); |
1463 hypreal_of_real_add, hrabs_interval_iff, |
|
1464 SReal_add, SReal_minus])); |
1463 by (dres_inst_tac [("x1","xa")] (hypreal_less_minus_iff RS iffD1) 1); |
1465 by (dres_inst_tac [("x1","xa")] (hypreal_less_minus_iff RS iffD1) 1); |
1464 by (auto_tac (claset(),simpset() addsimps [hypreal_of_real_minus, |
1466 by (auto_tac (claset(), |
1465 hypreal_minus_add_distrib,hypreal_of_real_add] @ hypreal_add_ac)); |
1467 simpset() addsimps [hypreal_minus_add_distrib,hypreal_of_real_add] @ |
|
1468 hypreal_add_ac)); |
1466 qed "Infinitesimal_add_hypreal_of_real_less"; |
1469 qed "Infinitesimal_add_hypreal_of_real_less"; |
1467 |
1470 |
1468 Goal "[| x: Infinitesimal; abs(hypreal_of_real r) < hypreal_of_real y |] \ |
1471 Goal "[| x: Infinitesimal; abs(hypreal_of_real r) < hypreal_of_real y |] \ |
1469 \ ==> abs (hypreal_of_real r + x) < hypreal_of_real y"; |
1472 \ ==> abs (hypreal_of_real r + x) < hypreal_of_real y"; |
1470 by (dres_inst_tac [("x","hypreal_of_real r")] |
1473 by (dres_inst_tac [("x","hypreal_of_real r")] |
2239 (*----------------------------------------------------- |
2242 (*----------------------------------------------------- |
2240 |X(n) - x| < 1/n ==> [<X n>] - hypreal_of_real x|: Infinitesimal |
2243 |X(n) - x| < 1/n ==> [<X n>] - hypreal_of_real x|: Infinitesimal |
2241 -----------------------------------------------------*) |
2244 -----------------------------------------------------*) |
2242 Goal "ALL n. abs(X n + -x) < inverse(real_of_posnat n) \ |
2245 Goal "ALL n. abs(X n + -x) < inverse(real_of_posnat n) \ |
2243 \ ==> Abs_hypreal(hyprel^^{X}) + -hypreal_of_real x : Infinitesimal"; |
2246 \ ==> Abs_hypreal(hyprel^^{X}) + -hypreal_of_real x : Infinitesimal"; |
2244 by (auto_tac (claset() addSIs [bexI] addDs [rename_numerals |
2247 by (auto_tac (claset() addSIs [bexI] |
2245 FreeUltrafilterNat_inverse_real_of_posnat, |
2248 addDs [rename_numerals FreeUltrafilterNat_inverse_real_of_posnat, |
2246 FreeUltrafilterNat_all,FreeUltrafilterNat_Int] addIs [order_less_trans, |
2249 FreeUltrafilterNat_all,FreeUltrafilterNat_Int] |
2247 FreeUltrafilterNat_subset],simpset() addsimps [hypreal_minus, |
2250 addIs [order_less_trans, FreeUltrafilterNat_subset], |
2248 hypreal_of_real_minus RS sym,hypreal_of_real_def,hypreal_add, |
2251 simpset() addsimps [hypreal_minus, |
2249 Infinitesimal_FreeUltrafilterNat_iff,hypreal_inverse,hypreal_of_real_of_posnat])); |
2252 hypreal_of_real_def,hypreal_add, |
|
2253 Infinitesimal_FreeUltrafilterNat_iff,hypreal_inverse, |
|
2254 hypreal_of_real_of_posnat])); |
2250 qed "real_seq_to_hypreal_Infinitesimal"; |
2255 qed "real_seq_to_hypreal_Infinitesimal"; |
2251 |
2256 |
2252 Goal "ALL n. abs(X n + -x) < inverse(real_of_posnat n) \ |
2257 Goal "ALL n. abs(X n + -x) < inverse(real_of_posnat n) \ |
2253 \ ==> Abs_hypreal(hyprel^^{X}) @= hypreal_of_real x"; |
2258 \ ==> Abs_hypreal(hyprel^^{X}) @= hypreal_of_real x"; |
2254 by (rtac (inf_close_minus_iff RS ssubst) 1); |
2259 by (rtac (inf_close_minus_iff RS ssubst) 1); |
2272 addIs [order_less_trans, FreeUltrafilterNat_subset], |
2277 addIs [order_less_trans, FreeUltrafilterNat_subset], |
2273 simpset() addsimps |
2278 simpset() addsimps |
2274 [Infinitesimal_FreeUltrafilterNat_iff,hypreal_minus,hypreal_add, |
2279 [Infinitesimal_FreeUltrafilterNat_iff,hypreal_minus,hypreal_add, |
2275 hypreal_inverse,hypreal_of_real_of_posnat])); |
2280 hypreal_inverse,hypreal_of_real_of_posnat])); |
2276 qed "real_seq_to_hypreal_Infinitesimal2"; |
2281 qed "real_seq_to_hypreal_Infinitesimal2"; |
2277 |
|