src/HOL/Divides.ML
changeset 7082 f444e632cdf5
parent 7059 71e9ea2198e0
child 7493 e6f74eebfab3
equal deleted inserted replaced
7081:00a0c20c81ae 7082:f444e632cdf5
   121 by (asm_simp_tac (simpset() addsimps [mod_less]) 1);
   121 by (asm_simp_tac (simpset() addsimps [mod_less]) 1);
   122 by (rename_tac "k" 1);
   122 by (rename_tac "k" 1);
   123 by (cut_inst_tac [("m","k*n"),("n","n")] mod_add_self2 1);
   123 by (cut_inst_tac [("m","k*n"),("n","n")] mod_add_self2 1);
   124 by (asm_full_simp_tac (simpset() addsimps [add_commute]) 1);
   124 by (asm_full_simp_tac (simpset() addsimps [add_commute]) 1);
   125 qed "mod_mult_self_is_0";
   125 qed "mod_mult_self_is_0";
   126 Addsimps [mod_mult_self_is_0];
   126 
       
   127 Goal "(n*m) mod n = 0";
       
   128 by (simp_tac (simpset() addsimps [mult_commute, mod_mult_self_is_0]) 1);
       
   129 qed "mod_mult_self1_is_0";
       
   130 Addsimps [mod_mult_self_is_0, mod_mult_self1_is_0];
   127 
   131 
   128 
   132 
   129 (*** Quotient ***)
   133 (*** Quotient ***)
   130 
   134 
   131 Goal "m<n ==> m div n = 0";
   135 Goal "m<n ==> m div n = 0";
   349 
   353 
   350 Goal "0<n ==> (m*n) div n = m";
   354 Goal "0<n ==> (m*n) div n = m";
   351 by (cut_inst_tac [("m", "m*n"),("n","n")] mod_div_equality 1);
   355 by (cut_inst_tac [("m", "m*n"),("n","n")] mod_div_equality 1);
   352 by (asm_full_simp_tac (simpset() addsimps [mod_mult_self_is_0]) 1);
   356 by (asm_full_simp_tac (simpset() addsimps [mod_mult_self_is_0]) 1);
   353 qed "div_mult_self_is_m";
   357 qed "div_mult_self_is_m";
   354 Addsimps [div_mult_self_is_m];
   358 
       
   359 Goal "0<n ==> (n*m) div n = m";
       
   360 by (asm_simp_tac (simpset() addsimps [mult_commute, div_mult_self_is_m]) 1);
       
   361 qed "div_mult_self1_is_m";
       
   362 Addsimps [div_mult_self_is_m, div_mult_self1_is_m];
   355 
   363 
   356 (*Cancellation law for division*)
   364 (*Cancellation law for division*)
   357 Goal "0<k ==> (k*m) div (k*n) = m div n";
   365 Goal "0<k ==> (k*m) div (k*n) = m div n";
   358 by (div_undefined_case_tac "n=0" 1);
   366 by (div_undefined_case_tac "n=0" 1);
   359 by (res_inst_tac [("n","m")] less_induct 1);
   367 by (res_inst_tac [("n","m")] less_induct 1);