Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
Signature for symbols.
type ind_data = {
ind_cons : Term.sym list;
Constructors.
*)ind_prop : Term.sym;
Induction principle.
*)ind_nb_params : int;
Number of parameters.
*)ind_nb_types : int;
Number of mutually defined types.
*)ind_nb_cons : int;
Number of constructors.
*)}
Data associated to inductive type symbols.
Notations.
type t = {
sign_symbols : (Term.sym * Common.Pos.popt) Lplib.Extra.StrMap.t Timed.ref;
sign_path : Common.Path.t;
sign_deps : Term.rule list Lplib.Extra.StrMap.t Common.Path.Map.t Timed.ref;
Maps a path to a list of pairs (symbol name, rule).
*)sign_builtins : Term.sym Lplib.Extra.StrMap.t Timed.ref;
sign_notations : notation Core.Term.SymMap.t Timed.ref;
Maps symbols to their notation if they have some.
*)sign_ind : ind_data Core.Term.SymMap.t Timed.ref;
}
Representation of a signature. It roughly corresponds to a set of symbols, defined in a single module (or file).
val dummy : unit -> t
The empty signature. WARNING: to be used for creating ghost signatures only. Use Sig_state functions otherwise. It's a thunk to force the creation of a new record on each call (and avoid unwanted sharing).
find sign name
finds the symbol named name
in sign
if it exists, and raises the Not_found
exception otherwise.
val mem : t -> string -> bool
mem sign name
checks whether a symbol named name
exists in sign
.
val loaded : t Common.Path.Map.t Timed.ref
loaded
stores the signatures of the known (already compiled or currently being compiled) modules. An important invariant is that all occurrences of a symbol are physically equal, even across signatures). This is ensured by making copies of terms when loading an object file.
val loading : Common.Path.t list Timed.ref
loading
contains the modules that are being processed. They are stored in a stack due to dependencies. Note that the topmost element corresponds to the current module. If a module appears twice in the stack, then there is a circular dependency.
val current_path : unit -> Common.Path.t
current_path ()
returns the current signature path.
create_sym expo prop opaq name typ impl
creates a new symbol with the exposition expo
, property prop
, name name
, type typ
, implicit arguments impl
, opacity opaq
.
val link : t -> unit
val unlink : t -> unit
unlink sign
removes references to external symbols (and thus signatures) in the signature sign
. This function is used to minimize the size of our object files, by preventing a recursive inclusion of all the dependencies. Note however that unlink
processes sign
in place, which means that the signature is invalidated in the process.
val add_symbol :
t ->
Term.expo ->
Term.prop ->
Term.match_strat ->
bool ->
Common.Pos.strloc ->
Term.term ->
bool list ->
Term.sym
add_symbol sign expo prop mstrat opaq name typ impl
adds in the signature sign
a symbol with name name
, exposition expo
, property prop
, matching strategy strat
, opacity opaq
, type typ
, implicit arguments impl
, no definition and no rules. name
should not already be used in sign
. The created symbol is returned.
val strip_private : t -> unit
strip_private sign
removes private symbols from signature sign
.
val write : t -> string -> unit
val read : string -> t
add_rule sign sym r
adds the new rule r
to the symbol sym
. When the rule does not correspond to a symbol of signature sign
, it is stored in its dependencies.
add_builtin sign name sym
binds the builtin name name
to sym
(in the signature sign
). The previous binding, if any, is discarded.
add_notation sign s n
sets notation of s
to n
in sign
.
add_inductive sign ind_sym ind_cons ind_prop ind_prop_args
add to sign
the inductive type ind_sym
with constructors ind_cons
, induction principle ind_prop
with ind_prop_args
arguments.
val dependencies : t -> (Common.Path.t * t) list
dependencies sign
returns an association list containing (the transitive closure of) the dependencies of the signature sign
. Note that the order of the list gives one possible loading order for the signatures. Note also that sign
itself appears at the end of the list.
val ghost_path : string -> Common.Path.t
ghost_path s
creates a module path that cannot be entered by a user.