プログラミング言語で構文と意味のメソッドを厳密に区別できますか?


14

強力な正規化の証明について説明しますが、このコメントでは「通常のフォームモデル」と「純粋に構文的な方法」を比較しています。

これにより、より基本的な質問に戻ります。構文ベースのモデルに直面して、構文と意味の構造を厳密に区別できますか?代数の項モデル、一次論理のヘンキンモデルはどうですか?構造的な操作上のセマンティクスはどうですか?用語モデルは構文と同型である可能性があるため、明確な区別をするのは難しいようです。

論理の証明理論とモデル理論の違いを研究するまで、「静的型システムは構文的方法である」という考えに困惑さえしました。結局、型システムは型について推論します。これは、プログラムの動作を抽象化したものです(依存型の場合、任意に正確な型です)。

回答:


14

いいえ、構文メソッドとセマンティックメソッドを厳密に区別することはできませんが、その区別は依然として意味をなします。

  • 構造的な操作上のセマンティクスは、プログラミング言語にセマンティクスを与える合成的な方法ではないため、表示ではありません。

  • ただし、実現可能性または論理関係の方法を使用して、構造的な操作上のセマンティクスから表示モデルを構築できます。例として、Robert HarperのOperational Semantics上の型システム構築を参照してください。

  • 用語モデルは表示的なものですが、一般に意味論者はそれらに満足していません。彼らが通常望んでいるのは、モデルという用語が初期のモデルのカテゴリであり、これを使用して健全性と完全性の結果を証明することができます。(デカルト閉じカテゴリの型付きラムダ計算の健全性と完全性は典型例であり、アレックス・シンプソンの参照単純型のためのカテゴリ網羅結果 -calculusをλいくつかの詳細については。)

  • 逆に、表示的なセマンティクスがある場合は、その構文が何であるかを把握することができます。次に、用語モデルが適切なモデルのカテゴリの初期オブジェクトとして機能する構文および抽象マシンを探します。

    たとえば、ゲームのセマンティクスは純粋なセマンティクスの構築として始まり、最終的には操作上のゲームのセマンティクスに取り組みました。最近の例は、Alexis GoyetのThe lambda lambda-bar calculus:A dual calculus for unconstrained strategy です。

  • 全体として、構造的な操作上のセマンティクスは抽象マシンを指定する方法と考えることができますが、これは実装が容易であることを願っています。表示的意味論は、言語の構成モデルを提供します。両方がある場合、言語の実装と推論の両方を行うことができます。

  • 正規化定理は興味深いあいまいなケースです。通常、正規化を証明するには、セマンティックモデル(通常は論理関係)が必要です。ただし、正規化が成立することがわかったら、通常の形式での帰納法によって多くのプロパティを証明できるようになります。これは、純粋に構文上の引数です。

    弱いロジック(大まかな帰納法のない1次ロジックまで)については、遺伝的置換の手法を使用して、構文的に正規化を証明できます。これらのロジックでは、サブ式プロパティが保持されるため、型の帰納法による正規化を証明できます。この仕組みの説明については、Frank Pfenningの論文Structural Cut Eliminationを参照してください。


わあ、迅速かつ徹底的な回答をありがとう!
ブレイザーブレード

動作セマンティクスが表示ではないためにあなたが与えた理由には同意しません。動作セマンティクスは、プログラムに表示が割り当てられていないため、表示ではありません。操作上のセマンティクスを構成的にする作業が存在します。
14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.