Require Export Coq.Arith.EqNat.
Require Export Coq.Relations.Relations.
Require Export compcert.lib.Axioms.
Require Export compcert.lib.Coqlib.
Require Export compcert.lib.Integers.
Require Export compcert.lib.Floats.
Require Export compcert.lib.Maps.
Require Export compcert.common.AST.
Require Export compcert.common.Values.
Require Export compcert.common.Memdata.
Require Export compcert.common.Memtype.
Require Export compcert.common.Memory.
Require Export compcert.common.Globalenvs.
Require Export VST.msl.Coqlib2.
Require Export VST.veric.coqlib4.
(* Lemmas about ident lists *)
Fixpoint id_in_list (id: ident) (ids: list ident) : bool :=
match ids with i::ids' => orb (Pos.eqb id i) (id_in_list id ids') | _ => false end.
Fixpoint compute_list_norepet (ids: list ident) : bool :=
match ids with
| id :: ids' => if id_in_list id ids' then false else compute_list_norepet ids'
| nil => true
end.

(* Specifications: *)
Lemma id_in_list_true: forall i ids, id_in_list i ids = true -> In i ids.
Lemma id_in_list_false: forall i ids, id_in_list i ids = false -> ~In i ids.
Lemma compute_list_norepet_e: forall ids,
compute_list_norepet ids = true -> list_norepet ids.
Lemma list_norepet_rev:
forall A (l: list A), list_norepet (rev l) = list_norepet l.
Lemma block_eq_dec: forall b1 b2: block, {b1 = b2} + {b1 <> b2}.
Lemma decode_byte_val:
forall m, decode_val Mint8unsigned (Byte m :: nil) =
Vint (Int.zero_ext 8 (Int.repr (Byte.unsigned m))).
Lemma Vint_inj: forall x y, Vint x = Vint y -> x=y.