使用lambda演算来推导时间复杂度?


Answers:


22

Ohad对于lambda微积分作为讨论复杂性类的基础所面临的问题非常正确。在表征lambda演算中的可简化性的复杂性方面,已经做了相当多的工作,尤其是围绕Lèvy博士论文中的标记和最佳还原的工作。一般而言,用于lambda演算的良好成本模型不应为所有beta降低赋予恒定权重:直观地讲,将大子项替换为多个范围不同的地方应该比签约一个小的K redex花费更多,并且如果有人要一定的金额在不同的重写策略下成本不变的问题,这变得至关重要。

两个链接:

  1. Lawall&Mairson,1996年,最优性和低效率:λ演算的成本模型不是什么?(.ps.gz) –关于与成本模型选择有关的问题的开创性调查,以及为什么许多合理的想法不起作用。
  2. Dal Lago和Martini,2008年,作为合理机器的弱Lambda演算 –提供了按价值调用的Lambda演算的成本模型,并对文献进行了很好的讨论。

1
有趣的参考资料,我对这些作品一无所知。
Iddo Tzameret

1
最近在该主题上的情况已经改变。请参阅下面的答案。
Marc

23

λλ

关于您的问题,有一个当前的项目正在开发和研究一种类型系统(一种功能性编程语言),该类型系统可以通过静态分析确定(多项式)程序(以及其他程序使用的资源)的运行时范围。程式)。因此从某种意义上讲,这可能暗示使用函数式编程来分析运行时复杂度可能会有一些优势。项目主页在这里

该项目可能的代表性论文是:Jan Hoffmann,Martin Hofmann。具有多项式潜力的摊销资源分析-功能程序多项式界的静态推断。在第19届欧洲编程研讨会论文集(ESOP'10)中。链接



18

有一个非常有趣的基于线性逻辑的工作线,称为隐式复杂性理论,它通过在lambda微积分上施加各种类型规则来表征各种复杂性类。IIRC,这项工作是在Bellantoni和Cook和Leivant弄清楚如何使用类型系统绑定原始递归来捕获各种复杂性类时开始的。

通常,使用λ结石的吸引力在于,有时可能会发现各种内涵特征的更多可扩展(即,在数学上更易于处理)表征,从而使像图灵机这样的模型具有强大的功能。例如,图灵机和纯lambda演算之间的区别是,由于图灵接收程序代码,因此客户端可以手动实现超时,实现燕尾加工-从而可以并行计算。但是,超时也可以按度量进行建模,并且Escardo推测(我不知道其状态)lambda演算的度量空间模型对于PCF +超时是完全抽象的。度量空间都非常充分研究的数学对象,而且它是非常好的,是能够利用理论的该机构。

但是,使用lambda演算的困难在于,它迫使您从起点就直接面对高阶现象。这可能是非常微妙的,因为Church-Turing命题在较高类型下失败了-计算的自然模型在较高类型上有所不同,因为它们在允许您使用计算表示形式方面有所不同。(由于在LC和TM之间存在差异,因此“平行或”是此现象的简单示例。)此外,由于功能空间的相反性意味着更大的表达力,因此甚至在不同模型之间甚至没有严格的包含。一阶意味着较低的表现力一阶。


12

据我所知,lambda微积分不适用于此目的,因为时间/空间复杂度的概念很难在lambda微积分中表达。

1个单位的时间复杂度是多少?Beta减少?那么空间复杂度的单位呢?字符串的长度?

Lambda演算更适合算法的抽象处理,因为它比Turing机器更容易组合。


7

您还可以查找显式替换的演算,这些演算会将lambda演算的元级替换分解为一系列显式的还原步骤。这说明了查尔斯的观点,即在考虑时间复杂度时不应将所有替代都视为相同。


7

请参阅Nils Anders Danielsson,《纯功能数据结构的轻型半形式时间复杂度分析》,该方法在Agda中作为库实现。本文中的引用看起来也很有希望。

对我来说,一个关键的要点是,在简单类型的lambda演算中推导算法的时间复杂性是适当/有用/合理/半自动化的,特别是如果那些算法在其中容易表达(即纯函数),并且特别是如果那些算法主要使用了“按名称呼叫”语义。伴随着这一点,很明显的一点是,在给定的评估策略下,人们不仅仅在“ lambda演算”中而是在lambda演算中计算复杂度。

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.