タグ付けされた質問 「program-logic」

3
変更保護者としてのフレームルール?
フレームルールは、下記のいずれかのように、プログラム与えられた、という考えキャプチャc前提でp、それを実行する前に保持し、事後条件q、その後保持している、いくつかの互いに素条件はr前と後の両方を保持する必要がありますc実行を。(コネクティブは*引数が互いに素であることが必要です。)多くの場合、事前条件と事後条件はヒープの状態でありc、何らかの方法でヒープを変更する効果的なプログラムです。 {p} c {q} ----------------- (where no free variable in r is modified by c) {p * r} c {q * r} 私が見たフレームルールの議論は、ヒープのばらばらの部分がどのようにr保存されるかに常に焦点を当てているようです。これにより、「ローカルな推論」が可能になります。効果について推論する場合、ヒープcのr部分を無視し、実際に変化する部分のみに関心を持つことができます。しかし、別の見方をすれば、現在そこに座っているにもかかわらず、からpへqの変更が保存されるというrことです。言い換えれば、それは我々が事後条件で終わることが重要だ{q * r}のではなく、{q' * r}他のいくつかのためにq'。 だから、私の質問は、議論したり作るが保存-の変更-from-の使用という枠ルールのいずれかの治療がありますかどうかであるp-to- q事。

3
終了を部分的な正確さに減らすのはどれくらい難しいですか?
プログラムの検証に精通している場合は、背景の前に質問を読むことをお勧めします。プログラムの検証に慣れていない場合でも、この質問に答えることはできますが、背景を最初に読むことをお勧めします。 バックグラウンド 部分的な正確性の確認は決定できないとしばしば言われます。議論のために、フロイドのスタイルでこの声明を正確にする1つの非常に特定の方法を選んでみましょう-ホア。フローグラフは区別付き有向グラフである初期のノードのすべてのノードが到達可能であるから。プログラムは、そのノードでコマンドです流れ図です。コマンドには3つのタイプがあります(1)前提条件は q、(2)アサーションは qをアサート、(3)割り当てはv:= eです。ここで、qはfol(1次論理)式、eはfol項、vは変数です。 我々は、プログラムがあると言う部分正しい各ノード注釈を付ける方法がある場合、XとA前提条件A(X)と事後条件のB(x)のように、(1)は、最初のノードの前提条件が有効である、(2){ a(x) } x { b(x) }はすべてのコマンドxに適用され、(3)(b(x)はa(y)を意味します)はxからyまでのすべてのエッジに有効です。ここで、Hoareトリプルは次のように定義されます。 { p } assert q { r }は、(pが(q and r)を意味する)が有効であることを意味します { p } は、 q { r }が((pおよびq)がrを暗示する)が有効であることを意味すると仮定する { P } V:= E { R((つまり}手段PとEの代わりにVが)を意味し、Rは)有効です この部分的な正しさを確認することが決定できない理由について、手で波打った議論があります:a(x)とb(x)を入力したら、いくつかのfol式が有効であるかどうかを確認する必要があります。 部分的に正確に終了をエンコードする一般的な方法は、「前回実行されてから終了に向かって進行した」と本質的に言う特別なアサーションを追加することです。これらの進行アサーションは、フローグラフ上のすべての無限ウォーク(初期ノードから開始)に無限に多くの進行アサーションが含まれるように配置する必要があります。具体的には、進行アサーションの形式は 常にassert u < vで、ここでuとvは正の整数であり、割り当てu:= fが先行し、その後に割り当てv:= uが続くとしましょう。ここでfはバリアント関数、uは現在の値、vは以前の値です。ここで、「正の整数」について説明し、それらを比較するため、folよりも少し多く使用できることを確認する必要があります。Peano算術が使用可能であるとしましょう。(この選択については強く感じません。都合が良ければ無視してください。)もちろん、fはプログラムで言及されている他の関数や定数を使用するかもしれません。(プログラムの最初に仮定を追加することは、非論理公理を導入することと同等であることに注意してください。) これで、進行状況のアサーションがあるプログラムがまだ部分的に正しい場合、元のプログラムが終了することがわかります。 質問 終了プログラムを考えると、進行状況の表明のためのバリアント関数を思いつくのは難しいと感じています。しかし、どのくらい難しいですか?(上記の大きな背景があっても、見方によっては、この質問を未解決または未定義のままにしておくことを知っています。) 別の言い方をすれば、終了を部分的な正確さまで減らす問題を形式化し、その複雑さについて何かを述べているリファレンスを探しています。もちろん、これをすべて行う回答は歓迎されます。


2
オリジナルのHoare Logicターミネーションペーパー
Hoare(または私が推測する他の誰か)が終了(Total Correctness)について議論している元の論文を探しています。または、「バニラ」Hoareロジックの終了に関する他の初期の作業(私はCのようなおもちゃの言語のHLを意味していると思います)。 私はコンピュータープログラムの公理的根拠(PDF)(本質的に部分的正しさのフレーバーのHoareロジックのようです)と 、whileルールの証明に言及しているforルールに関するメモを見てきましたが、見えませんミッシングリンクを見つけるために; 終了/ whileルール/全体の正確性に関する論文。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.