Definition funspecs_assert (FunSpecs: PTree.t funspec): assert :=
fun rho =>
(ALL  id: ident, ALL fs:funspec,  !! (FunSpecs!id = Some fs) -->
EX b:block,
!! (Map.get (ge_of rho) id = Some b) && func_at fs (b,0))
&&
(ALL  b: block, ALL fs:funspec, func_at' fs (b,0) -->
EX id:ident, !! (Map.get (ge_of rho) id = Some b)
&& !! exists fs, FunSpecs!id = Some fs).
Definition globals_only (rho: environ) : environ := (mkEnviron (ge_of rho) (Map.empty _) (Map.empty _)).
Fixpoint make_args (il: list ident) (vl: list val) (rho: environ)  :=
match il, vl with
| nil, nil => globals_only rho
| i::il', v::vl' => env_set (make_args il' vl' rho) i v
| _ , _ => rho
end.

(* Specifications: *)
Lemma same_FS_funspecs_assert:
forall FS1 FS2,
(forall id, FS1 ! id = FS2 ! id) ->
funspecs_assert FS1 = funspecs_assert FS2.
Lemma funspecs_assert_rho:
forall G rho rho', ge_of rho = ge_of rho' -> funspecs_assert G rho |-- funspecs_assert G rho'.