src/HOL/Set.thy
changeset 66802 627511c13164
parent 63959 f77dca1abf1b
child 67051 e7e54a0b9197
equal deleted inserted replaced
66801:f3fda9777f9a 66802:627511c13164
  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 = {}"