Module checked

Substitutions checking if the substitutions are valid

final class lambda_calculus.visitors.substitution.checked.CheckedSubstitution(variable: V, value: Term[V], free_variables: Set[V])[source]

Bases: Substitution[V]

Substitution which checks if a free variable gets bound.

Parameters
  • variable – variable to substitute

  • value – value which should be substituted

  • free_variables – free variables which should not be bound

Raises

errors.CollisionError – If a free variable gets bound

classmethod from_substitution(variable: V, value: Term[V]) CheckedSubstitution[V][source]

Create an instance from the substitution it should perform

Parameters
  • variable – variable to substitute

  • value – value which should be substituted

Returns

new instance with free_variables set to the free variables of value

bind_variable(name: V) None[source]

Mark a variable as bound.

Bound variables are not automatically unbound and can be bound multiple times.

Parameters

name – name of the variable

unbind_variable(name: V) None[source]

Mark a variable as not bound.

A variable needs to be unbound multiple times if it was bound multiple times.

Parameters

name – name of the variable

Raises

KeyError – If the variable is not bound

visit_variable(variable: Variable[V]) Term[V][source]

Visit a Variable term.

Parameters

variable – variable term to visit

Raises

errors.CollisionError – If the substitution whould bind free variables

Returns

variable term or value which should be substituted

visit_abstraction(abstraction: Abstraction[V]) Abstraction[V][source]

Visit an Abstraction term.

Parameters

abstraction – abstraction term to visit

Raises

errors.CollisionError – If a substitution in the body whould bind free variables

Returns

abstraction term or new term with substitutions performed

visit_application(application: Application[V]) Application[V][source]

Visit an Application term.

Parameters

appliation – application term to visit

Raises

errors.CollisionError – If a substitution in the abstraction or argument whould bind free variables

Returns

new term with substitutions performed