Module Dolmen_type.Base
Builtin functions manipulations
Smtlib Indexed id helpers
type 'ret indexed=[|`Unary of string -> 'ret|`Binary of string -> string -> 'ret|`Ternary of string -> string -> string -> 'ret|`Nary of int * (string list -> 'ret)]The type of indexed family of operators.
val parse_id : Dolmen_std.Id.t -> (string * 'ret indexed) list -> err:(string -> int -> int -> 'ret) -> k:(string list -> 'ret) -> 'retparse_id id l ~err ~ksplitsid(usingsplit_id) into a list. If the list has a headsand a taill, it tries and find in the listla pair (s', indexed) such thats = s'. If the length oflmatches the arity ofindexed, the provided function is called, elseerris called withs, the arity ofindexed, and the lenght ofl. If no match is found or the split list does not contain a head and a tail,kis called wiht the split list.
val bad_ty_index_arity : (module Tff_intf.S with type env = 'env and type Ty.t = 'ty) -> 'env -> string -> int -> int -> [> `Ty of Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'ty ]Suitable
errfunction forparse_idfor typing sort indexed families.
val bad_term_index_arity : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> 'env -> string -> int -> int -> [> `Term of Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'term ]Suitable
errfunction forparse_idfor typing term indexed families.
Low-level helpers
type ('env, 'args, 'ret) helper= (module Tff_intf.S with type env = 'env) -> 'env -> string -> (Dolmen_std.Term.t -> 'args -> 'ret) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'ret
val make_op0 : (_, unit, _) helpermake_op (module Type) env ast op arity args retchecks that args is the empty list and returnsSome (ret ()), else it raises the appropriate exception from the typechecking module.
val make_op1 : (_, Dolmen_std.Term.t, _) helperSame as
make_op0but the returning function takes a term as argument.
val make_op2 : (_, Dolmen_std.Term.t * Dolmen_std.Term.t, _) helperSame as
make_op0but the returning function takes a couple of terms as argument.
val make_op3 : (_, Dolmen_std.Term.t * Dolmen_std.Term.t * Dolmen_std.Term.t, _) helperSame as
make_op0but the returning function takes a triple of terms as argument.
val make_op4 : (_, Dolmen_std.Term.t * Dolmen_std.Term.t * Dolmen_std.Term.t * Dolmen_std.Term.t, _) helperSame as
make_op0but the returning function takes a quadruple of terms as argument.
val make_opn : int -> (_, Dolmen_std.Term.t list, _) helperSame as
make_op0but takes an arity first, and the returning function takes a list of terms as argument. The list is guaranteed to have the same length as the given arity.
val make_assoc : (_, Dolmen_std.Term.t list, _) helperEnsures the list of arguments is at least of size 2 (used for associative symbols).
val fold_left_assoc : ('a -> 'a -> 'a) -> 'a list -> 'aFold application of a left-associative function on a list.
- raises Invalid_argument
if the list is empty.
val fold_right_assoc : ('a -> 'a -> 'a) -> 'a list -> 'aFold application of a right-associative function on a list.
- raises Invalid_argument
if the list is empty.
val make_chain : (_, Dolmen_std.Term.t list, _) helperEnsures the list of arguments is at least of size 2 (used for chainable symbols).
val map_chain : (module Tff_intf.S with type T.t = 't) -> ('t -> 't -> 't) -> 't list -> 'tMap a function on succesive pairs of elements in the arguments lists, and build the resulting conjunction.
map_chain (module Type) mk [t1; t2; ..; tn]isType.T._and [mk t1 t2; mk t2 t3; ..]
High level helpers
val app0 : (module Tff_intf.S with type env = 'env) -> ?check:(Dolmen_std.Term.t -> unit) -> 'env -> string -> 'ret -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'retval app0_ast : (module Tff_intf.S with type env = 'env) -> ?check:(Dolmen_std.Term.t -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'ret) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'retval ty_app1 : (module Tff_intf.S with type env = 'env and type Ty.t = 'ty) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> ('ty -> 'ty) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'tyval ty_app1_ast : (module Tff_intf.S with type env = 'env and type Ty.t = 'ty) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'ty -> 'ty) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'tyval term_app1 : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> ('term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval term_app1_ast : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval ty_app2 : (module Tff_intf.S with type env = 'env and type Ty.t = 'ty) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> ('ty -> 'ty -> 'ty) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'tyval ty_app2_ast : (module Tff_intf.S with type env = 'env and type Ty.t = 'ty) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'ty -> 'ty -> 'ty) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'tyval term_app2 : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> ('term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval term_app2_ast : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval ty_app3 : (module Tff_intf.S with type env = 'env and type Ty.t = 'ty) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> ('ty -> 'ty -> 'ty -> 'ty) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'tyval ty_app3_ast : (module Tff_intf.S with type env = 'env and type Ty.t = 'ty) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'ty -> 'ty -> 'ty -> 'ty) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'tyval term_app3 : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> ('term -> 'term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval term_app3_ast : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'term -> 'term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval ty_app4 : (module Tff_intf.S with type env = 'env and type Ty.t = 'ty) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> ('ty -> 'ty -> 'ty -> 'ty -> 'ty) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'tyval ty_app4_ast : (module Tff_intf.S with type env = 'env and type Ty.t = 'ty) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'ty -> 'ty -> 'ty -> 'ty -> 'ty) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'tyval term_app4 : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> ('term -> 'term -> 'term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval term_app4_ast : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> Dolmen_std.Term.t -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'term -> 'term -> 'term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval term_app_left : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t list -> unit) -> 'env -> string -> ('term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval term_app_left_ast : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t list -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval term_app_right : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t list -> unit) -> 'env -> string -> ('term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval term_app_right_ast : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t list -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval term_app_chain : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t list -> unit) -> 'env -> string -> ('term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'termval term_app_chain_ast : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen_std.Term.t -> Dolmen_std.Term.t list -> unit) -> 'env -> string -> (Dolmen_std.Term.t -> 'term -> 'term -> 'term) -> Dolmen_std.Term.t -> Dolmen_std.Term.t list -> 'term