equal
deleted
inserted
replaced
254 by (rtac sym 5); |
254 by (rtac sym 5); |
255 by (REPEAT (ares_tac [congt] 1 |
255 by (REPEAT (ares_tac [congt] 1 |
256 ORELSE etac (equivA RS equiv_type RS subsetD RS SigmaE2) 1)); |
256 ORELSE etac (equivA RS equiv_type RS subsetD RS SigmaE2) 1)); |
257 qed "congruent2_commuteI"; |
257 qed "congruent2_commuteI"; |
258 |
258 |
|
259 |
|
260 (*** Cardinality results suggested by Florian Kammüller ***) |
|
261 |
|
262 (*Recall that equiv A r implies r <= A Times A (equiv_type) *) |
|
263 goal thy "!!A. [| finite A; r <= A Times A |] ==> finite (A/r)"; |
|
264 by (rtac finite_subset 1); |
|
265 by (etac (finite_Pow_iff RS iffD2) 2); |
|
266 by (rewrite_goals_tac [quotient_def]); |
|
267 by (Blast_tac 1); |
|
268 qed "finite_quotient"; |
|
269 |
|
270 goalw thy [quotient_def] |
|
271 "!!A. [| finite A; r <= A Times A; X : A/r |] ==> finite X"; |
|
272 by (rtac finite_subset 1); |
|
273 ba 2; |
|
274 by (Blast_tac 1); |
|
275 qed "finite_equiv_class"; |
|
276 |
|
277 goal thy "!!A. [| finite A; equiv A r; ! X : A/r. k dvd card(X) |] \ |
|
278 \ ==> k dvd card(A)"; |
|
279 by (rtac (Union_quotient RS subst) 1); |
|
280 by (assume_tac 1); |
|
281 by (rtac dvd_partition 1); |
|
282 by (blast_tac (!claset delrules [equalityI] addEs [quotient_disj RS disjE]) 4); |
|
283 by (ALLGOALS |
|
284 (asm_simp_tac (!simpset addsimps [Union_quotient, equiv_type, |
|
285 finite_quotient]))); |
|
286 qed "equiv_imp_dvd_card"; |