Module Logtk.TypedSTerm
Simple Typed Terms
.
type location
= ParseLocation.t
type t
type term
= t
type ty
= t
type match_cstor
=
{
cstor_id : ID.t;
cstor_ty : ty;
cstor_args : ty list;
}
a constructor of given type, applied to a list of type argumentss
type match_branch
= match_cstor * t Var.t list * t
type view
= private
|
Var of t Var.t
variable
|
Const of ID.t
constant
|
App of t * t list
apply term
|
Ite of t * t * t
|
Match of t * match_branch list
|
Let of (t Var.t * t) list * t
|
Bind of Binder.t * t Var.t * t
bind variable in term
|
AppBuiltin of Builtin.t * t list
|
Multiset of t list
|
Record of (string * t) list * t option
extensible record
|
Meta of meta_var
Unification variable
and meta_var
= t Var.t * t option Stdlib.ref * [ `Generalize | `BindDefault | `NoBind ]
val view : t -> view
val loc : t -> location option
val ty : t -> t option
val ty_exn : t -> t
val head : t -> ID.t option
val head_exn : t -> ID.t
- raises Not_found
if not an application/const
Constructors
val tType : t
val prop : t
val var : ?loc:location -> t Var.t -> t
val var_of_string : ?loc:location -> ty:t -> string -> t
val app : ?loc:location -> ty:t -> t -> t list -> t
val app_whnf : ?loc:location -> ty:t -> t -> t list -> t
application + WHNF
val const : ?loc:location -> ty:t -> ID.t -> t
val const_of_cstor : ?loc:location -> match_cstor -> t
val ite : ?loc:location -> t -> t -> t -> t
val match_ : ?loc:location -> t -> match_branch list -> t
val let_ : ?loc:location -> (t Var.t * t) list -> t -> t
val app_builtin : ?loc:location -> ty:t -> Builtin.t -> t list -> t
val builtin : ?loc:location -> ty:t -> Builtin.t -> t
val bind : ?loc:location -> ty:t -> Binder.t -> t Var.t -> t -> t
val bind_list : ?loc:location -> ty:t -> Binder.t -> t Var.t list -> t -> t
val multiset : ?loc:location -> ty:t -> t list -> t
val meta : ?loc:location -> meta_var -> t
val record : ?loc:location -> ty:t -> (string * t) list -> rest:t Var.t option -> t
val record_flatten : ?loc:location -> ty:t -> (string * t) list -> rest:t option -> t
Build a record with possibly a row variable.
- raises IllFormedTerm
if the
rest
is not either a record or a variable.
val fun_l : ?loc:location -> t Var.t list -> t -> t
val of_string : ?loc:location -> ty:t -> string -> t
Make a constant from this string
Specific Views
module Ty : sig ... end
val sort_ty_vars_first : t Var.t list -> t Var.t list
sort the given list of variables by putting type variables first
module Form : sig ... end
Utils
val is_var : t -> bool
val is_meta : t -> bool
val is_const : t -> bool
val is_fun : t -> bool
val is_ground : t -> bool
true
iff there is no free variable
val is_monomorphic : t -> bool
true
if there are no type variables
val is_subterm : strict:bool -> t -> of_:t -> bool
is_subterm a ~of_:b
is true ifa
is a subterm ofb
.- parameter strict
if true,
a
must be a strict subterm ofb
, that is, notb
itself
val closed : t -> bool
closed t
istrue
iff all bound variables oft
occur under a binder (i.e. they are actually bound int
)
val unfold_binder : Binder.t -> t -> t Var.t list * t
unfold_binder b (b v1 (b v2... (b vn t)))
returns[v1,...,vn], t
val unfold_fun : t -> t Var.t list * t
val var_occurs : var:t Var.t -> t -> bool
var_occurs ~var t
istrue
iffvar
occurs int
val as_id_app : t -> (ID.t * Ty.t * t list) option
val vars : t -> t Var.t list
val free_vars : t -> t Var.t list
val free_vars_l : t list -> t Var.t list
val free_vars_set : t -> t Var.Set.t
val close_all : ty:t -> Binder.t -> t -> t
Bind all free vars with the symbol
val close_with_vars : ?binder:Binder.t -> t list -> t -> t
val map : f:('a -> t -> t) -> bind:('a -> ty Var.t -> 'a * ty Var.t) -> 'a -> t -> t
Generic non-recursive map
include Interfaces.PRINT with type t := t
val pp_inner : t CCFormat.printer
val pp_with_ty : t CCFormat.printer
val pp_in : Output_format.t -> t CCFormat.printer
module Seq : sig ... end
Substitutions
module Subst : sig ... end
Table of Variables
Unification
module UStack : sig ... end
val unify : ?allow_open:bool -> ?loc:location -> ?st:UStack.t -> ?subst:Subst.t -> term -> term -> unit
unifies destructively the two given terms, by modifying references that occur under
Meta
. Regular variables are not modified.- parameter allow_open
if true, metas can be unified to terms with free variables (default false)
- parameter st
used for backtracking
- parameter subst
substitution for bound variables
- raises UnifyFailure
if unification fails.
val apply_unify : ?gen_fresh_meta:(unit -> meta_var) -> ?allow_open:bool -> ?loc:location -> ?st:UStack.t -> ?subst:Subst.t -> t -> t list -> t
apply_unify f_ty args
compute the type of a function of typef_ty
, when applied to parametersargs
. The first elements ofargs
might be interpreted as types, the other ones as terms (whose types are unified against expected types).
Conversion
TPTP
module TPTP : sig ... end
module TPTP_THF : sig ... end
module ZF : sig ... end