src/HOL/Arith.ML
changeset 3724 f33e301a89f5
parent 3718 d78cf498a88c
child 3842 b55686a7b22c
equal deleted inserted replaced
3723:034f0f5ca43f 3724:f33e301a89f5
   401 by (simp_tac (!simpset addsimps [diff_add_assoc]) 1);
   401 by (simp_tac (!simpset addsimps [diff_add_assoc]) 1);
   402 qed "diff_add_inverse2";
   402 qed "diff_add_inverse2";
   403 Addsimps [diff_add_inverse2];
   403 Addsimps [diff_add_inverse2];
   404 
   404 
   405 goal Arith.thy "!!i j k::nat. i<=j ==> (j-i=k) = (j=k+i)";
   405 goal Arith.thy "!!i j k::nat. i<=j ==> (j-i=k) = (j=k+i)";
   406 by (Step_tac 1);
   406 by Safe_tac;
   407 by (ALLGOALS Asm_simp_tac);
   407 by (ALLGOALS Asm_simp_tac);
   408 qed "le_imp_diff_is_add";
   408 qed "le_imp_diff_is_add";
   409 
   409 
   410 val [prem] = goal Arith.thy "m < Suc(n) ==> m-n = 0";
   410 val [prem] = goal Arith.thy "m < Suc(n) ==> m-n = 0";
   411 by (rtac (prem RS rev_mp) 1);
   411 by (rtac (prem RS rev_mp) 1);
   544 qed "mult_less_cancel1";
   544 qed "mult_less_cancel1";
   545 Addsimps [mult_less_cancel1, mult_less_cancel2];
   545 Addsimps [mult_less_cancel1, mult_less_cancel2];
   546 
   546 
   547 goal Arith.thy "!!k. 0<k ==> (m*k = n*k) = (m=n)";
   547 goal Arith.thy "!!k. 0<k ==> (m*k = n*k) = (m=n)";
   548 by (cut_facts_tac [less_linear] 1);
   548 by (cut_facts_tac [less_linear] 1);
   549 by (Step_tac 1);
   549 by Safe_tac;
   550 by (assume_tac 2);
   550 by (assume_tac 2);
   551 by (ALLGOALS (dtac mult_less_mono1 THEN' assume_tac));
   551 by (ALLGOALS (dtac mult_less_mono1 THEN' assume_tac));
   552 by (ALLGOALS Asm_full_simp_tac);
   552 by (ALLGOALS Asm_full_simp_tac);
   553 qed "mult_cancel2";
   553 qed "mult_cancel2";
   554 
   554