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.
type 'a notation =
| Prefix of 'a
| Postfix of 'a
| Infix of Pratter.associativity * 'a
| Zero
| Succ of 'a notation option
| Quant
Notations.
type t = {
sign_symbols : Term.sym 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 : float 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;
sign_cp_pos : Term.cp_pos list Core.Term.SymMap.t Timed.ref;
Maps a symbol to the critical pair positions it is heading in the rules.
*)}
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 find_sym : Common.Path.t -> string -> Term.sym
find_sym path name
returns the symbol identified by path
and name
in the known modules (already compiled or currently being compiled)
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.
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 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 ->
Common.Pos.popt ->
Term.term ->
bool list ->
Term.sym
add_symbol sign expo prop mstrat opaq name pos 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
. pos
is the position of the declaration (without its definition). 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. /!\ does not update the decision tree or the critical pairs.
add_rules sign sym rs
adds the new rules rs
to the symbol sym
. When the rules do not correspond to a symbol of signature sign
, they are stored in its dependencies. /!\ does not update the decision tree or the critical pairs.
update_notation n
provides an update function for n
to be used with Map.S.update
.
add_notation sign s n
sets notation of s
to n
in sign
.
val add_notation_from_builtin :
string ->
Term.sym ->
'a notation Core.Term.SymMap.t ->
'a notation Core.Term.SymMap.t
add_notation_from_builtin builtin sym notation_map
adds in notation_map
the notation required when builtin
is mapped to sym
.
add_builtin sign name sym
binds the builtin name name
to sym
(in the signature sign
). The previous binding, if any, is discarded.
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.
iterate f sign
applies f
on sign
and its dependencies recursively.
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.