Module Logtk__Subst.FO

include SPECIALIZED with type term = Logtk.Term.t
type term = Logtk.Term.t
type t = subst
val find_exn : t -> var Logtk.Scoped.t -> term Logtk.Scoped.t
val get_var : t -> var Logtk.Scoped.t -> term Logtk.Scoped.t option
val deref : t -> term Logtk.Scoped.t -> term Logtk.Scoped.t
val apply : ?⁠shift_vars:int -> Renaming.t -> t -> term Logtk.Scoped.t -> term

Apply the substitution to the given term/type.

parameter renaming

used to desambiguate free variables from distinct scopes

val bind : t -> var Logtk.Scoped.t -> term Logtk.Scoped.t -> t

Add v -> t to the substitution. Both terms have a context.

raises InconsistentBinding

if v is already bound in the same context, to another term.

val update : t -> var Logtk.Scoped.t -> term Logtk.Scoped.t -> t

Replace v -> ? by v -> t in the substitution. Both terms have a context.

raises InconsistentBinding

if v is not yet bound in the same context.

val of_list : ?⁠init:t -> (var Logtk.Scoped.t * term Logtk.Scoped.t) list -> t
val bind' : t -> Logtk.Type.t Logtk.HVar.t Logtk.Scoped.t -> term Logtk.Scoped.t -> t
val apply_l : ?⁠shift_vars:int -> Renaming.t -> t -> term list Logtk.Scoped.t -> term list
val of_list' : ?⁠init:t -> (Logtk.Type.t Logtk.HVar.t Logtk.Scoped.t * term Logtk.Scoped.t) list -> t
val map : (term -> term) -> t -> t
val iter : (Logtk.Type.t Logtk.HVar.t Logtk.Scoped.t -> term Logtk.Scoped.t -> unit) -> t -> unit
val filter : (Logtk.Type.t Logtk.HVar.t Logtk.Scoped.t -> term Logtk.Scoped.t -> bool) -> t -> t
val compose : scope:int -> t -> t -> t

Takes a substitution that might map a variable x to a term that containts loosely bound variables. It fixes the substitution so that all such variables are remaped to a fresh skolem

val unleak_variables : t -> t * Logtk.Term.t list

Takes a substitution that might map a variable x to a term that containts loosely bound variables. It fixes the substitution so that all such variables are remaped to a fresh skolem

val subset_is_renaming : subset:term Logtk.Scoped.t list -> res_scope:int -> t -> bool
val canonize_neg_vars : var_set:Logtk.InnerTerm.VarSet.t -> t
val canonize_all_vars : term -> term