Remark eq_same_bits:
forall i x y, x = y -> Int.testbit x i = Int.testbit y i.

(* Specifications: *)
Lemma iagree_and_eq:
forall x y mask,
iagree x y mask <-> Int.and x mask = Int.and y mask.
Lemma iagree_mone:
forall p q, iagree p q Int.mone -> p = q.
Lemma iagree_zero:
forall p q, iagree p q Int.zero.
Lemma iagree_and:
forall x y n m,
iagree x y (Int.and m n) -> iagree (Int.and x n) (Int.and y n) m.
Lemma iagree_not:
forall x y m, iagree x y m -> iagree (Int.not x) (Int.not y) m.
Lemma iagree_not':
forall x y m, iagree (Int.not x) (Int.not y) m -> iagree x y m.
Lemma iagree_or:
forall x y n m,
iagree x y (Int.and m (Int.not n)) -> iagree (Int.or x n) (Int.or y n) m.
Lemma iagree_bitwise_binop:
forall sem f,
(forall x y i, 0 <= i < Int.zwordsize ->
Int.testbit (f x y) i = sem (Int.testbit x i) (Int.testbit y i)) ->
forall x1 x2 y1 y2 m,
iagree x1 y1 m -> iagree x2 y2 m -> iagree (f x1 x2) (f y1 y2) m.
Lemma iagree_shl:
forall x y m n,
iagree x y (Int.shru m n) -> iagree (Int.shl x n) (Int.shl y n) m.
Lemma iagree_shru:
forall x y m n,
iagree x y (Int.shl m n) -> iagree (Int.shru x n) (Int.shru y n) m.
Lemma iagree_shr_1:
forall x y m n,
Int.shru (Int.shl m n) n = m ->
iagree x y (Int.shl m n) -> iagree (Int.shr x n) (Int.shr y n) m.
Lemma iagree_shr:
forall x y m n,
iagree x y (Int.or (Int.shl m n) (Int.repr Int.min_signed)) ->
iagree (Int.shr x n) (Int.shr y n) m.
Lemma iagree_rol:
forall p q m amount,
iagree p q (Int.ror m amount) ->
iagree (Int.rol p amount) (Int.rol q amount) m.
Lemma iagree_ror:
forall p q m amount,
iagree p q (Int.rol m amount) ->
iagree (Int.ror p amount) (Int.ror q amount) m.
Lemma eqmod_iagree:
forall m x y,
Int.eqmod (two_p (Int.size m)) x y ->
iagree (Int.repr x) (Int.repr y) m.