有可能证明一个函数是幂等的吗?


12

是否可以使用静态或从属类型来证明函数是幂等的?

我已经搜索了Google以及StackOverflow / StackExchange上的各个地方,但是都没有运气。我找到的最接近的是有关Idris的对话:https ://groups.google.com/forum/#! topic/ idris-lang/ yp7vrspChRg

不幸的是,这种讨论让我有些头疼。


3
我不确定将其发布为答案,因为我不确定100%,但是由于赖斯定理,我相信这是不可能
gardenhead 2016年

4
这是一个令人着迷的问题,我的直觉表明,应该使用受限的,非图灵完整的语言来做到这一点。但是,程序员专注于有关软件开发生命周期的问题(有关详细信息,请参阅帮助中心),而这似乎是计算机科学的问题。计算机科学站点可能更合适,并且可以带来更好的答案。
amon 2016年

2
@gardenhead Rice定理指出,给定程序行为可能具有的任何属性,有时就无法确定程序是否具有该属性。“这有时是不可能的”和“这是不可能的”之间有很大的区别。
Tanner Swett

2
我的最后评论很模糊。无论如何,这就是赖斯定理要说的:没有一种算法可以正确地将所有函数归为等幂或非等幂。但是,仍然有有用的算法将某些功能归类为等幂与否。
Tanner Swett

2
OP询问有关证明函数是幂等的,没有算法将函数归类为同等的。主要区别在于证明可以由人编写。至于图灵的完整性,这确实不是问题
gallais

Answers:


3

对于某些功能。尤其是当您知道该功能时;-)

如果您的问题是“是否有一种算法可以自动确定任意函数是否等幂”,则由于注释中已经提到了这些定理,因此答案是否定的。但是,对于特定的功能类别,理论上可以很容易地确定该功能是否是幂等的。例如,如果函数是纯函数(意味着:没有任何副作用),并且知道对于任何给定的输入,它总是在有限的时间内返回一个值,那么可以通过尝试是否f(f(x))=f(x)有任何可能的输入来确定幂等性x功能。这并不是非常有效,它可以一直运行到宇宙末日。

因此,如果这不是您想要的答案,请写一个更好的问题,目前还不清楚您真正在寻找什么。


谢谢你的回答。“自动决定”的能力正是我想要的。
bmaddy16年

2
为了扩展“对于某些功能,它是”语句:幂等性可以证明为仅接受有限数量的输入(通过尝试所有输入)或递归定义的输入类型(如自然)的任何函数数字或链接列表),这意味着您只需要证明基本情况和递归情况的幂等性都是正确的。
22:09
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.