src/ZF/Arith.thy
changeset 13784 b9f6154427a4
parent 13361 5005d34425bb
child 14060 c0c4af41fa3b
equal deleted inserted replaced
13783:3294f727e20d 13784:b9f6154427a4
   198 done
   198 done
   199 
   199 
   200 (*Must simplify BEFORE the induction: else we get a critical pair*)
   200 (*Must simplify BEFORE the induction: else we get a critical pair*)
   201 lemma diff_succ_succ [simp]: "succ(m) #- succ(n) = m #- n"
   201 lemma diff_succ_succ [simp]: "succ(m) #- succ(n) = m #- n"
   202 apply (simp add: natify_succ diff_def)
   202 apply (simp add: natify_succ diff_def)
   203 apply (rule_tac x1 = "n" in natify_in_nat [THEN nat_induct], auto)
   203 apply (rule_tac x1 = n in natify_in_nat [THEN nat_induct], auto)
   204 done
   204 done
   205 
   205 
   206 (*This defining property is no longer wanted*)
   206 (*This defining property is no longer wanted*)
   207 declare raw_diff_succ [simp del]
   207 declare raw_diff_succ [simp del]
   208 
   208 
   210 lemma diff_0 [simp]: "m #- 0 = natify(m)"
   210 lemma diff_0 [simp]: "m #- 0 = natify(m)"
   211 by (simp add: diff_def)
   211 by (simp add: diff_def)
   212 
   212 
   213 lemma diff_le_self: "m:nat ==> (m #- n) le m"
   213 lemma diff_le_self: "m:nat ==> (m #- n) le m"
   214 apply (subgoal_tac " (m #- natify (n)) le m")
   214 apply (subgoal_tac " (m #- natify (n)) le m")
   215 apply (rule_tac [2] m = "m" and n = "natify (n) " in diff_induct)
   215 apply (rule_tac [2] m = m and n = "natify (n) " in diff_induct)
   216 apply (erule_tac [6] leE)
   216 apply (erule_tac [6] leE)
   217 apply (simp_all add: le_iff)
   217 apply (simp_all add: le_iff)
   218 done
   218 done
   219 
   219 
   220 
   220 
   526       ==> (m < succ(n)) <-> (m = 0 | (EX j:nat. m = succ(j) & j < n))"
   526       ==> (m < succ(n)) <-> (m = 0 | (EX j:nat. m = succ(j) & j < n))"
   527 by (induct_tac "m", auto)
   527 by (induct_tac "m", auto)
   528 
   528 
   529 lemma less_diff_conv [rule_format]:
   529 lemma less_diff_conv [rule_format]:
   530      "[| j:nat; k:nat |] ==> ALL i:nat. (i < j #- k) <-> (i #+ k < j)"
   530      "[| j:nat; k:nat |] ==> ALL i:nat. (i < j #- k) <-> (i #+ k < j)"
   531 by (erule_tac m = "k" in diff_induct, auto)
   531 by (erule_tac m = k in diff_induct, auto)
   532 
   532 
   533 lemmas nat_typechecks = rec_type nat_0I nat_1I nat_succI Ord_nat
   533 lemmas nat_typechecks = rec_type nat_0I nat_1I nat_succI Ord_nat
   534 
   534 
   535 ML
   535 ML
   536 {*
   536 {*