この質問に関する議論の中で、Gillesは、配列を使用するアルゴリズムの正当性の証明には範囲外の配列アクセスがないことを証明する必要があることを正しく述べています。ランタイムモデルによっては、ランタイムエラーが発生したり、配列以外の要素にアクセスしたりします。
このような正当性の証明を実行する一般的な手法の1つは(少なくとも学部の研究では、おそらく自動検証で)、Hoareロジックを使用することです。標準のルールのセットに配列に関連するものが含まれていることは知りません。それらはモナド変数に制限されているようです。
形の公理を追加することを想像できます
ただし、右側の配列アクセスをどのように処理するか、つまり、あるステートメントx := Eの複雑な式一部である場合は、はっきりしません。
配列アクセスをHoareロジックでモデル化して、無効なアクセスがないことをプログラムの正確性を証明できるようにするにはどうすればよいですか?
答えが我々以外の文で使用される配列要素を許可しないと仮定することができるまたはいくつかの一環としてEにおけるX := Eこの表現を制限しないように。一時的な変数にいつでも必要な値を割り当てることができます。つまり、t := A [ i ]と書きます。i f(t > 0 )… i f(A [ i ] > 0 )の代わりに…。
length
していA
ますか?