package dolmen_type

  1. Overview
  2. Docs

Module Dolmen_type.BaseSource

Builtin functions manipulations

Sourceval noop : _ -> _ -> [> `Not_found ]

Noop builtins function.

Sourceval merge : ('a -> 'b -> [> `Not_found ] as 'c) list -> 'a -> 'b -> 'c

A convenient function for merging a list of builtin parser functions into a single builtin function.

Smtlib Indexed id helpers

Sourcetype 'ret indexed = [
  1. | `Not_indexed
  2. | `Unary of string -> 'ret
  3. | `Binary of string -> string -> 'ret
  4. | `Ternary of string -> string -> string -> 'ret
  5. | `Nary of int * (string list -> 'ret)
]

The type of indexed family of operators.

Sourceval parse_indexed : string -> string list -> (string -> 'ret indexed) -> err:(string -> int -> int -> 'ret) -> k:(unit -> 'ret) -> 'ret

parse_id basename indexes f ~err ~k uses the function f to get an expected arity for the indexed identifier, and then tries and parse the index list according to the returned specification.

Sourceval 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 err function for parse_id for typing sort indexed families.

Sourceval 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 err function for parse_id for typing term indexed families.

Low-level helpers

Sourcetype ('env, 'args, 'ret) helper = (module Tff_intf.S with type env = 'env) -> 'env -> Intf.symbol -> (Dolmen.Std.Term.t -> 'args -> 'ret) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ret
Sourceval make_op0 : (_, unit, _) helper

make_op (module Type) env ast op arity args ret checks that args is the empty list and returns Some (ret ()), else it raises the appropriate exception from the typechecking module.

Sourceval make_op1 : (_, Dolmen.Std.Term.t, _) helper

Same as make_op0 but the returning function takes a term as argument.

Same as make_op0 but the returning function takes a couple of terms as argument.

Same as make_op0 but the returning function takes a triple of terms as argument.

Same as make_op0 but the returning function takes a quadruple of terms as argument.

Sourceval make_opn : int -> (_, Dolmen.Std.Term.t list, _) helper

Same as make_op0 but 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.

Sourceval make_assoc : (_, Dolmen.Std.Term.t list, _) helper

Ensures the list of arguments is at least of size 2 (used for associative symbols).

Sourceval fold_left_assoc : ('a -> 'a -> 'a) -> 'a list -> 'a

Fold application of a left-associative function on a list.

Sourceval fold_right_assoc : ('a -> 'a -> 'a) -> 'a list -> 'a

Fold application of a right-associative function on a list.

Sourceval make_chain : (_, Dolmen.Std.Term.t list, _) helper

Ensures the list of arguments is at least of size 2 (used for chainable symbols).

Sourceval map_chain : (module Tff_intf.S with type T.t = 't) -> ('t -> 't -> 't) -> 't list -> 't

Map a function on succesive pairs of elements in the arguments lists, and build the resulting conjunction. map_chain (module Type) mk [t1; t2; ..; tn] is Type.T._and [mk t1 t2; mk t2 t3; ..]

High level helpers

Sourceval app0 : (module Tff_intf.S with type env = 'env) -> ?check:(Dolmen.Std.Term.t -> unit) -> 'env -> Intf.symbol -> 'ret -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ret
Sourceval app0_ast : (module Tff_intf.S with type env = 'env) -> ?check:(Dolmen.Std.Term.t -> unit) -> 'env -> Intf.symbol -> (Dolmen.Std.Term.t -> 'ret) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ret
Sourceval 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 -> Intf.symbol -> ('ty -> 'ty) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ty
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'ty -> 'ty) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ty
Sourceval 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 -> Intf.symbol -> ('term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> ('ty -> 'ty -> 'ty) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ty
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'ty -> 'ty -> 'ty) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ty
Sourceval 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 -> Intf.symbol -> ('term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> ('ty -> 'ty -> 'ty -> 'ty) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ty
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'ty -> 'ty -> 'ty -> 'ty) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ty
Sourceval 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 -> Intf.symbol -> ('term -> 'term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'term -> 'term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> ('ty -> 'ty -> 'ty -> 'ty -> 'ty) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ty
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'ty -> 'ty -> 'ty -> 'ty -> 'ty) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'ty
Sourceval 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 -> Intf.symbol -> ('term -> 'term -> 'term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'term -> 'term -> 'term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval term_app_list : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen.Std.Term.t -> unit) -> 'env -> Intf.symbol -> ('term list -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval term_app_list_ast : (module Tff_intf.S with type env = 'env and type T.t = 'term) -> ?check:(Dolmen.Std.Term.t -> unit) -> 'env -> Intf.symbol -> (Dolmen.Std.Term.t -> 'term list -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> ('term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> ('term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> ('term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval 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 -> Intf.symbol -> (Dolmen.Std.Term.t -> 'term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval term_app_cst : (module Tff_intf.S with type env = 'env and type T.t = 'term and type T.Const.t = 'cst) -> 'env -> 'cst -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval term_app_ho : (module Thf_intf.S with type env = 'env and type T.t = 'term) -> 'env -> 'term -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term
Sourceval term_app_ho_ast : (module Thf_intf.S with type env = 'env and type T.t = 'term) -> 'env -> (Dolmen.Std.Term.t -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term