equal
deleted
inserted
replaced
963 lemma nat_rec_add_eq_if [simp]: |
963 lemma nat_rec_add_eq_if [simp]: |
964 "nat_rec a f (numeral v + n) = |
964 "nat_rec a f (numeral v + n) = |
965 (let pv = pred_numeral v in f (pv + n) (nat_rec a f (pv + n)))" |
965 (let pv = pred_numeral v in f (pv + n) (nat_rec a f (pv + n)))" |
966 by (simp add: numeral_eq_Suc Let_def) |
966 by (simp add: numeral_eq_Suc Let_def) |
967 |
967 |
|
968 text {* Case analysis on @{term "n < 2"} *} |
|
969 |
|
970 lemma less_2_cases: "n < 2 \<Longrightarrow> n = 0 \<or> n = Suc 0" |
|
971 by (auto simp add: numeral_2_eq_2) |
|
972 |
|
973 text {* Removal of Small Numerals: 0, 1 and (in additive positions) 2 *} |
|
974 text {* bh: Are these rules really a good idea? *} |
|
975 |
|
976 lemma add_2_eq_Suc [simp]: "2 + n = Suc (Suc n)" |
|
977 by simp |
|
978 |
|
979 lemma add_2_eq_Suc' [simp]: "n + 2 = Suc (Suc n)" |
|
980 by simp |
|
981 |
|
982 text {* Can be used to eliminate long strings of Sucs, but not by default. *} |
|
983 |
|
984 lemma Suc3_eq_add_3: "Suc (Suc (Suc n)) = 3 + n" |
|
985 by simp |
|
986 |
|
987 lemmas nat_1_add_1 = one_add_one [where 'a=nat] (* legacy *) |
|
988 |
968 |
989 |
969 subsection {* Numeral equations as default simplification rules *} |
990 subsection {* Numeral equations as default simplification rules *} |
970 |
991 |
971 declare (in numeral) numeral_One [simp] |
992 declare (in numeral) numeral_One [simp] |
972 declare (in numeral) numeral_plus_numeral [simp] |
993 declare (in numeral) numeral_plus_numeral [simp] |