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. | `Unary of string -> 'ret
  2. | `Binary of string -> string -> 'ret
  3. | `Ternary of string -> string -> string -> 'ret
  4. | `Nary of int * (string list -> 'ret)
]

The type of indexed family of operators.

Sourceval parse_id : Dolmen.Std.Id.t -> (string * 'ret indexed) list -> err:(string -> int -> int -> 'ret) -> k:(string list -> 'ret) -> 'ret

parse_id id l ~err ~k splits id (using split_id) into a list. If the list has a head s and a tail l, it tries and find in the list l a pair (s', indexed) such that s = s'. If the length of l matches the arity of indexed, the provided function is called, else err is called with s, the arity of indexed, and the lenght of l. If no match is found or the split list does not contain a head and a tail, k is called wiht the split list.

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 -> string -> (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 -> string -> '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 -> string -> (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 -> string -> ('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 -> string -> (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 -> string -> ('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 -> string -> (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 -> string -> ('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 -> string -> (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 -> string -> ('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 -> string -> (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 -> string -> ('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 -> string -> (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 -> string -> ('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 -> string -> (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 -> string -> ('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 -> string -> (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 -> string -> ('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 -> string -> (Dolmen.Std.Term.t -> 'term -> 'term -> 'term -> 'term -> '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 -> string -> ('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 -> string -> (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 -> string -> ('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 -> string -> (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 -> string -> ('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 -> string -> (Dolmen.Std.Term.t -> 'term -> 'term -> 'term) -> Dolmen.Std.Term.t -> Dolmen.Std.Term.t list -> 'term