基本递归函数的类别是否与Fetus证明终止的函数的类别等效?


9

如果您还没有听说过Foetus,可以在这里继续阅读。它使用“调用矩阵”和“调用图”系统查找函数中所有递归调用的“递归行为”。为了表明函数终止,它表明对函数进行的递归调用的所有递归行为都遵循一定的“字典顺序”。它的终止检查器允许所有原始递归函数以及诸如Ackermann函数之类的函数。基本上,它允许多参数原始递归。这基本上也是Agda的终止检查器;我相信Coq也有一些类似的功能,尽管也许更通用。

通过阅读DA Turner的论文“ Total Functional Programming”。他解释说,他提出的语言将能够表达Godel研究的System T中看到的所有“原始递归功能”。他继续说,该系统“已知包括每个递归函数,其整体可以通过一阶逻辑证明”。

胎儿剂量允许所有原始递归功能吗?如果可以,那么是否允许不是原始递归函数的函数?可以提供答案吗?(因为我只是感兴趣,所以这实际上不是必需的;只是一些阅读有关此事的婚姻会很好)

额外的问题:基本递归函数在组合器方面有一个非常简洁的定义:类型S和K(不能表示定点组合器),零,后继函数和迭代函数;而已。还有其他更通用的语言,它们的定义如此简洁,并且所有表达式都以这些语言终止吗?


关于Agda vs Coq:我一直都在阅读Agda的终止检查器,使其更加先进并接受更多功能,您的第一个说法是相反的(将Agda与Coq进行比较时,这是一个很好的经验法则,但Agda缺乏策略:Agda更具研究性,并且对稳定性较差的扩展开放)。安德烈亚斯·阿贝尔(Andreas Abel)一直在研究基于尺寸类型的更高级的端接检查器,请参见他在MiniAgda上的工作以及本文
Blaisorblade 2014年

有“接受更多的函数定义”和“具有更大的可计算函数类”。两者无可比拟。阿格达(Ada)赢得第一名,但Coq显然获得第二名。
科迪2014年

我需要澄清的是,我根本没有使用过Coq和Agda。从我几乎不了解的内容看来,Coq能够定义更广泛的可计算函数类,但我不知道,所以我说:“我相信Coq也具有一些类似的功能,尽管可能更通用”。“相信”和“也许”是用来表达我不知道的。
2014年

Answers:


7

是的,胎儿检查器可以对Goedel T中的所有内容进行类型检查。您可以通过使用检查器显示T中的迭代运算符正在终止来显示此内容。例如,以下定义将起作用:

iter:A(AA)NAiterif0=iiterif(n+1)=f(iterifn)

对于胎儿检查器(或大多数其他任何终止检查器)来说,这很容易检查,因为它显然是结构上递归的定义。

Agda和Coq都允许证明终止的功能远远超出一阶算术中证明的总和。启用此功能的功能是它们允许通过递归数据来定义类型,这称为“大消除”。(在ZF集理论中,替换公理方案具有大致相同的目的。)

一个超越T的简单例子就是Goedel T本身的一致性!我们可以将语法作为数据类型给出:

data T : Set where 
   N : T 
   _⇒_ : T → T → T

data Term : T → Set where 
   zero : Term N
   succ : Term (N ⇒ N)
   k    : {A B : T} → Term (A ⇒ B ⇒ A)
   s    : {A B C : T} → Term ((A ⇒ B ⇒ C) ⇒ (A ⇒ B) ⇒ A ⇒ C)
   r    : {A : T} → Term (A ⇒ (A ⇒ A) ⇒ N ⇒ A)
   _·_  : {A B : T} → Term (A ⇒ B) → Term A → Term B

请注意,类型依赖项允许我们定义仅包含T的类型良好的术语的术语数据类型。然后,我们可以为这些类型提供解释功能:

interp-T : T → Set 
interp-T N       = Nat 
interp-T (A ⇒ B) = (interp-T A) → (interp-T B)

这表示N应该是Agda自然数,而T的箭头应解释为Agda函数空间。这是一个“大”消除,因为我们通过递归定义了数据类型T的结构的集合

然后,我们可以定义一个解释函数,表明Goedel T的每个术语都可以用一个Agda术语来解释:

interp-term : {A : T} → Term A → interp-T A
interp-term zero    = 0 
interp-term succ    = \n → n + 1
interp-term k       = \x y → x
interp-term s       = \x y z → x z (y z)
interp-term r       = Data.Nat.fold 
interp-term (f · t) = (interp-term f) (interp-term t)

(我的机器上没有Agda,因此毫无疑问会缺少一些导入,固定性声明和错别字。对于那些愿意的人,他们也可以是编辑者),这是读者的一项练习。)

我不知道Agda的一致性强度是多少,但是Benjamin Werner已经证明归纳构造的微积分(Coq的内核微积分)与ZFC以及许多不可访问的基数相等。


请注意,您没有在示例中使用大消除。大量消除实际上并没有增加计算能力。非直谓性作用:F系统没有前者,但能表达功能系统T.不表达
科迪

