diff -r fb08117a106b -r 7b8a6840e85f src/HOL/Library/Ramsey.thy --- a/src/HOL/Library/Ramsey.thy Mon Feb 17 11:17:09 2020 +0100 +++ b/src/HOL/Library/Ramsey.thy Mon Feb 17 11:07:27 2020 +0000 @@ -21,6 +21,12 @@ lemma nsets_2_eq: "nsets A 2 = (\x\A. \y\A - {x}. {{x, y}})" by (auto simp: nsets_def card_2_iff) +lemma nsets_doubleton_2_eq [simp]: "[{x, y}]\<^bsup>2\<^esup> = (if x=y then {} else {{x, y}})" + by (auto simp: nsets_2_eq) + +lemma doubleton_in_nsets_2 [simp]: "{x,y} \ [A]\<^bsup>2\<^esup> \ x \ A \ y \ A \ x \ y" + by (auto simp: nsets_2_eq Set.doubleton_eq_iff) + lemma binomial_eq_nsets: "n choose k = card (nsets {0.. nsets {..finite A; card A < r\ \ nsets A r = {}" by (simp add: nsets_eq_empty_iff) lemma nsets_empty_iff: "nsets {} r = (if r=0 then {{}} else {})" @@ -79,6 +85,29 @@ by (auto simp: bij_betw_def inj_on_nsets) qed +lemma nset_image_obtains: + assumes "X \ [f`A]\<^bsup>k\<^esup>" "inj_on f A" + obtains Y where "Y \ [A]\<^bsup>k\<^esup>" "X = f ` Y" + using assms + apply (clarsimp simp add: nsets_def subset_image_iff) + by (metis card_image finite_imageD inj_on_subset) + +lemma nsets_image_funcset: + assumes "g \ S \ T" and "inj_on g S" + shows "(\X. g ` X) \ [S]\<^bsup>k\<^esup> \ [T]\<^bsup>k\<^esup>" + using assms + by (fastforce simp add: nsets_def card_image inj_on_subset subset_iff simp flip: image_subset_iff_funcset) + +lemma nsets_compose_image_funcset: + assumes f: "f \ [T]\<^bsup>k\<^esup> \ D" and "g \ S \ T" and "inj_on g S" + shows "f \ (\X. g ` X) \ [S]\<^bsup>k\<^esup> \ D" +proof - + have "(\X. g ` X) \ [S]\<^bsup>k\<^esup> \ [T]\<^bsup>k\<^esup>" + using assms by (simp add: nsets_image_funcset) + then show ?thesis + using f by fastforce +qed + subsubsection \Partition predicates\ definition partn :: "'a set \ nat \ nat \ 'b set \ bool"