module FOTerm:sig..end
Those terms provide a first-order presentation of higher-order terms (without functions), in the sense that they make currying possible (as well as applying functions to other terms).
This is as if terms had an `apply` symbol everywhere, but more lightweight.
Types and terms are mixed because it makes application much easier.
typet = privateInnerTerm.t
typeterm =t
typevar =Type.t HVar.t
Type.ttype view = private
| |
AppBuiltin of |
|||
| |
DB of |
(* |
Bound variable (De Bruijn index)
| *) |
| |
Var of |
(* |
Term variable
| *) |
| |
Const of |
(* |
Typed constant
| *) |
| |
App of |
(* |
Application to a list of terms (cannot be left-nested)
| *) |
val view : t -> view
module Classic:sig..end
val subterm : sub:t -> t -> boolsub is a (non-strict) subterm of tinclude Interfaces.HASH
include Interfaces.ORD
val ty : t -> Type.tmodule Set:CCSet.Swith type elt = t
module Map:CCMap.Swith type key = t
module Tbl:CCHashtbl.Swith type key = t
val same_l : t list -> t list -> boolsame_l l1 l2 returns true if terms of l1 and l2 are pairwise
equal, false otherwise.
Precondition: both lists have the same lengthAssert_failure if lists have not the same lengthval var : var -> t
val var_of_int : ty:Type.t -> int -> t
val bvar : ty:Type.t -> int -> tInnerTerm.IllFormedTerm if the index is < 0val builtin : ty:Type.t -> Builtin.t -> t
val app_builtin : ty:Type.t -> Builtin.t -> t list -> t
val const : ty:Type.t -> ID.t -> tval tyapp : t -> Type.t list -> tType.Error if types do not match.val app : t -> t list -> tType.ApplyError if types do not match.val app_full : t -> Type.t list -> t list -> tval true_ : t
val false_ : t
val is_var : t -> bool
val is_bvar : t -> bool
val is_app : t -> bool
val is_const : t -> bool
val of_term_unsafe : InnerTerm.t -> tFOTerm.view fail. Only
apply with caution.val of_ty : Type.t -> tmodule VarSet:CCSet.Swith type elt = var
module VarMap:CCMap.Swith type key = var
module VarTbl:CCHashtbl.Swith type key = var
module Seq:sig..end
val var_occurs : var:var -> t -> boolvar_occurs ~var t true iff var in tval is_ground : t -> boolval monomorphic : t -> boolval max_var : VarSet.t -> intval min_var : VarSet.t -> intval add_vars : unit VarTbl.t -> t -> unitval vars : t Sequence.t -> VarSet.tval vars_prefix_order : t -> var listval depth : t -> intval head : t -> ID.t optionval head_exn : t -> ID.tval size : t -> intval weight : ?var:int -> ?sym:(ID.t -> int) -> t -> intvar : unique weight for every variable (default 1)sym : function from ID.ts to their weight (default const 1)val ty_vars : t -> Type.VarSet.tmodule Pos:sig..end
val replace : t -> old:t -> by:t -> treplace t ~old ~by syntactically replaces all occurrences of old
in t by the term by.val symbols : ?init:ID.Set.t -> t -> ID.Set.tval contains_symbol : ID.t -> t -> boolval all_positions : ?vars:bool ->
?ty_args:bool ->
?pos:Position.t -> t -> (t * Position.t) Sequence.tvars : specifies whether variables are folded on (default false).ty_args : specifies whether type arguments are folded on (default true).pos : the initial position (default empty)module type AC_SPEC =sig..end
module AC(A:AC_SPEC):sig..end
val print_all_types : bool Pervasives.refpp will print the types of all annotated termsinclude Interfaces.PRINT
include Interfaces.PRINT_DE_BRUIJN
val add_hook : print_hook -> unitval default_hooks : unit -> print_hook listval debugf : Format.formatter -> t -> unitmodule Arith:sig..end
module TPTP:sig..end
module Conv:sig..end