src/HOL/Library/Code_Target_Int.thy
changeset 75651 f4116b7a6679
parent 68028 1f9f973eed2a
child 81113 6fefd6c602fa
equal deleted inserted replaced
75650:6d4fb57eb66c 75651:f4116b7a6679
   114 
   114 
   115 declare [[code drop: "gcd :: int \<Rightarrow> _" "lcm :: int \<Rightarrow> _"]]
   115 declare [[code drop: "gcd :: int \<Rightarrow> _" "lcm :: int \<Rightarrow> _"]]
   116 
   116 
   117 lemma gcd_int_of_integer [code]:
   117 lemma gcd_int_of_integer [code]:
   118   "gcd (int_of_integer x) (int_of_integer y) = int_of_integer (gcd x y)"
   118   "gcd (int_of_integer x) (int_of_integer y) = int_of_integer (gcd x y)"
   119 by transfer rule
   119   by transfer rule
   120 
   120 
   121 lemma lcm_int_of_integer [code]:
   121 lemma lcm_int_of_integer [code]:
   122   "lcm (int_of_integer x) (int_of_integer y) = int_of_integer (lcm x y)"
   122   "lcm (int_of_integer x) (int_of_integer y) = int_of_integer (lcm x y)"
   123 by transfer rule
   123   by transfer rule
   124 
   124 
   125 end
   125 end
   126 
   126 
   127 lemma (in ring_1) of_int_code_if:
   127 lemma (in ring_1) of_int_code_if:
   128   "of_int k = (if k = 0 then 0
   128   "of_int k = (if k = 0 then 0
   157 lemma [code]:
   157 lemma [code]:
   158   "int_of_char = int_of_integer \<circ> integer_of_char"
   158   "int_of_char = int_of_integer \<circ> integer_of_char"
   159   including integer.lifting unfolding integer_of_char_def int_of_char_def
   159   including integer.lifting unfolding integer_of_char_def int_of_char_def
   160   by transfer (simp add: fun_eq_iff)
   160   by transfer (simp add: fun_eq_iff)
   161 
   161 
       
   162 context
       
   163   includes integer.lifting bit_operations_syntax
       
   164 begin
       
   165 
       
   166 declare [[code drop: \<open>bit :: int \<Rightarrow> _\<close> \<open>not :: int \<Rightarrow> _\<close>
       
   167   \<open>and :: int \<Rightarrow> _\<close> \<open>or :: int \<Rightarrow> _\<close> \<open>xor :: int \<Rightarrow> _\<close>
       
   168   \<open>push_bit :: _ \<Rightarrow> _ \<Rightarrow> int\<close> \<open>drop_bit :: _ \<Rightarrow> _ \<Rightarrow> int\<close> \<open>take_bit :: _ \<Rightarrow> _ \<Rightarrow> int\<close>]]
       
   169 
       
   170 lemma [code]:
       
   171   \<open>bit (int_of_integer k) n \<longleftrightarrow> bit k n\<close>
       
   172   by transfer rule
       
   173 
       
   174 lemma [code]:
       
   175   \<open>NOT (int_of_integer k) = int_of_integer (NOT k)\<close>
       
   176   by transfer rule
       
   177 
       
   178 lemma [code]:
       
   179   \<open>int_of_integer k AND int_of_integer l = int_of_integer (k AND l)\<close>
       
   180   by transfer rule
       
   181 
       
   182 lemma [code]:
       
   183   \<open>int_of_integer k OR int_of_integer l = int_of_integer (k OR l)\<close>
       
   184   by transfer rule
       
   185 
       
   186 lemma [code]:
       
   187   \<open>int_of_integer k XOR int_of_integer l = int_of_integer (k XOR l)\<close>
       
   188   by transfer rule
       
   189 
       
   190 lemma [code]:
       
   191   \<open>push_bit n (int_of_integer k) = int_of_integer (push_bit n k)\<close>
       
   192   by transfer rule
       
   193 
       
   194 lemma [code]:
       
   195   \<open>drop_bit n (int_of_integer k) = int_of_integer (drop_bit n k)\<close>
       
   196   by transfer rule
       
   197 
       
   198 lemma [code]:
       
   199   \<open>take_bit n (int_of_integer k) = int_of_integer (take_bit n k)\<close>
       
   200   by transfer rule
       
   201 
       
   202 lemma [code]:
       
   203   \<open>mask n = int_of_integer (mask n)\<close>
       
   204   by transfer rule
       
   205 
       
   206 lemma [code]:
       
   207   \<open>set_bit n (int_of_integer k) = int_of_integer (set_bit n k)\<close>
       
   208   by transfer rule
       
   209 
       
   210 lemma [code]:
       
   211   \<open>unset_bit n (int_of_integer k) = int_of_integer (unset_bit n k)\<close>
       
   212   by transfer rule
       
   213 
       
   214 lemma [code]:
       
   215   \<open>flip_bit n (int_of_integer k) = int_of_integer (flip_bit n k)\<close>
       
   216   by transfer rule
       
   217 
       
   218 end
       
   219 
   162 code_identifier
   220 code_identifier
   163   code_module Code_Target_Int \<rightharpoonup>
   221   code_module Code_Target_Int \<rightharpoonup>
   164     (SML) Arith and (OCaml) Arith and (Haskell) Arith
   222     (SML) Arith and (OCaml) Arith and (Haskell) Arith
   165 
   223 
   166 end
   224 end