1847 text \<open>Misc\<close> |
1847 text \<open>Misc\<close> |
1848 |
1848 |
1849 definition pairwise :: "('a \<Rightarrow> 'a \<Rightarrow> bool) \<Rightarrow> 'a set \<Rightarrow> bool" |
1849 definition pairwise :: "('a \<Rightarrow> 'a \<Rightarrow> bool) \<Rightarrow> 'a set \<Rightarrow> bool" |
1850 where "pairwise R S \<longleftrightarrow> (\<forall>x \<in> S. \<forall>y \<in> S. x \<noteq> y \<longrightarrow> R x y)" |
1850 where "pairwise R S \<longleftrightarrow> (\<forall>x \<in> S. \<forall>y \<in> S. x \<noteq> y \<longrightarrow> R x y)" |
1851 |
1851 |
1852 lemma pairwise_subset: "pairwise P S \<Longrightarrow> T \<subseteq> S \<Longrightarrow> pairwise P T" |
1852 lemma pairwiseI: |
1853 by (force simp: pairwise_def) |
1853 "pairwise R S" if "\<And>x y. x \<in> S \<Longrightarrow> y \<in> S \<Longrightarrow> x \<noteq> y \<Longrightarrow> R x y" |
1854 |
1854 using that by (simp add: pairwise_def) |
1855 lemma pairwise_mono: "\<lbrakk>pairwise P A; \<And>x y. P x y \<Longrightarrow> Q x y\<rbrakk> \<Longrightarrow> pairwise Q A" |
1855 |
1856 by (auto simp: pairwise_def) |
1856 lemma pairwiseD: |
1857 |
1857 "R x y" and "R y x" |
1858 definition disjnt :: "'a set \<Rightarrow> 'a set \<Rightarrow> bool" |
1858 if "pairwise R S" "x \<in> S" and "y \<in> S" and "x \<noteq> y" |
1859 where "disjnt A B \<longleftrightarrow> A \<inter> B = {}" |
1859 using that by (simp_all add: pairwise_def) |
1860 |
|
1861 lemma disjnt_self_iff_empty [simp]: "disjnt S S \<longleftrightarrow> S = {}" |
|
1862 by (auto simp: disjnt_def) |
|
1863 |
|
1864 lemma disjnt_iff: "disjnt A B \<longleftrightarrow> (\<forall>x. \<not> (x \<in> A \<and> x \<in> B))" |
|
1865 by (force simp: disjnt_def) |
|
1866 |
|
1867 lemma disjnt_sym: "disjnt A B \<Longrightarrow> disjnt B A" |
|
1868 using disjnt_iff by blast |
|
1869 |
|
1870 lemma disjnt_empty1 [simp]: "disjnt {} A" and disjnt_empty2 [simp]: "disjnt A {}" |
|
1871 by (auto simp: disjnt_def) |
|
1872 |
|
1873 lemma disjnt_insert1 [simp]: "disjnt (insert a X) Y \<longleftrightarrow> a \<notin> Y \<and> disjnt X Y" |
|
1874 by (simp add: disjnt_def) |
|
1875 |
|
1876 lemma disjnt_insert2 [simp]: "disjnt Y (insert a X) \<longleftrightarrow> a \<notin> Y \<and> disjnt Y X" |
|
1877 by (simp add: disjnt_def) |
|
1878 |
|
1879 lemma disjnt_subset1 : "\<lbrakk>disjnt X Y; Z \<subseteq> X\<rbrakk> \<Longrightarrow> disjnt Z Y" |
|
1880 by (auto simp: disjnt_def) |
|
1881 |
|
1882 lemma disjnt_subset2 : "\<lbrakk>disjnt X Y; Z \<subseteq> Y\<rbrakk> \<Longrightarrow> disjnt X Z" |
|
1883 by (auto simp: disjnt_def) |
|
1884 |
1860 |
1885 lemma pairwise_empty [simp]: "pairwise P {}" |
1861 lemma pairwise_empty [simp]: "pairwise P {}" |
1886 by (simp add: pairwise_def) |
1862 by (simp add: pairwise_def) |
1887 |
1863 |
1888 lemma pairwise_singleton [simp]: "pairwise P {A}" |
1864 lemma pairwise_singleton [simp]: "pairwise P {A}" |
1890 |
1866 |
1891 lemma pairwise_insert: |
1867 lemma pairwise_insert: |
1892 "pairwise r (insert x s) \<longleftrightarrow> (\<forall>y. y \<in> s \<and> y \<noteq> x \<longrightarrow> r x y \<and> r y x) \<and> pairwise r s" |
1868 "pairwise r (insert x s) \<longleftrightarrow> (\<forall>y. y \<in> s \<and> y \<noteq> x \<longrightarrow> r x y \<and> r y x) \<and> pairwise r s" |
1893 by (force simp: pairwise_def) |
1869 by (force simp: pairwise_def) |
1894 |
1870 |
|
1871 lemma pairwise_subset: "pairwise P S \<Longrightarrow> T \<subseteq> S \<Longrightarrow> pairwise P T" |
|
1872 by (force simp: pairwise_def) |
|
1873 |
|
1874 lemma pairwise_mono: "\<lbrakk>pairwise P A; \<And>x y. P x y \<Longrightarrow> Q x y\<rbrakk> \<Longrightarrow> pairwise Q A" |
|
1875 by (auto simp: pairwise_def) |
|
1876 |
1895 lemma pairwise_image: "pairwise r (f ` s) \<longleftrightarrow> pairwise (\<lambda>x y. (f x \<noteq> f y) \<longrightarrow> r (f x) (f y)) s" |
1877 lemma pairwise_image: "pairwise r (f ` s) \<longleftrightarrow> pairwise (\<lambda>x y. (f x \<noteq> f y) \<longrightarrow> r (f x) (f y)) s" |
1896 by (force simp: pairwise_def) |
1878 by (force simp: pairwise_def) |
|
1879 |
|
1880 definition disjnt :: "'a set \<Rightarrow> 'a set \<Rightarrow> bool" |
|
1881 where "disjnt A B \<longleftrightarrow> A \<inter> B = {}" |
|
1882 |
|
1883 lemma disjnt_self_iff_empty [simp]: "disjnt S S \<longleftrightarrow> S = {}" |
|
1884 by (auto simp: disjnt_def) |
|
1885 |
|
1886 lemma disjnt_iff: "disjnt A B \<longleftrightarrow> (\<forall>x. \<not> (x \<in> A \<and> x \<in> B))" |
|
1887 by (force simp: disjnt_def) |
|
1888 |
|
1889 lemma disjnt_sym: "disjnt A B \<Longrightarrow> disjnt B A" |
|
1890 using disjnt_iff by blast |
|
1891 |
|
1892 lemma disjnt_empty1 [simp]: "disjnt {} A" and disjnt_empty2 [simp]: "disjnt A {}" |
|
1893 by (auto simp: disjnt_def) |
|
1894 |
|
1895 lemma disjnt_insert1 [simp]: "disjnt (insert a X) Y \<longleftrightarrow> a \<notin> Y \<and> disjnt X Y" |
|
1896 by (simp add: disjnt_def) |
|
1897 |
|
1898 lemma disjnt_insert2 [simp]: "disjnt Y (insert a X) \<longleftrightarrow> a \<notin> Y \<and> disjnt Y X" |
|
1899 by (simp add: disjnt_def) |
|
1900 |
|
1901 lemma disjnt_subset1 : "\<lbrakk>disjnt X Y; Z \<subseteq> X\<rbrakk> \<Longrightarrow> disjnt Z Y" |
|
1902 by (auto simp: disjnt_def) |
|
1903 |
|
1904 lemma disjnt_subset2 : "\<lbrakk>disjnt X Y; Z \<subseteq> Y\<rbrakk> \<Longrightarrow> disjnt X Z" |
|
1905 by (auto simp: disjnt_def) |
1897 |
1906 |
1898 lemma disjoint_image_subset: "\<lbrakk>pairwise disjnt \<A>; \<And>X. X \<in> \<A> \<Longrightarrow> f X \<subseteq> X\<rbrakk> \<Longrightarrow> pairwise disjnt (f `\<A>)" |
1907 lemma disjoint_image_subset: "\<lbrakk>pairwise disjnt \<A>; \<And>X. X \<in> \<A> \<Longrightarrow> f X \<subseteq> X\<rbrakk> \<Longrightarrow> pairwise disjnt (f `\<A>)" |
1899 unfolding disjnt_def pairwise_def by fast |
1908 unfolding disjnt_def pairwise_def by fast |
1900 |
1909 |
1901 lemma Int_emptyI: "(\<And>x. x \<in> A \<Longrightarrow> x \<in> B \<Longrightarrow> False) \<Longrightarrow> A \<inter> B = {}" |
1910 lemma Int_emptyI: "(\<And>x. x \<in> A \<Longrightarrow> x \<in> B \<Longrightarrow> False) \<Longrightarrow> A \<inter> B = {}" |