当前位置: 首页 > 知识库问答 >
问题:

Haskell与λ演算:实现alpha同余(alpha等价)

方玄天
2023-03-14

我现在被困在实现“alpha-同余”(在一些教科书中也被称为“alpha-等价”或“alpha-相等”)上。我希望能够检查两个λ表达式是否相等。例如,如果我在解释器中输入以下表达式,它应该得到True(\用于指示lambda符号):

>\x.x == \y.y
True

问题在于理解下列λ表达式是否被认为是alpha等价的:

>\x.xy == \y.yx
???

>\x.yxy == \z.wzw
???

\x.xy==\y.yx的情况下,我猜答案是true。这是因为\x.xy=>\z.zy\y.yx=>\z.zy,两者的右侧是相等的(其中符号=>用于表示alpha缩减)。

简而言之,如何实现函数ISAlphaCongruent的无错误版本?什么是确切的规则,我需要遵循,以使这一点的工作?

我更愿意在不使用德布鲁因指数的情况下这样做。

共有1个答案

孙胜泫
2023-03-14

你误解了:不同的自由变量不是alpha等价的。所以y/=x,和\w.wy/=\w.wx\x.xy/=\y.yx。类似地,\x.yxy/=\z.wzw,因为y/=w

你的书没有提到自由变量被允许统一重命名,因为它们不被允许统一重命名。

(这样想:如果我还没有告诉您notid的定义,那么您希望\x.not x\x.id x是等价的吗?我当然希望不是!)

 类似资料:
  • 我试图在我的极小值中添加阿尔法贝塔修剪,但我不明白我哪里出错了。 目前,我正在经历5000次迭代,根据一个朋友的说法,我应该经历大约16000次迭代。当选择第一个位置时,它返回-1(一个损失),而它应该能够在这一点上肯定返回0(一个平局),因为它应该能够从一个空的棋盘中抽签,但是我看不到我哪里出错了,因为我跟着我的代码走似乎没问题 奇怪的是,如果我在我的检查中切换返回α和β(以实现返回0),计算机

  • Alpha-Beta剪枝算法(Alpha Beta Pruning) [说明] 本文基于<<CS 161 Recitation Notes - Minimax with Alpha Beta Pruning>>,文中的图片均来源于此笔记。 Alpha-Beta剪枝用于裁剪搜索树中没有意义的不需要搜索的树枝,以提高运算速度。 假设α为下界,β为上界,对于α ≤ N ≤ β: 若 α ≤ β 则N有解

  • Alpha启动框架 Alpha是一个基于PERT图构建的Android异步启动框架,它简单,高效,功能完善。 在应用启动的时候,我们通常会有很多工作需要做,为了提高启动速度,我们会尽可能让这些工作并发进行。但这些工作之间可能存在前后依赖的关系,所以我们又需要想办法保证他们执行顺序的正确性。Alpha就是为此而设计的,使用者只需定义好自己的task,并描述它依赖的task,将它添加到Project中

  • 在我的方法newminimax49中,我有一个minimax算法,它利用了本文中建议给我的记忆和其他一般性改进。该方法使用一个简单的启发式电路板评估函数。我的问题基本上是关于alpha-beta修剪,即我的minimax方法是否使用alpha-beta修剪。据我所知,我相信这是真的,然而,我用来实现它的东西似乎太简单了,不可能是真的。此外,其他人建议我使用alpha-beta剪枝,正如我所说的,我

  • 部分答案可能来自领域理论。如果我理解正确的话,的元素并不全是集合论函数(根据康托定理,这些函数比大),而只是连续函数。如果是,定义这种连续性的拓扑是什么?为什么类型的Haskell术语对它是连续的?

  • 描述 (Description) 字符类\p{Alpha}匹配任何字母字符。 例子 (Example) 以下示例显示了Posix字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PosixCharacterClassDemo {