Instance CompSpecs : compspecs. make_compspecs prog. Defined.
Definition Vprog : varspecs. mk_varspecs prog. Defined.
Local Open Scope logic.
(*  The LG module has two global variables of its own: << int LG_n = 3; struct foo {  int initialized;  int m; } LG_foo = {0}; >> From the client's point of view, these variables are hidden away in a separating conjuct of the form [LG.data n gv], where [LG.data] is the name of the abstraction, [n] is a client-visible parameter, and [gv] is the global-variables table.  In Coq, the LG module defines three things: - [LG.data], of type [globals -> mpred] (possibly with some other parameters, in this case [n:Z]) - [initialized_globals : globals -> mpred] This definition is supposed to match the extern initialized global variables, as processed by CompCert clightgen, for the initial state of LG's variables  [LG_n] and [LG_foo]. - [initial],  which is a lemma showing that the extern initialized global variables of the C-language LG module do indeed form a legitimate initial state of the [LG.data _ gv] abstraction. *)
Module Type LG_TYPE.
Parameter data: Z -> globals -> mpred.
Parameter initialized_globals: globals -> mpred.

(* Specifications: *)
Axiom initial: forall gv,
initialized_globals gv |-- data 3 gv.