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 |