键入lambda演算的函数无法计算


12

我只想知道一些可以通过未类型化lambda演算而不是通过类型化lambda演算来计算的函数的示例。

因为我是初学者,所以对背景信息的一些重复将不胜感激。

谢谢。

编辑:通过键入lambda演算,我打算了解系统F和简单键入的lambda演算。按功能,我指的是任何图灵可计算的功能。


-calculi 存在许多键入规则,而对您的请求的答案部分取决于您所考虑的键入规则选择。它还取决于您对功能的含义。差异的一个示例是,诸如System F之类的输入规则只能输入规范化程序,而未键入的 -calculus包含非规范化术语。λλ
Martin Berger'1

我在考虑系统F和简单类型的lambda演算。按功能,我的意思是图灵可计算的功能。
蒂莫西·扎查里

Answers:


15

Godelization给出了一个很好的例子:在lambda演算中,对函数唯一可以做的就是应用它。结果,无法编写类型为的封闭函数,该函数需要一个函数参数并为其返回Godel代码。(NN)N

将其作为Heyting算术的公理通常被称为“建设性的教会论点”,并且是强烈反古典的公理。也就是说,将其添加到HA是一致的,但不能添加到Peano算法中!(基本上,每个图灵机都停止或不停止是一个经典事实,并且没有可计算的功能可以证明这一事实。)


我不明白这与扩展理论是如何一致的:f和g在扩展上相等,但是实现方式不同,因此godel代码也不同。函数是否为f和g返回相同的数字?
科迪2012年

3
与扩展性不一致!但是,在HA中,和是逻辑连接词,而不是函数/记录。因此,它们必须是可实现的,但他们的实现者不必是扩展的。安德烈·鲍尔(Andrej Bauer)是这方面的专家,因此,如果您提出一个问题,您肯定会得到很好的答案。
Neel Krishnaswami 2012年

11

最简单的答案是这样的事实,即类型化的lambda演算对应于逻辑(简单类型的lambda演算->谓词逻辑;系统f->二阶逻辑),而一致的逻辑无法证明其自身的一致性。

假设您在输入的lambda演算中有自然数(或自然数的Church编码)。可以进行Gödel编号,将系统F中的每个术语分配给唯一的自然数。然后,有一个函数,它将任何自然数(对应于System F中一个好的类型的项)带到另一个自然数(对应于该F中类型良好的系统F项的正常形式),并为任何与系统F中类型正确的术语不对应的自然数(例如,它返回零)。函数是可计算,因此它可以由无类型演算来计算,但不是类型lambda演算(因为后者将达到二阶逻辑的一致性的证明˚Fff 二阶逻辑,这意味着二阶逻辑不一致。

需要注意1:如果二阶逻辑不一致的,这也许可以写在系统F ...和/或它可能不可能写在无类型演算-你可以写的东西,但它可能不总是终止,这是“可计算”的标准。˚Fff

警告2:有时通过“简单类型的lambda演算”,人们的意思是“具有定点运算符或递归函数的简单类型的lambda演算”。就像无类型的lambda演算一样,PCF或多或少都可以计算任何可计算的函数。


10

未类型化的 -calculus具有组合器形式的一般递归。简单类型的 -calculus不会。因此,任何需要一般递归的函数都是候选函数,例如Ackermann函数。(我省略了一些细节,以至于我们如何精确地表示每个系统中的自然数,但基本上任何合理的方法都可以。)ÿ λλYλ

当然,您总是可以扩展简单类型的 -calculus以匹配的幂,但是随后您正在更改游戏规则。ÿλY


出于某种原因,我曾在我的头上,你可以在系统F ...做阿克曼
罗布·西蒙斯

@Rob,据我了解,安德烈(Andrej)并非如此。
卡韦

1
我想我说过可以在未类型化的 -calculus中编程Ackermann函数(因为每个可计算函数都可以),但是不能在简单类型化的 -calculus中编程。我什么也没有说有关系统F.λλλ
安德烈·鲍尔

哦,对,我只是傻瓜。(因为在谈论系统F和谈论STLC之间的问题非常模棱两可,所以我选择了功能更强大的系统,却忘记了更简单的问题。)
Rob Simmons

-calculus中的Ackermann函数为。根据我本学期建立的类型推断,它具有简单的类型:,这很残酷,但可能是正确的。STS的问题不是阿克曼(Ackermann),而是模拟图灵机。没有组合器,您根本无法做到这一点。λλm.m(λfn.nf(f1_)) suc(((((fe)fe)h)((((fe)fe)h) hg)g)(((bc)ab)(bc)ac)d)dY
Francisco Mota 2012年

6

简单类型的lambda演算实际上令人惊讶地薄弱。例如,它无法识别常规语言。不过,我从未发现STLC可以识别的语言集的精确特征。a


5
我认为可计算的内容取决于您要查看的类型。当您在类型表示自然,其中是基本类型,并且将等式视为beta-等式,则可定义的函数是扩展多项式(多项式+ if-then-其他)。IIRC中,Schwichtenberg证明了这一点,尽管我从未阅读过他的原始论文(德语)。(我认为论文的译名是“在键入的Lambda Calculi中定义的函数”,1976年。)(pp)ppp
Neel Krishnaswami 2012年

2
@尼尔 更好的翻译是 -calculus中具有Types的可定义函数λ。您可以在这里下载它,它只有两页长。是否知道在其他类型,其他相等概念或自然数的其他编码处会发生什么?
Martin Berger 2012年

@Marting:谢谢!我现在住在德国,所以这是练习我的德语的一个很好的额外动力。:)
Neel Krishnaswami 2012年

