equal
deleted
inserted
replaced
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 {* |