Jump to content

Böhm tree: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Tweak cites | Alter: journal. Add: s2cid, year. | Use this tool. Report bugs. | #UCB_Gadget
expand to cover Levy-Longo and Berarducci trees
Line 1: Line 1:
In the study of [[denotational semantics]] of the [[lambda calculus]], '''Böhm trees''',{{efn|per {{harvtxt|Sangiorgi|Walker|2003|p=493}}, introduced in {{harvtxt|Barendregt|1977}} and named after a theorem of [[Corrado Böhm]]}} '''Lévy-Longo trees''',<ref>{{cite journal |last1=Levy |first1=Jean-Jacques |title=An algebraic interpretation of the λβK-calculus and a labelled λ-calculus |journal=λ-Calculus and Computer Science Theory |date=1975 |volume=37 |pages=147–165 |doi=10.1007/BFb0029523}}</ref><ref>{{cite journal |last1=Longo |first1=Giuseppe |title=Set-theoretical models of λ-calculus: theories, expansions, isomorphisms |journal=Annals of Pure and Applied Logic |date=August 1983 |volume=24 |issue=2 |pages=153–188 |doi=10.1016/0168-0072(83)90030-1}}</ref>{{efn|coined in {{harvtxt|Ong|1988}}, per {{harvtxt|Sangiorgi|Walker|2003|p=511}}}} and '''Berarducci trees'''<ref>{{cite book |title=Logic and algebra |date=1996 |publisher=Marcel Dekker |location=New York |isbn=0824796063|chapter=Infinite λ-calculus and non-sensible models|pp=339-377|first=Alessandro|last=Berarducci|chapter-url=http://people.dm.unipi.it/berardu/Art/1996Nonsensible/non-sensible.pdf|access-date=23 September 2007}}</ref> are (potentially infinite) tree-like mathematical objects that capture the "meaning" of a term up to some set of "meaningless" terms.
A '''Böhm tree''' is a (potentially infinite) tree-like mathematical object that can be used to provide [[denotational semantics]] (the "meaning") for terms of the [[lambda calculus]] (and programming languages in general by using translations to lambda calculus). It is named after [[Corrado Böhm]].


==Motivation==
==Motivation==


A simple way to read the meaning of a computation is to consider it as a mechanical procedure consisting of a finite number of steps that, when completed, yields a result. This interpretation is inadequate, however, for procedures that do not terminate after a finite number of steps, but nonetheless have an intuitive meaning. Consider, for example, a procedure for computing the decimal expansion of {{math|[[pi|π]]}}; if implemented appropriately, it can provide partial output as it "runs", and this ongoing output is a natural way to assign meaning to the computation. This is in contrast to, say, a program that loops infinitely without ever providing output. These two procedures have very different intuitive meanings.
A simple way to read the meaning of a computation is to consider it as a mechanical procedure consisting of a finite number of steps that, when completed, yields a result. In particular, considering the lambda calculus as as a [[rewriting]] system, each beta reduction step is a rewrite step, and once there are no further beta reductions the term is in [[normal form]]. We could thus, naively following following [[Alonzo Church|Church's]] suggestion,<ref>{{cite book|last=Church|first=Alonzo|title=The calculi of lambda-conversion|year=1941|publisher=Princeton University Press|isbn=0691083940|page=15}}</ref> say the meaning of a term is its normal form, and that terms without a normal form are meaningless. For example the meanings of <code>'''I''' = λx.x</code> and <code>'''I''' '''I'''</code> are both <code>'''I'''</code>. This works for any strongly normalizing subset of the lambda calculus, such as a [[typed lambda calculus]].


This naive assignment of meaning is however inadequate for the full lambda calculus. The term <code>'''Ω''' =(λx.x x)(λx.x x)</code> does not have a normal form, and similarly the term <code>X=λx.x'''Ω'''</code> does not have a normal form. But the application <code>'''Ω''' K</code>, where <code>'''K''' = λx.λy.x</code> is the [[Lambda_calculus#K|standard term]], reduces only to itself, whereas the application <code>X '''K'''</code> reduces with normal order reduction to <code>'''I'''</code>, hence has a meaning. We thus see that not all non-normalizing terms are equivalent. We would like to say that <code>'''Ω'''</code> is less meaningful than <code>X</code> because applying <code>X</code> to a term can produce a result but applying <code>'''Ω'''</code> cannot.
Since a computation described using lambda calculus is the process of reducing a lambda term to its normal form, this normal form itself is the result of the computation, and the entire process may be considered as "evaluating" the original term. For this reason [[Alonzo Church|Church's]] original suggestion was that the meaning of the computation (described by) a lambda term should be the normal form it reduces to, and that terms which do not have a normal form are meaningless.<ref>{{cite book|last=Church|first=Alonzo|title=The calculi of lambda-conversion|year=1941|publisher=Princeton University Press|isbn=0691083940|page=15}}</ref> This suffers exactly the inadequacy described above. Extending the {{math|π}} analogy, however, if "trying" to reduce a term to its normal form would give "in the limit" an infinitely long lambda term (if such a thing existed), that object could be considered this result. No such term exists in the lambda calculus, of course, and so Böhm trees are the objects used in this place.


In the infinitary lambda calculus, the term <code>N N</code>, where </code>N = λx.'''I'''(xx)</code>, reduces to both to <code>'''I''' ('''I''' (...))</code> and <code>'''Ω'''</code>. Hence there are also issues with confluence of normalization.{{sfn|Severi|de Vries|2011|p=1}}
==Informal definition==


== Sets of meaningless terms ==
A Böhm-like tree is a (possibly infinite) [[directed acyclic graph]] having some vertices labelled with lambda terms of the form λ''x''<sub>1</sub>.λ''x''<sub>2</sub>...λ''x''<sub>n</sub>.''y'' (''n'' may be 0), where exactly one vertex (the "root") has no parent, all other vertices have exactly one parent, every vertex has a finite number of children, and every unlabeled vertex has no children.


We define a set <math>U</math> of meaningless terms as follows:<ref>{{cite journal |last1=Kennaway |first1=Richard |last2=van Oostrom |first2=Vincent |last3=de Vries |first3=Fer-Jan |title=Meaningless terms in rewriting |journal=Algebraic and Logic Programming |date=1996 |volume=1139 |pages=254–268 |doi=10.1007/3-540-61735-3_17}}</ref>{{sfn|Severi|de Vries|2011|p=5}}
Let us have the following notions for Böhm-like trees ''A'', ''B'':


* Rootactiveness: Every rootactive term is in <math>U</math>. A term <math>M</math> is rootactive if for all <math>M \stackrel{*}{\to} N </math> there exists a redex <math>(\lambda x.P)Q</math> such that <math>N \stackrel{*}{\to} (\lambda x.P)Q</math>.
* λ''x''.''A'' is ''A'' with λ''x''. prepended to the label at its root
* Closure under β-reduction: For all <math>M \in U</math>, if <math>M \stackrel{*}{\to} N</math> then <math>N \in U</math>.
* (λ''x''.''A'') ''B'' is ''A''[''x'':=''B''] (see below)
* Closure under substitution: For all <math>M \in U</math> and substitutions <math>\sigma</math>, <math>M\sigma \in U</math>.
* ''A'' ''B'' (where the label on the root node of ''A'' has no [[Lambda calculus#Free and bound variables|binders]]) is a tree obtained from ''A'' by adding ''B'' as a new rightmost child of the root node
* Overlap: For all <math>\lambda x.M \in U</math>, <math>(\lambda x.M )N \in U</math> .
* On a vertex with label λ''x''<sub>1</sub>...λ''x''<sub>n</sub>.''y'', ''y'' occurs free at that vertex if λ''y'' does not appear in the label of that vertex or any of its ancestors
* Indiscernibility: For all <math>M, N</math>, if <math>N</math> can be obtained from <math>M</math> by replacing a set of pairwise disjoint subterms in <math>U</math> with other terms of <math>U</math>, then <math>M \in U</math> if and only if <math>N \in U</math>.
* The capture-avoiding substitution ''A''[''x'':=''B''] is:
* Closure under β-expansion. For all <math>N \in U</math>, if <math>M \stackrel{*}{\to} N</math>, then <math>M \in U</math>. Some definitions leave this out, but it is useful.{{sfn|Severi|de Vries|2011|pp=4-5}}
*# (λ''x''.''A'')[''x'':=''B''] is λ''x''.''A''
*# (λ''y''.''A'')[''x'':=''B''] (x and y are different) is λ''z''.''A''[''y'':=''z''][''x'':=''B''] where ''z'' is not in ''A'' and not free in ''B'' (it may remain ''y'' if ''y'' is not free in ''B'')
*# If the root node of ''A'' has the label ''x'' and children ''C''<sub>1</sub>...''C''<sub>n</sub>, ''A''[''x'':=''B''] is ((''B'' ''C''<sub>1</sub>[''x'':=''B'']) ''C''<sub>2</sub>[''x'':=''B''])...''C''<sub>n</sub>[''x'':=''B'']
*# If the root node of ''A'' is not labeled with ''x'' (it could be unlabeled), ''A''[''x'':=''B''] is ((''A'' ''C''<sub>1</sub>[''x'':=''B'']) ''C''<sub>2</sub>[''x'':=''B''])...''C''<sub>n</sub>[''x'':=''B'']


There are infinitely many sets of meaningless terms, but the ones relevant to this article are:{{sfn|Severi|de Vries|2011|p=2}}
The Böhm tree BT(''M'') of a lambda term ''M'' can then be "computed" as follows.{{refn|group=note|The presentation given here avoids the use of solvability or head normal forms, but is otherwise that of an "effective" Böhm tree.<ref>{{cite book|last=Barendregt|first=Henk P.|title=The Lambda Calculus : Its Syntax and Semantics|year=2012 |publisher=College Publications|location=London|isbn=9781848900660|pages=219–221, 486–487}}</ref>}}


* The set of terms without [[head normal form]]
# BT(''x'') is a single node labelled with ''x''
* The set of terms without [[weak head normal form]]
# BT(λ''x''.''M'') is λ''x''.BT(''M'')
* The set of root-active terms, i.e. the terms without top normal form or root normal form. Since root-activeness is assumed, this is the smallest set of meaningless terms.
# BT(''M'' ''N'') is BT(''M'')BT(''N'')


Note that <code>'''Ω'''</code> is root-active and therefore <math>\mathbf{\Omega} \in U</math> for every set of meaningless terms <math>U</math>.
Note that this procedure implies finding a normal form for ''M''. If ''M'' has a normal form, the Böhm tree is finite and has a simple correspondence to the normal form. If ''M'' does not have a normal form, the procedure may "grow" some subtrees infinitely, or it may get "stuck in a loop" attempting to produce a result for part of the tree, which is the source of unlabeled leaf nodes. For this reason the procedure should be understood as applying all steps in parallel, with the resulting tree given "in the limit" of applying the procedure infinitely.


== λ⊥-terms ==
For example, the procedure does not grow trees at all for BT({{math|[[Lambda_calculus#Standard_terms|Ω]]}}) or for BT({{math|Ω[[SKI_combinator_calculus|'''I''']]}}), which corresponds to a single unlabeled root node.


The set of λ-terms with ⊥ (abbreviated λ⊥-terms) is defined coinductively by the grammar <math>M = \bot \mid x \mid (\lambda x. M) \mid (M M)</math>. This corresponds to the standard infinitary lambda calculus plus terms containing <math>\bot</math>. Beta-reduction on this set is defined in the standard way. Given a set of meaningless terms <math>U</math>, we also define a reduction to bottom: if <math>M[\bot \mapsto \mathbf{\Omega}] \in U</math> and <math>M \neq \bot</math>, then <math>M \to \bot</math>. The λ⊥-terms are then considered as a rewriting system with these two rules; thanks to the definition of meaningless terms this rewriting system is confluent and normalizing.{{sfn|Severi|de Vries|2011|p=5}}
Similarly, the procedure does not terminate for BT({{math|λ''x''.''x''Ω}}), but the tree is nonetheless different from the former examples.

The Böhm-like "tree" for a term may then be obtained as the normal form of the term in this system, possibly in an infinitary "in the limit" sense if the term expands infinitely.

=== Böhm trees ===

The Böhm trees are obtained by considering the λ⊥-terms where the set of meaningless terms consists of those without [[head normal form]]. More explicitly, the Böhm tree BT(''M'') of a lambda term ''M'' can be computed as follows:{{sfn|Severi|de Vries|2011|p=6}}

# BT(''M'') is <math>\bot</math>, if ''M'' has no head normal form
# <math>\mathrm{BT}(M) = \lambda x_1.\lambda x_2.\ldots\lambda x_n.y \mathrm{BT}(M_1) \ldots \mathrm{BT}(M_m)</math>, if <math>M</math> reduces in a finite number of steps to the head normal form <math>\lambda x_1.\lambda x_2.\ldots\lambda x_n.y M_1 \ldots M_m</math>

For example, BT('''Ω''')=⊥, BT('''I''')='''I''', and BT(λ''x''.''x'''''Ω''')=λ''x''.''x''⊥.

Determining whether a term has a head normal form is an [[undecidable problem]]. Barendregt introduced a notion of an "effective" Böhm tree that is computable, with the only difference being that terms with no head normal form are not marked with <math>\bot</math>.<ref>{{cite book|last=Barendregt|first=Henk P.|title=The Lambda Calculus : Its Syntax and Semantics|year=2012 |publisher=College Publications|location=London|isbn=9781848900660|pages=219–221}}</ref>

Note that computing the Böhm tree is similar to finding a normal form for ''M''. If ''M'' has a normal form, the Böhm tree is finite and has a simple correspondence to the normal form. If ''M'' does not have a normal form, the procedure may "grow" some subtrees infinitely, or it may get "stuck in a loop" attempting to produce a result for part of the tree, which produce infinitary trees and meaningless terms respectively. For this reason the procedure should be understood as the resulting tree being given co-recursively, "in the limit" of applying the procedure infinitely.

=== Lévy-Longo trees ===

The Lévy-Longo trees are obtained by considering the λ⊥-terms where the set of meaningless terms consists of those without [[weak head normal form]]. More explicitly, the Lévy-Longo tree LLT(''M'') of a lambda term ''M'' can be computed as follows:{{sfn|Severi|de Vries|2011|p=6}}

# LLT(''M'') is <math>\bot</math>, if ''M'' has no weak head normal form.
# If <math>M</math> reduces to the weak head normal form <math>y M_1 \ldots M_m</math>, then <math>\mathrm{LLT}(M) = y \mathrm{LLT}(M_1) \ldots \mathrm{LLT}(M_m)</math>.
# If <math>M</math> reduces to the weak head normal form <math>\lambda x.N</math>, then <math>\mathrm{LLT}(M) = \lambda x.\mathrm{LLT}(N)</math>/

=== Berarducci trees ===

The Berarducci trees are obtained by considering the λ⊥-terms where the set of meaningless terms consists of the root-active terms. More explicitly, the Berarducci tree BerT(''M'') of a lambda term ''M'' can be computed as follows:{{sfn|Severi|de Vries|2011|p=6}}

# BerT(''M'') is <math>\bot</math>, if ''M'' is root-active.
# If <math>M</math> reduces to <math>\lambda x.N</math>, then <math>\mathrm{BerT}(M) = \lambda x.\mathrm{BerT}(N)</math>.
# If <math>M</math> reduces to <math>N P</math> and <math>N</math> does not reduce to any abstraction <math>\lambda x. Q</math>, then <math>\mathrm{BerT}(M) = \mathrm{BerT}(N) \mathrm{BerT}(P)</math>.


==Notes==
==Notes==
{{Notelist}}
{{Reflist|group=note}}


==References==
==References==
Line 43: Line 71:
* {{cite book |first1=Gérard |last1=Huet |first2=H. |last2=Laulhère |chapter=Finite-state Transducers as Regular Böhm Trees |title=Theoretical Aspects of Computer Software |date=1997| volume=1281| pages=604–610| publisher=Springer |editor1-first=M. |editor1-last=Abadi |editor2-first=T. |editor2-last=Ito |series=LNCS |chapter-url=http://pauillac.inria.fr/~huet/PUBLIC/trans6.pdf |doi=10.1007/BFb0014570 |isbn=978-3-540-69530-1 |citeseerx=10.1.1.110.7910}}
* {{cite book |first1=Gérard |last1=Huet |first2=H. |last2=Laulhère |chapter=Finite-state Transducers as Regular Böhm Trees |title=Theoretical Aspects of Computer Software |date=1997| volume=1281| pages=604–610| publisher=Springer |editor1-first=M. |editor1-last=Abadi |editor2-first=T. |editor2-last=Ito |series=LNCS |chapter-url=http://pauillac.inria.fr/~huet/PUBLIC/trans6.pdf |doi=10.1007/BFb0014570 |isbn=978-3-540-69530-1 |citeseerx=10.1.1.110.7910}}
* {{cite journal| author=Gérard Huet| title=Regular Böhm Trees| journal=Math. Struct. In Comp. Science| year=1998| volume=8 |issue=6 | pages=671–680| url=http://pauillac.inria.fr/~huet/PUBLIC/RBT2.pdf |doi=10.1017/S0960129598002643 |citeseerx=10.1.1.123.475| s2cid=15752309}}
* {{cite journal| author=Gérard Huet| title=Regular Böhm Trees| journal=Math. Struct. In Comp. Science| year=1998| volume=8 |issue=6 | pages=671–680| url=http://pauillac.inria.fr/~huet/PUBLIC/RBT2.pdf |doi=10.1017/S0960129598002643 |citeseerx=10.1.1.123.475| s2cid=15752309}}
* {{cite thesis |last=Ong |first=C.-H. Luke|date=31 May 1988|title=The Lazy Lambda Calculus: An Investigation into the Foundations of Functional Programming |type=PhD|publisher=University of London|oclc= 31204528|url=https://spiral.imperial.ac.uk/bitstream/10044/1/47211/2/Ong-CHL-1988-PhD-Thesis.pdf|access-date=23 September 2022}}
* {{cite book |last1=Sangiorgi |first1=Davide |last2=Walker |first2=David |title=The Pi-Calculus: A Theory of Mobile Processes |date=16 October 2003 |publisher=Cambridge University Press |isbn=978-0-521-54327-9 |language=en}}
* {{cite journal |last1=Barendregt |first1=Henk P. |title=The Type Free Lambda Calculus |journal=Studies in Logic and the Foundations of Mathematics |date=1977 |volume=90 |pages=1091–1132 |doi=10.1016/S0049-237X(08)71129-7}}
* {{cite journal |last1=Severi |first1=Paula |last2=de Vries |first2=Fer-Jan |title=Decomposing the Lattice of Meaningless Sets in the Infinitary Lambda Calculus |journal=Logic, Language, Information and Computation |date=2011 |volume=6642 |pages=210–227 |doi=10.1007/978-3-642-20920-8_22 |url=https://www.cs.le.ac.uk/people/fdv1/fdv1/Distribution/wollic2011.pdf |access-date=23 September 2022}}
{{refend}}
{{refend}}



Revision as of 19:59, 23 September 2022

In the study of denotational semantics of the lambda calculus, Böhm trees,[a] Lévy-Longo trees,[1][2][b] and Berarducci trees[3] are (potentially infinite) tree-like mathematical objects that capture the "meaning" of a term up to some set of "meaningless" terms.

Motivation

A simple way to read the meaning of a computation is to consider it as a mechanical procedure consisting of a finite number of steps that, when completed, yields a result. In particular, considering the lambda calculus as as a rewriting system, each beta reduction step is a rewrite step, and once there are no further beta reductions the term is in normal form. We could thus, naively following following Church's suggestion,[4] say the meaning of a term is its normal form, and that terms without a normal form are meaningless. For example the meanings of I = λx.x and I I are both I. This works for any strongly normalizing subset of the lambda calculus, such as a typed lambda calculus.

This naive assignment of meaning is however inadequate for the full lambda calculus. The term Ω =(λx.x x)(λx.x x) does not have a normal form, and similarly the term X=λx.xΩ does not have a normal form. But the application Ω K, where K = λx.λy.x is the standard term, reduces only to itself, whereas the application X K reduces with normal order reduction to I, hence has a meaning. We thus see that not all non-normalizing terms are equivalent. We would like to say that Ω is less meaningful than X because applying X to a term can produce a result but applying Ω cannot.

In the infinitary lambda calculus, the term N N, where N = λx.I(xx), reduces to both to I (I (...)) and Ω. Hence there are also issues with confluence of normalization.[5]

Sets of meaningless terms

We define a set of meaningless terms as follows:[6][7]

  • Rootactiveness: Every rootactive term is in . A term is rootactive if for all there exists a redex such that .
  • Closure under β-reduction: For all , if then .
  • Closure under substitution: For all and substitutions , .
  • Overlap: For all , .
  • Indiscernibility: For all , if can be obtained from by replacing a set of pairwise disjoint subterms in with other terms of , then if and only if .
  • Closure under β-expansion. For all , if , then . Some definitions leave this out, but it is useful.[8]

There are infinitely many sets of meaningless terms, but the ones relevant to this article are:[9]

  • The set of terms without head normal form
  • The set of terms without weak head normal form
  • The set of root-active terms, i.e. the terms without top normal form or root normal form. Since root-activeness is assumed, this is the smallest set of meaningless terms.

Note that Ω is root-active and therefore for every set of meaningless terms .

λ⊥-terms

The set of λ-terms with ⊥ (abbreviated λ⊥-terms) is defined coinductively by the grammar . This corresponds to the standard infinitary lambda calculus plus terms containing . Beta-reduction on this set is defined in the standard way. Given a set of meaningless terms , we also define a reduction to bottom: if and , then . The λ⊥-terms are then considered as a rewriting system with these two rules; thanks to the definition of meaningless terms this rewriting system is confluent and normalizing.[7]

The Böhm-like "tree" for a term may then be obtained as the normal form of the term in this system, possibly in an infinitary "in the limit" sense if the term expands infinitely.

Böhm trees

The Böhm trees are obtained by considering the λ⊥-terms where the set of meaningless terms consists of those without head normal form. More explicitly, the Böhm tree BT(M) of a lambda term M can be computed as follows:[10]

  1. BT(M) is , if M has no head normal form
  2. , if reduces in a finite number of steps to the head normal form

For example, BT(Ω)=⊥, BT(I)=I, and BT(λx.xΩ)=λx.x⊥.

Determining whether a term has a head normal form is an undecidable problem. Barendregt introduced a notion of an "effective" Böhm tree that is computable, with the only difference being that terms with no head normal form are not marked with .[11]

Note that computing the Böhm tree is similar to finding a normal form for M. If M has a normal form, the Böhm tree is finite and has a simple correspondence to the normal form. If M does not have a normal form, the procedure may "grow" some subtrees infinitely, or it may get "stuck in a loop" attempting to produce a result for part of the tree, which produce infinitary trees and meaningless terms respectively. For this reason the procedure should be understood as the resulting tree being given co-recursively, "in the limit" of applying the procedure infinitely.

Lévy-Longo trees

The Lévy-Longo trees are obtained by considering the λ⊥-terms where the set of meaningless terms consists of those without weak head normal form. More explicitly, the Lévy-Longo tree LLT(M) of a lambda term M can be computed as follows:[10]

  1. LLT(M) is , if M has no weak head normal form.
  2. If reduces to the weak head normal form , then .
  3. If reduces to the weak head normal form , then /

Berarducci trees

The Berarducci trees are obtained by considering the λ⊥-terms where the set of meaningless terms consists of the root-active terms. More explicitly, the Berarducci tree BerT(M) of a lambda term M can be computed as follows:[10]

  1. BerT(M) is , if M is root-active.
  2. If reduces to , then .
  3. If reduces to and does not reduce to any abstraction , then .

Notes

  1. ^ per Sangiorgi & Walker (2003, p. 493), introduced in Barendregt (1977) and named after a theorem of Corrado Böhm
  2. ^ coined in Ong (1988), per Sangiorgi & Walker (2003, p. 511)

References

  1. ^ Levy, Jean-Jacques (1975). "An algebraic interpretation of the λβK-calculus and a labelled λ-calculus". λ-Calculus and Computer Science Theory. 37: 147–165. doi:10.1007/BFb0029523.
  2. ^ Longo, Giuseppe (August 1983). "Set-theoretical models of λ-calculus: theories, expansions, isomorphisms". Annals of Pure and Applied Logic. 24 (2): 153–188. doi:10.1016/0168-0072(83)90030-1.
  3. ^ Berarducci, Alessandro (1996). "Infinite λ-calculus and non-sensible models" (PDF). Logic and algebra. New York: Marcel Dekker. pp. 339–377. ISBN 0824796063. Retrieved 23 September 2007.
  4. ^ Church, Alonzo (1941). The calculi of lambda-conversion. Princeton University Press. p. 15. ISBN 0691083940.
  5. ^ Severi & de Vries 2011, p. 1.
  6. ^ Kennaway, Richard; van Oostrom, Vincent; de Vries, Fer-Jan (1996). "Meaningless terms in rewriting". Algebraic and Logic Programming. 1139: 254–268. doi:10.1007/3-540-61735-3_17.
  7. ^ a b Severi & de Vries 2011, p. 5.
  8. ^ Severi & de Vries 2011, pp. 4–5.
  9. ^ Severi & de Vries 2011, p. 2.
  10. ^ a b c Severi & de Vries 2011, p. 6.
  11. ^ Barendregt, Henk P. (2012). The Lambda Calculus : Its Syntax and Semantics. London: College Publications. pp. 219–221. ISBN 9781848900660.