214 by (blast_tac (claset() addSIs [SReal_add,hrabs_add_less]) 1); |
214 by (blast_tac (claset() addSIs [SReal_add,hrabs_add_less]) 1); |
215 qed "HFinite_add"; |
215 qed "HFinite_add"; |
216 |
216 |
217 Goalw [HFinite_def] "[|x : HFinite; y : HFinite|] ==> x*y : HFinite"; |
217 Goalw [HFinite_def] "[|x : HFinite; y : HFinite|] ==> x*y : HFinite"; |
218 by (Asm_full_simp_tac 1); |
218 by (Asm_full_simp_tac 1); |
219 by (blast_tac (claset() addSIs [SReal_mult,hrabs_mult_less]) 1); |
219 by (blast_tac (claset() addSIs [SReal_mult,abs_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 1); |
223 by (Simp_tac 1); |
224 qed "HFinite_minus_iff"; |
224 qed "HFinite_minus_iff"; |
241 Goalw [HFinite_def] "x : HFinite ==> EX t: Reals. abs x < t"; |
241 Goalw [HFinite_def] "x : HFinite ==> EX t: Reals. abs x < t"; |
242 by Auto_tac; |
242 by Auto_tac; |
243 qed "HFiniteD"; |
243 qed "HFiniteD"; |
244 |
244 |
245 Goalw [HFinite_def] "(abs x : HFinite) = (x : HFinite)"; |
245 Goalw [HFinite_def] "(abs x : HFinite) = (x : HFinite)"; |
246 by (auto_tac (claset(), simpset() addsimps [hrabs_idempotent])); |
246 by Auto_tac; |
247 qed "HFinite_hrabs_iff"; |
247 qed "HFinite_hrabs_iff"; |
248 AddIffs [HFinite_hrabs_iff]; |
248 AddIffs [HFinite_hrabs_iff]; |
249 |
249 |
250 Goal "number_of w : HFinite"; |
250 Goal "number_of w : HFinite"; |
251 by (rtac (SReal_number_of RS (SReal_subset_HFinite RS subsetD)) 1); |
251 by (rtac (SReal_number_of RS (SReal_subset_HFinite RS subsetD)) 1); |
282 "x : Infinitesimal ==> ALL r: Reals. 0 < r --> abs x < r"; |
282 "x : Infinitesimal ==> ALL r: Reals. 0 < r --> abs x < r"; |
283 by Auto_tac; |
283 by Auto_tac; |
284 qed "InfinitesimalD"; |
284 qed "InfinitesimalD"; |
285 |
285 |
286 Goalw [Infinitesimal_def] "0 : Infinitesimal"; |
286 Goalw [Infinitesimal_def] "0 : Infinitesimal"; |
287 by (simp_tac (simpset() addsimps [hrabs_zero]) 1); |
287 by (Simp_tac 1); |
288 qed "Infinitesimal_zero"; |
288 qed "Infinitesimal_zero"; |
289 AddIffs [Infinitesimal_zero]; |
289 AddIffs [Infinitesimal_zero]; |
290 |
290 |
291 Goal "x/(2::hypreal) + x/(2::hypreal) = x"; |
291 Goal "x/(2::hypreal) + x/(2::hypreal) = x"; |
292 by Auto_tac; |
292 by Auto_tac; |
422 by (Blast_tac 1); |
422 by (Blast_tac 1); |
423 qed "HFinite_diff_Infinitesimal_hrabs"; |
423 qed "HFinite_diff_Infinitesimal_hrabs"; |
424 |
424 |
425 Goalw [Infinitesimal_def] |
425 Goalw [Infinitesimal_def] |
426 "[| e : Infinitesimal; abs x < e |] ==> x : Infinitesimal"; |
426 "[| e : Infinitesimal; abs x < e |] ==> x : Infinitesimal"; |
427 by (auto_tac (claset() addSDs [bspec], simpset())); |
427 by (auto_tac (claset(), simpset() addsimps [abs_less_iff])); |
428 by (dres_inst_tac [("x","e")] (hrabs_ge_self RS order_le_less_trans) 1); |
|
429 by (fast_tac (claset() addIs [order_less_trans]) 1); |
|
430 qed "hrabs_less_Infinitesimal"; |
428 qed "hrabs_less_Infinitesimal"; |
431 |
429 |
432 Goal "[| e : Infinitesimal; abs x <= e |] ==> x : Infinitesimal"; |
430 Goal "[| e : Infinitesimal; abs x <= e |] ==> x : Infinitesimal"; |
433 by (blast_tac (claset() addDs [order_le_imp_less_or_eq] |
431 by (blast_tac (claset() addDs [order_le_imp_less_or_eq] |
434 addIs [hrabs_less_Infinitesimal]) 1); |
432 addIs [hrabs_less_Infinitesimal]) 1); |
436 |
434 |
437 Goalw [Infinitesimal_def] |
435 Goalw [Infinitesimal_def] |
438 "[| e : Infinitesimal; \ |
436 "[| e : Infinitesimal; \ |
439 \ e' : Infinitesimal; \ |
437 \ e' : Infinitesimal; \ |
440 \ e' < x ; x < e |] ==> x : Infinitesimal"; |
438 \ e' < x ; x < e |] ==> x : Infinitesimal"; |
441 by (auto_tac (claset() addSDs [bspec], simpset())); |
439 by (auto_tac (claset(), simpset() addsimps [abs_less_iff])); |
442 by (dres_inst_tac [("x","e")] (hrabs_ge_self RS order_le_less_trans) 1); |
|
443 by (dtac (hrabs_interval_iff RS iffD1) 1); |
|
444 by (fast_tac(claset() addIs [order_less_trans,hrabs_interval_iff RS iffD2]) 1); |
|
445 qed "Infinitesimal_interval"; |
440 qed "Infinitesimal_interval"; |
446 |
441 |
447 Goal "[| e : Infinitesimal; e' : Infinitesimal; \ |
442 Goal "[| e : Infinitesimal; e' : Infinitesimal; \ |
448 \ e' <= x ; x <= e |] ==> x : Infinitesimal"; |
443 \ e' <= x ; x <= e |] ==> x : Infinitesimal"; |
449 by (auto_tac (claset() addIs [Infinitesimal_interval], |
444 by (auto_tac (claset() addIs [Infinitesimal_interval], |
817 Zero is the only infinitesimal that is also a real |
812 Zero is the only infinitesimal that is also a real |
818 -----------------------------------------------------------------*) |
813 -----------------------------------------------------------------*) |
819 |
814 |
820 Goalw [Infinitesimal_def] |
815 Goalw [Infinitesimal_def] |
821 "[| x: Reals; y: Infinitesimal; 0 < x |] ==> y < x"; |
816 "[| x: Reals; y: Infinitesimal; 0 < x |] ==> y < x"; |
822 by (rtac (hrabs_ge_self RS order_le_less_trans) 1); |
817 by (rtac (abs_ge_self RS order_le_less_trans) 1); |
823 by Auto_tac; |
818 by Auto_tac; |
824 qed "Infinitesimal_less_SReal"; |
819 qed "Infinitesimal_less_SReal"; |
825 |
820 |
826 Goal "y: Infinitesimal ==> ALL r: Reals. 0 < r --> y < r"; |
821 Goal "y: Infinitesimal ==> ALL r: Reals. 0 < r --> y < r"; |
827 by (blast_tac (claset() addIs [Infinitesimal_less_SReal]) 1); |
822 by (blast_tac (claset() addIs [Infinitesimal_less_SReal]) 1); |
989 qed "hypreal_isLub_unique"; |
984 qed "hypreal_isLub_unique"; |
990 |
985 |
991 Goal "x: HFinite ==> EX u. isUb Reals {s. s: Reals & s < x} u"; |
986 Goal "x: HFinite ==> EX u. isUb Reals {s. s: Reals & s < x} u"; |
992 by (dtac HFiniteD 1 THEN Step_tac 1); |
987 by (dtac HFiniteD 1 THEN Step_tac 1); |
993 by (rtac exI 1 THEN rtac isUbI 1 THEN assume_tac 2); |
988 by (rtac exI 1 THEN rtac isUbI 1 THEN assume_tac 2); |
994 by (auto_tac (claset() addIs [order_less_imp_le,setleI,isUbI, |
989 by (auto_tac (claset() addIs [setleI,isUbI], simpset() addsimps [abs_less_iff])); |
995 order_less_trans], simpset() addsimps [hrabs_interval_iff])); |
|
996 qed "lemma_st_part_ub"; |
990 qed "lemma_st_part_ub"; |
997 |
991 |
998 Goal "x: HFinite ==> EX y. y: {s. s: Reals & s < x}"; |
992 Goal "x: HFinite ==> EX y. y: {s. s: Reals & s < x}"; |
999 by (dtac HFiniteD 1 THEN Step_tac 1); |
993 by (dtac HFiniteD 1 THEN Step_tac 1); |
1000 by (dtac SReal_minus 1); |
994 by (dtac SReal_minus 1); |
1001 by (res_inst_tac [("x","-t")] exI 1); |
995 by (res_inst_tac [("x","-t")] exI 1); |
1002 by (auto_tac (claset(), simpset() addsimps [hrabs_interval_iff])); |
996 by (auto_tac (claset(), simpset() addsimps [abs_less_iff])); |
1003 qed "lemma_st_part_nonempty"; |
997 qed "lemma_st_part_nonempty"; |
1004 |
998 |
1005 Goal "{s. s: Reals & s < x} <= Reals"; |
999 Goal "{s. s: Reals & s < x} <= Reals"; |
1006 by Auto_tac; |
1000 by Auto_tac; |
1007 qed "lemma_st_part_subset"; |
1001 qed "lemma_st_part_subset"; |
1133 \ ==> abs (x + -t) < r"; |
1127 \ ==> abs (x + -t) < r"; |
1134 by (ftac lemma_st_part1a 1); |
1128 by (ftac lemma_st_part1a 1); |
1135 by (ftac lemma_st_part2a 4); |
1129 by (ftac lemma_st_part2a 4); |
1136 by Auto_tac; |
1130 by Auto_tac; |
1137 by (REPEAT(dtac order_le_imp_less_or_eq 1)); |
1131 by (REPEAT(dtac order_le_imp_less_or_eq 1)); |
1138 by (auto_tac (claset() addDs [lemma_st_part_not_eq1, |
1132 by (auto_tac (claset() addDs [lemma_st_part_not_eq1, lemma_st_part_not_eq2], |
1139 lemma_st_part_not_eq2], simpset() addsimps [hrabs_interval_iff2])); |
1133 simpset() addsimps [abs_less_iff])); |
1140 qed "lemma_st_part_major"; |
1134 qed "lemma_st_part_major"; |
1141 |
1135 |
1142 Goal "[| x: HFinite; \ |
1136 Goal "[| x: HFinite; \ |
1143 \ isLub Reals {s. s: Reals & s < x} t |] \ |
1137 \ isLub Reals {s. s: Reals & s < x} t |] \ |
1144 \ ==> ALL r: Reals. 0 < r --> abs (x + -t) < r"; |
1138 \ ==> ALL r: Reals. 0 < r --> abs (x + -t) < r"; |
1488 by (dtac (hypreal_less_minus_iff RS iffD1) 1 THEN Step_tac 1); |
1482 by (dtac (hypreal_less_minus_iff RS iffD1) 1 THEN Step_tac 1); |
1489 by (rtac (hypreal_less_minus_iff RS iffD2) 1); |
1483 by (rtac (hypreal_less_minus_iff RS iffD2) 1); |
1490 by (dres_inst_tac [("x","hypreal_of_real y + -hypreal_of_real x")] bspec 1); |
1484 by (dres_inst_tac [("x","hypreal_of_real y + -hypreal_of_real x")] bspec 1); |
1491 by (auto_tac (claset(), |
1485 by (auto_tac (claset(), |
1492 simpset() addsimps [hypreal_add_commute, |
1486 simpset() addsimps [hypreal_add_commute, |
1493 hrabs_interval_iff, |
1487 abs_less_iff, |
1494 SReal_add, SReal_minus])); |
1488 SReal_add, SReal_minus])); |
1495 qed "Infinitesimal_add_hypreal_of_real_less"; |
1489 qed "Infinitesimal_add_hypreal_of_real_less"; |
1496 |
1490 |
1497 Goal "[| x: Infinitesimal; abs(hypreal_of_real r) < hypreal_of_real y |] \ |
1491 Goal "[| x: Infinitesimal; abs(hypreal_of_real r) < hypreal_of_real y |] \ |
1498 \ ==> abs (hypreal_of_real r + x) < hypreal_of_real y"; |
1492 \ ==> abs (hypreal_of_real r + x) < hypreal_of_real y"; |
1898 qed "lemma_free2"; |
1892 qed "lemma_free2"; |
1899 |
1893 |
1900 Goalw [HFinite_def] |
1894 Goalw [HFinite_def] |
1901 "x : HFinite ==> EX X: Rep_hypreal x. \ |
1895 "x : HFinite ==> EX X: Rep_hypreal x. \ |
1902 \ EX u. {n. abs (X n) < u}: FreeUltrafilterNat"; |
1896 \ EX u. {n. abs (X n) < u}: FreeUltrafilterNat"; |
1903 by (auto_tac (claset(), simpset() addsimps |
1897 by (auto_tac (claset(), simpset() addsimps [abs_less_iff, inst "a" "x" minus_less_iff])); |
1904 [hrabs_interval_iff])); |
|
1905 by (auto_tac (claset(), simpset() addsimps |
1898 by (auto_tac (claset(), simpset() addsimps |
1906 [hypreal_less_def,SReal_iff,hypreal_minus, |
1899 [hypreal_less_def,SReal_iff,hypreal_minus, |
1907 hypreal_of_real_def])); |
1900 hypreal_of_real_def])); |
1908 by (dtac FreeUltrafilterNat_Rep_hypreal 1 THEN assume_tac 1); |
1901 by (dtac FreeUltrafilterNat_Rep_hypreal 1 THEN assume_tac 1); |
1909 by (res_inst_tac [("x","Y")] bexI 1 THEN assume_tac 2); |
1902 by (rename_tac "Z" 1); |
|
1903 by (res_inst_tac [("x","Z")] bexI 1 THEN assume_tac 2); |
1910 by (res_inst_tac [("x","y")] exI 1); |
1904 by (res_inst_tac [("x","y")] exI 1); |
1911 by (Ultra_tac 1 THEN arith_tac 1); |
1905 by (Ultra_tac 1); |
1912 qed "HFinite_FreeUltrafilterNat"; |
1906 qed "HFinite_FreeUltrafilterNat"; |
1913 |
1907 |
1914 Goalw [HFinite_def] |
1908 Goalw [HFinite_def] |
1915 "EX X: Rep_hypreal x. \ |
1909 "EX X: Rep_hypreal x. \ |
1916 \ EX u. {n. abs (X n) < u}: FreeUltrafilterNat\ |
1910 \ EX u. {n. abs (X n) < u}: FreeUltrafilterNat\ |
1917 \ ==> x : HFinite"; |
1911 \ ==> x : HFinite"; |
1918 by (auto_tac (claset(), simpset() addsimps |
1912 by (auto_tac (claset(), simpset() addsimps [abs_less_iff, inst "a" "x" minus_less_iff])); |
1919 [hrabs_interval_iff])); |
|
1920 by (res_inst_tac [("x","hypreal_of_real u")] bexI 1); |
1913 by (res_inst_tac [("x","hypreal_of_real u")] bexI 1); |
1921 by (auto_tac (claset() addSIs [exI], simpset() addsimps |
1914 by (auto_tac (claset() addSIs [exI], |
1922 [hypreal_less_def,SReal_iff,hypreal_minus, |
1915 simpset() addsimps |
1923 hypreal_of_real_def])); |
1916 [hypreal_less_def,SReal_iff,hypreal_minus, hypreal_of_real_def])); |
1924 by (ALLGOALS(Ultra_tac THEN' arith_tac)); |
1917 by (ALLGOALS Ultra_tac); |
1925 qed "FreeUltrafilterNat_HFinite"; |
1918 qed "FreeUltrafilterNat_HFinite"; |
1926 |
1919 |
1927 Goal "(x : HFinite) = (EX X: Rep_hypreal x. \ |
1920 Goal "(x : HFinite) = (EX X: Rep_hypreal x. \ |
1928 \ EX u. {n. abs (X n) < u}: FreeUltrafilterNat)"; |
1921 \ EX u. {n. abs (X n) < u}: FreeUltrafilterNat)"; |
1929 by (blast_tac (claset() addSIs [HFinite_FreeUltrafilterNat, |
1922 by (blast_tac (claset() addSIs [HFinite_FreeUltrafilterNat, |
2024 qed "lemma_free5"; |
2017 qed "lemma_free5"; |
2025 |
2018 |
2026 Goalw [Infinitesimal_def] |
2019 Goalw [Infinitesimal_def] |
2027 "x : Infinitesimal ==> EX X: Rep_hypreal x. \ |
2020 "x : Infinitesimal ==> EX X: Rep_hypreal x. \ |
2028 \ ALL u. 0 < u --> {n. abs (X n) < u}: FreeUltrafilterNat"; |
2021 \ ALL u. 0 < u --> {n. abs (X n) < u}: FreeUltrafilterNat"; |
2029 by (auto_tac (claset(), simpset() addsimps [hrabs_interval_iff])); |
2022 by (auto_tac (claset(), simpset() addsimps [abs_less_iff, inst "a" "x" minus_less_iff])); |
2030 by (res_inst_tac [("z","x")] eq_Abs_hypreal 1); |
2023 by (res_inst_tac [("z","x")] eq_Abs_hypreal 1); |
2031 by (EVERY[Auto_tac, rtac bexI 1, rtac lemma_hyprel_refl 2, Step_tac 1]); |
2024 by (EVERY[Auto_tac, rtac bexI 1, rtac lemma_hyprel_refl 2, Step_tac 1]); |
2032 by (dtac (hypreal_of_real_less_iff RS iffD2) 1); |
2025 by (dtac (hypreal_of_real_less_iff RS iffD2) 1); |
2033 by (dres_inst_tac [("x","hypreal_of_real u")] bspec 1); |
2026 by (dres_inst_tac [("x","hypreal_of_real u")] bspec 1); |
2034 by Auto_tac; |
2027 by Auto_tac; |
2035 by (auto_tac (claset(), |
2028 by (auto_tac (claset(), |
2036 simpset() addsimps [hypreal_less_def, hypreal_minus, |
2029 simpset() addsimps [hypreal_less_def, hypreal_minus, |
2037 hypreal_of_real_def])); |
2030 hypreal_of_real_def])); |
2038 by (Ultra_tac 1 THEN arith_tac 1); |
2031 by (Ultra_tac 1); |
2039 qed "Infinitesimal_FreeUltrafilterNat"; |
2032 qed "Infinitesimal_FreeUltrafilterNat"; |
2040 |
2033 |
2041 Goalw [Infinitesimal_def] |
2034 Goalw [Infinitesimal_def] |
2042 "EX X: Rep_hypreal x. \ |
2035 "EX X: Rep_hypreal x. \ |
2043 \ ALL u. 0 < u --> {n. abs (X n) < u} : FreeUltrafilterNat \ |
2036 \ ALL u. 0 < u --> {n. abs (X n) < u} : FreeUltrafilterNat \ |
2044 \ ==> x : Infinitesimal"; |
2037 \ ==> x : Infinitesimal"; |
2045 by (auto_tac (claset(), |
2038 by (auto_tac (claset(), |
2046 simpset() addsimps [hrabs_interval_iff,abs_interval_iff])); |
2039 simpset() addsimps [abs_less_iff,abs_interval_iff, inst "a" "x" minus_less_iff])); |
2047 by (auto_tac (claset(), |
2040 by (auto_tac (claset(), |
2048 simpset() addsimps [SReal_iff])); |
2041 simpset() addsimps [SReal_iff])); |
2049 by (auto_tac (claset() addSIs [exI] |
2042 by (auto_tac (claset() addSIs [exI] |
2050 addIs [FreeUltrafilterNat_subset], |
2043 addIs [FreeUltrafilterNat_subset], |
2051 simpset() addsimps [hypreal_less_def, hypreal_minus,hypreal_of_real_def])); |
2044 simpset() addsimps [hypreal_less_def, hypreal_minus,hypreal_of_real_def])); |