(** ** Properties of bitwise and, or, xor *)

(* Specifications: *)
Lemma bits_and:
forall x y i, 0 <= i < zwordsize ->
testbit (and x y) i = testbit x i && testbit y i.
Lemma bits_or:
forall x y i, 0 <= i < zwordsize ->
testbit (or x y) i = testbit x i || testbit y i.
Lemma bits_xor:
forall x y i, 0 <= i < zwordsize ->
testbit (xor x y) i = xorb (testbit x i) (testbit y i).
Lemma bits_not:
forall x i, 0 <= i < zwordsize ->
testbit (not x) i = negb (testbit x i).
Lemma bits_and:
forall x y i, 0 <= i < zwordsize ->
testbit (and x y) i = testbit x i && testbit y i.
Lemma bits_or:
forall x y i, 0 <= i < zwordsize ->
testbit (or x y) i = testbit x i || testbit y i.
Lemma bits_xor:
forall x y i, 0 <= i < zwordsize ->
testbit (xor x y) i = xorb (testbit x i) (testbit y i).
Lemma bits_not:
forall x i, 0 <= i < zwordsize ->
testbit (not x) i = negb (testbit x i).