プログラミング言語セマンティクスプロトタイピングツール


11

プログラミング言語のセマンティクスと型システムのプロトタイプを作成するためのツールはありますか?また、これにより、型の健全性など、標準プロパティの何らかのモデルチェックが可能になりますか?

Alloyについての本を読んでおり、リレーショナルロジックを使用して表現されたモデルに対して、私が望んでいる正確な機能を提供しているので、これを質問します。

私はOttを知っていますが、証明アシスタントシステム用のコードの生成に重点を置いているため、このような「モデルチェック」機能はありません。

そのようなツールの存在についての参照があればよいでしょう。


1
Ottは最初のステップです。次に、お気に入りの校正アシスタントでモデルチェックを行います。
Gilles「SO-悪をやめなさい」

@ギレス:わかりましたが、モデルチェックツールのポイントは、プロパティが本当に有効かどうかをチェックするために、指定されたサイズの要素のセット全体を生成することです。このように、定義されたすべての言語に対してこの生成部分をコーディングする必要があります。この生成ステップを自動化する方法があるかご存知ですか?
ロドリゴリベイロ

技術的には、証明アシスタント(少なくともCoqなど)でこれを行うことができますが、おそらく非常に遅くなります。プルーフアシスタントは、問題を解決するために何百万もの方法を自動的に試行するのではなく、人間が支援するプルーフに向けられています。Ottを再利用したい場合は、お気に入りのモデルチェッカーのバックエンドを追加できます。
Gilles 'SO-悪をやめなさい'

回答:


8

プロトタイピングプログラミング言語(それらのセマンティクス、型システム、評価、およびそれらに関するプロパティのチェックを含む)のために特別に作成されたフレームワークがありますが、最適な選択は特定のケースと特定のニーズによって異なります。

そうは言っても、あなたが取るかもしれない複数の(おそらくそれほど明確ではない)代替案があります(これはあなたがすでに述べたものを含みます):

  • 新しい言語の作成とプロトタイピングのために設計された特定の言語/フレームワークを使用する:例として、定義が与えられたプログラミング言語の(動作)セマンティクスを指定およびチェックするために、ラケットに埋め込まれたドメイン固有言語であるRedex [1]言語、タイプセット(Latexで)、縮小の痕跡の検査、単体テスト、ランダムテスト(タイピングのチェックなど)などのタスクの簡単な処理を提供します。
  • 手元にある特定の言語を必要な範囲で取得できる限り、特定の分析を簡単に定義および実行できる一般的なモデリング言語を使用します。Alloy [2]はそのようなアプローチの例です。かなり一般的で柔軟ですが、言語は状態間の関係としてモデル化できますが、セマンティクスが関係モデル(たとえば、言語のセマンティクスをモデル化するためのいくつかのアイデアは、[3]にあります)
  • 定理証明を使用して言語を埋め込み、そのプロパティをチェックします。Coq [4]のような証明システムに埋め込むことにより、言語とそのセマンティクスを定義する例(このアプローチの詳細、およびCoqへの深い埋め込みと浅い埋め込みの違いの説明とデモは、[ 5])
  • Ottを使用する(既に述べたように、Redexと精神的に類似していますが、埋め込まれるのではなく、新しい定義言語を提供します); Ottを使用すると、プログラミング言語を便利な表記法で定義し、ほとんどのチェック(つまり証明)を手動で実行する必要がある証明システム(通常はディープエンベディング)で組版と定義を生成できます。
  • 言語とそのセマンティクスの開発、および汎用プログラミング言語での「ゼロから」の適切なチェック(例:テストとして)、および必要に応じて他のシステムへの翻訳(チェックのために(Leon [6]などの一部の言語)、特定のプロパティを自動的に証明し、このアプローチを証明システムへの埋め込みと同様にする組み込みの検証機能を含める)

フレームワーク/ツールを使用するのがいかに簡単であるか(たとえば、紙やLatexで定義を配置するのと同じくらい簡単)と、言語に関するプロパティをチェックするメカニズムがどれほど強力であるか(たとえば、定理証明の言語では、非常に複雑なプロパティをチェックできます)。

[1] ケーシークライン、ジョンクレメンツ、クリストスディムーラス、カールイーストルンド、マティアスフェリセン、マシューフラット、ジェイA.マッカーシー、ジョンラフキンド、サムトビンホックシュタット、ロバートブルースファインダー。あなたの研究を実行する:軽量機械化の有効性について。POPL、2012年。

[2] ダニエルジャクソン。Alloy:軽量オブジェクトモデリング表記法。TOSEM、2002年。

[3] グレッグデニス、フェリックスチャン、ダニエルジャクソン。SATによるコードのモジュール検証。ISSTA、2006年

[4] Coqの正式な証明管理システム

[5] プログラムに関する正式な推論。アダム・クリパラ、2016

[6] 機能的なScalaプログラムを検証、修復、および合成するためのLeon自動システム

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.