有人真的创建了一个可以按照规范编写计算机程序的系统吗?


17

有没有人实际编写过一个可以生成计算机程序的系统(软件或纸上的详细说明以及简单的示例)?余输入,它创建了一个程序,它列出了素数小于10 P - [R 中号È X 被简单地定义为 1 < X Prime(x)x<10Prime(x) 教授说,他们可以,但没有人给出实际完成的例子。

1<xAs.t.1<AA<xx=A×B, with A,BN

13
您的意思是说,您知道用于通用编程语言的编译器吗?
Sasho Nikolov

1
嗨-欢迎来到cstheory!不幸的是,您的问题不是理论计算机科学中的研究级问题,并且不在本网站上。

实际上,在当前研究的顶部,这是一个很好的问题,而且很有希望。但是,通常很难精确地指定所需的内容。如果您设法指定它,那么您将需要一个系统来证明它有意义,可行并且需要数学证明。从该证明中可以提取出执行该程序的程序。但是,尽管取得了不错的进展,但关于证明和程序提取自动化的研究仍处于起步阶段。您可以在Wikipedia上查看Coq。---cc @LevReyzin
babou 2014年

2
这是一本书与您的问题相对应。还有其他 这容易理解。Coq和Isabelle(另一个此类系统)的人群确实包括SE用户,如果问题未解决,他们可以为您提供更多信息和示例。我是通过在网上搜索以下内容找到的:coq示例程序综合。
2014年

2
捕捉您所要询问的内容的计算机科学领域称为程序综合,是活跃的研究领域。
哈克·贝内特

Answers:


11

尽管程序生成的完全自动化可能具有内在的局限性,但这是一个非常活跃的研究主题,非常有前途(但人类会更好吗?)。但是,通过机械化许多步骤并自动检查程序生成的正确性,该想法在很大程度上有助于程序创建方面仍然非常有用。

它与称为Curry-Howard对应关系(或同构)的逻辑结果密切相关,该结果表明计算机程序和数学证明非常相似。

因此,想法是系统将您的程序规范作为要证明的一个定理。以您的示例为例,它(非正式地)类似于:“存在一组所有小于10的素数”。

然后,您将尝试证明该定理,而现有的系统将帮助您进行证明,自动执行某些部分(可能是整个证明)并确保您永远不会犯错误。

然后,可以从该证明中提取一个程序,该程序实际上计算最初指定的质数的通配符列表。

过去开发了几种系统来阐明这些想法。Robin Millner的LCF是最著名的一种,他为此创建了ML语言 。Coq是当前最先进的系统之一 。

有一些例子可以很好地解决,其中有些非常复杂。您可能会在下面的文章中找到一些内容,尽管绝不是简单的阅读,并且需要对Logic的高级了解。


9

疯狂的回答:是的,但是在编写本文时,对于大多数非平凡的程序,规范似乎和程序一样难以编写和调试。

更严重的是,babou的答案很好,但我还将建议检查依赖类型的范围。有一个相当不错的书使用勒柯克(完整的免责声明:由我的一个朋友写),但也有Epigram,Agda和Idris。Isabelle / HOL也值得一试。

这些都是基于构造的演算。如果您想了解理论基础,请查阅Martin-Löf类型理论。周围有一些很棒的介绍。


我完全同意有关规范(以及您的其余回答,但您比我更了解)。任何真正的程序员都知道完全指定程序应该做什么是多么困难。这是软件工程中的一个主要问题。即使解决的问题一般来说都是数学上的问题,这也适用于此。但是,我不想听起来太令人沮丧(特别是考虑到这个问题的历史,第一条评论说明了这一点)。
2014年

4

在这里切线开始,程序生成器(即,以某种特殊语言对某事物进行高级描述的系统)永远存在。任何编译器都是其中之一,许多解析器生成器中的任何一个也是如此。在过去,称为“第三代语言”的系统很流行,该系统在给出高级描述和可用数据目录的情况下生成典型业务应用程序的(大部分)代码。


1

逻辑编程,更一般而言,声明式编程以您所建议的内容为前提:即从逻辑规范中返回满足该规范的结果。

约束编程似乎是一个专门解决您给出的“小于10的素数”示例的领域。它试图找到涉及某些约束(包括整数约束)的问题的解决方案。

您可能想为此类系统的特定(开源)实现尝试ECLiPSe


说逻辑/约束范式更多地是指定答案而不是指定程序是否正确?当然,您可能会说不完整的规范是一个程序。但是不知何故,我不确定它是否与程序综合相同。尽管确实可以回答示例,但确实如此,因为示例非常简单。我并不是说约束编程仅用于简单的问题。
2014年
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.