@cody:interp-T函数根据一项计算一个集合,这对我来说似乎是一个很大的消除!大型消除肯定会增加能力:在没有大型消除的情况下,马丁-洛夫类型理论甚至无法从0 = 1得出不一致。(要注意这一点,请注意,如果没有Universe /大消除,则可以删除所有依赖项并得到一个简单的输入词:这就是Harper和Pfenning在其LF充分性证明中所做的。)
Neel Krishnaswami 2014年

抱歉:是的,interp-T函数确实使用了大消除功能。我也同意证明0!= 1确实需要它。但是,定义可计算函数证明数学语句不同。我的回答对此做了一些澄清。例如,单纯的构造微积分不能证明0!=1。但是,它可以相对轻松地定义Ackermann函数。
科迪2014年

这表明Agda具有更一般的意义,它可以为系统T编写解释器,但它不显示天气或不显示Foetus(一种不依赖类型的语言),它更通用。胎儿可以这样做吗?如果不是为了“大淘汰”,阿格达​​还能做到吗?
2014年

1
阿格达(Agda)的文档说,其终止检查器使用胎儿算法。如果您使用了T,并使用由Foetus检查的模式匹配和递归定义对其进行了扩展,则将无法在其中编写T的解释器。实际上,您根本不会更改T可计算的函数-Fetus计算的所有终止顺序在Peano算术中都有很好的依据。(请参阅cody的答案。)Fetus算法使您可以编写更多定义,而无需更改可以计算的功能集。Agda的大量淘汰实际上增加了功能集。
Neel Krishnaswami 2014年

3

作为说明,我应该注意到胎儿是由安德烈亚斯·阿贝尔Andreas Abel)开发的,他还为阿格达(Agda)开发了原始的终端检查器,并从那时起就致力于更先进的终端技术

您的问题的答案可能会有些令人失望: NN恰好可以在系统中定义的功能的F。原因是:上述类等于二阶算术(PA2),它等于系统中定义的功能 F(例如,参见“ 证明和类型”,第11章)。此外,如果您删除了多态性,那么您将陷入可在PA,恰好与系统中可定义的一致 T

再次,这样做的原因是“调用矩阵”所捕获的减少是有充分根据的,并且证明可以完全在PA

但是,这并不意味着胎儿并不比系统有用T!在实践中,需要更复杂的终止分析以能够接受可计算功能的某些表示形式。例如,您不需要每次编写统一函数时都需要在Peano Arithmetic中进行复杂的证明。因此,在这方面,Fetus非常强大,并且允许您以Coq,Agda或任何其他通用证明系统不接受的方式定义函数。


可证明终止的功能类别(PA ^ 2)与我所知无法证明终止的系统F中的功能类别等效吗?我也不明白你是怎么回答我的问题。您是在说系统T具有更大的可计算函数类,还是在说胎儿呢?我认为您的逻辑上有一个飞跃,希望我的背景比实际更多。另外,您提供的链接似乎导致页面无法正确显示。
杰克

系统F中的功能全部终止。与系统T相比,Fetus捕获了更多的可计算函数,但是“偶然”,如果删除多态性,则Fetus只能捕获系统T。您能告诉我哪个链接不适合您吗?(以及您使用的是哪种浏览器:)
Cody14年

1

如果通过原始递归函数来表示原始递归函数,并且知道Fetus包含Ackermann函数,则Fetus与pr函数的类别不一致,因为Ackermann函数不是原始递归。这是由阿克曼(Ackermann)证明的,后来罗斯扎·彼得(Rosza Peter)在1935年的“ Konstruktion nichtrekursiver Funktionen ”中给出了一个简化的证明(据我所知,不幸的是只有德语)。

如果您要寻找可以终止的较大递归函数类,而这些递归函数类可能与Fetus捕获的函数类重合,那么Rosza Peter的其他一些著作可能会让您感兴趣。

Ackermann函数包含在Rosza Peter在1937年的Uber die mehrfache Rekursion中定义的多个递归函数的类中。非正式地,多重递归背后的思想是您可以拥有多个递归变量,这些变量可以在递归步骤之后更改。例如f(a,b) 可能会打电话 f(a,b1) 要么 f(a1,b)

Rosza Peter 在“ Zusammenhang der mehrfachen und transfiniten Rekursion ”中描述的超限递归概念给出了更强大的类。对于超限递归,您有一个递归变量,可以将前辈调用到特殊顺序<

例如,您可以将整数解释为一对整数,然后使用顺序

(a,b)<(c,d)(a<cbd)(acb<d)
可以将其推广为整数的三倍,依此类推。彼得称这些命令ω2,ω3等等。您可以更进一步,将整数解释为任意数量的整数。让pi 成为 i-第素数。那我们可以考虑z=p1np2x1p3x2 哪里 n 表示编码为的整数的数量 zxi包含resp。值。她表示一个整数列表的排序,例如ωω并通过对角化显示这种递归比多重递归强。但是,我不确定此类是否有语法特征。

[edit]原始递归函数与以下注释中所述的原始递归函数不同。但是我认为可以将超限递归的概念转换为功能。但是,尚不清楚它在功能设置上是否仍然更强大。


2
有限类型的基本递归函数的类别比基本递归函数的类别更为笼统。它可以表达例如阿克曼功能,可以在哥德尔系统T.可以看出
杰克
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.