src/HOL/Num.thy
changeset 47255 30a1692557b0
parent 47228 4f4d85c3516f
child 47299 e705ef5ffe95
equal deleted inserted replaced
47244:a7f85074c169 47255:30a1692557b0
   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]