在通用数据类型上定义原始递归函数


9

原始递归函数是在自然数上定义的。但是,似乎该概念应该推广到其他数据类型,例如,允许人们谈论将列表映射到二叉树的原始递归函数。通过类推,自然数上的部分递归函数可以很好地概括为任何数据类型上的可计算函数,并且我想了解如何对原始递归函数进行相同类型的概括。

直观地讲,如果我要定义一种简单的命令式语言,该命令式语言允许对诸如列表(例如,串联,进行头和尾,元素的比较)之类的基本操作以及一种迭代形式,该形式需要事先知道将发生多少次迭代( (例如,对不可变列表中的元素进行迭代),那么这种语言最多应该能够计算出列表中的原始递归函数。但是我如何才能正式地理解这一点,更具体地说,我将如何证明我的语言能够计算出列表中的所有原始递归函数,而不仅仅是它们的子集?

明确地说,我有兴趣将原始递归函数理解为定义良好的函数类(如果确实存在),而不仅仅是原始递归本身的操作,这似乎很简单。我会对在通用数据结构的原始递归上或者在自然数以外的任何上下文中编写的任何东西的指针都感兴趣。

更新:我可能已经在McAllester和Arkoudas的名为Walther Recursion论文中找到了答案。(CADE 1996的会议记录。)这似乎包含原始递归以及更强大的Walther递归的广义版本。消化完这些内容后,我打算写一个自我解答,但与此同时,本说明可能对有相同问题的其他人有所帮助。


1
我不清楚您正在寻找什么。看来您只是在寻找W型,但事实并非如此。
安德烈·鲍尔

3
可能有用的是,可以将“普通”(树状)数据类型以非常简单的方式编码为自然数,然后自然数上的PR函数可以很好地表示您想要的内容。或者,您可以使用Gödel的System T扩展到带有“通常”递归的严格正一阶数据类型。
科迪

1
如果要消除此“功能” ,可以将消除器的输出类型限制为基本类型
科迪

1
在我看来,您仍在寻找一种受限W类型的形式。像是带有有限分支的W型,递归限制为消除为其他受限W型。
安德烈·鲍尔

1
1996年CADE会议访问这里:dblp.org/db/conf/cade/cade96
John Fisher

Answers:


5

通常,在具有数据类型(如列表,树等)的语言中,很容易描述一种功能语言,其功能与我们期望原始递归完全一样。

例如,如果数据类型为,并且构造函数具有类型Dc1,,cn

ci:T1iT2iTk1iDD

那么输出类型为的递归将具有类型recDOO

recDO:(T11Tk11DDOO)DO

并且操作语义将是:

recDO f1  fn (ci t1tki d1dm)fi t1tki (recDO f1 fn d1)(recDO f1fn dm)

对于每个。i

满口的东西!至少对于自然数,我们确实得到

recNO:(NOO)ONO

recNO f0 f1 0f1 0
recNO f0 f1 (S n)f0 n (recNO f0 f1 n)

如希望的那样(请注意,零构造函数的参数为​​零!)。

如果现在我们允许常量函数和投影,并且允许对非函数类型任意使用,则您具有完全原始的递归。recDOO

可以放心的是,如果所有也不起作用,则数据类型的常规Gödel编码将提供相同的原始递归函数。Tij


不过,最好对此过程进行更优雅的描述。那就是Carlos的答案:这些数据类型可以在类别理论中更优雅地描述为某些函子(通常称为多项式函子)初始代数。该recursor然后只(的变体)这个代数的初始态射,有时也被称为catamorphism被人们混淆视听的东西。这种态射通过初始代数的构造而存在。

只是我上面描述的特定变体。


恐怕这超出了我的范围。为什么我们希望得到作为类型签名?这是否自动表示它代表原始递归?(我很难想象如何仅从函数的类型读取它。)我对类型论非常熟悉,可以在Haskell中编程,但是我对您的形式主义并不熟悉。在这里重用。我在哪里可以阅读足够的背景知识来理解您的内容?recNO:(NOO)ONO
纳撒尼尔(Nathaniel)2016年

的类型的从上面的更一般的方案如下。它表示原始的递归性,因为操作语义表示从PR函数的定义开始的递归操作。我还没有解释操作语义,所以我将扩展我的评论。recN
科迪

我没有任何基本的参考资料,尽管我猜这些幻灯片提供了很好的软介绍,并且Ralph Mattes 论文的第3章进入了巨大的技术细节,尽管它允许非“一阶”归纳类型。
科迪

2

我最近问了这个问题,发现了几篇有趣的文章:

归纳归纳逻辑:(a)定义了一种逻辑,该逻辑为满足某些要求的任何数据类型提供了基本递归的泛型概念(b)证明此逻辑是原始递归算术的保守扩展。

循环程序的复杂性:证明其循环程序的概念等同于原始递归函数。

原始递归集的逻辑程序:证明其逻辑程序的类等效于原始递归函数。

原始递归集函数的证明理论表征:证明给定集上的所有原始递归函数都是在非常弱的集合论中可定义的那些。


0

也许你会想一个概念的paramorphism

来自香蕉,透镜,信封和铁丝网的功能编程

对于自然数,亚同态是形式为的函数h=(b,)

h0=bh(n+1)=n(hn)

例如,阶乘函数具有和。b=1nm=(n+1)×m

对于列表,同形将是形式为的函数h

hnil=bh(consab)=a(b,hb)
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.