src/HOL/Integ/Equiv.ML
changeset 3374 182a2b76d19e
parent 3358 13f1df323daf
child 3427 e7cef2081106
equal deleted inserted replaced
3373:b19b1456cc78 3374:182a2b76d19e
   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";