- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Haskell 中实现一个不纯的非类型 lambda 演算解释器。
我目前坚持实现“alpha-congruence”(在某些教科书中也称为“alpha-equivalence”或“alpha-equality”)。我希望能够检查两个 lambda 表达式是否相等或不相等。例如,如果我在解释器中输入以下表达式,它应该产生 True(\
用于指示 lambda 符号):
>\x.x == \y.y
True
问题在于理解以下 lambda 表达式是否被视为 alpha 等价:
>\x.xy == \y.yx
???
>\x.yxy == \z.wzw
???
在\x.xy ==\y.yx
的情况下,我猜测答案是True
。这是因为 \x.xy =>\z.zy
和 \y.yx =>\z.zy
以及两者的右侧相等(其中符号 =>
用于表示 alpha 缩减)。
在\x.yxy ==\z.wzw
的情况下,我同样猜测答案是True
。这是因为 \x.yxy =>\a.yay
和 \z.wzw =>\a.waw
(我认为)是相等的。
问题在于,我的所有教科书定义都规定,只需更改绑定(bind)变量的名称即可将两个 lambda 表达式视为相等。它没有提到表达式中的自由变量也需要统一重命名。因此,即使 y
和 w
都位于 lambda 表达式中的正确位置,程序如何“知道”第一个 y
代表第一个 w
,第二个 y
代表第二个 w
。我需要在实现中保持一致。
简而言之,我将如何实现函数 isAlphaCongruent
的无错误版本?为了使其发挥作用,我需要遵循哪些确切规则?
我更愿意在不使用 de Bruijn 指数的情况下执行此操作。
最佳答案
您误解了:不同的自由变量并不等价。所以 y/= x
和 \w.wy/=\w.wx
和 \x.xy/=\y.yx
。同样,\x.yxy/=\z.wzw
因为 y/= w
。
你的书没有提到自由变量可以统一重命名,因为它们不允许统一重命名。
(这样想:如果我还没有告诉你 not
和 id
的定义,你会期望 \x.not x
和 \x.id x
是等价的吗?我当然希望不是!)
关于Haskell 和 Lambda 微积分 : Implementing Alpha-Congruence (Alpha-Equivalence),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10786485/
微积分运算在机器学习领域扮演着至关重要的角色,它不仅是许多基础算法和模型的核心,还深刻影响着模型的优化、性能评估以及新算法的开发。 掌握微积分,不仅让我们多会一种计算方式,也有助于理解各种机器学习算
我正在用 java 开发一个程序,它将找到给定函数的集成。例如 cos(x+3x^2)。现在我想检查用户是否给出了正确的输入。在检查输入的有效性时是否有任何正则表达式可以使用?例如,输入必须始终以积分
最近在研究lambda的计算,对reduction和substitution有很多疑惑。什么是 alpha 和 beta 缩减?何时以及为何使用它们? 如果有人能说出任何关于 lambda 微积分中减
我正在尝试利用 JavaScript 和 PEG.JS 将 lambda 演算项解析为 AST。语法相当简单: /*******************************************
我目前正在学习 Haskell,并且还在大学参加关于函数式编程的相当理论的讲座。 我知道这纯粹是理论/学术问题,但是我很感兴趣如何用纯 lambda 演算(即没有定义任何常量)简单地表达不同的简单函数
是否有任何合适的积分和微分算法,我可以用 C++ 或 C 来实现。只需将其命名为引用即可。如果您愿意提供示例代码,我将非常高兴您的回答和解释。提前致谢。 最佳答案 您可以使用 Calculus c++
我正在使用 Maths commons 来解决一些矩阵和复数但我现在想整合和区分所有类型的功能但正在阅读Polynomials section 我真的不知道该怎么做。我需要一些帮助关于如何使用此库创建
我正在尝试使用 clisp Lambda Calc 实现除法函数。风格 我读自this一个部门的 lambda 表达式是: Y (λgqab. LT a b (PAIR q a) (g (SUCC q
我正在尝试实现 Church Pair Lambda Calc。使用 CLisp 风格。 根据维基百科: pair ≡ λx.λy.λz.z x y 到目前为止,这是我的代码: (defvar PA
我安装了 ccx(Calculix 求解器程序)来解决物理问题。预处理器 cgx 工作正常,但是当我在终端中使用 .inp 文件 (abaqus) 运行 ccx 时,出现错误: ccx: symbol
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我正在尝试构建一个接受给定数量的参数并始终返回相同值的函数。 这是作业的一部分。提供了一个提示: The "k-way T" is a function that takes k arguments
我正在 Haskell 中实现一个不纯的非类型 lambda 演算解释器。 我目前坚持实现“alpha-congruence”(在某些教科书中也称为“alpha-equivalence”或“alpha
我正在尝试构建一个接受给定数量的参数并始终返回相同值的函数。 这是作业的一部分。提供了一个提示: The "k-way T" is a function that takes k arguments
我是一名优秀的程序员,十分优秀!