src/HOL/Library/Disjoint_Sets.thy
changeset 62843 313d3b697c9a
parent 62390 842917225d56
child 63098 56f03591898b
child 63099 af0e964aad7b
equal deleted inserted replaced
62842:db9f95ca2a8f 62843:313d3b697c9a
    20 lemma mono_Un: "mono A \<Longrightarrow> (\<Union>i\<le>n. A i) = A n"
    20 lemma mono_Un: "mono A \<Longrightarrow> (\<Union>i\<le>n. A i) = A n"
    21   unfolding mono_def by auto
    21   unfolding mono_def by auto
    22 
    22 
    23 subsection \<open>Set of Disjoint Sets\<close>
    23 subsection \<open>Set of Disjoint Sets\<close>
    24 
    24 
    25 definition "disjoint A \<longleftrightarrow> (\<forall>a\<in>A. \<forall>b\<in>A. a \<noteq> b \<longrightarrow> a \<inter> b = {})"
    25 abbreviation disjoint :: "'a set set \<Rightarrow> bool" where "disjoint \<equiv> pairwise disjnt"
       
    26 
       
    27 lemma disjoint_def: "disjoint A \<longleftrightarrow> (\<forall>a\<in>A. \<forall>b\<in>A. a \<noteq> b \<longrightarrow> a \<inter> b = {})"
       
    28   unfolding pairwise_def disjnt_def by auto
    26 
    29 
    27 lemma disjointI:
    30 lemma disjointI:
    28   "(\<And>a b. a \<in> A \<Longrightarrow> b \<in> A \<Longrightarrow> a \<noteq> b \<Longrightarrow> a \<inter> b = {}) \<Longrightarrow> disjoint A"
    31   "(\<And>a b. a \<in> A \<Longrightarrow> b \<in> A \<Longrightarrow> a \<noteq> b \<Longrightarrow> a \<inter> b = {}) \<Longrightarrow> disjoint A"
    29   unfolding disjoint_def by auto
    32   unfolding disjoint_def by auto
    30 
    33 
    31 lemma disjointD:
    34 lemma disjointD:
    32   "disjoint A \<Longrightarrow> a \<in> A \<Longrightarrow> b \<in> A \<Longrightarrow> a \<noteq> b \<Longrightarrow> a \<inter> b = {}"
    35   "disjoint A \<Longrightarrow> a \<in> A \<Longrightarrow> b \<in> A \<Longrightarrow> a \<noteq> b \<Longrightarrow> a \<inter> b = {}"
    33   unfolding disjoint_def by auto
    36   unfolding disjoint_def by auto
    34 
       
    35 lemma disjoint_empty[iff]: "disjoint {}"
       
    36   by (auto simp: disjoint_def)
       
    37 
    37 
    38 lemma disjoint_INT:
    38 lemma disjoint_INT:
    39   assumes *: "\<And>i. i \<in> I \<Longrightarrow> disjoint (F i)"
    39   assumes *: "\<And>i. i \<in> I \<Longrightarrow> disjoint (F i)"
    40   shows "disjoint {\<Inter>i\<in>I. X i | X. \<forall>i\<in>I. X i \<in> F i}"
    40   shows "disjoint {\<Inter>i\<in>I. X i | X. \<forall>i\<in>I. X i \<in> F i}"
    41 proof (safe intro!: disjointI del: equalityI)
    41 proof (safe intro!: disjointI del: equalityI)
    45   moreover assume "\<forall>i\<in>I. A i \<in> F i" "\<forall>i\<in>I. B i \<in> F i"
    45   moreover assume "\<forall>i\<in>I. A i \<in> F i" "\<forall>i\<in>I. B i \<in> F i"
    46   ultimately show "(\<Inter>i\<in>I. A i) \<inter> (\<Inter>i\<in>I. B i) = {}"
    46   ultimately show "(\<Inter>i\<in>I. A i) \<inter> (\<Inter>i\<in>I. B i) = {}"
    47     using *[OF \<open>i\<in>I\<close>, THEN disjointD, of "A i" "B i"]
    47     using *[OF \<open>i\<in>I\<close>, THEN disjointD, of "A i" "B i"]
    48     by (auto simp: INT_Int_distrib[symmetric])
    48     by (auto simp: INT_Int_distrib[symmetric])
    49 qed
    49 qed
    50 
       
    51 lemma disjoint_singleton[simp]: "disjoint {A}"
       
    52   by(simp add: disjoint_def)
       
    53 
    50 
    54 subsubsection "Family of Disjoint Sets"
    51 subsubsection "Family of Disjoint Sets"
    55 
    52 
    56 definition disjoint_family_on :: "('i \<Rightarrow> 'a set) \<Rightarrow> 'i set \<Rightarrow> bool" where
    53 definition disjoint_family_on :: "('i \<Rightarrow> 'a set) \<Rightarrow> 'i set \<Rightarrow> bool" where
    57   "disjoint_family_on A S \<longleftrightarrow> (\<forall>m\<in>S. \<forall>n\<in>S. m \<noteq> n \<longrightarrow> A m \<inter> A n = {})"
    54   "disjoint_family_on A S \<longleftrightarrow> (\<forall>m\<in>S. \<forall>n\<in>S. m \<noteq> n \<longrightarrow> A m \<inter> A n = {})"