私は、プログラムの同等性を証明する方法に取り組んでいる初心者です。2つのプログラムが同等であることを証明するために、論理関係またはシミュレーションを定義することに関するいくつかの論文を読みました。しかし、私はこれら2つの手法についてかなり混乱しています。
シミュレーションは共誘導に基づいているのに対し、論理関係は帰納的に定義されていることしか知りません。なぜこのように定義されているのですか?それぞれの長所と短所は何ですか?さまざまな状況でどちらを選ぶべきですか?
私は、プログラムの同等性を証明する方法に取り組んでいる初心者です。2つのプログラムが同等であることを証明するために、論理関係またはシミュレーションを定義することに関するいくつかの論文を読みました。しかし、私はこれら2つの手法についてかなり混乱しています。
シミュレーションは共誘導に基づいているのに対し、論理関係は帰納的に定義されていることしか知りません。なぜこのように定義されているのですか?それぞれの長所と短所は何ですか?さまざまな状況でどちらを選ぶべきですか?
回答:
おそらく斬新なこの質問に対する答えがあります。実際、私は過去6ヶ月ほどの間、それについてまだ考えています。そして、それはまだ論文で書かれていません。
一般論は、「論理関係」、「シミュレーション」、さらには「不変式」のような関係推論原理は、データ抽象化または情報隠蔽の現れであるというものです。情報が隠れているところはどこでも、これらの原則が現れます。
それを最初に発見したのはオートマトン理論家でした。オートマトンには非表示状態があります。したがって、それらの等価性について話すには、リレーショナル推論が必要です。オートマトンの理論家は準同型にしばらく苦労し、あきらめ、シミュレーション関係の一種である「関係被覆」と呼ばれる概念を思いついた。
ミルナーは、1971年に「プログラム間のシミュレーションの代数的概念」というあまり知られていないが非常に基本的な論文でこのアイデアを取り上げました。Hoareはそれを知って、1972年に「データ表現の正確性の証明」リレーションの代わりに抽象化が機能するのは、リレーションが「単純」だと考えたためです)。彼は後にシンプルさの主張を撤回し、「洗練されたデータの洗練」でリレーションの使用に戻りました。レイノルズは「プログラミングのクラフト」でリレーショナル推論を使用しました"、Chapter 5(1981)。彼は関係は抽象化関数よりも自然で一般的だと思った。この章に戻ってみると、関係パラメトリックのアイデアが潜んでいて、発見されるのを待っているだろう。レイノルズは、「タイプ、抽象化、およびパラメトリック多型」(1983)を公開しました。
これらのアイデアはすべて型とは関係ないように見えますが、実際には関係しています。ステートフルな言語とモデルには、組み込みのデータ抽象化があります。情報を隠すために「抽象データ型」を定義する必要はありません。ローカル変数を宣言して非表示にするだけです。最初の数週間で、Javaクラスの1年生に教えることができます。汗かいていない。
一方、関数型言語とモデルは、型を介して情報を隠蔽する必要があります。機能モデルには組み込みのデータ抽象化がありません。私たちは使用して、明示的にそれを追加する必要がありや∃。したがって、ステートフル言語を関数型言語に翻訳すると、すべてのローカル状態が型変数に翻訳されることに気付くでしょう。これがどのように機能するかについての明確な説明については、私の論文「Algolに似た言語のオブジェクトとクラス」を参照してください。現在、これらの古典的なアイデアをよりよく理解しています。
同等であることを証明したい2台のマシンとM ′を使用します。Milner 1971は、MとM 'の状態間の関係を定義し、2つのマシンが関係を維持することを示しています。レイノルズのパラメトリック性によると、マシンの状態はタイプXおよびX ′に属していると考えられます。それらの間の関係Rを定義します。マシンのタイプがF (X )およびF (X ′)であり、それらの状態のタイプによってパラメーター化されている場合、2つのマシンが関係Fによって関連付けられていることを確認します。
したがって、シミュレーションとリレーショナルパラメトリックは本質的に同じ考えです。それは単なる表面的な類似ではありません。前者は、組み込みのデータ抽象化があるステートフル言語用に作成されています。後者は、データの抽象化が型変数を介して取得されるステートレス言語用に作成されています。
では、論理関係はどうですか?表面的には、論理関係はより一般的な考えのようです。パラメトリック性は同じモデル内で型変数を関連付ける方法について述べていますが、論理関係は異なるモデル間で型を関連付けるように見えます。(デイブ・クラークは以前、これについて素晴らしい説明を書きました。)しかし、私の気持ちは、これがまだ定式化されていない、より高いタイプのパラメトリック性のインスタンスであるということです。その面でのさらなる進歩にご期待ください。
[注記追加]論理関係とシミュレーションの関係については、最近の論文「論理関係とパラメーター:カテゴリー理論とプログラミング言語のレイノルズプログラム」で説明されています。
functor
重要な違いの1つは、論理関係が、プログラムのクラス(たとえば、コンパイラへの入力)が別のプログラムのクラス(たとえば、コンパイラの出力)に対応することを示す手法として使用されるのに対して、シミュレーション関係が使用されることです2つのプログラム間の対応を表示します。
2つの概念の類似点は、どちらも2つの異なるエンティティ間の対応を示すために使用される関係を定義することです。ある意味では、論理関係は、型の構文で帰納的に定義されたシミュレーション関係と考えることができます。しかし、さまざまな種類のシミュレーション関係が存在します。
論理関係は、あなたが読んだ論文のように、MLなどの言語とアセンブリ言語への翻訳との対応を示すために使用できます。論理関係は、型構造で帰納的に定義されます。論理関係は、翻訳が各タイプコンストラクターに対して正しいことを示すことにより、たとえば、翻訳が正しいことを示すための構成手段を提供します。関数タイプでは、正確性条件の条件は次のようになります。この関数の変換は、十分に翻訳された入力を十分に翻訳された出力に変換します。
論理関係は、ラムダ計算に基づく言語の多目的な手法です。論理関係のその他のアプリケーションには、(ここから):ラムダ定義可能性の特徴付け、表示的意味定義の関連付け、パラメトリック多相性の特徴付け、抽象解釈のモデリング、データ表現の検証、完全な抽象セマンティクスの定義、高次言語でのローカル状態のモデリングが含まれます。
シミュレーション関係は、一般に2つのプログラムの等価性を示すために使用されます。通常、このようなプログラムは、チャネルでメッセージを送信するなど、ある種の観察結果を生成します。PがQができることをすべて実行できる場合、1つのプログラムPは別のQをシミュレートします。
大まかに言って、バイシミュレーションは2つのシミュレーション関係をまとめたものです。プログラムPを表示し、プログラムQをシミュレートし、プログラムQがプログラムPをシミュレートできることを示します。通常、追加条件が存在しますが、バイシミュレーションがあります。Wikipediaのバイシミュレーションに関するエントリは、良い(より正確な)出発点です。アイデアには何千もの変形が存在しますが、それはコンピューターサイエンス、モーダルロジック、モデル理論とほぼ同じ形式で再発明された基本的なアイデアです。Sangiorgiの記事は、このアイデアの素晴らしい歴史を示しています。
2つの概念間の関係を確立する1つの論文は、論理的関係を使用するAndy Pittsによる意味論と構文の間の論理的関係に関するメモであり、最終的には構文的に定義された意味論的概念であり、純粋な構文的概念である応用バイシミュレーションに関する特定の特性を証明します。
2種類の関係は、異なるコンテキストで使用されるようです。型付き言語の論理シミュレーションと、遷移システムで解釈されるプロセス計算またはモーダルロジックを処理するときのシミュレーション関係。Dave Clarkeが非常に直感的な説明を提供してくれたので、役立つかもしれないいくつかのポインターを追加します。
抽象解釈を使用して両方の概念を特徴付ける作業が行われています。それはあなたが望むものではないかもしれませんが、少なくとも両方の概念は同じ数学的な枠組みで扱われます。
サムソン・アブラムスキーは、論理関係を使用して、遅延Lambda計算の厳密性分析の健全性と終了を証明しました(抽象解釈、論理関係、およびKan拡張)。彼はまた、論理関係が抽象解釈のガロア接続の意味で抽象化関数を定義することを示しました。最近、BackhouseおよびBackhouseは、基本型のガロア接続から高次型のガロア接続を構築する方法と、これらの構築が論理関係(論理関係とガロア接続)を使用して同等に記述できることを示しました。したがって、型付き関数型言語の特定のコンテキストでは、2つの概念は同等です。
シミュレーション関係は、さまざまなモーダルおよび時相論理のクリプキ構造間の特性保存を特徴づけます。型の代わりに、ロジックにモダリティがあります。シミュレーション関係は、ガロア接続、したがって抽象化も定義します。これらの抽象化に特別なプロパティがあるかどうかを尋ねることができます。答えは、標準の抽象化は健全であり、シミュレーション関係ベースの抽象化は完全であるということです。完全性の概念はガロア接続に関するものであり、ガロア接続は直感的な解釈と一致しない場合があります。この作業は、David Schmidt(プログラム抽象化のための構造保存バイナリ関係)、Francesco RanzatoおよびFrancesco Tapparo(抽象解釈による一般化された強力な保存)によって開発されました。
私は、2つの概念がやや曖昧だと思います。どちらも、平等の概念を何らかの形で具体化する計算メカニズムのバイナリ関係についてです。論理関係は型構造の帰納法によって定義されますが、シミュレーションは自由に定義できますが、用語は共帰納法を暗示します。