Gil_syntax.Prog
A full GIL program
type ('annot, 'label) t = {
imports : (string * bool) list;
List of imported GIL files, and whether each has to be verified
*)lemmas : (string, Lemma.t) Utils.Prelude.Hashtbl.t;
Lemmas
*)preds : (string, Pred.t) Utils.Prelude.Hashtbl.t;
Predicates
*)only_specs : (string, Spec.t) Utils.Prelude.Hashtbl.t;
Specs without function definitions
*)procs : (string, ('annot, 'label) Proc.t) Utils.Prelude.Hashtbl.t;
Proceudes
*)macros : (string, Macro.t) Utils.Prelude.Hashtbl.t;
Macros
*)bi_specs : (string, BiSpec.t) Utils.Prelude.Hashtbl.t;
Bi-abductive specs
*)proc_names : string list;
Names of the procedures
*)predecessors : (string * int * int, int) Utils.Prelude.Hashtbl.t;
Table used for Phi-assignment
*)}
val make :
imports:(string * bool) list ->
lemmas:(string, Lemma.t) Utils.Prelude.Hashtbl.t ->
preds:(string, Pred.t) Utils.Prelude.Hashtbl.t ->
only_specs:(string, Spec.t) Utils.Prelude.Hashtbl.t ->
procs:(string, ('annot, 'label) Proc.t) Utils.Prelude.Hashtbl.t ->
macros:(string, Macro.t) Utils.Prelude.Hashtbl.t ->
bi_specs:(string, BiSpec.t) Utils.Prelude.Hashtbl.t ->
proc_names:string list ->
predecessors:(string * int * int, int) Utils.Prelude.Hashtbl.t ->
unit ->
('annot, 'label) t
Makes a full program
val make_labeled :
procs:(string, ('annot, string) Proc.t) Utils.Prelude.Hashtbl.t ->
imports:(string * bool) list ->
lemmas:(string, Lemma.t) Utils.Prelude.Hashtbl.t ->
preds:(string, Pred.t) Utils.Prelude.Hashtbl.t ->
only_specs:(string, Spec.t) Utils.Prelude.Hashtbl.t ->
macros:(string, Macro.t) Utils.Prelude.Hashtbl.t ->
bi_specs:(string, BiSpec.t) Utils.Prelude.Hashtbl.t ->
proc_names:string list ->
unit ->
('annot, string) t
Initialises a labeled program (with empty predecessors, to be computed later)
val make_indexed :
procs:('annot, int) Proc.t list ->
predecessors:(string * int * int * int) list ->
lemmas:(string, Lemma.t) Utils.Prelude.Hashtbl.t ->
preds:(string, Pred.t) Utils.Prelude.Hashtbl.t ->
only_specs:(string, Spec.t) Utils.Prelude.Hashtbl.t ->
macros:(string, Macro.t) Utils.Prelude.Hashtbl.t ->
bi_specs:(string, BiSpec.t) Utils.Prelude.Hashtbl.t ->
unit ->
('annot, int) t
Initialises an indexed program (with empty proc_names and imports, useless for the rest)
val create : unit -> ('a, string) t
Creates an empty program
val get_proc_names : ('a, 'b) t -> string list
Get names of all procedures
val get_noninternal_proc_names : ('a, 'b) t -> string list
Get names of all procedures not marked as internal
val get_noninternal_pred_names : ('a, 'b) t -> string list
Get names of all predicates not marked as internal
val get_noninternal_lemma_names : ('a, 'b) t -> string list
Get names of all lemmas not marked as internal
Get a specific procedure. Raises Failure
if it does not exist
Get a specific predicate. Raises Failure
if it does not exist
Get a specific bi-abductive spec. Raises Failure
if it does not exist
Get a specific lemma. Raises Failure
if it does not exist
val pp :
show_labels:bool ->
pp_label:'b Fmt.t ->
?pp_annot:'a Fmt.t ->
Stdlib.Format.formatter ->
('a, 'b) t ->
unit
Printers
val pp_labeled :
Stdlib.Format.formatter ->
?pp_annot:'a Fmt.t ->
('a, string) t ->
unit
Print labelled
val pp_indexed :
Stdlib.Format.formatter ->
?pp_annot:'a Fmt.t ->
('a, int) t ->
unit
Print indexed