用基本术语解释 Church-Rosser 定理
Explaining the Church-Rosser Theorem in basic terms
我想知道如何在编程中使用 Church-Rosser 定理,特别是函数式编程。我查找了信息,但只能找到与 lambda 演算(知识有限)和 beta 归约相关的资源。
如果有人能解释 lambda 演算的作用以及归约是什么,我认为这会把事情弄清楚。
我对 Church-Rosser 定理的最初想法是,它与函数的计算顺序和执行有关,但我不完全确定这是否是准确的信息。
谢谢。
注意:我目前正在学习标准 ML
你的初步想法很好。
- lambda 演算是构建函数式编程的正式基础。
- lambda演算是一个术语重写系统,reduction表示遵循重写规则。
lambda 演算没有指定特定的求值顺序,因此给定一个可以进行多次归约的 lambda 表达式,Church-Rosser 定理表示您可以选择其中之一。这为函数式编程语言设计者提供了很大的自由来设计他们的评估语义。例如,在f(g x)中,假设两者都是纯函数,无论你减少f还是g 首先是等价的。
维基百科对 Church-Rosser theorem 的描述是:
[I]f there are two distinct reductions or sequences of reductions that can be applied to the same term, then there exists a term that is reachable from both results, by applying (possibly empty) sequences of additional reductions.
示例 f (g x) 其中 f 是 x² 和 g 是 2x:
(λx.x*x) ((λy.y+y) 2) ~β~> ((λy.y+y) 2)*((λy.y+y) 2)
~β~> (2+2)*((λy.y+y) 2)
~β~> (2+2)*(2+2)
(λx.x*x) ((λy.y+y) 2) ~β~> (λx.x*x) (2+2)
~β~> (2+2)*(2+2)
在此示例中,两个不同的归约是对任一 lambda 的 β 归约,并且从两个归约中可达到的一项是 (2+2)*(2+2)
.
我想知道如何在编程中使用 Church-Rosser 定理,特别是函数式编程。我查找了信息,但只能找到与 lambda 演算(知识有限)和 beta 归约相关的资源。
如果有人能解释 lambda 演算的作用以及归约是什么,我认为这会把事情弄清楚。
我对 Church-Rosser 定理的最初想法是,它与函数的计算顺序和执行有关,但我不完全确定这是否是准确的信息。
谢谢。
注意:我目前正在学习标准 ML
你的初步想法很好。
- lambda 演算是构建函数式编程的正式基础。
- lambda演算是一个术语重写系统,reduction表示遵循重写规则。
lambda 演算没有指定特定的求值顺序,因此给定一个可以进行多次归约的 lambda 表达式,Church-Rosser 定理表示您可以选择其中之一。这为函数式编程语言设计者提供了很大的自由来设计他们的评估语义。例如,在f(g x)中,假设两者都是纯函数,无论你减少f还是g 首先是等价的。
维基百科对 Church-Rosser theorem 的描述是:
[I]f there are two distinct reductions or sequences of reductions that can be applied to the same term, then there exists a term that is reachable from both results, by applying (possibly empty) sequences of additional reductions.
示例 f (g x) 其中 f 是 x² 和 g 是 2x:
(λx.x*x) ((λy.y+y) 2) ~β~> ((λy.y+y) 2)*((λy.y+y) 2) ~β~> (2+2)*((λy.y+y) 2) ~β~> (2+2)*(2+2) (λx.x*x) ((λy.y+y) 2) ~β~> (λx.x*x) (2+2) ~β~> (2+2)*(2+2)
在此示例中,两个不同的归约是对任一 lambda 的 β 归约,并且从两个归约中可达到的一项是
(2+2)*(2+2)
.