有没有人实际编写过一个可以生成计算机程序的系统(软件或纸上的详细说明以及简单的示例)?余输入,它创建了一个程序,它列出了素数小于10 P - [R 我中号È (X )被简单地定义为 1 < X ∧ ∄ 甲 教授说,他们可以,但没有人给出实际完成的例子。
有没有人实际编写过一个可以生成计算机程序的系统(软件或纸上的详细说明以及简单的示例)?余输入,它创建了一个程序,它列出了素数小于10 P - [R 我中号È (X )被简单地定义为 1 < X ∧ ∄ 甲 教授说,他们可以,但没有人给出实际完成的例子。
Answers:
尽管程序生成的完全自动化可能具有内在的局限性,但这是一个非常活跃的研究主题,非常有前途(但人类会更好吗?)。但是,通过机械化许多步骤并自动检查程序生成的正确性,该想法在很大程度上有助于程序创建方面仍然非常有用。
它与称为Curry-Howard对应关系(或同构)的逻辑结果密切相关,该结果表明计算机程序和数学证明非常相似。
因此,想法是系统将您的程序规范作为要证明的一个定理。以您的示例为例,它(非正式地)类似于:“存在一组所有小于10的素数”。
然后,您将尝试证明该定理,而现有的系统将帮助您进行证明,自动执行某些部分(可能是整个证明)并确保您永远不会犯错误。
然后,可以从该证明中提取一个程序,该程序实际上计算最初指定的质数的通配符列表。
过去开发了几种系统来阐明这些想法。Robin Millner的LCF是最著名的一种,他为此创建了ML语言 。Coq是当前最先进的系统之一 。
有一些例子可以很好地解决,其中有些非常复杂。您可能会在下面的文章中找到一些内容,尽管绝不是简单的阅读,并且需要对Logic的高级了解。
疯狂的回答:是的,但是在编写本文时,对于大多数非平凡的程序,规范似乎和程序一样难以编写和调试。
更严重的是,babou的答案很好,但我还将建议检查依赖类型的范围。有一个相当不错的书使用勒柯克(完整的免责声明:由我的一个朋友写),但也有Epigram,Agda和Idris。Isabelle / HOL也值得一试。
这些都是基于构造的演算。如果您想了解理论基础,请查阅Martin-Löf类型理论。周围有一些很棒的介绍。