発言は、Coqの特定の1つの使用法、つまりプログラミング言語理論の形式化についてです。
最初に、合成と分析の違いを明確にしましょう。
では、合成対象へのアプローチ私たちは、その基本的な性質と構造何らかの形で仮定されているものがあると言います。次に、仮定された特性と構造のみに依存してこれらのことを研究します。
対象に対する分析的アプローチでは、特定のことがあることがわかります。それらについてさらに学ぶために、私たちはそれらを分解し、それらがどのように作られたかを研究し、それらを分析します。このようにして、それらの特性と構造を発見します。
これらの2つの方法でプログラミング言語をどのように勉強しますか?
総合的に、言語の構成要素(用語があり、型がある)、それらの基本構造(これらは用語を構築する方法です)、および基本プロパティを仮定します。用語とタイプが何でできているか、用語がツリーか文字列か、タイプのコレクションが特定の方法で構築されているかどうかは尋ねません。
分析的には、帰納的定義を使用して数学的オブジェクトを構築するなど、多くのことを実行できる数学的セットアップから始めます。特定の帰納的に定義されたセットまたはタイプとして用語とタイプを作成します。次に、それらの構造、変換方法などを調べます。
Coqが分析の種類であることは明らかです。Coqでプログラミング言語を実装する場合、帰納的なタイプの用語とタイプを定義します。次に、帰納法を使用してそれらを分析し、用語の構文などの再帰関数として操作セマンティクスを定義します。
一方、Twelfは合成の種類です。用語のタイプとタイプのタイプがあると仮定しますが、これらは帰納的タイプであることをTwelfに伝えません(Twelfではそれを言う方法はありません)。基本的な移行ルールを提供することにより、運用上のセマンティクスを定義します。再帰的に定義された関数についての言及はなく(Twelfで関数を定義する方法はありません)、書き留めた仮定に依存します。
上記の状況を平面ジオメトリと比較する必要があります。ヒルベルトの幾何学へのアプローチは総合的です(しかし、彼のアイデアはユークリッドに根ざしています)、デカルトは分析的です。線は基本的な概念ではないため、分析ジオメトリはそのように呼ばれます。線は内部構造を持っています。つまり、点のセットです。