module BuiltinFun:`sig`

..`end`

type`t =`

`TopDown.S.T.t -> TopDown.S.T.t option`

`type `

map

Map symbols to builtin functions. Every symbol can only have at
most one built-in function.

`val create : ``unit -> map`

`val add : ``map -> Const.t -> t -> unit`

Interpret the given constant by the given function. The function
can assume that any term is it given as a parameter has the
constant as head.

`val add_list : ``map -> (Const.t * t) list -> unit`

`val interpreted : ``map -> Const.t -> bool`

Is the constant interpreted by a built-in function?

`val eval : ``map -> TopDown.S.T.t -> TopDown.S.T.t`

Evaluate the term at root