module Theory:sig
..end
Theories and Namespaces
type
namespace = {
|
ns_ts : |
|
ns_ls : |
|
ns_pr : |
|
ns_ns : |
}
val empty_ns : namespace
val ns_find_ts : namespace -> string list -> Ty.tysymbol
val ns_find_ls : namespace -> string list -> Term.lsymbol
val ns_find_pr : namespace -> string list -> Decl.prsymbol
val ns_find_ns : namespace -> string list -> namespace
val import_namespace : namespace -> string list -> namespace
type
meta_arg_type =
| |
MTty |
| |
MTtysymbol |
| |
MTlsymbol |
| |
MTprsymbol |
| |
MTstring |
| |
MTint |
| |
MTid |
type
meta_arg =
| |
MAty of |
| |
MAts of |
| |
MAls of |
| |
MApr of |
| |
MAstr of |
| |
MAint of |
| |
MAid of |
type
meta = private {
|
meta_name : |
|
meta_type : |
|
meta_excl : |
|
meta_desc : |
|
meta_tag : |
}
val print_meta_desc : Pp.formatter -> meta -> unit
module Mmeta:Extmap.S
with type key = meta
module Smeta:Extset.S
with module M = Mmeta
module Hmeta:Exthtbl.S
with type key = meta
val meta_equal : meta -> meta -> bool
val meta_hash : meta -> int
val register_meta : desc:Pp.formatted -> string -> meta_arg_type list -> meta
val register_meta_excl : desc:Pp.formatted -> string -> meta_arg_type list -> meta
With exclusive metas, each new meta cancels the previous one. Useful for transformation or printer parameters
val lookup_meta : string -> meta
val list_metas : unit -> meta list
val meta_range : meta
val meta_float : meta
val meta_model_projection : meta
meta declaring a function symbol p
of type t1 -> t2
as a model
projection for type `t1`, meaning that when a counterexample value
is requested for a variable x
of type t1
, then a value for p
x
is queried
val meta_record : meta
val meta_proved_wf : meta
meta used to declare than a given predicate symbol is proved well-founded
type
theory = private {
|
th_name : |
(* | theory name | *) |
|
th_path : |
(* | environment qualifiers | *) |
|
th_decls : |
(* | theory declarations | *) |
|
th_ranges : |
(* | range type projections | *) |
|
th_floats : |
(* | float type projections | *) |
|
th_crcmap : |
(* | implicit coercions | *) |
|
th_proved_wf : |
(* | Mapping of predicate symbols | *) |
|
th_export : |
(* | exported namespace | *) |
|
th_known : |
(* | known identifiers | *) |
|
th_local : |
(* | locally declared idents | *) |
|
th_used : |
(* | used theories | *) |
}
type
tdecl = private {
|
td_node : |
|
td_tag : |
}
type
tdecl_node =
| |
Decl of |
| |
Use of |
| |
Clone of |
| |
Meta of |
type
symbol_map = {
|
sm_ty : |
|
sm_ts : |
|
sm_ls : |
|
sm_pr : |
}
module Mtdecl:Extmap.S
with type key = tdecl
module Stdecl:Extset.S
with module M = Mtdecl
module Htdecl:Exthtbl.S
with type key = tdecl
val td_equal : tdecl -> tdecl -> bool
val td_hash : tdecl -> int
type
theory_uc = private {
|
uc_name : |
|||
|
uc_path : |
|||
|
uc_decls : |
|||
|
uc_ranges : |
|||
|
uc_floats : |
|||
|
uc_crcmap : |
|||
|
uc_proved_wf : |
(* | see field | *) |
|
uc_prefix : |
|||
|
uc_import : |
|||
|
uc_export : |
|||
|
uc_known : |
|||
|
uc_local : |
|||
|
uc_used : |
}
theories under constructions
val create_theory : ?path:string list -> Ident.preid -> theory_uc
val close_theory : theory_uc -> theory
val open_scope : theory_uc -> string -> theory_uc
val close_scope : theory_uc -> import:bool -> theory_uc
val import_scope : theory_uc -> string list -> theory_uc
val get_namespace : theory_uc -> namespace
val restore_path : Ident.ident -> string list * string * string list
restore_path id
returns the triple (library path, theory,
qualified symbol name) if the ident was ever introduced in
a theory declaration. If the ident was declared in several
different theories, the first association is retained.
If id
is a theory name, the third component is an empty list.
Raises Not_found
if the ident was never declared in/as a theory.
val restore_theory : Ident.ident -> theory
val create_decl : Decl.decl -> tdecl
val add_decl : ?warn:bool -> theory_uc -> Decl.decl -> theory_uc
val add_ty_decl : theory_uc -> Ty.tysymbol -> theory_uc
val add_data_decl : theory_uc -> Decl.data_decl list -> theory_uc
val add_param_decl : theory_uc -> Term.lsymbol -> theory_uc
val add_logic_decl : theory_uc -> Decl.logic_decl list -> theory_uc
val add_ind_decl : theory_uc -> Decl.ind_sign -> Decl.ind_decl list -> theory_uc
val add_prop_decl : ?warn:bool ->
theory_uc ->
Decl.prop_kind -> Decl.prsymbol -> Term.term -> theory_uc
val attr_w_non_conservative_extension_no : Ident.attribute
val create_use : theory -> tdecl
val use_export : theory_uc -> theory -> theory_uc
type
th_inst = {
|
inst_ty : |
|
inst_ts : |
|
inst_ls : |
|
inst_pr : |
|
inst_df : |
}
val empty_inst : th_inst
val warn_clone_not_abstract : Loc.position -> theory -> unit
val warning_clone_not_abstract : Loc.warning_id
val warn_axiom_abstract : Loc.warning_id
val clone_theory : ('a -> tdecl -> 'a) -> 'a -> theory -> th_inst -> 'a
val clone_export : theory_uc -> theory -> th_inst -> theory_uc
val add_clone_internal : unit ->
theory_uc -> theory -> symbol_map -> theory_uc
val meta_coercion : meta
val create_meta : meta -> meta_arg list -> tdecl
val add_meta : theory_uc -> meta -> meta_arg list -> theory_uc
val clone_meta : tdecl -> theory -> symbol_map -> tdecl option
clone_meta td_meta th sm
produces from td_meta
a new Meta
tdecl instantiated with respect to sm
.
Returns None
if td_meta
mentions proposition symbols
that were not cloned (e.g. goals) or type symbols that
were cloned into complex types.
val builtin_theory : theory
val ignore_theory : theory
val bool_theory : theory
val highord_theory : theory
val tuple_theory : int -> theory
val tuple_theory_name : string -> int option
val add_decl_with_tuples : theory_uc -> Decl.decl -> theory_uc
type
bad_instance =
| |
BadI of |
| |
BadI_ty_vars of |
| |
BadI_ty_ner of |
| |
BadI_ty_impure of |
| |
BadI_ty_arity of |
| |
BadI_ty_rec of |
| |
BadI_ty_mut_lhs of |
| |
BadI_ty_mut_rhs of |
| |
BadI_ty_alias of |
| |
BadI_field of |
| |
BadI_field_type of |
| |
BadI_field_ghost of |
| |
BadI_field_mut of |
| |
BadI_field_inv of |
| |
BadI_ls_type of |
| |
BadI_ls_kind of |
| |
BadI_ls_arity of |
| |
BadI_ls_rs of |
| |
BadI_rs_arity of |
| |
BadI_rs_type of |
| |
BadI_rs_kind of |
| |
BadI_rs_ghost of |
| |
BadI_rs_mask of |
| |
BadI_rs_reads of |
| |
BadI_rs_writes of |
| |
BadI_rs_taints of |
| |
BadI_rs_covers of |
| |
BadI_rs_resets of |
| |
BadI_rs_raises of |
| |
BadI_rs_spoils of |
| |
BadI_rs_oneway of |
| |
BadI_xs_type of |
| |
BadI_xs_mask of |
exception NonLocal of Ident.ident
exception BadInstance of bad_instance
exception CannotInstantiate of Ident.ident
exception CloseTheory
exception NoOpenedNamespace
exception ClashSymbol of string
exception KnownMeta of meta
exception UnknownMeta of string
exception BadMetaArity of meta * int
exception MetaTypeMismatch of meta * meta_arg_type * meta_arg_type
exception IllFormedMeta of meta * string
exception RangeConflict of Ty.tysymbol
exception FloatConflict of Ty.tysymbol
exception IllFormedWf of Decl.prsymbol * Term.lsymbol
exception ProvedWfConflict of Term.lsymbol