仕様からコンピュータプログラムを書くシステムを実際に作成した人はいますか?


17

コンピュータプログラムを生成するシステム(ソフトウェアまたは簡単な例を含む紙の詳細な説明)を実際に書いた人はいますか?I入力、それがリスト素数10未満ことプログラム作成 のP rがiは、mは、E Xの単にように定義される 1 < X APrime(x)x<10Prime(x) 教授は、彼らができると言う誰も実際の完全な例を与えません。

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

13
汎用プログラミング言語用のコンパイラのようなものですか?
サショニコロフ14

1
こんにちは-cstheoryへようこそ!残念ながら、あなたの質問は理論的なコンピューターサイエンスの研究レベルの質問ではなく、このサイトではトピック外です。

実際、これは現在の研究のトップであり、非常に有望な良い質問です。ただし、必要なものを正確に指定することは非常に難しい場合があります。それを指定することに成功した場合、それが理にかなっており、実行可能であることを証明し、数学的証明を必要とするシステムが必要です。その証明から、それを行うプログラムを抽出できます。しかし、証明とプログラムの抽出を自動化するための研究はまだ始まったばかりですが、順調に進んでいます。たとえば、ウィキペディアのCoqをご覧ください。---cc @LevReyzin
babou

2
これはあなたの質問に対応するです。他にもあります。理解するの簡単ではありません。CoqとIsabelle(別のそのようなシステム)の群衆には、質問が閉じられなかった場合により多くの情報と例を提供できるSEユーザーが含まれています。私はウェブを検索してそれを見つけました:coqサンプルプログラム合成。
babou 14

2
あなたが私が尋ねていることを捉えるコンピューターサイエンスの分野は、プログラム合成と呼ばれ、研究の活発な分野です。
ハックベネット14

回答:


11

これは非常に積極的な研究トピックであり、非常に有望です。ただし、プログラム生成の完全な自動化にはおそらく本質的な制限があります(しかし、人間はもっと良いのでしょうか?)。しかし、このアイデアは、多くのステップを機械化し、プログラム生成の正確さを自動的にチェックすることにより、プログラムの作成を大幅に支援するのに非常に役立ちます。

これは、コンピュータープログラムと数学的証明が非常に類似していることを示す、カリーハワード対応(または同型)と呼ばれる論理の結果に強く関連しています。

そのため、システムはプログラムの仕様を定理として証明するという考え方です。あなたの例の場合、それは(非公式に)「10より小さいすべての素数のセットがあります」のようなものでしょう。

次に、定理を証明しようとします。既存のシステムは、証明の実行、一部の部分、おそらく証明全体の自動化、および間違いを犯さないことを支援します。

その証明から、最初に指定された素数の希望リストを実際に計算するプログラムを抽出できます。

これらのアイデアを解明するために、過去にいくつかのシステムが開発されました。よく知られているものの1つは、その目的のために言語MLを作成したRobin Milnerに よるLCFでした。現在最も先進的なシステムの1つは Coqです。

完全に解決された例があり、それらのいくつかは非常に複雑です。次の記事でその一部を見つけることができますが、それは決して単純な読書ではなく、Logicの高度な知識が必要です。


9

ワグの答え:はい、しかし、執筆時点では、ほとんどの非自明なプログラムの仕様は、プログラムと同様に記述およびデバッグするのが難しいようです。

もっと真剣に、babouの答えは良いですが、依存型の領域をチェックすることもお勧めします。ありますコックを使用してかなり良い本(フル免責事項:私の友人によって書かれた)が、しかし、警句、Agda、およびイドリスもあります。Isabelle / HOLもチェックする価値があります。

これらはすべて、構造の計算に基づいています。理論的基礎を知りたい場合は、Martin-Löf型理論を調べてください。いくつかの素晴らしい紹介があります。


私は仕様に関して完全に同意します(そしてあなたの答えの残りも、しかしあなたは私よりもそれをよく知っています)。実際のプログラマーは、プログラムが何をすべきかを完全に指定することがどれほど難しいかを知っています。これはソフトウェアエンジニアリングの大きな問題です。対処された問題は一般的にはより数学的ですが、それはここでも翻訳されます。しかし、私は落胆しすぎたくはありませんでした(特に、最初のコメントで示されているこの質問の歴史を考えると)。
babou 14年

4

ここで接線方向に進むと、プログラムジェネレーター(つまり、特殊な言語で何かの高レベルの説明を提供するシステム)は永遠に存在し続けています。多くのパーサージェネレーターのいずれかと同様に、コンパイラーもそれらの1つです。当時、「第3世代言語」と呼ばれるシステムは、高レベルの説明と利用可能なデータのカタログを与えられた典型的なビジネスアプリケーションの(ほとんどの)コードを生成していました。


1

論理プログラミングと、より一般的には、宣言的プログラミングは前提として正確にあなたが提案するものを取ります:すなわち、論理仕様から、その仕様を満たす結果を返します。

「10未満の素数」の例に具体的に対処していると思われる分野の1つは、与えられた整数制約を含む特定の制約を含む問題の解決策を見つけようとするConstraint Programingです。

このようなシステムの特定の(オープンソース)実装のためにECLiPSeを試してみてください。


ロジック/制約のパラダイムは、プログラムを指定するよりも答えを指定することの方が多いと言うのは正しいでしょうか。もちろん、不完全な仕様はプログラムであると言うかもしれません。しかし、どういうわけか、それがプログラム合成と同じゲームかどうかはわかりません。例は非常に単純だったので、例に答えていることは事実です。制約プログラミングは単純な問題のためだけのものだと言うつもりはありません。
babou 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.