首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lambda微积分β还原

Lambda微积分β还原
EN

Stack Overflow用户
提问于 2015-02-16 12:32:56
回答 2查看 640关注 0票数 0

我有以下蓝氏微积分:

代码语言:javascript
复制
( x ( λyz.xz ) ( λxy.zyx )) (( λyx.xyz ) ( λy.xz ))

我已经减少了:

代码语言:javascript
复制
alpha => ( x ( λyz.xz ) ( λxy.zyx )) (( λyx1.x1yz )) ( λy.xz ))
beta  => ( x ( λyz.xz ) ( λxy.zyx )) ( λx1.x1 ( λy.xz ) z )

我的问题是:为什么以下的削减是错误的?在我看来,这句话似乎很简单:

代码语言:javascript
复制
beta1 => ( x ( λyz.xz ) ( λxy.zyx )) ( λx1.x1 ( xz ))
beta2 => ( x ( λy.x ( λxy.zyx ))) ( λx1.x1 ( xz ))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-23 13:11:34

为了避免混淆,我建议再重命名一点。因此,在“作用域”中似乎有xz (它们在术语中不受任何λ的约束),确定是否引用它们是一个好主意。

我会像这样改写你的任期:

代码语言:javascript
复制
(x (λy1,z1. x z1) (λx2,y2. z y2 x2)) ((λy3,x3. x3 y3 z) (λy4. x z))

我在重命名方面做了相当多的工作(当然,这是不必要的,但就像这样,我们确定哪个是哪个)。

这个术语β-减少到

代码语言:javascript
复制
(x (λy1,z1. x z1) (λx2,y2. z y2 x2)) ((λx3. x3 (λy4. x z) z))

然后

代码语言:javascript
复制
(x (λy1,z1. x z1) (λx2,y2. z y2 x2)) ((λx3. x3 (λy4. x z) z))

这确实是阿尔法-相当于你写的东西。那么,您要做的就是将(λy4. x z)应用于z。您不应该这样阅读x3 (λy4. x z) z,它也可以用更多的括号(如这个(x3 (λy4. x z)) z )来编写。不知何故,这个词被卡住了,因为它的头是一个变量。

没有什么可以做的,因为这个术语也涉及到一个不能减少的应用程序。也许您还可以通过eta还原将(λy1,z1. x z1)重写为(λy1. x)

因此,您不能获得(x (λyz.xz) (λxy.zyx)) (λx1.x1 (x z)),而且出于同样的原因,您不能将其简化为(x (λy.x (λxy.zyx))) (λx1.x1 (x z)),因为您的括号错误。

从左到右读取f x y,取f并将其应用于x,然后将结果应用于y

票数 1
EN

Stack Overflow用户

发布于 2017-11-27 21:14:49

我会把这个答案保留得很简单。

若要减少到beta1或beta2,请注意在"x1 (λy.xz ) z“中有"x1 ( (λy.xz )z ) ",因此可以减少.,即将最后两个表达式(λy.xz )和z放在一起,这是错误的。

这不是它的工作方式。在减少lambda表达式时,您应该维护左结合性,即总是将最左边的表达式分组为“( x1 (λy.xz ) ) z”,而不是"x1 ( (λy.xz )z)E 213,这是错误的。

如果有像E1 E2 E3 E4这样的表达式,

您应该将其分组为(( (E1 E2) E3 ) E4 ))

因此,对于beta2,不能将x1 (λy.xz )z还原为"x1 ( xz )“。同样的逻辑也适用于beta1。

我希望这对你有意义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28541543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档