src/HOL/Divides.ML
changeset 9881 d9ea690001ce
parent 9870 2374ba026fc6
child 9912 4b02467a4412
equal deleted inserted replaced
9880:3b63a8dd56e3 9881:d9ea690001ce
   419 by (subgoal_tac "k dvd ((m div n)*n + m mod n)" 1);
   419 by (subgoal_tac "k dvd ((m div n)*n + m mod n)" 1);
   420 by (asm_simp_tac (simpset() addsimps [dvd_add, dvd_mult]) 2);
   420 by (asm_simp_tac (simpset() addsimps [dvd_add, dvd_mult]) 2);
   421 by (asm_full_simp_tac (simpset() addsimps [mod_div_equality]) 1);
   421 by (asm_full_simp_tac (simpset() addsimps [mod_div_equality]) 1);
   422 qed "dvd_mod_imp_dvd";
   422 qed "dvd_mod_imp_dvd";
   423 
   423 
       
   424 Goalw [dvd_def] "!!n::nat. [| f dvd m; f dvd n |] ==> f dvd (m mod n)";
       
   425 by (div_undefined_case_tac "n=0" 1);
       
   426 by (Clarify_tac 1);
       
   427 by (Full_simp_tac 1);
       
   428 by (rename_tac "j" 1);
       
   429 by (res_inst_tac 
       
   430     [("x", "(((k div j)*j + k mod j) - ((f*k) div (f*j)) * j)")] 
       
   431     exI 1);
       
   432 by (asm_simp_tac
       
   433     (simpset() addsimps [diff_mult_distrib2, mod_mult_distrib2 RS sym, 
       
   434 			 add_mult_distrib2]) 1);
       
   435 qed "dvd_mod";
       
   436 
       
   437 Goal "k dvd n ==> (k::nat) dvd (m mod n) = k dvd m";
       
   438 by (blast_tac (claset() addIs [dvd_mod_imp_dvd, dvd_mod]) 1); 
       
   439 qed "dvd_mod_iff";
       
   440 
   424 Goalw [dvd_def]  "!!k::nat. [| (k*m) dvd (k*n); 0<k |] ==> m dvd n";
   441 Goalw [dvd_def]  "!!k::nat. [| (k*m) dvd (k*n); 0<k |] ==> m dvd n";
   425 by (etac exE 1);
   442 by (etac exE 1);
   426 by (asm_full_simp_tac (simpset() addsimps mult_ac) 1);
   443 by (asm_full_simp_tac (simpset() addsimps mult_ac) 1);
   427 qed "dvd_mult_cancel";
   444 qed "dvd_mult_cancel";
   428 
   445