lemma hypnat_le0 [iff]: "\n::hypnat. 0 \ n" by transfer (rule le0)
lemma hypnat_le_add1 [simp]: "\x n::hypnat. x \ x + n" by transfer (rule le_add1)
lemma hypnat_add_self_le [simp]: "\x n::hypnat. x \ n + x" by transfer (rule le_add2)
lemma hypnat_add_one_self_less [simp]: "x < x + 1"for x :: hypnat by (fact less_add_one)
lemma hypnat_neq0_conv [iff]: "\n::hypnat. n \ 0 \ 0 < n" by transfer (rule neq0_conv)
lemma hypnat_gt_zero_iff: "0 < n \ 1 \ n" for n :: hypnat by (auto simp add: linorder_not_less [symmetric])
lemma hypnat_gt_zero_iff2: "0 < n \ (\m. n = m + 1)" for n :: hypnat by (auto intro!: add_nonneg_pos exI[of _ "n - 1"] simp: hypnat_gt_zero_iff)
lemma hypnat_add_self_not_less: "\ x + y < x" for x y :: hypnat by (simp add: linorder_not_le [symmetric] add.commute [of x])
lemma hypnat_diff_split: "P (a - b) \ (a < b \ P 0) \ (\d. a = b + d \ P d)" for a b :: hypnat \<comment> \<open>elimination of \<open>-\<close> on \<open>hypnat\<close>\<close> proof (cases "a < b" rule: case_split) case True thenshow ?thesis by (auto simp add: hypnat_add_self_not_less order_less_imp_le hypnat_diff_is_0_eq [THENiffD2]) next case False thenshow ?thesis by (auto simp add: linorder_not_less dest: order_le_less_trans) qed
subsection \<open>Properties of the set of embedded natural numbers\<close>
lemma of_nat_eq_star_of [simp]: "of_nat = star_of" proof show"of_nat n = star_of n"for n by transfer simp qed
lemma Nats_eq_Standard: "(Nats :: nat star set) = Standard" by (auto simp: Nats_def Standard_def)
lemma hypnat_of_nat_mem_Nats [simp]: "hypnat_of_nat n \ Nats" by (simp add: Nats_eq_Standard)
lemma hypnat_of_nat_one [simp]: "hypnat_of_nat (Suc 0) = 1" by transfer simp
lemma hypnat_of_nat_Suc [simp]: "hypnat_of_nat (Suc n) = hypnat_of_nat n + 1" by transfer simp
lemma of_nat_eq_add: fixes d::hypnat shows"of_nat m = of_nat n + d \ d \ range of_nat" proof (induct n arbitrary: d) case (Suc n) thenshow ?case by (metis Nats_def Nats_eq_Standard Standard_simps(4) hypnat_diff_add_inverse of_nat_in_Nats) qed auto
lemma Nats_diff [simp]: "a \ Nats \ b \ Nats \ a - b \ Nats" for a b :: hypnat by (simp add: Nats_eq_Standard)
text\<open>The set of infinite hypernatural numbers.\<close> definition HNatInfinite :: "hypnat set" where"HNatInfinite = {n. n \ Nats}"
lemma Nats_not_HNatInfinite_iff: "x \ Nats \ x \ HNatInfinite" by (simp add: HNatInfinite_def)
lemma HNatInfinite_not_Nats_iff: "x \ HNatInfinite \ x \ Nats" by (simp add: HNatInfinite_def)
lemma star_of_neq_HNatInfinite: "N \ HNatInfinite \ star_of n \ N" by (auto simp add: HNatInfinite_def Nats_eq_Standard)
lemma star_of_Suc_lessI: "\N. star_of n < N \ star_of (Suc n) \ N \ star_of (Suc n) < N" by transfer (rule Suc_lessI)
lemma star_of_less_HNatInfinite: assumes N: "N \ HNatInfinite" shows"star_of n < N" proof (induct n) case 0 from N have"star_of 0 \ N" by (rule star_of_neq_HNatInfinite) thenshow ?caseby simp next case (Suc n) from N have"star_of (Suc n) \ N" by (rule star_of_neq_HNatInfinite) with Suc show ?case by (rule star_of_Suc_lessI) qed
lemma star_of_le_HNatInfinite: "N \ HNatInfinite \ star_of n \ N" by (rule star_of_less_HNatInfinite [THEN order_less_imp_le])
subsubsection \<open>Closure Rules\<close>
lemma Nats_less_HNatInfinite: "x \ Nats \ y \ HNatInfinite \ x < y" by (auto simp add: Nats_def star_of_less_HNatInfinite)
lemma Nats_le_HNatInfinite: "x \ Nats \ y \ HNatInfinite \ x \ y" by (rule Nats_less_HNatInfinite [THEN order_less_imp_le])
lemma zero_not_mem_HNatInfinite [simp]: "0 \ HNatInfinite" by (simp add: HNatInfinite_def)
lemma Nats_downward_closed: "x \ Nats \ y \ x \ y \ Nats" for x y :: hypnat using HNatInfinite_not_Nats_iff Nats_le_HNatInfinite by fastforce
lemma HNatInfinite_upward_closed: "x \ HNatInfinite \ x \ y \ y \ HNatInfinite" using HNatInfinite_not_Nats_iff Nats_downward_closed by blast
lemma HNatInfinite_add: "x \ HNatInfinite \ x + y \ HNatInfinite" using HNatInfinite_upward_closed hypnat_le_add1 by blast
lemma HNatInfinite_diff: "\x \ HNatInfinite; y \ Nats\ \ x - y \ HNatInfinite" by (metis HNatInfinite_not_Nats_iff Nats_add Nats_le_HNatInfinite le_add_diff_inverse)
lemma HNatInfinite_is_Suc: "x \ HNatInfinite \ \y. x = y + 1" for x :: hypnat using hypnat_gt_zero_iff2 zero_less_HNatInfinite by blast
subsection \<open>Existence of an infinite hypernatural number\<close>
text\<open>\<open>\<omega>\<close> is in fact an infinite hypernatural number = \<open>[<1, 2, 3, \<dots>>]\<close>\<close> definition whn :: hypnat where hypnat_omega_def: "whn = star_n (\n::nat. n)"
lemma hypnat_of_nat_neq_whn: "hypnat_of_nat n \ whn" by (simp add: FreeUltrafilterNat.singleton' hypnat_omega_def star_of_def star_n_eq_iff)
lemma HNatInfinite_whn [simp]: "whn \ HNatInfinite" by (simp add: HNatInfinite_def)
lemma lemma_unbounded_set [simp]: "eventually (\n::nat. m < n) \" by (rule filter_leD[OF FreeUltrafilterNat.le_cofinite])
(auto simp add: cofinite_eq_sequentially eventually_at_top_dense)
lemma hypnat_of_nat_eq: "hypnat_of_nat m = star_n (\n::nat. m)" by (simp add: star_of_def)
lemma SHNat_eq: "Nats = {n. \N. n = hypnat_of_nat N}" by (simp add: Nats_def image_def)
lemma Nats_less_whn: "n \ Nats \ n < whn" by (simp add: Nats_less_HNatInfinite)
lemma Nats_le_whn: "n \ Nats \ n \ whn" by (simp add: Nats_le_HNatInfinite)
lemma hypnat_of_nat_less_whn [simp]: "hypnat_of_nat n < whn" by (simp add: Nats_less_whn)
lemma hypnat_of_nat_le_whn [simp]: "hypnat_of_nat n \ whn" by (simp add: Nats_le_whn)
lemma hypnat_zero_less_hypnat_omega [simp]: "0 < whn" by (simp add: Nats_less_whn)
lemma hypnat_one_less_hypnat_omega [simp]: "1 < whn" by (simp add: Nats_less_whn)
subsubsection \<open>Alternative characterization of the set of infinite hypernaturals\<close>
text\<open>\<^term>\<open>HNatInfinite = {N. \<forall>n \<in> Nats. n < N}\<close>\<close>
text\<open>unused, but possibly interesting\<close> lemma HNatInfinite_FreeUltrafilterNat_eventually: assumes"\k::nat. eventually (\n. f n \ k) \" shows"eventually (\n. m < f n) \" proof (induct m) case 0 thenshow ?case using assms eventually_mono by fastforce next case (Suc m) thenshow ?case using assms [of "Suc m"] eventually_elim2 by fastforce qed
lemma HNatInfinite_iff: "HNatInfinite = {N. \n \ Nats. n < N}" using HNatInfinite_def Nats_less_HNatInfinite by auto
subsubsection \<open>Alternative Characterization of \<^term>\<open>HNatInfinite\<close> using Free Ultrafilter\<close>
lemma HNatInfinite_FreeUltrafilterNat: "star_n X \ HNatInfinite \ \u. eventually (\n. u < X n) \" by (metis (full_types) starP2_star_of starP_star_n star_less_def star_of_less_HNatInfinite)
lemma FreeUltrafilterNat_HNatInfinite: "\u. eventually (\n. u < X n) \ \ star_n X \ HNatInfinite" by (auto simp add: star_less_def starP2_star_n HNatInfinite_iff SHNat_eq hypnat_of_nat_eq)
lemma HNatInfinite_FreeUltrafilterNat_iff: "(star_n X \ HNatInfinite) = (\u. eventually (\n. u < X n) \)" by (rule iffI [OF HNatInfinite_FreeUltrafilterNat FreeUltrafilterNat_HNatInfinite])
subsection \<open>Embedding of the Hypernaturals into other types\<close>
¤ 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.0.7Bemerkung:
¤
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 ist noch experimentell.