Module Logtk.Unif
Unification and Matching
type unif_subst
= Unif_subst.t
type subst
= Subst.t
type term
= InnerTerm.t
type ty
= InnerTerm.t
type 'a sequence
= ('a -> unit) -> unit
val occurs_check : depth:int -> subst -> InnerTerm.t HVar.t Scoped.t -> InnerTerm.t Scoped.t -> bool
val unif_array_com : ?size:[ `Same | `Smaller ] -> 'subst -> op:('subst -> 'a Scoped.t -> 'a Scoped.t -> 'subst Sequence.t) -> 'a array Scoped.t -> 'a array Scoped.t -> 'subst Sequence.t
Generic unification over two arrays (of the same size, or the first one must be smaller or equal)
val unif_list : 'subst -> op:('subst -> 'a Scoped.t -> 'a Scoped.t -> 'subst Sequence.t) -> 'a list Scoped.t -> 'a list Scoped.t -> 'subst Sequence.t
Generic unification over two lists (of the same size)
val unif_list_com : ?size:[ `Same | `Smaller ] -> 'subst -> op:('subst -> 'a Scoped.t -> 'a Scoped.t -> 'subst Sequence.t) -> 'a list Scoped.t -> 'a list Scoped.t -> 'subst Sequence.t
Generic unification over two lists (of the same size or smaller)
val pair_lists_right : term -> term list -> term -> term list -> term list * term list
in HO, we have
f1 l1
andf2 l2
, where application is left-associative. we need to unify from the right (the outermost application is on the right) so this returns pairs to unify (including heads).
val pair_lists_left : term list -> term -> term list -> term -> term list * term list
in HO, we have
l1 -> ret1
andl2 -> ret2
, where->
is right-associative. we need to unify from the left, so this returns pairs to unify (including return types).
Signatures
module type S = Unif_intf.S
Base (scoped terms)
module Inner : S with type term = InnerTerm.t and type ty = InnerTerm.t
To be used only on terms without
InnerTerm
.Multiset constructor
Specializations
module Ty : sig ... end
module FO : sig ... end