# HG changeset patch # User huffman # Date 1214867948 -7200 # Node ID 68e111812b832354965ffe9c87785d3528fe61fb # Parent 3897988917a327d36dbcf8a6ddfe77db4f119a9e rename lemmas INF_foo to INFM_foo; add new lemmas about MOST and INFM diff -r 3897988917a3 -r 68e111812b83 src/HOL/Library/Infinite_Set.thy --- a/src/HOL/Library/Infinite_Set.thy Tue Jul 01 01:09:03 2008 +0200 +++ b/src/HOL/Library/Infinite_Set.thy Tue Jul 01 01:19:08 2008 +0200 @@ -1,4 +1,4 @@ -(* Title: HOL/Infnite_Set.thy +(* Title: HOL/Library/Infinite_Set.thy ID: $Id$ Author: Stephan Merz *) @@ -209,10 +209,9 @@ lemma range_inj_infinite: "inj (f::nat \ 'a) \ infinite (range f)" proof - assume "inj f" - and "finite (range f)" + assume "finite (range f)" and "inj f" then have "finite (UNIV::nat set)" - by (auto intro: finite_imageD simp del: nat_infinite) + by (rule finite_imageD) then show False by simp qed @@ -374,7 +373,7 @@ Inf_many (binder "\\<^sub>\" 10) and Alm_all (binder "\\<^sub>\" 10) -lemma INF_EX: +lemma INFM_EX: "(\\<^sub>\x. P x) \ (\x. P x)" unfolding Inf_many_def proof (rule ccontr) @@ -390,7 +389,7 @@ lemma ALL_MOST: "\x. P x \ \\<^sub>\x. P x" by (simp add: MOST_iff_finiteNeg) -lemma INF_mono: +lemma INFM_mono: assumes inf: "\\<^sub>\x. P x" and q: "\x. P x \ Q x" shows "\\<^sub>\x. Q x" proof - @@ -401,19 +400,48 @@ qed lemma MOST_mono: "\\<^sub>\x. P x \ (\x. P x \ Q x) \ \\<^sub>\x. Q x" - unfolding Alm_all_def by (blast intro: INF_mono) + unfolding Alm_all_def by (blast intro: INFM_mono) + +lemma INFM_disj_distrib: + "(\\<^sub>\x. P x \ Q x) \ (\\<^sub>\x. P x) \ (\\<^sub>\x. Q x)" + unfolding Inf_many_def by (simp add: Collect_disj_eq) + +lemma MOST_conj_distrib: + "(\\<^sub>\x. P x \ Q x) \ (\\<^sub>\x. P x) \ (\\<^sub>\x. Q x)" + unfolding Alm_all_def by (simp add: INFM_disj_distrib del: disj_not1) -lemma INF_nat: "(\\<^sub>\n. P (n::nat)) = (\m. \n. m P n)" +lemma MOST_rev_mp: + assumes "\\<^sub>\x. P x" and "\\<^sub>\x. P x \ Q x" + shows "\\<^sub>\x. Q x" +proof - + have "\\<^sub>\x. P x \ (P x \ Q x)" + using prems by (simp add: MOST_conj_distrib) + thus ?thesis by (rule MOST_mono) simp +qed + +lemma not_INFM [simp]: "\ (INFM x. P x) \ (MOST x. \ P x)" +unfolding Alm_all_def not_not .. + +lemma not_MOST [simp]: "\ (MOST x. P x) \ (INFM x. \ P x)" +unfolding Alm_all_def not_not .. + +lemma INFM_const [simp]: "(INFM x::'a. P) \ P \ infinite (UNIV::'a set)" + unfolding Inf_many_def by simp + +lemma MOST_const [simp]: "(MOST x::'a. P) \ P \ finite (UNIV::'a set)" + unfolding Alm_all_def by simp + +lemma INFM_nat: "(\\<^sub>\n. P (n::nat)) = (\m. \n. m P n)" by (simp add: Inf_many_def infinite_nat_iff_unbounded) -lemma INF_nat_le: "(\\<^sub>\n. P (n::nat)) = (\m. \n. m\n \ P n)" +lemma INFM_nat_le: "(\\<^sub>\n. P (n::nat)) = (\m. \n. m\n \ P n)" by (simp add: Inf_many_def infinite_nat_iff_unbounded_le) lemma MOST_nat: "(\\<^sub>\n. P (n::nat)) = (\m. \n. m P n)" - by (simp add: Alm_all_def INF_nat) + by (simp add: Alm_all_def INFM_nat) lemma MOST_nat_le: "(\\<^sub>\n. P (n::nat)) = (\m. \n. m\n \ P n)" - by (simp add: Alm_all_def INF_nat_le) + by (simp add: Alm_all_def INFM_nat_le) subsection "Enumeration of an Infinite Set"