Module Logtk.Term
Terms
Term
type t
= private InnerTerm.t
type term
= t
type var
= Type.t HVar.t
Variables are typed with
Type.t
type view
= private
|
AppBuiltin of Builtin.t * t list
|
DB of int
Bound variable (De Bruijn index)
|
Var of var
Term variable
|
Const of ID.t
Typed constant
|
App of t * t list
Application to a list of terms (cannot be left-nested)
|
Fun of Type.t * t
Lambda abstraction
module Classic : sig ... end
module IntMap : Stdlib.Map.S with type IntMap.key = int
val hash_mod_alpha : t -> int
Hash invariant w.r.t variable renaming
Constructors
val var : var -> t
val var_of_int : ty:Type.t -> int -> t
val bvar : ty:Type.t -> int -> t
Create a bound variable. Providing a type is mandatory. Warning: be careful and try not to use this function directly.
- raises InnerTerm.IllFormedTerm
if the index is < 0
val 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 -> t
Create a typed constant
val app : t -> t list -> t
Apply a term to a list of terms
- raises Type.ApplyError
if types do not match.
val app_w_ty : ty:Type.t -> t -> t list -> t
Apply a term to a list of terms
- raises Type.ApplyError
if types do not match.
val true_ : t
val false_ : t
val fun_ : Type.t -> t -> t
val fun_l : Type.t list -> t -> t
val fun_of_fvars : var list -> t -> t
Build a function from a list of free vars + the body. This performs the De Bruijn transformation, and shifts the body.
val open_fun : t -> Type.t list * t
val open_fun_offset : offset:int -> t -> var list * t * int
open_fun ~offset (λxy. F)
returns[v1,v2], F[v1/x,v2/y], offset+2
wherev1
andv2
are fresh variables starting from offset
val is_var : t -> bool
val is_appbuiltin : t -> bool
val is_bvar : t -> bool
val is_formula : t -> bool
val is_app : t -> bool
val is_const : t -> bool
val is_fun : t -> bool
val is_app_var : t -> bool
val is_type : t -> bool
Does it have type
tType
?
val in_pfho_fragment : t -> bool
val in_lfho_fragment : t -> bool
val is_fo_term : t -> bool
val in_fool_fragment : t -> bool * bool
val is_true_or_false : t -> bool
val lambda_depth : t -> int option
If term has no lambdas reutrn None; otherwise, return Some d where d is the maximal level of lambda nestings
val comb_depth : t -> int option
combinatory equivalent to lambda_depth
val hd_is_comb : Builtin.t -> bool
val is_comb : t -> bool
val mk_fresh_skolem : ?prefix:string -> var list -> Type.t -> (ID.t * Type.t) * t
val as_const : t -> ID.t option
val as_const_exn : t -> ID.t
val as_var : t -> var option
val as_var_exn : t -> var
val as_bvar_exn : t -> int
val as_app : t -> t * t list
as_app t
decomposest
into a head (non-application) and arguments, such as(let f,l = as_app t in app f l) = t
val as_app_mono : t -> t * t list
as_app t
decomposest
into a head (possibly applied to type arguments) and arguments, such as(let f,l = as_app t in app f l) = t
val as_app_mono : t -> t * t list
head term, but still with type arguments and the remaining arguments
val of_term_unsafe : InnerTerm.t -> t
NOTE: this can break the invariants and make
view
fail. Only apply with caution.
val of_term_unsafe_l : InnerTerm.t list -> t list
val of_ty : Type.t -> t
Upcast from type
Iters
module Seq : sig ... end
val is_ground : t -> bool
is the term ground? (no free vars)
val is_linear : t -> bool
is the term ground? (no free vars)
is the term linear? (no vars occurring multiple times)
val monomorphic : t -> bool
is the term linear? (no vars occurring multiple times)
true if the term contains no type var
val is_beta_reducible : t -> bool
val has_lambda : t -> bool
val max_var : VarSet.t -> int
find the maximum variable
val min_var : VarSet.t -> int
minimum variable
val depth : t -> int
depth of the term
val size : t -> int
Size (number of nodes)
val normalize_bools : t -> t
val cover_with_terms : ?depth:int -> ?recurse:bool -> t -> t option list -> t list
val max_cover : t -> t option list -> t
val weight : ?var:int -> ?sym:(ID.t -> int) -> t -> int
Compute the weight of a term, given a weight for variables and one for ID.ts.
- parameter var
unique weight for every variable (default 1)
- parameter sym
function from ID.ts to their weight (default
const 1
)
- since
- 0.5.3
val ho_weight : t -> int
val ty_vars : t -> Logtk.Type.VarSet.t
Set of free type variables
val is_ho_var : t -> bool
val is_ho_app : t -> bool
is_ho_app (F t1…tn)
is true, whenF
is a variable (of any function type)
val is_ho_pred : t -> bool
is_ho_pred (F t1…tn)
is true, whenF
is a predicate variable
val is_ho_at_root : t -> bool
is_ho_at_root t
returnstrue
if the termt
is a higher-order variable, possibly applied (i.e.is_ho_var t || is_ho_app t
)
Subterms and Positions
module Pos : sig ... end
High-level operations
val symbols : ?init:Logtk.ID.Set.t -> t -> Logtk.ID.Set.t
Symbols of the term (keys of signature)
Fold
val all_positions : ?vars:bool -> ?ty_args:bool -> ?var_args:bool -> ?fun_bodies:bool -> ?pos:Position.t -> t -> t Position.With.t Iter.t
Iterate on all sub-terms with their position.
- parameter vars
specifies whether variables are folded on (default false).
- parameter ty_args
specifies whether type arguments are folded on (default true).
- parameter var_args
specifies whether arguments of applied variables are folded on (default true).
- parameter fun_bodies
specifies whether bodies of lambda-expressions are folded on (default true).
- parameter pos
the initial position (default empty)
Some AC-utils
module type AC_SPEC = sig ... end
Printing/parsing
val print_all_types : bool Stdlib.ref
If true,
pp
will print the types of all annotated terms
include Interfaces.PRINT with type t := t
include Interfaces.PRINT_DE_BRUIJN with type t := t and type term := t
type t
type term
type print_hook
= int -> term CCFormat.printer -> Stdlib.Format.formatter -> term -> bool
User-provided hook that can be used to print terms (for composite cases) before the default printing occurs. The int argument is the De Bruijn depth in the term. A hook takes as arguments the depth and the recursive printing function that it can use to print subterms. A hook should return
true
if it fired,false
to fall back on the default printing.
val pp_depth : ?hooks:print_hook list -> int -> t CCFormat.printer
val pp_var : Type.t HVar.t CCFormat.printer
val add_hook : print_hook -> unit
Hook used by default for printing
val default_hooks : unit -> print_hook list
List of default hooks
val debugf : Stdlib.Format.formatter -> t -> unit
debugf printing, with sorts
Formulas
module Form : sig ... end
Arith
module Arith : sig ... end
module DB : sig ... end
TPTP
module TPTP : sig ... end
module ZF : sig ... end
val pp_in : Output_format.t -> t CCFormat.printer
module Conv : sig ... end