1913 |
1913 |
1914 subsubsection {* @{term HFinite} *} |
1914 subsubsection {* @{term HFinite} *} |
1915 |
1915 |
1916 lemma HFinite_FreeUltrafilterNat: |
1916 lemma HFinite_FreeUltrafilterNat: |
1917 "star_n X \<in> HFinite |
1917 "star_n X \<in> HFinite |
1918 ==> \<exists>u. {n. norm (X n) < u} \<in> FreeUltrafilterNat" |
1918 ==> \<exists>u. eventually (\<lambda>n. norm (X n) < u) FreeUltrafilterNat" |
1919 apply (auto simp add: HFinite_def SReal_def) |
1919 apply (auto simp add: HFinite_def SReal_def) |
1920 apply (rule_tac x=r in exI) |
1920 apply (rule_tac x=r in exI) |
1921 apply (simp add: hnorm_def star_of_def starfun_star_n) |
1921 apply (simp add: hnorm_def star_of_def starfun_star_n) |
1922 apply (simp add: star_less_def starP2_star_n) |
1922 apply (simp add: star_less_def starP2_star_n) |
1923 done |
1923 done |
1924 |
1924 |
1925 lemma FreeUltrafilterNat_HFinite: |
1925 lemma FreeUltrafilterNat_HFinite: |
1926 "\<exists>u. {n. norm (X n) < u} \<in> FreeUltrafilterNat |
1926 "\<exists>u. eventually (\<lambda>n. norm (X n) < u) FreeUltrafilterNat |
1927 ==> star_n X \<in> HFinite" |
1927 ==> star_n X \<in> HFinite" |
1928 apply (auto simp add: HFinite_def mem_Rep_star_iff) |
1928 apply (auto simp add: HFinite_def mem_Rep_star_iff) |
1929 apply (rule_tac x="star_of u" in bexI) |
1929 apply (rule_tac x="star_of u" in bexI) |
1930 apply (simp add: hnorm_def starfun_star_n star_of_def) |
1930 apply (simp add: hnorm_def starfun_star_n star_of_def) |
1931 apply (simp add: star_less_def starP2_star_n) |
1931 apply (simp add: star_less_def starP2_star_n) |
1932 apply (simp add: SReal_def) |
1932 apply (simp add: SReal_def) |
1933 done |
1933 done |
1934 |
1934 |
1935 lemma HFinite_FreeUltrafilterNat_iff: |
1935 lemma HFinite_FreeUltrafilterNat_iff: |
1936 "(star_n X \<in> HFinite) = (\<exists>u. {n. norm (X n) < u} \<in> FreeUltrafilterNat)" |
1936 "(star_n X \<in> HFinite) = (\<exists>u. eventually (\<lambda>n. norm (X n) < u) FreeUltrafilterNat)" |
1937 by (blast intro!: HFinite_FreeUltrafilterNat FreeUltrafilterNat_HFinite) |
1937 by (blast intro!: HFinite_FreeUltrafilterNat FreeUltrafilterNat_HFinite) |
1938 |
1938 |
1939 subsubsection {* @{term HInfinite} *} |
1939 subsubsection {* @{term HInfinite} *} |
1940 |
1940 |
1941 lemma lemma_Compl_eq: "- {n. u < norm (f n)} = {n. norm (f n) \<le> u}" |
1941 lemma lemma_Compl_eq: "- {n. u < norm (f n)} = {n. norm (f n) \<le> u}" |
1955 (*------------------------------------- |
1955 (*------------------------------------- |
1956 Exclude this type of sets from free |
1956 Exclude this type of sets from free |
1957 ultrafilter for Infinite numbers! |
1957 ultrafilter for Infinite numbers! |
1958 -------------------------------------*) |
1958 -------------------------------------*) |
1959 lemma FreeUltrafilterNat_const_Finite: |
1959 lemma FreeUltrafilterNat_const_Finite: |
1960 "{n. norm (X n) = u} \<in> FreeUltrafilterNat ==> star_n X \<in> HFinite" |
1960 "eventually (\<lambda>n. norm (X n) = u) FreeUltrafilterNat ==> star_n X \<in> HFinite" |
1961 apply (rule FreeUltrafilterNat_HFinite) |
1961 apply (rule FreeUltrafilterNat_HFinite) |
1962 apply (rule_tac x = "u + 1" in exI) |
1962 apply (rule_tac x = "u + 1" in exI) |
1963 apply (erule ultra, simp) |
1963 apply (auto elim: eventually_elim1) |
1964 done |
1964 done |
1965 |
1965 |
1966 lemma HInfinite_FreeUltrafilterNat: |
1966 lemma HInfinite_FreeUltrafilterNat: |
1967 "star_n X \<in> HInfinite ==> \<forall>u. {n. u < norm (X n)} \<in> FreeUltrafilterNat" |
1967 "star_n X \<in> HInfinite ==> \<forall>u. eventually (\<lambda>n. u < norm (X n)) FreeUltrafilterNat" |
1968 apply (drule HInfinite_HFinite_iff [THEN iffD1]) |
1968 apply (drule HInfinite_HFinite_iff [THEN iffD1]) |
1969 apply (simp add: HFinite_FreeUltrafilterNat_iff) |
1969 apply (simp add: HFinite_FreeUltrafilterNat_iff) |
1970 apply (rule allI, drule_tac x="u + 1" in spec) |
1970 apply (rule allI, drule_tac x="u + 1" in spec) |
1971 apply (drule FreeUltrafilterNat.not_memD) |
1971 apply (simp add: FreeUltrafilterNat.eventually_not_iff[symmetric]) |
1972 apply (simp add: Collect_neg_eq [symmetric] linorder_not_less) |
1972 apply (auto elim: eventually_elim1) |
1973 apply (erule ultra, simp) |
|
1974 done |
1973 done |
1975 |
1974 |
1976 lemma lemma_Int_HI: |
1975 lemma lemma_Int_HI: |
1977 "{n. norm (Xa n) < u} Int {n. X n = Xa n} \<subseteq> {n. norm (X n) < (u::real)}" |
1976 "{n. norm (Xa n) < u} Int {n. X n = Xa n} \<subseteq> {n. norm (X n) < (u::real)}" |
1978 by auto |
1977 by auto |
1979 |
1978 |
1980 lemma lemma_Int_HIa: "{n. u < norm (X n)} Int {n. norm (X n) < u} = {}" |
1979 lemma lemma_Int_HIa: "{n. u < norm (X n)} Int {n. norm (X n) < u} = {}" |
1981 by (auto intro: order_less_asym) |
1980 by (auto intro: order_less_asym) |
1982 |
1981 |
1983 lemma FreeUltrafilterNat_HInfinite: |
1982 lemma FreeUltrafilterNat_HInfinite: |
1984 "\<forall>u. {n. u < norm (X n)} \<in> FreeUltrafilterNat ==> star_n X \<in> HInfinite" |
1983 "\<forall>u. eventually (\<lambda>n. u < norm (X n)) FreeUltrafilterNat ==> star_n X \<in> HInfinite" |
1985 apply (rule HInfinite_HFinite_iff [THEN iffD2]) |
1984 apply (rule HInfinite_HFinite_iff [THEN iffD2]) |
1986 apply (safe, drule HFinite_FreeUltrafilterNat, safe) |
1985 apply (safe, drule HFinite_FreeUltrafilterNat, safe) |
1987 apply (drule_tac x = u in spec) |
1986 apply (drule_tac x = u in spec) |
1988 apply (drule (1) FreeUltrafilterNat.Int) |
1987 proof - |
1989 apply (simp add: Collect_conj_eq [symmetric]) |
1988 fix u assume "\<forall>\<^sub>Fn in \<U>. norm (X n) < u" "\<forall>\<^sub>Fn in \<U>. u < norm (X n)" |
1990 apply (subgoal_tac "\<forall>n. \<not> (norm (X n) < u \<and> u < norm (X n))", auto) |
1989 then have "\<forall>\<^sub>F x in \<U>. False" |
1991 done |
1990 by eventually_elim auto |
|
1991 then show False |
|
1992 by (simp add: eventually_False FreeUltrafilterNat.proper) |
|
1993 qed |
1992 |
1994 |
1993 lemma HInfinite_FreeUltrafilterNat_iff: |
1995 lemma HInfinite_FreeUltrafilterNat_iff: |
1994 "(star_n X \<in> HInfinite) = (\<forall>u. {n. u < norm (X n)} \<in> FreeUltrafilterNat)" |
1996 "(star_n X \<in> HInfinite) = (\<forall>u. eventually (\<lambda>n. u < norm (X n)) FreeUltrafilterNat)" |
1995 by (blast intro!: HInfinite_FreeUltrafilterNat FreeUltrafilterNat_HInfinite) |
1997 by (blast intro!: HInfinite_FreeUltrafilterNat FreeUltrafilterNat_HInfinite) |
1996 |
1998 |
1997 subsubsection {* @{term Infinitesimal} *} |
1999 subsubsection {* @{term Infinitesimal} *} |
1998 |
2000 |
1999 lemma ball_SReal_eq: "(\<forall>x::hypreal \<in> Reals. P x) = (\<forall>x::real. P (star_of x))" |
2001 lemma ball_SReal_eq: "(\<forall>x::hypreal \<in> Reals. P x) = (\<forall>x::real. P (star_of x))" |
2000 by (unfold SReal_def, auto) |
2002 by (unfold SReal_def, auto) |
2001 |
2003 |
2002 lemma Infinitesimal_FreeUltrafilterNat: |
2004 lemma Infinitesimal_FreeUltrafilterNat: |
2003 "star_n X \<in> Infinitesimal ==> \<forall>u>0. {n. norm (X n) < u} \<in> \<U>" |
2005 "star_n X \<in> Infinitesimal ==> \<forall>u>0. eventually (\<lambda>n. norm (X n) < u) \<U>" |
2004 apply (simp add: Infinitesimal_def ball_SReal_eq) |
2006 apply (simp add: Infinitesimal_def ball_SReal_eq) |
2005 apply (simp add: hnorm_def starfun_star_n star_of_def) |
2007 apply (simp add: hnorm_def starfun_star_n star_of_def) |
2006 apply (simp add: star_less_def starP2_star_n) |
2008 apply (simp add: star_less_def starP2_star_n) |
2007 done |
2009 done |
2008 |
2010 |
2009 lemma FreeUltrafilterNat_Infinitesimal: |
2011 lemma FreeUltrafilterNat_Infinitesimal: |
2010 "\<forall>u>0. {n. norm (X n) < u} \<in> \<U> ==> star_n X \<in> Infinitesimal" |
2012 "\<forall>u>0. eventually (\<lambda>n. norm (X n) < u) \<U> ==> star_n X \<in> Infinitesimal" |
2011 apply (simp add: Infinitesimal_def ball_SReal_eq) |
2013 apply (simp add: Infinitesimal_def ball_SReal_eq) |
2012 apply (simp add: hnorm_def starfun_star_n star_of_def) |
2014 apply (simp add: hnorm_def starfun_star_n star_of_def) |
2013 apply (simp add: star_less_def starP2_star_n) |
2015 apply (simp add: star_less_def starP2_star_n) |
2014 done |
2016 done |
2015 |
2017 |
2016 lemma Infinitesimal_FreeUltrafilterNat_iff: |
2018 lemma Infinitesimal_FreeUltrafilterNat_iff: |
2017 "(star_n X \<in> Infinitesimal) = (\<forall>u>0. {n. norm (X n) < u} \<in> \<U>)" |
2019 "(star_n X \<in> Infinitesimal) = (\<forall>u>0. eventually (\<lambda>n. norm (X n) < u) \<U>)" |
2018 by (blast intro!: Infinitesimal_FreeUltrafilterNat FreeUltrafilterNat_Infinitesimal) |
2020 by (blast intro!: Infinitesimal_FreeUltrafilterNat FreeUltrafilterNat_Infinitesimal) |
2019 |
2021 |
2020 (*------------------------------------------------------------------------ |
2022 (*------------------------------------------------------------------------ |
2021 Infinitesimals as smaller than 1/n for all n::nat (> 0) |
2023 Infinitesimals as smaller than 1/n for all n::nat (> 0) |
2022 ------------------------------------------------------------------------*) |
2024 ------------------------------------------------------------------------*) |
2085 lemma finite_rabs_real_of_nat_le_real: "finite {n::nat. abs(real n) \<le> u}" |
2087 lemma finite_rabs_real_of_nat_le_real: "finite {n::nat. abs(real n) \<le> u}" |
2086 apply (simp (no_asm) add: real_of_nat_Suc_gt_zero finite_real_of_nat_le_real) |
2088 apply (simp (no_asm) add: real_of_nat_Suc_gt_zero finite_real_of_nat_le_real) |
2087 done |
2089 done |
2088 |
2090 |
2089 lemma rabs_real_of_nat_le_real_FreeUltrafilterNat: |
2091 lemma rabs_real_of_nat_le_real_FreeUltrafilterNat: |
2090 "{n. abs(real n) \<le> u} \<notin> FreeUltrafilterNat" |
2092 "\<not> eventually (\<lambda>n. abs(real n) \<le> u) FreeUltrafilterNat" |
2091 by (blast intro!: FreeUltrafilterNat.finite finite_rabs_real_of_nat_le_real) |
2093 by (blast intro!: FreeUltrafilterNat.finite finite_rabs_real_of_nat_le_real) |
2092 |
2094 |
2093 lemma FreeUltrafilterNat_nat_gt_real: "{n. u < real n} \<in> FreeUltrafilterNat" |
2095 lemma FreeUltrafilterNat_nat_gt_real: "eventually (\<lambda>n. u < real n) FreeUltrafilterNat" |
2094 apply (rule ccontr, drule FreeUltrafilterNat.not_memD) |
2096 apply (rule FreeUltrafilterNat.finite') |
2095 apply (subgoal_tac "- {n::nat. u < real n} = {n. real n \<le> u}") |
2097 apply (subgoal_tac "{n::nat. \<not> u < real n} = {n. real n \<le> u}") |
2096 prefer 2 apply force |
2098 apply (auto simp add: finite_real_of_nat_le_real) |
2097 apply (simp add: finite_real_of_nat_le_real [THEN FreeUltrafilterNat.finite]) |
|
2098 done |
2099 done |
2099 |
2100 |
2100 (*-------------------------------------------------------------- |
2101 (*-------------------------------------------------------------- |
2101 The complement of {n. abs(real n) \<le> u} = |
2102 The complement of {n. abs(real n) \<le> u} = |
2102 {n. u < abs (real n)} is in FreeUltrafilterNat |
2103 {n. u < abs (real n)} is in FreeUltrafilterNat |
2206 -----------------------------------------------------*) |
2205 -----------------------------------------------------*) |
2207 lemma real_seq_to_hypreal_Infinitesimal: |
2206 lemma real_seq_to_hypreal_Infinitesimal: |
2208 "\<forall>n. norm(X n - x) < inverse(real(Suc n)) |
2207 "\<forall>n. norm(X n - x) < inverse(real(Suc n)) |
2209 ==> star_n X - star_of x \<in> Infinitesimal" |
2208 ==> star_n X - star_of x \<in> Infinitesimal" |
2210 unfolding star_n_diff star_of_def Infinitesimal_FreeUltrafilterNat_iff star_n_inverse |
2209 unfolding star_n_diff star_of_def Infinitesimal_FreeUltrafilterNat_iff star_n_inverse |
2211 by (auto dest: FreeUltrafilterNat_inverse_real_of_posnat FreeUltrafilterNat.Int |
2210 by (auto dest!: FreeUltrafilterNat_inverse_real_of_posnat |
2212 intro: order_less_trans FreeUltrafilterNat.subset) |
2211 intro: order_less_trans elim!: eventually_elim1) |
2213 |
2212 |
2214 lemma real_seq_to_hypreal_approx: |
2213 lemma real_seq_to_hypreal_approx: |
2215 "\<forall>n. norm(X n - x) < inverse(real(Suc n)) |
2214 "\<forall>n. norm(X n - x) < inverse(real(Suc n)) |
2216 ==> star_n X @= star_of x" |
2215 ==> star_n X @= star_of x" |
2217 by (metis bex_Infinitesimal_iff real_seq_to_hypreal_Infinitesimal) |
2216 by (metis bex_Infinitesimal_iff real_seq_to_hypreal_Infinitesimal) |