私はいくつかのHoareのロジックに取り組んでいます。私のアプローチが正しいかどうかは疑問です。Hoare Logic whileループwhile '<='
Iは、次のプログラムPを有する:それだけかかるので、それは{(N + 1)/ 2、S = Nの*}(ホア三重{N> = 0} Pを満たさなければならない
s = 0
i = 1
while (i <= n) {
s = s + i
i = i + 1
}
を和)。今、私は最初に| s = i *(i-1)/ 2 |私のインバリアントとして、うまく動作します。しかし、私は自分のループの終わりまで、私の望む事後条件に行くことから問題を抱えていました。 impliciationため
|s = i*(i-1)/2 & i > n|
=>
| s = n * (n+1)/2 |
を保持するので、私はiがn + 1であることを証明する必要はなく、ただのnよりも私は大きな。
|s = i * (i-1)/2 & i <= n+1|
その後、私は、私はそれが正しいことだと思いますので、プログラムを証明することができます:だから私は考えは、それがなるように、不変に(I < = N + 1)を追加することです。
しかし、私は不変式が少し、「不変」ではないことが分かります:)。私がコースや練習で見たことのないように、私はここにもっと洗練されたソリューションがあるのだろうかと思っていました。