equal
deleted
inserted
replaced
381 |
381 |
382 Goal "(Suc m <= n) = (m < n)"; |
382 Goal "(Suc m <= n) = (m < n)"; |
383 by (blast_tac (claset() addIs [Suc_leI, Suc_le_lessD]) 1); |
383 by (blast_tac (claset() addIs [Suc_leI, Suc_le_lessD]) 1); |
384 qed "Suc_le_eq"; |
384 qed "Suc_le_eq"; |
385 |
385 |
386 (*For instance, (Suc m < Suc n) = (Suc m <= n) = (m<n) *) |
|
387 val le_simps = [less_Suc_eq_le, Suc_le_eq]; |
|
388 |
|
389 |
|
390 Goalw [le_def] "m <= n ==> m <= Suc n"; |
386 Goalw [le_def] "m <= n ==> m <= Suc n"; |
391 by (blast_tac (claset() addDs [Suc_lessD]) 1); |
387 by (blast_tac (claset() addDs [Suc_lessD]) 1); |
392 qed "le_SucI"; |
388 qed "le_SucI"; |
393 Addsimps[le_SucI]; |
389 Addsimps[le_SucI]; |
394 |
390 |
396 |
392 |
397 Goalw [le_def] "m < n ==> m <= (n::nat)"; |
393 Goalw [le_def] "m < n ==> m <= (n::nat)"; |
398 by (blast_tac (claset() addEs [less_asym]) 1); |
394 by (blast_tac (claset() addEs [less_asym]) 1); |
399 qed "less_imp_le"; |
395 qed "less_imp_le"; |
400 |
396 |
|
397 (*For instance, (Suc m < Suc n) = (Suc m <= n) = (m<n) *) |
|
398 val le_simps = [less_imp_le, less_Suc_eq_le, Suc_le_eq]; |
|
399 |
401 |
400 |
402 (** Equivalence of m<=n and m<n | m=n **) |
401 (** Equivalence of m<=n and m<n | m=n **) |
403 |
402 |
404 Goalw [le_def] "m <= n ==> m < n | m=(n::nat)"; |
403 Goalw [le_def] "m <= n ==> m < n | m=(n::nat)"; |
405 by (cut_facts_tac [less_linear] 1); |
404 by (cut_facts_tac [less_linear] 1); |
419 bind_thm ("eq_imp_le", disjI2 RS less_or_eq_imp_le); |
418 bind_thm ("eq_imp_le", disjI2 RS less_or_eq_imp_le); |
420 |
419 |
421 Goal "n <= (n::nat)"; |
420 Goal "n <= (n::nat)"; |
422 by (simp_tac (simpset() addsimps [le_eq_less_or_eq]) 1); |
421 by (simp_tac (simpset() addsimps [le_eq_less_or_eq]) 1); |
423 qed "le_refl"; |
422 qed "le_refl"; |
424 AddSIs [le_refl]; |
423 |
425 |
424 AddIffs [le_refl]; |
426 (*Obvious ways of proving m<=n; |
|
427 adding these rules to claset might be risky*) |
|
428 Addsimps [le_refl, less_imp_le]; |
|
429 |
425 |
430 |
426 |
431 Goal "[| i <= j; j < k |] ==> i < (k::nat)"; |
427 Goal "[| i <= j; j < k |] ==> i < (k::nat)"; |
432 by (blast_tac (claset() addSDs [le_imp_less_or_eq] |
428 by (blast_tac (claset() addSDs [le_imp_less_or_eq] |
433 addIs [less_trans]) 1); |
429 addIs [less_trans]) 1); |