src/HOL/Integ/IntDef.ML
changeset 10647 a4529a251b6f
parent 10558 09a91221ced1
child 10797 028d22926a41
equal deleted inserted replaced
10646:37b9897dbf3a 10647:a4529a251b6f
   385 
   385 
   386 (* z<z ==> R *)
   386 (* z<z ==> R *)
   387 bind_thm ("zless_irrefl", zless_not_refl RS notE);
   387 bind_thm ("zless_irrefl", zless_not_refl RS notE);
   388 AddSEs [zless_irrefl];
   388 AddSEs [zless_irrefl];
   389 
   389 
   390 Goal "z<w ==> w ~= (z::int)";
       
   391 by (Blast_tac 1);
       
   392 qed "zless_not_refl2";
       
   393 
       
   394 (* s < t ==> s ~= t *)
       
   395 bind_thm ("zless_not_refl3", zless_not_refl2 RS not_sym);
       
   396 
       
   397 
   390 
   398 (*"Less than" is a linear ordering*)
   391 (*"Less than" is a linear ordering*)
   399 Goalw [zless_def, neg_def, zdiff_def] 
   392 Goalw [zless_def, neg_def, zdiff_def] 
   400     "z<w | z=w | w<(z::int)";
   393     "z<w | z=w | w<(z::int)";
   401 by (res_inst_tac [("z","z")] eq_Abs_Integ 1);
   394 by (res_inst_tac [("z","z")] eq_Abs_Integ 1);
   450 
   443 
   451 Goal "w <= (w::int)";
   444 Goal "w <= (w::int)";
   452 by (simp_tac (simpset() addsimps [int_le_less]) 1);
   445 by (simp_tac (simpset() addsimps [int_le_less]) 1);
   453 qed "zle_refl";
   446 qed "zle_refl";
   454 
   447 
   455 Goalw [zle_def] "z < w ==> z <= (w::int)";
       
   456 by (blast_tac (claset() addEs [zless_asym]) 1);
       
   457 qed "zless_imp_zle";
       
   458 
       
   459 (* Axiom 'linorder_linear' of class 'linorder': *)
   448 (* Axiom 'linorder_linear' of class 'linorder': *)
   460 Goal "(z::int) <= w | w <= z";
   449 Goal "(z::int) <= w | w <= z";
   461 by (simp_tac (simpset() addsimps [int_le_less]) 1);
   450 by (simp_tac (simpset() addsimps [int_le_less]) 1);
   462 by (cut_facts_tac [zless_linear] 1);
   451 by (cut_facts_tac [zless_linear] 1);
   463 by (Blast_tac 1);
   452 by (Blast_tac 1);
   464 qed "zle_linear";
   453 qed "zle_linear";
   465 
   454 
   466 Goal "[| i <= j; j < k |] ==> i < (k::int)";
   455 (* Axiom 'order_trans of class 'order': *)
   467 by (dtac zle_imp_zless_or_eq 1);
       
   468 by (blast_tac (claset() addIs [zless_trans]) 1);
       
   469 qed "zle_zless_trans";
       
   470 
       
   471 Goal "[| i < j; j <= k |] ==> i < (k::int)";
       
   472 by (dtac zle_imp_zless_or_eq 1);
       
   473 by (blast_tac (claset() addIs [zless_trans]) 1);
       
   474 qed "zless_zle_trans";
       
   475 
       
   476 Goal "[| i <= j; j <= k |] ==> i <= (k::int)";
   456 Goal "[| i <= j; j <= k |] ==> i <= (k::int)";
   477 by (EVERY1 [dtac zle_imp_zless_or_eq, dtac zle_imp_zless_or_eq,
   457 by (EVERY1 [dtac zle_imp_zless_or_eq, dtac zle_imp_zless_or_eq,
   478             rtac zless_or_eq_imp_zle, 
   458             rtac zless_or_eq_imp_zle, 
   479 	    blast_tac (claset() addIs [zless_trans])]);
   459 	    blast_tac (claset() addIs [zless_trans])]);
   480 qed "zle_trans";
   460 qed "zle_trans";
   487 (* Axiom 'order_less_le' of class 'order': *)
   467 (* Axiom 'order_less_le' of class 'order': *)
   488 Goal "(w::int) < z = (w <= z & w ~= z)";
   468 Goal "(w::int) < z = (w <= z & w ~= z)";
   489 by (simp_tac (simpset() addsimps [zle_def, int_neq_iff]) 1);
   469 by (simp_tac (simpset() addsimps [zle_def, int_neq_iff]) 1);
   490 by (blast_tac (claset() addSEs [zless_asym]) 1);
   470 by (blast_tac (claset() addSEs [zless_asym]) 1);
   491 qed "int_less_le";
   471 qed "int_less_le";
   492 
       
   493 (* [| w <= z; w ~= z |] ==> w < z *)
       
   494 bind_thm ("zle_neq_implies_zless", [int_less_le, conjI] MRS iffD2);
       
   495 
       
   496 
   472 
   497 
   473 
   498 (*** Subtraction laws ***)
   474 (*** Subtraction laws ***)
   499 
   475 
   500 Goal "x + (y - z) = (x + y) - (z::int)";
   476 Goal "x + (y - z) = (x + y) - (z::int)";