Questions tagged «lambda-calculus»

Church的形式系统用于可计算性,编程语言和证明理论,以表示有效的功能,程序及其计算和证明。

2
用Universe层次结构进行遗传替换
我已经读过有关用简单术语和类型替换简单Lambda演算和逻辑框架的遗传方法。 我想知道,在具有Universe层次结构的依存类型系统中,是否有任何世袭替代的示例?即,其中Ť[R ü è :小号Ë Ť0:SË Ť1个:SË Ť2True:Set0:Set1:Set2 True : Set_0 : Set_1:Set_2等。 我特别想知道如何在这样的系统中建立归纳措施。简单类型的版本在结构上减少了要替换的变量的类型。这不适用于从属类型,对于我所链接的LF,我使用相干类型的术语的简单类型擦除来对类型的形状进行归纳。 但是,擦除为简单类型不适用于Universe层次结构,因为如果您具有以下内容: F:(x :SË Ť1个)→ x → T[R ü èf:(x:Set1)→x→True f : (x : Set_1)\to x \to True表示 F ((y:Tř ü ë )→ Ťř ü È → Ťr u e ):Tř ü È → Ťř ü È …

5
用从使用到绑定的函数表示绑定变量
用语法表示绑定变量,尤其是避免捕获替换表示绑定变量的问题是众所周知的,并且有许多解决方案:具有alpha等价性的命名变量,de Bruijn索引,局部无名,名词集等。 但是似乎还有另一种相当明显的方法,尽管如此,我仍未在任何地方使用它。也就是说,在基本语法中,我们只有一个“变量”术语,写为,然后分别给出了一个函数,该函数将每个变量映射到其作用域内的绑定器。所以 -term like∙∙\bulletλλ\lambda λ ×。(λ ÿ。X ÿ)λX。(λÿ。Xÿ) \lambda x. (\lambda y. x y) 将被写为,该函数会将第一个映射到第一个,将第二个映射到第二个。因此,它有点像de Bruijn索引,只是在您评估一个函数来查找相应的联编程序时不必“计数 s”。(如果在实现中将其表示为数据结构,我会考虑为每个可变项对象配备一个指向相应绑定项对象的简单指针/引用。)λ 。(λ 。∙ ∙ )λ。(λ。∙∙)\lambda. (\lambda. \bullet\bullet)∙∙\bulletλλ\lambda∙∙\bulletλλ\lambdaλλ\lambda 显然,这对于在页面上编写语法以供人类阅读来说并不明智,但是de Bruijn索引也不是。在我看来,从数学上讲,它是完全有意义的,尤其是它使避免捕获的替换变得非常容易:只需替换您要替换的术语并采用绑定函数的并集即可。的确,它没有“自由变量”的概念,但是(再次)de Bruijn索引也没有。在任何一种情况下,包含自由变量的术语都表示为一个术语,其前面带有“上下文”联编程序列表。 我是否缺少某些内容,并且由于某种原因该表示不起作用?是否有问题使它比其他问题严重得多,因此不值得考虑?(我现在唯一能想到的问题是术语集(及其绑定功能)不是归纳定义的,但这似乎并不是无法克服的。)或者实际上是否有使用它的地方?

3
结构演算:将表达压缩到最小形式
我知道构造演算正在高度规范化,这意味着每个表达式都具有不能被beta,eta进一步简化的法线。因此,实际上,这是计算与原始表达式相同值的最有效表达式。 但是在某些情况下,规范化可能会将一个小表达式缩减为一个大表达式(就大小而言)。 有最小形式的表达式吗?以最小的尺寸计算相同值的表单。 换句话说,代替了节省时间的范式,而是节省了空间的范式。

1
排除中间定律是否暗示马丁·洛夫内涵类型理论中的公理K?
因此,我一直想知道,排除中间定律(LEM)是否暗示马丁·洛夫的内涵类型理论中的所谓公理K。公理K指出 实际上,我一直在尝试证明更一般的语句,即 但是通过等式归纳将减小为,我陷入了第一个问题。我也试图通过矛盾来进行,但是似乎没有用。ΠA:TypeΠx:AΠp:Id(x,x),Id(p,reflx)ΠA:TypeΠx:AΠp:Id(x,x),Id(p,reflx)\Pi_{A : Type} \Pi_{x : A} \Pi_{p : \text{Id}(x,x)}, \text{Id}(p,\text{refl}_x)ΠA:TypeΠx,y:AΠp,q:Id(x,y),Id(p,q)ΠA:TypeΠx,y:AΠp,q:Id(x,y),Id(p,q)\Pi_{A : Type} \Pi_{x, y : A} \Pi_{p,q : \text{Id}(x,y)}, \text{Id}(p,q)qqqreflxreflx\text{refl}_x 这完全可以证明吗?


1
Lambda演算模型的可扩展性
我正在翻译一本有关LISP的书,很自然地涉及到微积分的某些元素。因此,外延性的概念被提及的还有旁边的一些模型λ演算,即:P ω和d ∞(是的,在顶部的无穷大)。而且据说P ω是伸展而d ∞是没有的。λλ\lambdaλλ\lambdaPωPω\mathcal{P}_\omegad∞D∞D^\inftyPωPω\mathcal{P}_\omegad∞D∞D^\infty 但是......我一直在寻找通过Barendregt的演算,它的语法和语义,以及(希望正确)阅读有完全相反的:不伸展,d ∞是。PωPω\mathcal{P}_\omegad∞D∞D_\infty 有谁知道关于奇怪的模型?难道是一样的模型d ∞,但错误地写的?我对模型的可扩展性是否正确?d∞D∞D^\inftyd∞D∞D_\infty 谢谢。

6
将微积分称为代数而不是微积分有什么区别?之所以提出这个问题,是因为我在某处读到了“ λ-微积分不是微积分而是代数”这一行(iirc,归因于Dana Scott)。有什么意义?谢谢。λλ\lambdaλλ\lambda


3
Lambda微积分中复杂性理论的等价表述?
在复杂性理论中,时间和空间复杂性的定义均参考通用图灵机:resp。停止前的步骤数以及触摸到的磁带上的单元数。 给定Church-Turing论文,也应该有可能用lambda演算来定义复杂性。 我的直觉概念是,时间复杂度可以表示为β约简的数目(我们可以使用De Brujin索引定义α转换,反正η几乎不是约简),而空间复杂度可以定义为β约简的数目。符号(λ,DB索引,“应用”符号)减少幅度最大。 它是否正确?如果是这样,我在哪里可以得到参考?如果没有,我怎么会误会?

1
高阶程序的程序反转算法
程序反转一词 具有多种含义,但可能始于麦卡锡(J. McCarthy)1956年的著作《图灵机在AI中定义的功能反转》。到目前为止,已经发现了程序反转和其他领域之间的许多联系,例如可逆编程(物理和逻辑),部分评估,验证,双向编程,逻辑编程和机器学习。 什么是程序反转?在第一个近似中,它是这样的:给定程序接受类型参数 并返回类型结果,产生一个程序,它“某种程度上”是的逆。我故意在这里含糊不清,因为可以用多种方式(和已经)阐明这个概念:例如,必须是内射的?是否应 返回所有或部分,使得?P:A → BP:一个→乙P : A \rightarrow BB P − 1 P P P − 1(b )a P (a )= b一个一个A乙乙BP− 1P-1个P^{-1}PPPPPPP− 1(b )P-1个(b)P^{-1}(b)一个一个aP(a )= bP(一个)=bP(a) = b 有一些通用的方法可以使程序求逆,例如使用麦卡锡已经指出的对角化或使用部分评估,但它们往往效率不高。同样,我熟悉的大多数程序反转工作似乎都无法处理完整的高阶编程语言(即 -calculi)。λλ\lambda 参考要求。用于 -calculi的程序求逆的显式算法的最新技术是什么(不限制高阶)?λλ\lambda

1
组合器的基础不完整
这是通过激发这个问题。令为仅具有两个绑定变量的所有组合器的集合。是组合地完成?CC\mathcal{C}CC\mathcal{C} 我相信答案是否定的,但是我无法为此找到参考。我也会对参考资料中组合集集合的组合不完整性的证明感兴趣(我可以看到为什么仅由一个绑定变量组成的组合集是不完整的,因此,这些集合应该包含的不仅仅是元素)。DD\mathcal{D}DD\mathcal{D}

1
最优评估者实际上是最优的吗?
以下术语(使用bruijn-indexes): BADTERM = λ((0 λλλλ((((3 λλ(((0 3) 4) (1 λλ0))) λλ(((0 4) 3) (1 0))) λ1) λλ1)) λλλ(2 (2 (2 (2 (2 (2 (2 (2 0))))))))) 当应用于教会人数时N,包括幼稚的评估者在内的数个现有评估者会迅速将其评估为正常形式。但是,如果您将该术语编码为交互网络并使用Lamping的抽象算法对其进行评估,则它相对于会以指数形式减少β的减少N。在Optlam上,特别是: N interactions(betas) (BADTERM N) 1 129(72) λλλ(1 (2 (2 (2 (2 (2 (2 (2 0)))))))) 2 437(205) λλλ(2 (1 (2 (2 (2 (2 …

2
减少策略和评估策略有什么区别?
从Wikipedia上的评估策略文章中: λ演算中的约简策略的概念相似但又截然不同。 从Wikipedia上的减少策略文章中: 它与计算机科学中的评估策略概念相似但有细微差别。 这两篇文章所暗示的评估策略与减少策略之间的微妙区别是什么?它们只是来自不同领域的两个相似概念吗?

1
您如何使用交互组合器对Lamping的抽象算法进行编码?
以前,交互组合器已被建议作为λ微积分的编译目标。那篇论文实现了完整的λ演算。还已知有可能针对可进行 EAL类型化的λ项的子集优化λ演算的交互网络编码。该论文通过将EAL类型的λ项转换为交互网络来实现λ演算的子集,该交互网络可能比交互组合器更复杂,因为它们使用无限的标签字母来对复制器进行分组。 我想知道是否可以将这两个建议结合在一起。也就是说,作为交互组合器,抽象算法是否有任何编码-即可EAL类型的λ项?

1
可以在基本仿射逻辑上键入“ sort”吗?
以下λ项,此处为标准形式: sort = (λabc.(a(λdefg.(f(d(λhij.(j(λkl.(k(λmn.(mhi))l)) (h(λkl.l)i)))(λhi.(i(λjk.(bd(jhk)))(bd(h(λjk.(j (λlm.m)k))c)))))e))(λde.e)(λde.(d(λfg.g)e))c)) 为教堂编码的列表实现排序算法。即,结果为: sort (λ c n . (c 3 (c 1 (c 2 n)))) β→ (λ c n . (c 1 (c 2 (c 3 n)))) 同样, sort_below = λabcd.a(λef.f(λghi.g(λj.h(λkl.kj(ikl)))(hi))e(λgh.h)) (λe.d)(λe.b(λf.e(f(λghi.hg)(λgh.cfh)))) 还可以对与上述相同的列表进行排序,不同之处在于您必须为参数提供一个额外的参数,并限制其数量: sort_below 4 [5,1,3,2,4] → [1,2,3] 我正在尝试确定这些术语是否可以在基本仿射逻辑上键入。由于我不知道任何公开的EAL类型检查器,因此事实证明这比我预期的要难。sort基本仿射逻辑中有一种类型吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.