src/ZF/Arith.thy
changeset 46821 ff6b0c1087f2
parent 46820 c656222c4dc1
child 58860 fee7cfa69c50
equal deleted inserted replaced
46820:c656222c4dc1 46821:ff6b0c1087f2
   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