論理関係とシミュレーションの違いは何ですか?


29

私は、プログラムの同等性を証明する方法に取り組んでいる初心者です。2つのプログラムが同等であることを証明するために、論理関係またはシミュレーションを定義することに関するいくつかの論文を読みました。しかし、私はこれら2つの手法についてかなり混乱しています。

シミュレーションは共誘導に基づいているのに対し、論理関係は帰納的に定義されていることしか知りません。なぜこのように定義されているのですか?それぞれの長所と短所は何ですか?さまざまな状況でどちらを選ぶべきですか?


1
あなたが読んだこれらの論文へのリンクを提供したいと思うかもしれません。これにより、どの特定の例があなたを混乱させているかがより明確になります。
マークハーマン

1
論理関係については、HurとDreyerの最近の論文「MLとアセンブリの間のKripkeの論理関係」(POPL'11)を読みました。また、ピアスの本「型とプログラミング言語の高度なトピック」の古典的な章を読みました。論理的な関係は、言語の型構造で帰納的に定義されていますが、言語に型構造(Cなど)がない場合はどうなりますか?(それは別の質問のようです。)
洪金梁

1
シミュレーションについては、ヘネシーとミルナーによるオリジナルの論文「非決定性と並行性の代数則」を読みました。KoutavasとWandの「高次命令プログラムについて推論するための小さなバイシミュレーション」(POPL'06)は私には理解できず、なぜ彼らが彼らの方法を「バイシミュレーション」と呼んだのかわかりません。
洪金梁

3
投稿のコメントに提供した情報を含めるとよいでしょう。質問の下にある編集リンクをクリックして、質問を編集できます。
カヴェー

1
@HongjinLiang:型構造がない場合(または再帰型がある場合)、ステップインデックス付きの論理関係を使用できます-論理関係では型の帰納法を使用し、ステップ索引付けでは観測ステップで帰納を行います。あなたはアマルアーメドの研究文でポインタを見つけることができます:ccs.neu.edu/home/amal/ahmed-research.pdfを。(論理関係の研究に関する別の概要は、Derek Dreyerからのこの講演と彼の研究声明:mpi-sws.org/~dreyer/research.pdfです)。
ブレイザーブレード14年

回答:


20

おそらく斬新なこの質問に対する答えがあります。実際、私は過去6ヶ月ほどの間、それについてまだ考えています。そして、それはまだ論文で書かれていません。

一般論は、「論理関係」、「シミュレーション」、さらには「不変式」のような関係推論原理は、データ抽象化または情報隠蔽の現れであるというものです。情報が隠れているところはどこでも、これらの原則が現れます。

それを最初に発見したのはオートマトン理論家でした。オートマトンには非表示状態があります。したがって、それらの等価性について話すには、リレーショナル推論が必要です。オートマトンの理論家は準同型にしばらく苦労し、あきらめ、シミュレーション関係の一種である「関係被覆」と呼ばれる概念を思いついた。

ミルナーは、1971年に「プログラム間のシミュレーションの代数的概念というあまり知られていないが非常に基本的な論文でこのアイデアを取り上げました。Hoareはそれを知って、1972年に「データ表現の正確性の証明」リレーションの代わりに抽象化が機能するのは、リレーションが「単純」だと考えたためです)。彼は後にシンプルさの主張を撤回し、「洗練されたデータの洗練」でリレーションの使用に戻りました。レイノルズは「プログラミングのクラフト」でリレーショナル推論を使用しました"、Chapter 5(1981)。彼は関係は抽象化関数よりも自然で一般的だと思った。この章に戻ってみると、関係パラメトリックのアイデアが潜んでいて、発見されるのを待っているだろう。レイノルズは、「タイプ、抽象化、およびパラメトリック多型」(1983)を公開しました。

これらのアイデアはすべて型とは関係ないように見えますが、実際には関係しています。ステートフルな言語とモデルには、組み込みのデータ抽象化があります。情報を隠すために「抽象データ型」を定義する必要はありません。ローカル変数を宣言して非表示にするだけです。最初の数週間で、Javaクラスの1年生に教えることができます。汗かいていない。

一方、関数型言語とモデルは、を介して情報を隠蔽する必要があります。機能モデルには組み込みのデータ抽象化がありません。私たちは使用して、明示的にそれを追加する必要があり。したがって、ステートフル言語を関数型言語に翻訳すると、すべてのローカル状態が型変数に翻訳されることに気付くでしょう。これがどのように機能するかについての明確な説明については、私の論文「Algolに似た言語のオブジェクトとクラス」を参照してください。現在、これらの古典的なアイデアをよりよく理解しています。

同等であることを証明したい2台のマシンM を使用します。Milner 1971は、MM 'の状態間の関係を定義し、2つのマシンが関係を維持することを示しています。レイノルズのパラメトリック性によると、マシンの状態はタイプXおよびX ′に属していると考えられます。それらの間の関係Rを定義します。マシンのタイプがF X およびF X であり、それらの状態のタイプによってパラメーター化されている場合、2つのマシンが関係Fによって関連付けられていることを確認しますMMMMバツバツRFバツFバツFR

したがって、シミュレーションとリレーショナルパラメトリックは本質的に同じ考えです。それは単なる表面的な類似ではありません。前者は、組み込みのデータ抽象化があるステートフル言語用に作成されています。後者は、データの抽象化が型変数を介して取得されるステートレス言語用に作成されています。

では、論理関係はどうですか?表面的には、論理関係はより一般的な考えのようです。パラメトリック性は同じモデル内で型変数を関連付ける方法について述べていますが、論理関係は異なるモデル間で型を関連付けるように見えます。(デイブ・クラークは以前、これについて素晴らしい説明を書きました。)しかし、私の気持ちは、これがまだ定式化されていない、より高いタイプのパラメトリック性のインスタンスであるということです。その面でのさらなる進歩にご期待ください。


[注記追加]論理関係とシミュレーションの関係については、最近の論文「論理関係とパラメーター:カテゴリー理論とプログラミング言語のレイノルズプログラム」で説明されています。


上記の関係、マシンを記述するFを与えられたRのいわゆる関係リフティングであると言うのが本当かどうか疑問に思っていました。FRRfunctor F
デイブクラーク

@DaveClarkeはい、それは同じ考えです。定義のレイノルズスタイルで、各種類のコンストラクタ装備されています関連アクション関連付け、各関係にそのR X X '、対応関係F R F X F Xは'いくつかを満たします公理。いくつかの他のコミュニティでは、彼らは、導出したいF Rを彼らはそれらを呼び出すそこ、他の原理から関係liftings。ザF FRバツバツFRFバツFバツFR彼らはこのプロセスによって生成し、レイノルズの意味での関係アクションになります。FR
ウダイレディ

14

重要な違いの1つは、論理関係が、プログラムのクラス(たとえば、コンパイラへの入力)が別のプログラムのクラス(たとえば、コンパイラの出力)に対応することを示す手法として使用されるのに対して、シミュレーション関係が使用されることです2つのプログラム間の対応を表示します。

2つの概念の類似点は、どちらも2つの異なるエンティティ間の対応を示すために使用される関係を定義することです。ある意味では、論理関係は、型の構文で帰納的に定義されたシミュレーション関係と考えることができます。しかし、さまざまな種類のシミュレーション関係が存在します。

論理関係は、あなたが読んだ論文のように、MLなどの言語とアセンブリ言語への翻訳との対応を示すために使用できます。論理関係は、型構造で帰納的に定義されます。論理関係は、翻訳が各タイプコンストラクターに対して正しいことを示すことにより、たとえば、翻訳が正しいことを示すための構成手段を提供します。関数タイプでは、正確性条件の条件は次のようになります。この関数の変換は、十分に翻訳された入力を十分に翻訳された出力に変換します。

論理関係は、ラムダ計算に基づく言語の多目的な手法です。論理関係のその他のアプリケーションには、(ここから):ラムダ定義可能性の特徴付け、表示的意味定義の関連付け、パラメトリック多相性の特徴付け、抽象解釈のモデリング、データ表現の検証、完全な抽象セマンティクスの定義、高次言語でのローカル状態のモデリングが含まれます。

シミュレーション関係は、一般に2つのプログラムの等価性を示すために使用されます。通常、このようなプログラムは、チャネルでメッセージを送信するなど、ある種の観察結果を生成します。PがQができることをすべて実行できる場合、1つのプログラムPは別のQをシミュレートします。

大まかに言って、バイシミュレーションは2つのシミュレーション関係をまとめたものです。プログラムPを表示し、プログラムQをシミュレートし、プログラムQがプログラムPをシミュレートできることを示します。通常、追加条件が存在しますが、バイシミュレーションがあります。Wikipediaのバイシミュレーションに関するエントリは、良い(より正確な)出発点です。アイデアには何千もの変形が存在しますが、それはコンピューターサイエンス、モーダルロジック、モデル理論とほぼ同じ形式で再発明された基本的なアイデアです。Sangiorgiの記事は、このアイデアの素晴らしい歴史を示しています。

2つの概念間の関係を確立する1つの論文は、論理的関係を使用するAndy Pittsによる意味論と構文の間の論理的関係に関するメモであり、最終的には構文的に定義された意味論的概念であり、純粋な構文的概念である応用バイシミュレーションに関する特定の特性を証明します。


詳細な説明をありがとう!私はあなたの参考文献を読み、2つの間の深いつながり/違いを見つけようとします。
洪金梁

「プログラムPを表示してプログラムQをシミュレートし、プログラムQがプログラムPをシミュレートでき、バイシミュレーションを実行します。」というステートメントについて確かですか?A =(a。(b + c))+(a.b + ac)およびB = a.b + acとします。AがBに似ている限り、BはAに似ていますが、AとBは二相性ではありません。
アンドラスサラモン

@アンドラス:あなたは正しい。私の声明は十分に正確ではありません。この違いは、「いくつかの追加条件が存在する可能性がある」というフレーズによって抽象化されています。
デイブクラーク

ヘネシーとミルナーは、バイシミュレーションの元の論文で3種類の同値関係を定義しそれらの違いを説明するための例を示しました。あなたの元々の声明は実際には彼らの論文の中間の声明であり、それは二刺激よりも弱く、トレース等価よりも強い。どの等価性が優れているかわかりません。たぶんそれは実際の使用に依存します。
洪金梁

シミュレーションは、2つのデータタイプ間でデータの洗練を確立するための証明手法としても使用されます。これらのシミュレーション証明のすべてが、プログラムのクラス全体に関連しています。詳細についてはeg [1]を参照してください。これは、2つの概念の区別がさらに曖昧であることを示唆しています。[1]:CARホア、彼J、およびJWサンダース。データの洗練における事前仕様。情報処理の手紙、25:71-76、1987年。
Kai

8

2種類の関係は、異なるコンテキストで使用されるようです。型付き言語の論理シミュレーションと、遷移システムで解釈されるプロセス計算またはモーダルロジックを処理するときのシミュレーション関係。Dave Clarkeが非常に直感的な説明を提供してくれたので、役立つかもしれないいくつかのポインターを追加します。

抽象解釈を使用して両方の概念を特徴付ける作業が行われています。それはあなたが望むものではないかもしれませんが、少なくとも両方の概念は同じ数学的な枠組みで扱われます。

サムソン・アブラムスキーは、論理関係を使用して、遅延Lambda計算の厳密性分析の健全性と終了を証明しました(抽象解釈、論理関係、およびKan拡張)。彼はまた、論理関係が抽象解釈のガロア接続の意味で抽象化関数を定義することを示しました。最近、BackhouseおよびBackhouseは、基本型のガロア接続から高次型のガロア接続を構築する方法と、これらの構築が論理関係(論理関係とガロア接続)を使用して同等に記述できることを示しました。したがって、型付き関数型言語の特定のコンテキストでは、2つの概念は同等です。

シミュレーション関係は、さまざまなモーダルおよび時相論理のクリプキ構造間の特性保存を特徴づけます。型の代わりに、ロジックにモダリティがあります。シミュレーション関係は、ガロア接続、したがって抽象化も定義します。これらの抽象化に特別なプロパティがあるかどうかを尋ねることができます。答えは、標準の抽象化は健全であり、シミュレーション関係ベースの抽象化は完全であるということです。完全性の概念はガロア接続に関するものであり、ガロア接続は直感的な解釈と一致しない場合があります。この作業は、David Schmidt(プログラム抽象化のための構造保存バイナリ関係)、Francesco RanzatoおよびFrancesco Tapparo(抽象解釈による一般化された強力な保存)によって開発されました。


あなたの答えは、概念を抽象的な解釈に結びつけるのに非常に役立ちます。ありがとうございました!
洪金梁

誠実な質問:私は専門家ではありませんが、レイノルズ(1983、「型、抽象化、およびパラメトリック多相性」)は、ガロア接続である論理関係をすでに定義していませんか(6節)。私が気づく唯一の違いは、「ガロア接続」という用語ではなく、「カテゴリと見なされる半順序間の随伴ファンクター」という用語だけであり、ドメインに限定しています。OTOH、Backhouse、およびBackhouseはレイノルズを引用していますが、この主張については、どちらにせよ議論しません。
ブレイザーブレード

6

私は、2つの概念がやや曖昧だと思います。どちらも、平等の概念を何らかの形で具体化する計算メカニズムのバイナリ関係についてです。論理関係は型構造の帰納法によって定義されますが、シミュレーションは自由に定義できますが、用語は共帰納法を暗示します。

π


あなたの参照は本当に素晴らしいです!並行プログラムの論理的な関係を聞いたことがありません。ありがとうございました!論理関係を定義することの難しさは、型構造を見つけることです。同じ型構造で、異なるプログラミング言語間で論理関係を定義できます。一方、シミュレーションでは、状態遷移システムによるプログラムのモデリングが必要です。これは、プログラムが異なる状態モデル用に記述されている場合は不安になる可能性があります。
Hongjin梁

こんにちは!はい、適切な型構造を見つけるのは必ずしも簡単ではありません。比較する2つの計算に対して異なる遷移システムを使用してシミュレーションを定義できます。弱いシミュレーションの定義はまさにそれを行うと主張することができます。シミュレーションを定義するために本当に必要なのは、遷移ラベルを比較するための関係だけです。
マーティンバーガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.