# HG changeset patch # User paulson # Date 893148478 -7200 # Node ID 7a98aa1f9a9da54c8a232a1a1932461283597db8 # Parent d55e2fee208436757fdb490e1236347c906272d5 Renamed mod_XXX_cancel to mod_XXX_self Included their div_ equivalents diff -r d55e2fee2084 -r 7a98aa1f9a9d src/HOL/Divides.ML --- a/src/HOL/Divides.ML Mon Apr 20 10:38:30 1998 +0200 +++ b/src/HOL/Divides.ML Tue Apr 21 10:47:58 1998 +0200 @@ -56,22 +56,22 @@ by (subgoal_tac "(n + m) mod n = (n+m-n) mod n" 1); by (stac (mod_geq RS sym) 2); by (ALLGOALS (asm_full_simp_tac (simpset() addsimps [add_commute]))); -qed "mod_add_cancel2"; +qed "mod_add_self2"; goal thy "!!k. 0 (n+m) mod n = m mod n"; -by (asm_simp_tac (simpset() addsimps [add_commute, mod_add_cancel2]) 1); -qed "mod_add_cancel1"; +by (asm_simp_tac (simpset() addsimps [add_commute, mod_add_self2]) 1); +qed "mod_add_self1"; goal thy "!!n. 0 (m + k*n) mod n = m mod n"; by (induct_tac "k" 1); -by (ALLGOALS (asm_simp_tac (simpset() addsimps (add_ac @ [mod_add_cancel1])))); -qed "mod_mult_cancel1"; +by (ALLGOALS (asm_simp_tac (simpset() addsimps (add_ac @ [mod_add_self1])))); +qed "mod_mult_self1"; goal thy "!!m. 0 (m + n*k) mod n = m mod n"; -by (asm_simp_tac (simpset() addsimps [mult_commute, mod_mult_cancel1]) 1); -qed "mod_mult_cancel2"; +by (asm_simp_tac (simpset() addsimps [mult_commute, mod_mult_self1]) 1); +qed "mod_mult_self2"; -Addsimps [mod_mult_cancel1, mod_mult_cancel2]; +Addsimps [mod_mult_self1, mod_mult_self2]; goal thy "!!k. [| 0 (m mod n)*k = (m*k) mod (n*k)"; by (res_inst_tac [("n","m")] less_induct 1); @@ -92,7 +92,7 @@ goal thy "!!n. 0 m*n mod n = 0"; by (induct_tac "m" 1); by (asm_simp_tac (simpset() addsimps [mod_less]) 1); -by (dres_inst_tac [("m","m*n")] mod_add_cancel2 1); +by (dres_inst_tac [("m","m*n")] mod_add_self2 1); by (asm_full_simp_tac (simpset() addsimps [add_commute]) 1); qed "mod_mult_self_is_0"; Addsimps [mod_mult_self_is_0]; @@ -146,6 +146,29 @@ by (asm_simp_tac (simpset() addsimps [div_less, div_geq]) 1); qed "div_self"; + +goal thy "!!n. 0 (m+n) div n = Suc (m div n)"; +by (subgoal_tac "(n + m) div n = Suc ((n+m-n) div n)" 1); +by (stac (div_geq RS sym) 2); +by (ALLGOALS (asm_full_simp_tac (simpset() addsimps [add_commute]))); +qed "div_add_self2"; + +goal thy "!!k. 0 (n+m) div n = Suc (m div n)"; +by (asm_simp_tac (simpset() addsimps [add_commute, div_add_self2]) 1); +qed "div_add_self1"; + +goal thy "!!n. 0 (m + k*n) div n = k + m div n"; +by (induct_tac "k" 1); +by (ALLGOALS (asm_simp_tac (simpset() addsimps (add_ac @ [div_add_self1])))); +qed "div_mult_self1"; + +goal thy "!!m. 0 (m + n*k) div n = k + m div n"; +by (asm_simp_tac (simpset() addsimps [mult_commute, div_mult_self1]) 1); +qed "div_mult_self2"; + +Addsimps [div_mult_self1, div_mult_self2]; + + (* Monotonicity of div in first argument *) goal thy "!!n. 0 ALL m. m <= n --> (m div k) <= (n div k)"; by (res_inst_tac [("n","n")] less_induct 1);