具有规范功能的编程语言


29

是否有所有功能都具有规范形式的(功能?)编程语言?也就是说,为所有输入集返回相同值的任何两个函数都以相同的方式表示,例如,如果f(x)返回x + 1,而g(x)返回x + 2,则f(f(x ))和g(x)在编译程序时将生成无法区分的可执行文件。

也许更重要的是,我在哪里/如何找到有关程序规范表示的更多信息(谷歌搜索“规范表示程序”效果不佳)?这似乎是一个很自然的问题,而且恐怕我只是不知道我要寻找的正确术语。我很好奇这种语言是否有可能成为图灵​​完整的语言,如果不能,那么在保持这种属性的同时,您可以拥有多么丰富的编程语言。

我的背景非常有限,因此我希望先决条件较少的资源,但是对更高级资源的引用也可能很酷,因为这样我就知道我要努力争取什么。

Answers:


38

实际上,这可能是λ演算理论中的一个主要公开问题。以下是已知信息的快速摘要:

  • 具有单元,乘积和函数空间的简单类型的lambda演算确实具有简单的规范形式属性。当且仅当两个术语具有相同的beta-normal,η-long形式时,两个术语才相等。计算这些范式也非常简单。

  • 和类型的加法极大地使事情复杂化。相等性问题仍然可以判定(要搜索的关键字是“副产物相等性”),但是已知算法的工作非常棘手,据我所知,还没有完全令人满意的范式定理。这是我所知道的四种方法:

  • 无限制类型(例如自然数)的添加使问题无法确定。基本上,您现在可以对希尔伯特的第十个问题进行编码了。

  • 递归的添加使问题变得不可预知,因为具有正常形式可以使相等性得以确定,这将使您解决停顿问题。


本文将同乘积的等价关系扩展为与和的等价关系,但是没有“单一”规范形式的语法,您可以选择一个足够智能的“饱和函数”,以检测要比较的两个术语何时具有被证明为错误的子项。这与艾哈迈德·利卡塔·哈珀(Ahmed-Licata-Harper)最为相似,因为它们都使用聚焦。
Max New

仅使用单元,产品和功能,您可能会记下的任何东西的基数都是1,而如果加总和,您突然会得到许多不同的基数(并且可以进行“有用的计算”)。这些事实有关吗?
glaebhoerl

1
@glaebhoerl:我总是不愿意说事实没有关联,但是在这种情况下,我看不到明显的联系。如果您在语言中添加基本​​类型(没有任何前导形式或elim形式),我提到的大多数结果将继续保留,但是(a)会破坏您注意到的基数事实,因为和是不同的范式,但(b)不会影响我所知道的任何算法。bλXbλÿbXλXbλÿbÿ
Neel Krishnaswami
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.