src/HOL/Integ/NatBin.ML
changeset 7519 8e4a21d1ba4f
parent 7127 48e235179ffb
child 7625 94b2a50e69a5
equal deleted inserted replaced
7518:67bde103ec0c 7519:8e4a21d1ba4f
   243 by (simp_tac
   243 by (simp_tac
   244     (simpset_of Int.thy addsimps [neg_nat, not_neg_eq_ge_0, nat_number_of_def, 
   244     (simpset_of Int.thy addsimps [neg_nat, not_neg_eq_ge_0, nat_number_of_def, 
   245 				  nat_less_eq_zless, less_number_of_eq_neg,
   245 				  nat_less_eq_zless, less_number_of_eq_neg,
   246 				  nat_0]) 1);
   246 				  nat_0]) 1);
   247 by (simp_tac (simpset_of Int.thy addsimps [neg_eq_less_int0, zminus_zless, 
   247 by (simp_tac (simpset_of Int.thy addsimps [neg_eq_less_int0, zminus_zless, 
   248 				    number_of_minus, zless_zero_nat]) 1);
   248 				number_of_minus, zless_nat_eq_int_zless]) 1);
   249 qed "less_nat_number_of";
   249 qed "less_nat_number_of";
   250 
   250 
   251 Addsimps [less_nat_number_of];
   251 Addsimps [less_nat_number_of];
   252 
   252 
   253 
   253 
   378 
   378 
   379 (*binomial_0_Suc doesn't work well on numerals*)
   379 (*binomial_0_Suc doesn't work well on numerals*)
   380 Addsimps (map (rename_numerals thy) 
   380 Addsimps (map (rename_numerals thy) 
   381 	  [binomial_n_0, binomial_zero, binomial_1]);
   381 	  [binomial_n_0, binomial_zero, binomial_1]);
   382 
   382 
       
   383 
       
   384 (*** Comparisons involving 0 ***)
       
   385 
       
   386 Goal "(number_of v = 0) = \
       
   387 \     (if neg (number_of v) then True else iszero (number_of v))";
       
   388 by (simp_tac (simpset() addsimps [numeral_0_eq_0 RS sym]) 1);
       
   389 qed "eq_number_of_0";
       
   390 
       
   391 Goal "(0 = number_of v) = \
       
   392 \     (if neg (number_of v) then True else iszero (number_of v))";
       
   393 by (rtac ([eq_sym_conv, eq_number_of_0] MRS trans) 1);
       
   394 qed "eq_0_number_of";
       
   395 
       
   396 Goal "(0 < number_of v) = neg (number_of (bin_minus v))";
       
   397 by (simp_tac (simpset() addsimps [numeral_0_eq_0 RS sym]) 1);
       
   398 qed "less_0_number_of";
       
   399 
       
   400 (*Simplification already handles n<0, n<=0 and 0<=n.*)
       
   401 Addsimps [eq_number_of_0, eq_0_number_of, less_0_number_of];
       
   402 
       
   403 
       
   404 (*** Comparisons involving Suc ***)
       
   405 
       
   406 Goal "(number_of v = Suc n) = \
       
   407 \       (let pv = number_of (bin_pred v) in \
       
   408 \        if neg pv then False else nat pv = n)";
       
   409 by (simp_tac
       
   410     (simpset_of Int.thy addsimps
       
   411       [Let_def, neg_eq_less_0, linorder_not_less, number_of_pred,
       
   412        nat_number_of_def, zadd_0]@zadd_ac@zcompare_rls) 1);
       
   413 by (res_inst_tac [("x", "number_of v")] spec 1);
       
   414 by (auto_tac (claset(),
       
   415 	      simpset() addsimps [nat_eq_iff]@zcompare_rls));
       
   416 qed "eq_number_of_Suc";
       
   417 
       
   418 Goal "(Suc n = number_of v) = \
       
   419 \       (let pv = number_of (bin_pred v) in \
       
   420 \        if neg pv then False else nat pv = n)";
       
   421 by (rtac ([eq_sym_conv, eq_number_of_Suc] MRS trans) 1);
       
   422 qed "Suc_eq_number_of";
       
   423 
       
   424 Goal "(number_of v < Suc n) = \
       
   425 \       (let pv = number_of (bin_pred v) in \
       
   426 \        if neg pv then True else nat pv < n)";
       
   427 by (simp_tac
       
   428     (simpset_of Int.thy addsimps
       
   429       [Let_def, neg_eq_less_0, linorder_not_less, number_of_pred,
       
   430        nat_number_of_def, zadd_0]@zadd_ac@zcompare_rls) 1);
       
   431 by (res_inst_tac [("x", "number_of v")] spec 1);
       
   432 by (auto_tac (claset(),
       
   433 	      simpset() addsimps [nat_less_iff]@zcompare_rls));
       
   434 qed "less_number_of_Suc";
       
   435 
       
   436 Goal "(Suc n < number_of v) = \
       
   437 \       (let pv = number_of (bin_pred v) in \
       
   438 \        if neg pv then False else n < nat pv)";
       
   439 by (simp_tac
       
   440     (simpset_of Int.thy addsimps
       
   441       [Let_def, neg_eq_less_0, linorder_not_less, number_of_pred,
       
   442        nat_number_of_def, zadd_0]@zadd_ac@zcompare_rls) 1);
       
   443 by (res_inst_tac [("x", "number_of v")] spec 1);
       
   444 by (auto_tac (claset(),
       
   445 	      simpset() addsimps [zless_nat_eq_int_zless]@zcompare_rls));
       
   446 qed "less_Suc_number_of";
       
   447 
       
   448 Goal "(number_of v <= Suc n) = \
       
   449 \       (let pv = number_of (bin_pred v) in \
       
   450 \        if neg pv then True else nat pv <= n)";
       
   451 by (simp_tac
       
   452     (simpset_of Int.thy addsimps
       
   453       [Let_def, less_Suc_number_of, linorder_not_less RS sym]) 1);
       
   454 qed "le_number_of_Suc";
       
   455 
       
   456 Goal "(Suc n <= number_of v) = \
       
   457 \       (let pv = number_of (bin_pred v) in \
       
   458 \        if neg pv then False else n <= nat pv)";
       
   459 by (simp_tac
       
   460     (simpset_of Int.thy addsimps
       
   461       [Let_def, less_number_of_Suc, linorder_not_less RS sym]) 1);
       
   462 qed "le_Suc_number_of";
       
   463 
       
   464 Addsimps [eq_number_of_Suc, Suc_eq_number_of, 
       
   465 	  less_number_of_Suc, less_Suc_number_of, 
       
   466 	  le_number_of_Suc, le_Suc_number_of];