コンピュータープログラムの複雑さの増大と、コンピューターの社会における重要性の高まりにより、コードが正しく機能することを正式に証明しなければならないプログラミング言語をまだまとめて使用しないのはなぜなのか疑問に思います。
私はこの用語が「証明コンパイラ」であると信じています(ここで見つけました):プログラミング言語をコンパイルするコンパイラで、コードを書くだけでなく、コードの仕様を述べ、コードが準拠していることを証明する必要があります仕様(または自動化された証明者を使用してそうする)。
インターネットを検索しているときに、非常に単純なプログラミング言語を使用しているプロジェクト、または現代のプログラミング言語に適応しようとする失敗したプロジェクトのみを見つけました。これは私の質問につながります:
本格的なプログラミング言語を実装する認定コンパイラはありますか、またはこれは非常に難しい/理論的に不可能ですか?
また、私は、任意の複雑性クラスのような証明可能なプログラム、関与見ていました「証拠が存在するチューリングマシンですべての言語のクラスを決定可能なこと、このチューリングマシンの停止」私が呼ぶ、するアナログとして、、再帰言語のセット。
このような複雑なクラスを勉強することの利点を見ることができます:たとえば、の場合、Halting問題は決定可能です(明白な方法で定義されたは、それが決定可能な言語の最大クラスになると推測し)。さらに、実際に役立つプログラムを除外することはできないと思います。終了を証明できない場合に誰がプログラムを使用するでしょうか?
私の2番目の質問は:
含まれる言語に特定のプロパティがあることを証明することを要求する複雑性クラスについて何を知っていますか?