Hoareロジック-ループの正確性


7

次の形式のwhileループについて考えてみます。

while (C) {S}

条件とループの本体。CS

ましょうと、それぞれ不変とこのループの変異体です。whileループの完全な正確さに関する規則は、私の教科書で次のように示されています。IV

もしIV0

そして、[ICV=v0]S[IV<v0]

次に[I]while (C) {S}[I¬C]

私が理解していると思うことから、ループが終了するためには、バリアントが厳密に減少しなければならず、それもゼロによって制限されている必要があります。しかし、それを数学的に翻訳すると、教科書とは異なる命題が得られます。 V

[V0V=v0]S[V0V<v0]

私の質問:この最後の命題と私の教科書のルールは、ループが終了するために証明する必要があることについて同じことを言っていますか?言い換えれば、

[ICV0V=v0]S[IV0V<v0]

と同じ

IV0[ICV=v0]S[IV<v0]

なぜか、なぜそうでないのか?


「𝚅は厳密に減少しなければならず、またゼロによって制限されなければならない」という主張は十分に誤解を招きます。また、𝚅は根拠のある範囲の関数であることも必要です。代わりに負でない有理数を使用することを想像して、反例を構成してください。
カイ

回答:


4

教科書ルールを適用できるたびに独自のルールを適用できるという意味で、これらは同等です。2つのルールの不変条件は似ていますが、同じではありません。

教科書のルールインスタンスをルールのインスタンスに変換する

アプリケーションまたはテキストルールがあるとします。つまり、次のようなが見つかりました。I

IV0[ICV=v0]S[IV<v0]

次に、上記の含意のおかげで、ます。ルールPrePostを使用して、不変条件を同等のものに書き換えることができ、ルールの適用を取得します。IIV0

[ICV0V=v0]S[IV0V<v0]

ここでは、教科書のルールと同じ不変条件を使用します。

ルールのインスタンスをテキストブックルールインスタンスに変換する

さて、逆の方向に。ルールのを見つけたとしましょう:I

[ICV0V=v0]S[IV0V<v0]

ここで、仮定できないため、をテキストルール使用できません。ただし、新しい不変式として使用できます。を構成(*)によって簡単に作成し。さらに、仮説からIV0II:=IV0IV0

[ICV0V=v0]S[IV0V<v0]

(PrePostによって)取得できます

[ICV=v0]S[IV<v0](**)

プロパティ(*)と(**)は、テキストルールを適用するために必要なものです。

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