equal
deleted
inserted
replaced
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 |