Definition check_one_temp_spec (Q: PTree.t val) (idv: ident * val) : Prop :=
(Q ! (fst idv)) = Some (snd idv).
Definition check_gvars_spec (GV: option globals) (GV': option globals) : Prop :=
match GV' with Some _ => GV = GV' | _ => True end.
Definition strong_cast (t1 t2: type) (v: val) : val :=
force_val (sem_cast t1 t2 v).

Lemma check_specs_lemma:
forall Qtemp Qpre_temp Qvar GV GV' rho fl vl
(LEN: length fl = length vl)
(UNDEF: Forall (fun v => v <> Vundef) vl),
check_gvars_spec GV GV' ->
Forall (check_one_temp_spec (pTree_from_elements (combine fl vl)))
(PTree.elements Qpre_temp) ->
fold_right `(and) `(True) (map locald_denote (LocalD Qtemp Qvar GV)) rho ->
fold_right `(and) `(True) (map locald_denote (LocalD Qpre_temp (PTree.empty _) GV')) (make_args fl vl rho).