コンピュータプログラムを生成するシステム(ソフトウェアまたは簡単な例を含む紙の詳細な説明)を実際に書いた人はいますか?I入力、それがリスト素数10未満ことプログラム作成 のP rがiは、mは、E (Xの)単にように定義される 1 < X ∧ ∄ A 教授は、彼らができると言う誰も実際の完全な例を与えません。
コンピュータプログラムを生成するシステム(ソフトウェアまたは簡単な例を含む紙の詳細な説明)を実際に書いた人はいますか?I入力、それがリスト素数10未満ことプログラム作成 のP rがiは、mは、E (Xの)単にように定義される 1 < X ∧ ∄ A 教授は、彼らができると言う誰も実際の完全な例を与えません。
回答:
これは非常に積極的な研究トピックであり、非常に有望です。ただし、プログラム生成の完全な自動化にはおそらく本質的な制限があります(しかし、人間はもっと良いのでしょうか?)。しかし、このアイデアは、多くのステップを機械化し、プログラム生成の正確さを自動的にチェックすることにより、プログラムの作成を大幅に支援するのに非常に役立ちます。
これは、コンピュータープログラムと数学的証明が非常に類似していることを示す、カリーハワード対応(または同型)と呼ばれる論理の結果に強く関連しています。
そのため、システムはプログラムの仕様を定理として証明するという考え方です。あなたの例の場合、それは(非公式に)「10より小さいすべての素数のセットがあります」のようなものでしょう。
次に、定理を証明しようとします。既存のシステムは、証明の実行、一部の部分、おそらく証明全体の自動化、および間違いを犯さないことを支援します。
その証明から、最初に指定された素数の希望リストを実際に計算するプログラムを抽出できます。
これらのアイデアを解明するために、過去にいくつかのシステムが開発されました。よく知られているものの1つは、その目的のために言語MLを作成したRobin Milnerに よるLCFでした。現在最も先進的なシステムの1つは Coqです。
完全に解決された例があり、それらのいくつかは非常に複雑です。次の記事でその一部を見つけることができますが、それは決して単純な読書ではなく、Logicの高度な知識が必要です。
ワグの答え:はい、しかし、執筆時点では、ほとんどの非自明なプログラムの仕様は、プログラムと同様に記述およびデバッグするのが難しいようです。
もっと真剣に、babouの答えは良いですが、依存型の領域をチェックすることもお勧めします。ありますコックを使用してかなり良い本(フル免責事項:私の友人によって書かれた)が、しかし、警句、Agda、およびイドリスもあります。Isabelle / HOLもチェックする価値があります。
これらはすべて、構造の計算に基づいています。理論的基礎を知りたい場合は、Martin-Löf型理論を調べてください。いくつかの素晴らしい紹介があります。
論理プログラミングと、より一般的には、宣言的プログラミングは前提として正確にあなたが提案するものを取ります:すなわち、論理仕様から、その仕様を満たす結果を返します。
「10未満の素数」の例に具体的に対処していると思われる分野の1つは、与えられた整数制約を含む特定の制約を含む問題の解決策を見つけようとするConstraint Programingです。
このようなシステムの特定の(オープンソース)実装のためにECLiPSeを試してみてください。