Theory Code_Target_Bits_Int
chapter ‹Implementation of bit operations on int by target language operations›
theory Code_Target_Bits_Int
imports
Bits_Integer
"HOL-Library.Code_Target_Int"
begin
declare [[code drop:
"(AND) :: int ⇒ _" "(OR) :: int ⇒ _" "(XOR) :: int ⇒ _" "(NOT) :: int ⇒ _"
"lsb :: int ⇒ _" "set_bit :: int ⇒ _" "bit :: int ⇒ _"
"push_bit :: _ ⇒ int ⇒ _" "drop_bit :: _ ⇒ int ⇒ _"
int_of_integer_symbolic
]]
declare bitval_bin_last [code_unfold]
lemma [code_unfold]:
‹bit x n ⟷ x AND (push_bit n 1) ≠ 0› for x :: int
by (fact bit_iff_and_push_bit_not_eq_0)
context
includes integer.lifting
begin
lemma bit_int_code [code]:
"bit (int_of_integer x) n = bit x n"
by transfer simp
lemma and_int_code [code]:
"int_of_integer i AND int_of_integer j = int_of_integer (i AND j)"
by transfer simp
lemma or_int_code [code]:
"int_of_integer i OR int_of_integer j = int_of_integer (i OR j)"
by transfer simp
lemma xor_int_code [code]:
"int_of_integer i XOR int_of_integer j = int_of_integer (i XOR j)"
by transfer simp
lemma not_int_code [code]:
"NOT (int_of_integer i) = int_of_integer (NOT i)"
by transfer simp
lemma push_bit_int_code [code]:
‹push_bit n (int_of_integer x) = int_of_integer (push_bit n x)›
by transfer simp
lemma drop_bit_int_code [code]:
‹drop_bit n (int_of_integer x) = int_of_integer (drop_bit n x)›
by transfer simp
lemma take_bit_int_code [code]:
‹take_bit n (int_of_integer x) = int_of_integer (take_bit n x)›
by transfer simp
lemma lsb_int_code [code]:
"lsb (int_of_integer x) = lsb x"
by transfer simp
lemma set_bit_int_code [code]:
"set_bit (int_of_integer x) n b = int_of_integer (set_bit x n b)"
by transfer simp
lemma int_of_integer_symbolic_code [code]:
"int_of_integer_symbolic = int_of_integer"
by (simp add: int_of_integer_symbolic_def)
context
begin
qualified definition even :: ‹int ⇒ bool›
where [code_abbrev]: ‹even = Parity.even›
end
lemma [code]:
‹Code_Target_Bits_Int.even i ⟷ i AND 1 = 0›
by (simp add: Code_Target_Bits_Int.even_def even_iff_mod_2_eq_zero and_one_eq)
lemma bin_rest_code:
"bin_rest (int_of_integer i) = int_of_integer (bin_rest_integer i)"
by transfer simp
end
end