4

我喜欢的高度标准化结石的局限性的一种观点是可计算性角度。在高度归一化类型的演算中,例如核心简单类型的lambda演算,System F或构造演算,您可以证明所有项最终都会终止。

如果该证明是有建设性的,则您将获得固定的算法,以保证计算时间上限的方式评估所有项。或者,您也可以研究(不一定是建设性的)证明,并从中提取一个上限-可能很大,因为这些结石具有表达力。

此界限为您提供了在固定的lambda演算中无法键入的函数的“自然”示例:所有渐近优于此界限的算术函数。

如果我没记错的话,可以在指数塔中对简单类型的lambda演算中键入的项进行求值:O(2^(2^(...(2^n)..); 比这种塔的增长速度快的功能在这种计算中无法表达。系统F对应于直觉二阶逻辑,因此可计算性非常简单。为了抓住甚至更强大的理论的可计算性优势,我们通常以集合论和模型论(例如,可以建立什么序数)为依据,而不是以可计算性理论为依据。


0

如果我正确理解了您的问题,我认为一个简单的示例就是术语,它接受一个函数并将其应用于自身。您可以在未类型化的lambda演算中定义和简化此函数(特别是,您有,但未进行标准化),但是您无法键入,因为将意味着找到类型,使得。Δ=λx.xxΔΔβ ΔΔΔAA=AA


我们应该小心键入 -calculus的含义。具有 st类型并不奇怪。λAAAA
卡夫

是的,您是对的,但是我认为(也许我是错的)在简单类型的lambda演算或System F中不可能有这样的类型,而这两种类型都在高度规范化。
2012年

我不确定该论点是否成立:我们不仅需要证明是不可输入的,而且还没有与等效的输入lambda项。最简单的方法是指出类型化的lambda演算正在高度规范化这一事实。Δ ΔΔΔΔΔ
lambda.xy.x

@Kaveh为什么有一种A这样A \ident A \rightarrow A不是很奇怪?对我来说这听起来很荒谬,我在俯视什么?
Martijn

您可能正在经典地考虑集合和它们上的函数空间。考虑一下例如有限的二进制字符串和可计算的函数。
卡夫
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.