私はHoare Logicを見ていますが、ループ不変式を見つける方法を理解する上で問題があります。Hoare Logicループ不変式
誰かがループ不変量の計算に使用した方法を説明できますか?
ループインバリアントは、「有用な」ものにする必要がありますか?
私だけのような例では、簡単な例を扱う不変条件を見つけ、部分的および完全な補正を証明しています:
{ i ≥ 0 } while i > 0 do i := i−1 { i = 0 }
私はHoare Logicを見ていますが、ループ不変式を見つける方法を理解する上で問題があります。Hoare Logicループ不変式
誰かがループ不変量の計算に使用した方法を説明できますか?
ループインバリアントは、「有用な」ものにする必要がありますか?
私だけのような例では、簡単な例を扱う不変条件を見つけ、部分的および完全な補正を証明しています:
{ i ≥ 0 } while i > 0 do i := i−1 { i = 0 }
私たちは、あなたが、前提条件と事後条件を使用してプログラムを分解し、誘導式を作成し、証明するためにホーアのロジック推論システムのルールを使用して、プログラムの(部分)正しさを証明するためホーアのロジックについて話している場合。あなたの例では
は、あなたがあなたのケースでは、ルール{p} while b do S {p^not(b)} <=> {p^b} S {p}
を使用してプログラムを分解したい
したがって次のステップでは、{i ≥ 0^i > 0} i := i−1 {i ≥ 0}
を推測します。これは、さらに推測して、非常に容易に証明することができます。 私はこれが役立つことを願っています。
は(あなたの推論のため)に有用であることは不変の主なポイントです。それで、あなたが証明したい事後条件を見て、事後条件に到達するのに役立ち、ループのコードから導かれる不変条件を作ります。
私はこれがあなたの質問にお答えしますかどうかわからないんだけど、念のためにそれがない:
正式なもののための非常に非公式の説明:)。インバリアントは、開始時と終了時には保持されませんが、入力が前提条件を満たす限り、プログラムのすべてのステートメントの後に保持する必要があります。 Hoareのロジックは、シンプルなプログラムスキーマに基づいていますが、具体的な実装言語は本当に重要ではありません。 –
Heh、コメントありがとう:)私の教育では、「不変」という言葉は、それが何であるかについての正式な説明なしにたくさん投げられました。 –
私はHoare Logicについて言えば、不変式は何の説明もなしに投げ捨てられていると思います... – nunopolonia