# HG changeset patch # User paulson # Date 1635166568 -3600 # Node ID cff477b6d015cf9cb48cfed69922de1ca838ede4 # Parent e2e2bc1f95708ff09419d887aeaf8e8d3107f299 Refinement of partitions diff -r e2e2bc1f9570 -r cff477b6d015 src/HOL/Library/Disjoint_Sets.thy --- a/src/HOL/Library/Disjoint_Sets.thy Sun Oct 24 22:10:28 2021 +0200 +++ b/src/HOL/Library/Disjoint_Sets.thy Mon Oct 25 13:56:08 2021 +0100 @@ -450,4 +450,50 @@ lemma partition_on_alt: "partition_on A P \ (\r. equiv A r \ P = A // r)" by (auto simp: partition_on_eq_quotient intro!: partition_on_quotient intro: equiv_partition_on) +subsection \Refinement of partitions\ + +definition refines :: "'a set \ 'a set set \ 'a set set \ bool" + where "refines A P Q \ + partition_on A P \ partition_on A Q \ (\X\P. \Y\Q. X \ Y)" + +lemma refines_refl: "partition_on A P \ refines A P P" + using refines_def by blast + +lemma refines_asym1: + assumes "refines A P Q" "refines A Q P" + shows "P \ Q" +proof + fix X + assume "X \ P" + then obtain Y X' where "Y \ Q" "X \ Y" "X' \ P" "Y \ X'" + by (meson assms refines_def) + then have "X' = X" + using assms(2) unfolding partition_on_def refines_def + by (metis \X \ P\ \X \ Y\ disjnt_self_iff_empty disjnt_subset1 pairwiseD) + then show "X \ Q" + using \X \ Y\ \Y \ Q\ \Y \ X'\ by force +qed + +lemma refines_asym: "\refines A P Q; refines A Q P\ \ P=Q" + by (meson antisym_conv refines_asym1) + +lemma refines_trans: "\refines A P Q; refines A Q R\ \ refines A P R" + by (meson order.trans refines_def) + +lemma refines_obtains_subset: + assumes "refines A P Q" "q \ Q" + shows "partition_on q {p \ P. p \ q}" +proof - + have "p \ q \ disjnt p q" if "p \ P" for p + using that assms unfolding refines_def partition_on_def disjoint_def + by (metis disjnt_def disjnt_subset1) + with assms have "q \ Union {p \ P. p \ q}" + using assms + by (clarsimp simp: refines_def disjnt_iff partition_on_def) (metis Union_iff) + with assms have "q = Union {p \ P. p \ q}" + by auto + then show ?thesis + using assms by (auto simp: refines_def disjoint_def partition_on_def) +qed + end