HOL.Substitution (hol v1.0.2)

View Source

This module implements the substitution. It can be used to replace free variables in a term with any other terms.

Example

# Create Term
iex> x = mk_free_var("x", mk_type(:i, [mk_type(:i)]))
iex> term = mk_term(x) |> mk_appl_term(mk_const_term("c", mk_type(:i)))
iex> PrettyPrint.pp_term(term)
"(x c)"
# Create substitution
iex> term_y = mk_free_var_term("y", mk_type(:i, [mk_type(:i)]))
iex> substitution = mk_substitution(x, term_y)
iex> subst(substitution, term) |> PrettyPrint.pp_term()
"(y c)"

Summary

Functions

Adds a single substitution to a list of substitutions. The new substitution is applied to all terms in the other substitutions, keeping the list idempotent.

Applies a singular substitution or a list of substitutions to a term

Functions

add_subst(substs, new_subst, fvar_tags_not_add \\ [])

Adds a single substitution to a list of substitutions. The new substitution is applied to all terms in the other substitutions, keeping the list idempotent.

Substitutions using unique free variables with a tag that is in fvar_tags_not_add are not added to the list, but still apply their substitution to the terms.

Example

iex> x = mk_free_var("x", mk_type(:i))
iex> y = mk_free_var("y", mk_type(:i))
iex> subst_list = [mk_substitution(y, mk_term(x))]
iex> new_subst = mk_substitution(x, mk_const_term("c", mk_type(:i)))
iex> add_subst(subst_list, new_subst) |> PrettyPrint.pp_subst()
"x <- c | y <- c"

subst(substitutions, term)

Applies a singular substitution or a list of substitutions to a term

Example

# Create Term
iex> x = mk_free_var("x", mk_type(:i, [mk_type(:i)]))
iex> term = mk_term(x) |> mk_appl_term(mk_const_term("c", mk_type(:i)))
iex> PrettyPrint.pp_term(term)
"(x c)"
# Create substitution
iex> term_y = mk_free_var_term("y", mk_type(:i, [mk_type(:i)]))
iex> substitution = mk_substitution(x, term_y)
iex> subst(substitution, term) |> PrettyPrint.pp_term()
"(y c)"