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 |