# HG changeset patch # User nipkow # Date 1234565724 -3600 # Node ID 445320b620ef5efa291cfee544e5a14eee827897 # Parent 333cbcad74c3dda842b4ae74f8447a42b0a9f08a# Parent f4b3f8fbf599f81bd2c5cd66f3856714ac334cc9 merged diff -r 333cbcad74c3 -r 445320b620ef src/HOL/Finite_Set.thy --- a/src/HOL/Finite_Set.thy Fri Feb 13 12:07:03 2009 -0800 +++ b/src/HOL/Finite_Set.thy Fri Feb 13 23:55:24 2009 +0100 @@ -144,8 +144,7 @@ subsubsection{* Finiteness and set theoretic constructions *} lemma finite_UnI: "finite F ==> finite G ==> finite (F Un G)" - -- {* The union of two finite sets is finite. *} - by (induct set: finite) simp_all +by (induct set: finite) simp_all lemma finite_subset: "A \ B ==> finite B ==> finite A" -- {* Every subset of a finite set is finite. *} @@ -174,15 +173,21 @@ qed qed -lemma finite_Collect_subset[simp]: "finite A \ finite{x \ A. P x}" -using finite_subset[of "{x \ A. P x}" "A"] by blast - lemma finite_Un [iff]: "finite (F Un G) = (finite F & finite G)" - by (blast intro: finite_subset [of _ "X Un Y", standard] finite_UnI) +by (blast intro: finite_subset [of _ "X Un Y", standard] finite_UnI) + +lemma finite_disjI[simp]: + "finite{x. P x | Q x} = (finite{x. P x} & finite{x. Q x})" +by(simp add:Collect_disj_eq) lemma finite_Int [simp, intro]: "finite F | finite G ==> finite (F Int G)" -- {* The converse obviously fails. *} - by (blast intro: finite_subset) +by (blast intro: finite_subset) + +lemma finite_conjI [simp, intro]: + "finite{x. P x} | finite{x. Q x} ==> finite{x. P x & Q x}" + -- {* The converse obviously fails. *} +by(simp add:Collect_conj_eq) lemma finite_insert [simp]: "finite (insert a A) = finite A" apply (subst insert_is_Un) @@ -227,8 +232,20 @@ then show ?thesis by simp qed -lemma finite_Diff [simp]: "finite B ==> finite (B - Ba)" - by (rule Diff_subset [THEN finite_subset]) +lemma finite_Diff [simp]: "finite A ==> finite (A - B)" +by (rule Diff_subset [THEN finite_subset]) + +lemma finite_Diff2 [simp]: + assumes "finite B" shows "finite (A - B) = finite A" +proof - + have "finite A \ finite((A-B) Un (A Int B))" by(simp add: Un_Diff_Int) + also have "\ \ finite(A-B)" using `finite B` by(simp) + finally show ?thesis .. +qed + +lemma finite_compl[simp]: + "finite(A::'a set) \ finite(-A) = finite(UNIV::'a set)" +by(simp add:Compl_eq_Diff_UNIV) lemma finite_Diff_insert [iff]: "finite (A - insert a B) = finite (A - B)" apply (subst Diff_insert) @@ -237,9 +254,6 @@ apply (subst insert_Diff, simp_all) done -lemma finite_Diff_singleton [simp]: "finite (A - {a}) = finite A" - by simp - text {* Image and Inverse Image over Finite Sets *} diff -r 333cbcad74c3 -r 445320b620ef src/HOL/Library/Infinite_Set.thy --- a/src/HOL/Library/Infinite_Set.thy Fri Feb 13 12:07:03 2009 -0800 +++ b/src/HOL/Library/Infinite_Set.thy Fri Feb 13 23:55:24 2009 +0100 @@ -461,10 +461,11 @@ by simp lemma enumerate_in_set: "infinite S \ enumerate S n : S" - apply (induct n arbitrary: S) - apply (fastsimp intro: LeastI dest!: infinite_imp_nonempty) - apply (fastsimp iff: finite_Diff_singleton) - done +apply (induct n arbitrary: S) + apply (fastsimp intro: LeastI dest!: infinite_imp_nonempty) +apply simp +apply (metis Collect_def Collect_mem_eq DiffE infinite_remove) +done declare enumerate_0 [simp del] enumerate_Suc [simp del] diff -r 333cbcad74c3 -r 445320b620ef src/HOL/Library/Multiset.thy --- a/src/HOL/Library/Multiset.thy Fri Feb 13 12:07:03 2009 -0800 +++ b/src/HOL/Library/Multiset.thy Fri Feb 13 23:55:24 2009 +0100 @@ -88,10 +88,8 @@ lemma union_preserves_multiset: "M \ multiset ==> N \ multiset ==> (\a. M a + N a) \ multiset" -apply (simp add: multiset_def) -apply (drule (1) finite_UnI) -apply (simp del: finite_Un add: Un_def) -done +by (simp add: multiset_def) + lemma diff_preserves_multiset: "M \ multiset ==> (\a. M a - N a) \ multiset" diff -r 333cbcad74c3 -r 445320b620ef src/HOL/Set.thy --- a/src/HOL/Set.thy Fri Feb 13 12:07:03 2009 -0800 +++ b/src/HOL/Set.thy Fri Feb 13 23:55:24 2009 +0100 @@ -787,6 +787,9 @@ lemma set_diff_eq: "A - B = {x. x : A & ~ x : B}" by blast +lemma Compl_eq_Diff_UNIV: "-A = (UNIV - A)" +by blast + subsubsection {* Augmenting a set -- insert *}