2つのプログラムが異なると言えるのはいつですか?


15

Q1。2つのプログラム(C ++などのプログラミング言語で作成された)が異なると言えるのはいつですか?

最初の極端な例は、2つのプログラムが同一である場合に同等であると言うことです。もう1つの極端な例は、2つのプログラムが同じ関数を計算する(または同様の環境で同じ観測可能な動作を示す)場合に同等であると言うことです。しかし、これらは良くありません。素数をチェックするすべてのプログラムが同じというわけではありません。結果に影響を与えないコード行を追加できますが、それでも同じプログラムと見なします。

Q2。プログラムとアルゴリズムは同じ種類のオブジェクトですか?そうでない場合、アルゴリズムの定義は何ですか?プログラムの定義とどのように違いますか?2つのアルゴリズムが同等であると言えるのはいつですか?


プログラム同型問題?「このプログラムは、常に停止するプログラムと同型ですか?」と尋ねることはできませんか?停止問題を回復しますか?境界のある停止プログラムに限定すると、問題は単なるグラフ同型ではありませんか?
user834

5
2つのアルゴリズムが同じ場合 arxiv.org/abs/0811.0811
sdcvvc

1
コンテキストに完全に依存しませんか?ここで少し哲学的になりますが、ボルトで固定された椅子と逆さまのボルトで固定された椅子は物理的には同じものですが、椅子のアイデアという点では同じではありません。
宮坂

ややオフトピック、しかし、証拠がプログラムされているので、... gowers.wordpress.com/2007/10/04/...
ラドゥグリゴール

1
次の記事は非常に関連しています。私は少し前にそれをざっと読んだだけですが、BlassとGurevicは通常非常によく書いています(Dershowitzによる他のことを読んだことを覚えていません、通常それは非常に読みにくいとは言いません)。 research.microsoft.com/en-us/um/people/gurevich/Opera/192.pdf 2つのアルゴリズムが同じ場合は?アンドレアス・ブラス、ナカム・デルショヴィッツ、ユーリ・グレヴィッチ
kasterma

回答:


18

Q1:プログラムの等価性(トレースの等価性、コンテキストの等価性、観測の等価性、二相性)の多くの概念があり、時間、リソースの使用、非決定性、終了などを考慮する場合と考慮しない場合があります。プログラム等価性の使用可能な概念を見つけるために、多くの作業が行われました。例:Andy Pittsによるプログラム等価の操作ベースの理論。しかし、これはほとんど表面を傷つけません。これは、2つのプログラムが同等ではない場合に興味がある場合でも便利です。停止しないプログラムについても考えることができます(バイシミュレーションとコインダクションを使用)。

Q2:この質問の一部に対する考えられる答えの1つは、対話型プログラムはアルゴリズムではないということです(アルゴリズムがすべての入力を一度に取得すると考えるが、この狭い定義はオンラインアルゴリズムを除外すると仮定します)。プログラムは、環境と相互作用する相互作用プロセスの集合である可能性があります。これは、アルゴリズムのチューリングマシン/再帰理論の概念と確かに一致しません。


一般的なIOと副作用は、古典的なアルゴリズムの概念ではまったくカバーされていません。
ラファエル

15

もう1つの極端な例は、2つのプログラムが同じ関数を計算する(または同様の環境で同じ観測可能な動作を示す)場合に同等であると言うことです。しかし、これらは良くありません。素数をチェックするすべてのプログラムが同じというわけではありません。結果に影響を与えないコード行を追加できますが、それでも同じプログラムと見なします。

これは極端ではありません。プログラムの等価性は、観測の概念に関連して定義する必要があります。

PL研究で最も一般的な定義は、文脈的同等性です。コンテキスト等価では、アイデアは、プログラムをより大きなプログラム(コンテキスト)のコンポーネントとして使用して観察するというものです。したがって、2つのプログラムがすべてのコンテキストに対して同じ最終値を計算する場合、それらは等しいと判断されます。この定義は、考えられるすべてのプログラムコンテキストを定量化するため、直接作業することは困難です。したがって、PLの典型的な研究プログラムは、文脈的同等性を暗示する構成的推論の原則を見つけることです。

ただし、これが観察の考えられる唯一の概念ではありません。たとえば、プログラムのメモリ、時間、または電力の挙動は観察可能であると簡単に言うことができます。この場合、より多くのプログラムを区別できるため、保持されるプログラムの同等性は少なくなります(たとえば、マージソートはクイックソートと区別できるようになりました)。タイミングチャネル攻撃の影響を受けない言語を設計したい場合、またはスペースに制限のあるプログラミング言語を設計したい場合、これはあなたがしなければならないことです。

また、計算の中間状態のいくつかを観測可能と判断することもできます。これは、干渉の可能性があるため、並行言語では常に発生します。ただし、シーケンシャル言語でもこのビューを使用したい場合があります。たとえば、暗号化されていないデータをメインメモリに保存しないようにするには、メインメモリへの書き込みを監視可能と見なす必要があります。

基本的に、プログラムの等価性という単一の概念はありません。それは常にあなたが選ぶ観察の概念に関連しており、それはあなたが念頭に置いているアプリケーションに依存します。


1
たとえば、問題のプログラミング言語が対話型(つまり、値を生成しない)である場合、コンテキスト等価(またはコンテキスト一致)の一意の概念も存在しないことを指摘する価値があります。
マーティンバーガー

α

1
αα

1
@ SamTobin-Hochstadt。では、「通常」を忘れましょう。私が感じるのは、あなたがニールが言ったのと同じことを言っているということです。これは私の意見では非常によく考えられていました。まだ私にはあいまいなあなたのアイデアは、適切な観察と適切な種類のプログラムコンテキストを選択することで、ニールのフレームワークで形式化できます。
ウダイレディ

1
λλバツバツλyy

2

Q2:通常の理論上の定義では、アルゴリズムとプログラムを実際に区別していないと思いますが、一般的に使用される「アルゴリズム」は、プログラムのクラスに似ています。私にとって、アルゴリズムは、一部のサブルーチンが完全に指定されていない(つまり、望ましい動作は定義されているが実装はされていない)プログラムのようなものです。たとえば、ガウス消去アルゴリズムでは、整数乗算の実行方法が実際に指定されていません。

これが素朴な場合は申し訳ありません。PLの研究はしていません。


おそらく、これらのサブルーチンには複数の実装があり、仕様に従って機能する限り、どちらを選択しても構いません
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.