src/HOL/Code_Numeral.thy
changeset 82912 ad66fb23998a
parent 82910 aa3b2d384736
equal deleted inserted replaced
82911:22169c4f13d1 82912:ad66fb23998a
   825   "int_of_integer (Pos n) = Int.Pos n"
   825   "int_of_integer (Pos n) = Int.Pos n"
   826   "int_of_integer (Neg n) = Int.Neg n"
   826   "int_of_integer (Neg n) = Int.Neg n"
   827   by simp_all
   827   by simp_all
   828 
   828 
   829 lemma int_of_integer_code [code]:
   829 lemma int_of_integer_code [code]:
   830   "int_of_integer k = (if k < 0 then - (int_of_integer (- k))
   830   \<open>int_of_integer k = (
   831      else if k = 0 then 0
   831     if k = 0 then 0
   832      else let
   832     else if k = - 1 then - 1
   833        (l, j) = divmod_integer k 2;
   833     else
   834        l' = 2 * int_of_integer l
   834       let
   835      in if j = 0 then l' else l' + 1)"
   835         (l, j) = divmod_integer k 2;
   836   by (auto simp add: split_def Let_def integer_eq_iff minus_mod_eq_mult_div [symmetric])
   836         l' = 2 * int_of_integer l
       
   837       in if j = 0 then l' else l' + 1)\<close>
       
   838   by (auto simp add: case_prod_unfold Let_def integer_eq_iff simp flip: minus_mod_eq_mult_div)
   837 
   839 
   838 lemma integer_of_int_code_nbe [code nbe]:
   840 lemma integer_of_int_code_nbe [code nbe]:
   839   "integer_of_int 0 = 0"
   841   "integer_of_int 0 = 0"
   840   "integer_of_int (Int.Pos n) = Pos n"
   842   "integer_of_int (Int.Pos n) = Pos n"
   841   "integer_of_int (Int.Neg n) = Neg n"
   843   "integer_of_int (Int.Neg n) = Neg n"
   842   by simp_all
   844   by simp_all
   843 
   845 
   844 lemma integer_of_int_code [code]:
   846 lemma integer_of_int_code [code]:
   845   "integer_of_int k = (if k < 0 then - (integer_of_int (- k))
   847   \<open>integer_of_int k = (
   846      else if k = 0 then 0
   848     if k = 0 then 0
   847      else let
   849     else if k = - 1 then - 1
   848        l = 2 * integer_of_int (k div 2);
   850     else
   849        j = k mod 2
   851       let
   850      in if j = 0 then l else l + 1)"
   852         l = 2 * integer_of_int (k div 2);
   851   by (auto simp add: split_def Let_def integer_eq_iff minus_mod_eq_mult_div [symmetric])
   853         j = k mod 2
       
   854       in if j = 0 then l else l + 1)\<close>
       
   855   by (simp add: integer_eq_iff Let_def flip: minus_mod_eq_mult_div)
   852 
   856 
   853 hide_const (open) Pos Neg sub dup divmod_abs
   857 hide_const (open) Pos Neg sub dup divmod_abs
   854 
   858 
   855 context
   859 context
   856 begin
   860 begin