1772 |
1772 |
1773 |
1773 |
1774 subsection{*Alternative Definitions for @{term HFinite} using Free Ultrafilter*} |
1774 subsection{*Alternative Definitions for @{term HFinite} using Free Ultrafilter*} |
1775 |
1775 |
1776 lemma FreeUltrafilterNat_Rep_hypreal: |
1776 lemma FreeUltrafilterNat_Rep_hypreal: |
1777 "[| X \<in> Rep_hypreal x; Y \<in> Rep_hypreal x |] |
1777 "[| X \<in> Rep_star x; Y \<in> Rep_star x |] |
1778 ==> {n. X n = Y n} \<in> FreeUltrafilterNat" |
1778 ==> {n. X n = Y n} \<in> FreeUltrafilterNat" |
1779 by (rule_tac z = x in eq_Abs_hypreal, auto, ultra) |
1779 by (rule_tac z = x in eq_Abs_star, auto, ultra) |
1780 |
1780 |
1781 lemma HFinite_FreeUltrafilterNat: |
1781 lemma HFinite_FreeUltrafilterNat: |
1782 "x \<in> HFinite |
1782 "x \<in> HFinite |
1783 ==> \<exists>X \<in> Rep_hypreal x. \<exists>u. {n. abs (X n) < u} \<in> FreeUltrafilterNat" |
1783 ==> \<exists>X \<in> Rep_star x. \<exists>u. {n. abs (X n) < u} \<in> FreeUltrafilterNat" |
1784 apply (cases x) |
1784 apply (rule_tac z = x in eq_Abs_star) |
1785 apply (auto simp add: HFinite_def abs_less_iff minus_less_iff [of x] |
1785 apply (auto simp add: HFinite_def abs_less_iff minus_less_iff [of x] |
|
1786 star_of_def star_n_def |
1786 hypreal_less SReal_iff hypreal_minus hypreal_of_real_def) |
1787 hypreal_less SReal_iff hypreal_minus hypreal_of_real_def) |
1787 apply (rule_tac x=x in bexI) |
1788 apply (rule_tac x=x in bexI) |
1788 apply (rule_tac x=y in exI, auto, ultra) |
1789 apply (rule_tac x=y in exI, auto, ultra) |
1789 done |
1790 done |
1790 |
1791 |
1791 lemma FreeUltrafilterNat_HFinite: |
1792 lemma FreeUltrafilterNat_HFinite: |
1792 "\<exists>X \<in> Rep_hypreal x. |
1793 "\<exists>X \<in> Rep_star x. |
1793 \<exists>u. {n. abs (X n) < u} \<in> FreeUltrafilterNat |
1794 \<exists>u. {n. abs (X n) < u} \<in> FreeUltrafilterNat |
1794 ==> x \<in> HFinite" |
1795 ==> x \<in> HFinite" |
1795 apply (cases x) |
1796 apply (rule_tac z = x in eq_Abs_star) |
1796 apply (auto simp add: HFinite_def abs_less_iff minus_less_iff [of x]) |
1797 apply (auto simp add: HFinite_def abs_less_iff minus_less_iff [of x]) |
1797 apply (rule_tac x = "hypreal_of_real u" in bexI) |
1798 apply (rule_tac x = "hypreal_of_real u" in bexI) |
1798 apply (auto simp add: hypreal_less SReal_iff hypreal_minus hypreal_of_real_def, ultra+) |
1799 apply (auto simp add: hypreal_less SReal_iff hypreal_minus hypreal_of_real_def star_of_def star_n_def, ultra+) |
1799 done |
1800 done |
1800 |
1801 |
1801 lemma HFinite_FreeUltrafilterNat_iff: |
1802 lemma HFinite_FreeUltrafilterNat_iff: |
1802 "(x \<in> HFinite) = (\<exists>X \<in> Rep_hypreal x. |
1803 "(x \<in> HFinite) = (\<exists>X \<in> Rep_star x. |
1803 \<exists>u. {n. abs (X n) < u} \<in> FreeUltrafilterNat)" |
1804 \<exists>u. {n. abs (X n) < u} \<in> FreeUltrafilterNat)" |
1804 apply (blast intro!: HFinite_FreeUltrafilterNat FreeUltrafilterNat_HFinite) |
1805 apply (blast intro!: HFinite_FreeUltrafilterNat FreeUltrafilterNat_HFinite) |
1805 done |
1806 done |
1806 |
1807 |
1807 |
1808 |
1826 (*------------------------------------- |
1827 (*------------------------------------- |
1827 Exclude this type of sets from free |
1828 Exclude this type of sets from free |
1828 ultrafilter for Infinite numbers! |
1829 ultrafilter for Infinite numbers! |
1829 -------------------------------------*) |
1830 -------------------------------------*) |
1830 lemma FreeUltrafilterNat_const_Finite: |
1831 lemma FreeUltrafilterNat_const_Finite: |
1831 "[| xa: Rep_hypreal x; |
1832 "[| xa: Rep_star x; |
1832 {n. abs (xa n) = u} \<in> FreeUltrafilterNat |
1833 {n. abs (xa n) = u} \<in> FreeUltrafilterNat |
1833 |] ==> x \<in> HFinite" |
1834 |] ==> x \<in> HFinite" |
1834 apply (rule FreeUltrafilterNat_HFinite) |
1835 apply (rule FreeUltrafilterNat_HFinite) |
1835 apply (rule_tac x = xa in bexI) |
1836 apply (rule_tac x = xa in bexI) |
1836 apply (rule_tac x = "u + 1" in exI) |
1837 apply (rule_tac x = "u + 1" in exI) |
1837 apply (ultra, assumption) |
1838 apply (ultra, assumption) |
1838 done |
1839 done |
1839 |
1840 |
1840 lemma HInfinite_FreeUltrafilterNat: |
1841 lemma HInfinite_FreeUltrafilterNat: |
1841 "x \<in> HInfinite ==> \<exists>X \<in> Rep_hypreal x. |
1842 "x \<in> HInfinite ==> \<exists>X \<in> Rep_star x. |
1842 \<forall>u. {n. u < abs (X n)} \<in> FreeUltrafilterNat" |
1843 \<forall>u. {n. u < abs (X n)} \<in> FreeUltrafilterNat" |
1843 apply (frule HInfinite_HFinite_iff [THEN iffD1]) |
1844 apply (frule HInfinite_HFinite_iff [THEN iffD1]) |
1844 apply (cut_tac x = x in Rep_hypreal_nonempty) |
1845 apply (cut_tac x = x in Rep_hypreal_nonempty) |
1845 apply (auto simp del: Rep_hypreal_nonempty simp add: HFinite_FreeUltrafilterNat_iff Bex_def) |
1846 apply (auto simp del: Rep_hypreal_nonempty simp add: HFinite_FreeUltrafilterNat_iff Bex_def) |
1846 apply (drule spec)+ |
1847 apply (drule spec)+ |
1859 |
1860 |
1860 lemma lemma_Int_HIa: "{n. u < abs (X n)} Int {n. abs (X n) < (u::real)} = {}" |
1861 lemma lemma_Int_HIa: "{n. u < abs (X n)} Int {n. abs (X n) < (u::real)} = {}" |
1861 by (auto intro: order_less_asym) |
1862 by (auto intro: order_less_asym) |
1862 |
1863 |
1863 lemma FreeUltrafilterNat_HInfinite: |
1864 lemma FreeUltrafilterNat_HInfinite: |
1864 "\<exists>X \<in> Rep_hypreal x. \<forall>u. |
1865 "\<exists>X \<in> Rep_star x. \<forall>u. |
1865 {n. u < abs (X n)} \<in> FreeUltrafilterNat |
1866 {n. u < abs (X n)} \<in> FreeUltrafilterNat |
1866 ==> x \<in> HInfinite" |
1867 ==> x \<in> HInfinite" |
1867 apply (rule HInfinite_HFinite_iff [THEN iffD2]) |
1868 apply (rule HInfinite_HFinite_iff [THEN iffD2]) |
1868 apply (safe, drule HFinite_FreeUltrafilterNat, auto) |
1869 apply (safe, drule HFinite_FreeUltrafilterNat, auto) |
1869 apply (drule_tac x = u in spec) |
1870 apply (drule_tac x = u in spec) |
1873 apply (drule_tac Y = "{n. abs (X n) < u}" in FreeUltrafilterNat_Int) |
1874 apply (drule_tac Y = "{n. abs (X n) < u}" in FreeUltrafilterNat_Int) |
1874 apply (auto simp add: lemma_Int_HIa) |
1875 apply (auto simp add: lemma_Int_HIa) |
1875 done |
1876 done |
1876 |
1877 |
1877 lemma HInfinite_FreeUltrafilterNat_iff: |
1878 lemma HInfinite_FreeUltrafilterNat_iff: |
1878 "(x \<in> HInfinite) = (\<exists>X \<in> Rep_hypreal x. |
1879 "(x \<in> HInfinite) = (\<exists>X \<in> Rep_star x. |
1879 \<forall>u. {n. u < abs (X n)} \<in> FreeUltrafilterNat)" |
1880 \<forall>u. {n. u < abs (X n)} \<in> FreeUltrafilterNat)" |
1880 by (blast intro!: HInfinite_FreeUltrafilterNat FreeUltrafilterNat_HInfinite) |
1881 by (blast intro!: HInfinite_FreeUltrafilterNat FreeUltrafilterNat_HInfinite) |
1881 |
1882 |
1882 |
1883 |
1883 subsection{*Alternative Definitions for @{term Infinitesimal} using Free Ultrafilter*} |
1884 subsection{*Alternative Definitions for @{term Infinitesimal} using Free Ultrafilter*} |
1884 |
1885 |
1885 lemma Infinitesimal_FreeUltrafilterNat: |
1886 lemma Infinitesimal_FreeUltrafilterNat: |
1886 "x \<in> Infinitesimal ==> \<exists>X \<in> Rep_hypreal x. |
1887 "x \<in> Infinitesimal ==> \<exists>X \<in> Rep_star x. |
1887 \<forall>u. 0 < u --> {n. abs (X n) < u} \<in> FreeUltrafilterNat" |
1888 \<forall>u. 0 < u --> {n. abs (X n) < u} \<in> FreeUltrafilterNat" |
1888 apply (simp add: Infinitesimal_def) |
1889 apply (simp add: Infinitesimal_def) |
1889 apply (auto simp add: abs_less_iff minus_less_iff [of x]) |
1890 apply (auto simp add: abs_less_iff minus_less_iff [of x]) |
1890 apply (cases x) |
1891 apply (rule_tac z = x in eq_Abs_star) |
1891 apply (auto, rule bexI [OF _ lemma_hyprel_refl], safe) |
1892 apply (auto, rule bexI [OF _ lemma_starrel_refl], safe) |
1892 apply (drule hypreal_of_real_less_iff [THEN iffD2]) |
1893 apply (drule hypreal_of_real_less_iff [THEN iffD2]) |
1893 apply (drule_tac x = "hypreal_of_real u" in bspec, auto) |
1894 apply (drule_tac x = "hypreal_of_real u" in bspec, auto) |
1894 apply (auto simp add: hypreal_less hypreal_minus hypreal_of_real_def, ultra) |
1895 apply (auto simp add: hypreal_less hypreal_minus hypreal_of_real_def star_of_def star_n_def, ultra) |
1895 done |
1896 done |
1896 |
1897 |
1897 lemma FreeUltrafilterNat_Infinitesimal: |
1898 lemma FreeUltrafilterNat_Infinitesimal: |
1898 "\<exists>X \<in> Rep_hypreal x. |
1899 "\<exists>X \<in> Rep_star x. |
1899 \<forall>u. 0 < u --> {n. abs (X n) < u} \<in> FreeUltrafilterNat |
1900 \<forall>u. 0 < u --> {n. abs (X n) < u} \<in> FreeUltrafilterNat |
1900 ==> x \<in> Infinitesimal" |
1901 ==> x \<in> Infinitesimal" |
1901 apply (simp add: Infinitesimal_def) |
1902 apply (simp add: Infinitesimal_def) |
1902 apply (cases x) |
1903 apply (rule_tac z = x in eq_Abs_star) |
1903 apply (auto simp add: abs_less_iff abs_interval_iff minus_less_iff [of x]) |
1904 apply (auto simp add: abs_less_iff abs_interval_iff minus_less_iff [of x]) |
1904 apply (auto simp add: SReal_iff) |
1905 apply (auto simp add: SReal_iff) |
1905 apply (drule_tac [!] x=y in spec) |
1906 apply (drule_tac [!] x=y in spec) |
1906 apply (auto simp add: hypreal_less hypreal_minus hypreal_of_real_def, ultra+) |
1907 apply (auto simp add: hypreal_less hypreal_minus hypreal_of_real_def star_of_def star_n_def, ultra+) |
1907 done |
1908 done |
1908 |
1909 |
1909 lemma Infinitesimal_FreeUltrafilterNat_iff: |
1910 lemma Infinitesimal_FreeUltrafilterNat_iff: |
1910 "(x \<in> Infinitesimal) = (\<exists>X \<in> Rep_hypreal x. |
1911 "(x \<in> Infinitesimal) = (\<exists>X \<in> Rep_star x. |
1911 \<forall>u. 0 < u --> {n. abs (X n) < u} \<in> FreeUltrafilterNat)" |
1912 \<forall>u. 0 < u --> {n. abs (X n) < u} \<in> FreeUltrafilterNat)" |
1912 apply (blast intro!: Infinitesimal_FreeUltrafilterNat FreeUltrafilterNat_Infinitesimal) |
1913 apply (blast intro!: Infinitesimal_FreeUltrafilterNat FreeUltrafilterNat_Infinitesimal) |
1913 done |
1914 done |
1914 |
1915 |
1915 (*------------------------------------------------------------------------ |
1916 (*------------------------------------------------------------------------ |
2006 lemma Compl_real_le_eq: "- {n::nat. real n \<le> u} = {n. u < real n}" |
2007 lemma Compl_real_le_eq: "- {n::nat. real n \<le> u} = {n. u < real n}" |
2007 by (auto dest!: order_le_less_trans simp add: linorder_not_le) |
2008 by (auto dest!: order_le_less_trans simp add: linorder_not_le) |
2008 |
2009 |
2009 text{*@{term omega} is a member of @{term HInfinite}*} |
2010 text{*@{term omega} is a member of @{term HInfinite}*} |
2010 |
2011 |
2011 lemma hypreal_omega: "hyprel``{%n::nat. real (Suc n)} \<in> hypreal" |
2012 lemma hypreal_omega: "starrel``{%n::nat. real (Suc n)} \<in> star" |
2012 by auto |
2013 by auto |
2013 |
2014 |
2014 lemma FreeUltrafilterNat_omega: "{n. u < real n} \<in> FreeUltrafilterNat" |
2015 lemma FreeUltrafilterNat_omega: "{n. u < real n} \<in> FreeUltrafilterNat" |
2015 apply (cut_tac u = u in rabs_real_of_nat_le_real_FreeUltrafilterNat) |
2016 apply (cut_tac u = u in rabs_real_of_nat_le_real_FreeUltrafilterNat) |
2016 apply (auto dest: FreeUltrafilterNat_Compl_mem simp add: Compl_real_le_eq) |
2017 apply (auto dest: FreeUltrafilterNat_Compl_mem simp add: Compl_real_le_eq) |
2017 done |
2018 done |
2018 |
2019 |
2019 theorem HInfinite_omega [simp]: "omega \<in> HInfinite" |
2020 theorem HInfinite_omega [simp]: "omega \<in> HInfinite" |
2020 apply (simp add: omega_def) |
2021 apply (simp add: omega_def star_n_def) |
2021 apply (auto intro!: FreeUltrafilterNat_HInfinite) |
2022 apply (auto intro!: FreeUltrafilterNat_HInfinite) |
2022 apply (rule bexI) |
2023 apply (rule bexI) |
2023 apply (rule_tac [2] lemma_hyprel_refl, auto) |
2024 apply (rule_tac [2] lemma_starrel_refl, auto) |
2024 apply (simp (no_asm) add: real_of_nat_Suc diff_less_eq [symmetric] FreeUltrafilterNat_omega) |
2025 apply (simp (no_asm) add: real_of_nat_Suc diff_less_eq [symmetric] FreeUltrafilterNat_omega) |
2025 done |
2026 done |
2026 |
2027 |
2027 (*----------------------------------------------- |
2028 (*----------------------------------------------- |
2028 Epsilon is a member of Infinitesimal |
2029 Epsilon is a member of Infinitesimal |
2120 (*----------------------------------------------------- |
2121 (*----------------------------------------------------- |
2121 |X(n) - x| < 1/n ==> [<X n>] - hypreal_of_real x| \<in> Infinitesimal |
2122 |X(n) - x| < 1/n ==> [<X n>] - hypreal_of_real x| \<in> Infinitesimal |
2122 -----------------------------------------------------*) |
2123 -----------------------------------------------------*) |
2123 lemma real_seq_to_hypreal_Infinitesimal: |
2124 lemma real_seq_to_hypreal_Infinitesimal: |
2124 "\<forall>n. abs(X n + -x) < inverse(real(Suc n)) |
2125 "\<forall>n. abs(X n + -x) < inverse(real(Suc n)) |
2125 ==> Abs_hypreal(hyprel``{X}) + -hypreal_of_real x \<in> Infinitesimal" |
2126 ==> Abs_star(starrel``{X}) + -hypreal_of_real x \<in> Infinitesimal" |
2126 apply (auto intro!: bexI dest: FreeUltrafilterNat_inverse_real_of_posnat FreeUltrafilterNat_all FreeUltrafilterNat_Int intro: order_less_trans FreeUltrafilterNat_subset simp add: hypreal_minus hypreal_of_real_def hypreal_add Infinitesimal_FreeUltrafilterNat_iff hypreal_inverse) |
2127 apply (auto intro!: bexI dest: FreeUltrafilterNat_inverse_real_of_posnat FreeUltrafilterNat_all FreeUltrafilterNat_Int intro: order_less_trans FreeUltrafilterNat_subset simp add: hypreal_minus hypreal_of_real_def star_of_def star_n_def hypreal_add Infinitesimal_FreeUltrafilterNat_iff hypreal_inverse) |
2127 done |
2128 done |
2128 |
2129 |
2129 lemma real_seq_to_hypreal_approx: |
2130 lemma real_seq_to_hypreal_approx: |
2130 "\<forall>n. abs(X n + -x) < inverse(real(Suc n)) |
2131 "\<forall>n. abs(X n + -x) < inverse(real(Suc n)) |
2131 ==> Abs_hypreal(hyprel``{X}) @= hypreal_of_real x" |
2132 ==> Abs_star(starrel``{X}) @= hypreal_of_real x" |
2132 apply (subst approx_minus_iff) |
2133 apply (subst approx_minus_iff) |
2133 apply (rule mem_infmal_iff [THEN subst]) |
2134 apply (rule mem_infmal_iff [THEN subst]) |
2134 apply (erule real_seq_to_hypreal_Infinitesimal) |
2135 apply (erule real_seq_to_hypreal_Infinitesimal) |
2135 done |
2136 done |
2136 |
2137 |
2137 lemma real_seq_to_hypreal_approx2: |
2138 lemma real_seq_to_hypreal_approx2: |
2138 "\<forall>n. abs(x + -X n) < inverse(real(Suc n)) |
2139 "\<forall>n. abs(x + -X n) < inverse(real(Suc n)) |
2139 ==> Abs_hypreal(hyprel``{X}) @= hypreal_of_real x" |
2140 ==> Abs_star(starrel``{X}) @= hypreal_of_real x" |
2140 apply (simp add: abs_minus_add_cancel real_seq_to_hypreal_approx) |
2141 apply (simp add: abs_minus_add_cancel real_seq_to_hypreal_approx) |
2141 done |
2142 done |
2142 |
2143 |
2143 lemma real_seq_to_hypreal_Infinitesimal2: |
2144 lemma real_seq_to_hypreal_Infinitesimal2: |
2144 "\<forall>n. abs(X n + -Y n) < inverse(real(Suc n)) |
2145 "\<forall>n. abs(X n + -Y n) < inverse(real(Suc n)) |
2145 ==> Abs_hypreal(hyprel``{X}) + |
2146 ==> Abs_star(starrel``{X}) + |
2146 -Abs_hypreal(hyprel``{Y}) \<in> Infinitesimal" |
2147 -Abs_star(starrel``{Y}) \<in> Infinitesimal" |
2147 by (auto intro!: bexI |
2148 by (auto intro!: bexI |
2148 dest: FreeUltrafilterNat_inverse_real_of_posnat |
2149 dest: FreeUltrafilterNat_inverse_real_of_posnat |
2149 FreeUltrafilterNat_all FreeUltrafilterNat_Int |
2150 FreeUltrafilterNat_all FreeUltrafilterNat_Int |
2150 intro: order_less_trans FreeUltrafilterNat_subset |
2151 intro: order_less_trans FreeUltrafilterNat_subset |
2151 simp add: Infinitesimal_FreeUltrafilterNat_iff hypreal_minus |
2152 simp add: Infinitesimal_FreeUltrafilterNat_iff hypreal_minus |