157 lemma quotient_diff1: |
157 lemma quotient_diff1: |
158 "\<lbrakk> inj_on (%a. {a}//r) A; a \<in> A \<rbrakk> \<Longrightarrow> (A - {a})//r = A//r - {a}//r" |
158 "\<lbrakk> inj_on (%a. {a}//r) A; a \<in> A \<rbrakk> \<Longrightarrow> (A - {a})//r = A//r - {a}//r" |
159 apply(simp add:quotient_def inj_on_def) |
159 apply(simp add:quotient_def inj_on_def) |
160 apply blast |
160 apply blast |
161 done |
161 done |
|
162 |
|
163 subsection {* Refinement of one equivalence relation WRT another *} |
|
164 |
|
165 lemma refines_equiv_class_eq: |
|
166 "\<lbrakk>R \<subseteq> S; equiv A R; equiv A S\<rbrakk> \<Longrightarrow> R``(S``{a}) = S``{a}" |
|
167 by (auto simp: equiv_class_eq_iff) |
|
168 |
|
169 lemma refines_equiv_class_eq2: |
|
170 "\<lbrakk>R \<subseteq> S; equiv A R; equiv A S\<rbrakk> \<Longrightarrow> S``(R``{a}) = S``{a}" |
|
171 by (auto simp: equiv_class_eq_iff) |
|
172 |
|
173 lemma refines_equiv_image_eq: |
|
174 "\<lbrakk>R \<subseteq> S; equiv A R; equiv A S\<rbrakk> \<Longrightarrow> (\<lambda>X. S``X) ` (A//R) = A//S" |
|
175 by (auto simp: quotient_def image_UN refines_equiv_class_eq2) |
|
176 |
|
177 lemma finite_refines_finite: |
|
178 "\<lbrakk>finite (A//R); R \<subseteq> S; equiv A R; equiv A S\<rbrakk> \<Longrightarrow> finite (A//S)" |
|
179 apply (erule finite_surj [where f = "\<lambda>X. S``X"]) |
|
180 apply (simp add: refines_equiv_image_eq) |
|
181 done |
|
182 |
|
183 lemma finite_refines_card_le: |
|
184 "\<lbrakk>finite (A//R); R \<subseteq> S; equiv A R; equiv A S\<rbrakk> \<Longrightarrow> card (A//S) \<le> card (A//R)" |
|
185 apply (subst refines_equiv_image_eq [of R S A, symmetric]) |
|
186 apply (auto simp: card_image_le [where f = "\<lambda>X. S``X"]) |
|
187 done |
162 |
188 |
163 |
189 |
164 subsection {* Defining unary operations upon equivalence classes *} |
190 subsection {* Defining unary operations upon equivalence classes *} |
165 |
191 |
166 text{*A congruence-preserving function*} |
192 text{*A congruence-preserving function*} |