src/HOL/Nat.ML
changeset 1817 3994d37b16ae
parent 1786 8a31d85d27b8
child 1823 e1458e1a9f80
equal deleted inserted replaced
1816:b03dba9116d4 1817:3994d37b16ae
   240 goalw Nat.thy [less_def] "~ n<(n::nat)";
   240 goalw Nat.thy [less_def] "~ n<(n::nat)";
   241 by (rtac notI 1);
   241 by (rtac notI 1);
   242 by (etac (wf_pred_nat RS wf_trancl RS wf_irrefl) 1);
   242 by (etac (wf_pred_nat RS wf_trancl RS wf_irrefl) 1);
   243 qed "less_not_refl";
   243 qed "less_not_refl";
   244 
   244 
   245 (* n(n ==> R *)
   245 (* n<n ==> R *)
   246 bind_thm ("less_irrefl", (less_not_refl RS notE));
   246 bind_thm ("less_irrefl", (less_not_refl RS notE));
   247 
   247 
   248 goal Nat.thy "!!m. n<m ==> m ~= (n::nat)";
   248 goal Nat.thy "!!m. n<m ==> m ~= (n::nat)";
   249 by (fast_tac (!claset addEs [less_irrefl]) 1);
   249 by (fast_tac (!claset addEs [less_irrefl]) 1);
   250 qed "less_not_refl2";
   250 qed "less_not_refl2";
   454 
   454 
   455 goalw Nat.thy [le_def] "!!m. Suc(m) <= n ==> m <= n";
   455 goalw Nat.thy [le_def] "!!m. Suc(m) <= n ==> m <= n";
   456 by (asm_full_simp_tac (!simpset addsimps [less_Suc_eq]) 1);
   456 by (asm_full_simp_tac (!simpset addsimps [less_Suc_eq]) 1);
   457 by (Fast_tac 1);
   457 by (Fast_tac 1);
   458 qed "Suc_leD";
   458 qed "Suc_leD";
       
   459 
       
   460 (* stronger version of Suc_leD *)
       
   461 goalw Nat.thy [le_def] 
       
   462         "!!m. Suc m <= n ==> m < n";
       
   463 by (asm_full_simp_tac (!simpset addsimps [less_Suc_eq]) 1);
       
   464 by (cut_facts_tac [less_linear] 1);
       
   465 by (fast_tac HOL_cs 1);
       
   466 qed "Suc_le_lessD";
       
   467 
       
   468 goal Nat.thy "(Suc m <= n) = (m < n)";
       
   469 by (fast_tac (!claset addIs [lessD, Suc_le_lessD]) 1);
       
   470 qed "Suc_le_eq";
   459 
   471 
   460 goalw Nat.thy [le_def] "!!m. m <= n ==> m <= Suc n";
   472 goalw Nat.thy [le_def] "!!m. m <= n ==> m <= Suc n";
   461 by (fast_tac (!claset addDs [Suc_lessD]) 1);
   473 by (fast_tac (!claset addDs [Suc_lessD]) 1);
   462 qed "le_SucI";
   474 qed "le_SucI";
   463 Addsimps[le_SucI];
   475 Addsimps[le_SucI];