equal
deleted
inserted
replaced
309 done |
309 done |
310 |
310 |
311 lemma add_lt_elim1: "[| k#+m < k#+n; m \<in> nat; n \<in> nat |] ==> m < n" |
311 lemma add_lt_elim1: "[| k#+m < k#+n; m \<in> nat; n \<in> nat |] ==> m < n" |
312 by (drule add_lt_elim1_natify, auto) |
312 by (drule add_lt_elim1_natify, auto) |
313 |
313 |
314 lemma zero_less_add: "[| n \<in> nat; m \<in> nat |] ==> 0 < m #+ n <-> (0<m | 0<n)" |
314 lemma zero_less_add: "[| n \<in> nat; m \<in> nat |] ==> 0 < m #+ n \<longleftrightarrow> (0<m | 0<n)" |
315 by (induct_tac "n", auto) |
315 by (induct_tac "n", auto) |
316 |
316 |
317 |
317 |
318 subsection{*Monotonicity of Addition*} |
318 subsection{*Monotonicity of Addition*} |
319 |
319 |
439 by (rule_tac m="natify(i)" and n="natify(j)" in diff_induct, auto) |
439 by (rule_tac m="natify(i)" and n="natify(j)" in diff_induct, auto) |
440 |
440 |
441 |
441 |
442 (** Lemmas for the CancelNumerals simproc **) |
442 (** Lemmas for the CancelNumerals simproc **) |
443 |
443 |
444 lemma eq_add_iff: "(u #+ m = u #+ n) <-> (0 #+ m = natify(n))" |
444 lemma eq_add_iff: "(u #+ m = u #+ n) \<longleftrightarrow> (0 #+ m = natify(n))" |
445 apply auto |
445 apply auto |
446 apply (blast dest: add_left_cancel_natify) |
446 apply (blast dest: add_left_cancel_natify) |
447 apply (simp add: add_def) |
447 apply (simp add: add_def) |
448 done |
448 done |
449 |
449 |
450 lemma less_add_iff: "(u #+ m < u #+ n) <-> (0 #+ m < natify(n))" |
450 lemma less_add_iff: "(u #+ m < u #+ n) \<longleftrightarrow> (0 #+ m < natify(n))" |
451 apply (auto simp add: add_lt_elim1_natify) |
451 apply (auto simp add: add_lt_elim1_natify) |
452 apply (drule add_lt_mono1) |
452 apply (drule add_lt_mono1) |
453 apply (auto simp add: add_commute [of u]) |
453 apply (auto simp add: add_commute [of u]) |
454 done |
454 done |
455 |
455 |
458 |
458 |
459 (*To tidy up the result of a simproc. Only the RHS will be simplified.*) |
459 (*To tidy up the result of a simproc. Only the RHS will be simplified.*) |
460 lemma eq_cong2: "u = u' ==> (t==u) == (t==u')" |
460 lemma eq_cong2: "u = u' ==> (t==u) == (t==u')" |
461 by auto |
461 by auto |
462 |
462 |
463 lemma iff_cong2: "u <-> u' ==> (t==u) == (t==u')" |
463 lemma iff_cong2: "u \<longleftrightarrow> u' ==> (t==u) == (t==u')" |
464 by auto |
464 by auto |
465 |
465 |
466 |
466 |
467 subsection{*Multiplication*} |
467 subsection{*Multiplication*} |
468 |
468 |
541 lemmas mult_ac = mult_assoc mult_commute mult_left_commute |
541 lemmas mult_ac = mult_assoc mult_commute mult_left_commute |
542 |
542 |
543 |
543 |
544 lemma lt_succ_eq_0_disj: |
544 lemma lt_succ_eq_0_disj: |
545 "[| m\<in>nat; n\<in>nat |] |
545 "[| m\<in>nat; n\<in>nat |] |
546 ==> (m < succ(n)) <-> (m = 0 | (\<exists>j\<in>nat. m = succ(j) & j < n))" |
546 ==> (m < succ(n)) \<longleftrightarrow> (m = 0 | (\<exists>j\<in>nat. m = succ(j) & j < n))" |
547 by (induct_tac "m", auto) |
547 by (induct_tac "m", auto) |
548 |
548 |
549 lemma less_diff_conv [rule_format]: |
549 lemma less_diff_conv [rule_format]: |
550 "[| j\<in>nat; k\<in>nat |] ==> \<forall>i\<in>nat. (i < j #- k) <-> (i #+ k < j)" |
550 "[| j\<in>nat; k\<in>nat |] ==> \<forall>i\<in>nat. (i < j #- k) \<longleftrightarrow> (i #+ k < j)" |
551 by (erule_tac m = k in diff_induct, auto) |
551 by (erule_tac m = k in diff_induct, auto) |
552 |
552 |
553 lemmas nat_typechecks = rec_type nat_0I nat_1I nat_succI Ord_nat |
553 lemmas nat_typechecks = rec_type nat_0I nat_1I nat_succI Ord_nat |
554 |
554 |
555 end |
555 end |