Package visitors

Visitors for performing operations on Terms

class lambda_calculus.visitors.Visitor[source]

Bases: ABC, Generic[T, V]

ABC for Visitors visiting Terms.

The visitor is responsible for visiting child terms.

Type Variables:

T: represents the type of the result produced by visiting terms V: represents the type of variables used in terms

final visit(term: Term[V]) T[source]

Visit a term

Parameters

term – term to visit

Returns

Result of calling terms.Term.accept() with self as argument

abstract visit_variable(variable: Variable[V]) T[source]

Visit a Variable term.

Parameters

variable – variable term to visit

Returns

value as required by its type variable

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

Visit an Abstraction term

The body is not automatically visited.

Parameters

abstraction – abstraction term to visit

Returns

value as required by its type variable

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

Visit an Application term

The abstraction and argument are not automatically visited.

Parameters

appliation – application term to visit

Returns

value as required by its type variable

class lambda_calculus.visitors.BottomUpVisitor[source]

Bases: Visitor[T, V]

ABC for visitors which visit child terms first

Child terms are automatically visited.

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

Visit an Abstraction term

The body is visited before calling ascend_abstraction().

Parameters

abstraction – abstraction term to visit

Returns

value returned by ascend_abstraction()

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

Visit an Application term

The abstraction and argument are visited before calling ascend_application().

Parameters

application – application term to visit

Returns

value returned by ascend_application()

abstract ascend_abstraction(abstraction: Abstraction[V], body: T) T[source]

Visit an Abstraction term after visiting its body.

Parameters
  • abstraction – abstraction term to visit

  • body – value produced by visiting its body

Returns

value as required by its type variable

abstract ascend_application(application: Application[V], abstraction: T, argument: T) T[source]

Visit an Application term after visiting its abstraction and argument.

Parameters
  • application – application term to visit

  • abstraction – value produced by visiting its abstraction

  • argument – value produced by visiting its argument

Returns

value as required by its type variable

class lambda_calculus.visitors.DeferrableVisitor[source]

Bases: Visitor[T, V]

ABC for visitors which can visit terms top down lazyly.

abstract defer_abstraction(abstraction: Abstraction[V]) tuple[T, Optional[lambda_calculus.visitors.DeferrableVisitor[T, V]]][source]

Visit an Abstraction term.

Parameters

abstraction – abstraction term to visit

Returns

tuple containing a value as required by its type variable and a visitor to be used for visiting its body

abstract defer_application(application: Application[V]) tuple[T, Optional[lambda_calculus.visitors.DeferrableVisitor[T, V]], Optional[lambda_calculus.visitors.DeferrableVisitor[T, V]]][source]

Visit an Application term.

Parameters

application – application term to visit

Returns

tuple containing a value as required by its type variable and visitors to be used for visiting its abstraction and argument