Definition var_name (V: Type) (bdec: ident * globvar V) : ident :=
   fst bdec.Definition no_dups (F V: Type) (fdecs: list (ident * F)) (bdecs: list (ident * globvar V)) : Prop :=
  list_norepet (map (@fst ident F) fdecs ++ map (@var_name V) bdecs).

(* Specifications: *)
Lemma no_dups_inv: forall (A V: Type) id f fdecs bdecs, no_dups ((id,f)::fdecs) bdecs -> no_dups fdecs bdecs /\ ~ In id (map (@fst ident A) fdecs) /\ ~ In id (map (@var_name V) bdecs).
Lemma of_bool_Int_eq_e: forall i j, Val.of_bool (Int.eq i j) = Vtrue -> i = j.
Lemma eq_block_lem: forall (A: Set) a (b: A) c, (if eq_block a a then b else c) = b.
Lemma signed_zero: Int.signed Int.zero = 0.
Lemma equiv_e1 : forall A B: Prop, A=B -> A -> B.
Lemma deref_loc_fun: forall {ty m b z v v'}, Clight.deref_loc ty m b z v -> Clight.deref_loc ty m b z v' -> v=v'.
Lemma eval_expr_lvalue_fun: forall ge e le m, (forall a v v', Clight.eval_expr ge e le m a v -> Clight.eval_expr ge e le m a v' -> v=v') /\ (forall a b b' i i', Clight.eval_lvalue ge e le m a b i -> Clight.eval_lvalue ge e le m a b' i' -> (b,i)=(b',i')).
Lemma eval_expr_fun: forall {ge e le m a v v'}, Clight.eval_expr ge e le m a v -> Clight.eval_expr ge e le m a v' -> v=v'.
Lemma eval_exprlist_fun: forall {ge e le m a ty v v'}, Clight.eval_exprlist ge e le m a ty v -> Clight.eval_exprlist ge e le m a ty v' -> v=v'.
Lemma eval_lvalue_fun: forall {ge e le m a b b' z z'}, Clight.eval_lvalue ge e le m a b z -> Clight.eval_lvalue ge e le m a b' z' -> (b,z)=(b',z').
Lemma inv_find_symbol_fun: forall {ge id id' b}, Senv.find_symbol ge id = Some b -> Senv.find_symbol ge id' = Some b -> id=id'.
Lemma assign_loc_fun: forall {cenv ty m b ofs v m1 m2}, assign_loc cenv ty m b ofs v m1 -> assign_loc cenv ty m b ofs v m2 -> m1=m2.
Lemma alloc_variables_fun: forall {ge e m vl e1 m1 e2 m2}, Clight.alloc_variables ge e m vl e1 m1 -> Clight.alloc_variables ge e m vl e2 m2 -> (e1,m1)=(e2,m2).
Lemma bind_parameters_fun: forall {ge e m p v m1 m2}, Clight.bind_parameters ge e m p v m1 -> Clight.bind_parameters ge e m p v m2 -> m1=m2.
Lemma eventval_list_match_fun: forall {se a a' t v}, Events.eventval_list_match se a t v -> Events.eventval_list_match se a' t v -> a=a'.