src/HOL/Num.thy
changeset 47300 2284a40e0f57
parent 47299 e705ef5ffe95
child 48891 c0eafbd55de3
equal deleted inserted replaced
47299:e705ef5ffe95 47300:2284a40e0f57
   191   by (simp add: num_eq_iff nat_of_num_mult nat_of_num_add nat_of_num_inc)
   191   by (simp add: num_eq_iff nat_of_num_mult nat_of_num_add nat_of_num_inc)
   192 
   192 
   193 text {* The @{const num_of_nat} conversion *}
   193 text {* The @{const num_of_nat} conversion *}
   194 
   194 
   195 lemma num_of_nat_One:
   195 lemma num_of_nat_One:
   196   "n \<le> 1 \<Longrightarrow> num_of_nat n = Num.One"
   196   "n \<le> 1 \<Longrightarrow> num_of_nat n = One"
   197   by (cases n) simp_all
   197   by (cases n) simp_all
   198 
   198 
   199 lemma num_of_nat_plus_distrib:
   199 lemma num_of_nat_plus_distrib:
   200   "0 < m \<Longrightarrow> 0 < n \<Longrightarrow> num_of_nat (m + n) = num_of_nat m + num_of_nat n"
   200   "0 < m \<Longrightarrow> 0 < n \<Longrightarrow> num_of_nat (m + n) = num_of_nat m + num_of_nat n"
   201   by (induct n) (auto simp add: add_One add_One_commute add_inc)
   201   by (induct n) (auto simp add: add_One add_One_commute add_inc)
   882   "numeral (Bit0 n) = Suc (numeral (BitM n))"
   882   "numeral (Bit0 n) = Suc (numeral (BitM n))"
   883   "numeral (Bit1 n) = Suc (numeral (Bit0 n))"
   883   "numeral (Bit1 n) = Suc (numeral (Bit0 n))"
   884   by (simp_all add: numeral.simps BitM_plus_one)
   884   by (simp_all add: numeral.simps BitM_plus_one)
   885 
   885 
   886 lemma pred_numeral_simps [simp]:
   886 lemma pred_numeral_simps [simp]:
   887   "pred_numeral Num.One = 0"
   887   "pred_numeral One = 0"
   888   "pred_numeral (Num.Bit0 k) = numeral (Num.BitM k)"
   888   "pred_numeral (Bit0 k) = numeral (BitM k)"
   889   "pred_numeral (Num.Bit1 k) = numeral (Num.Bit0 k)"
   889   "pred_numeral (Bit1 k) = numeral (Bit0 k)"
   890   unfolding pred_numeral_def eval_nat_numeral
   890   unfolding pred_numeral_def eval_nat_numeral
   891   by (simp_all only: diff_Suc_Suc diff_0)
   891   by (simp_all only: diff_Suc_Suc diff_0)
   892 
   892 
   893 lemma numeral_2_eq_2: "2 = Suc (Suc 0)"
   893 lemma numeral_2_eq_2: "2 = Suc (Suc 0)"
   894   by (simp add: eval_nat_numeral)
   894   by (simp add: eval_nat_numeral)
   898 
   898 
   899 lemma numeral_1_eq_Suc_0: "Numeral1 = Suc 0"
   899 lemma numeral_1_eq_Suc_0: "Numeral1 = Suc 0"
   900   by (simp only: numeral_One One_nat_def)
   900   by (simp only: numeral_One One_nat_def)
   901 
   901 
   902 lemma Suc_nat_number_of_add:
   902 lemma Suc_nat_number_of_add:
   903   "Suc (numeral v + n) = numeral (v + Num.One) + n"
   903   "Suc (numeral v + n) = numeral (v + One) + n"
   904   by simp
   904   by simp
   905 
   905 
   906 (*Maps #n to n for n = 1, 2*)
   906 (*Maps #n to n for n = 1, 2*)
   907 lemmas numerals = numeral_One [where 'a=nat] numeral_2_eq_2
   907 lemmas numerals = numeral_One [where 'a=nat] numeral_2_eq_2
   908 
   908