これはアルゴリズムです:このバイナリ検索アルゴリズムがホア論理を使用して正しいことをどのように証明できますか?
// Precondition: n > 0
l = -1;
r = n;
while (l+1 != r) {
m = (l+r)/2;
// I && m == (l+r)/2
if (a[m] <= x) {
l = m;
} else {
r = m;
}
}
// Postcondition: -1 <= l < n
私はいくつかの研究を行い、if x is in a[0 .. n-1] then a[l] <= x < a[r]
まで不変を縮小しています。
私はそこから進歩する方法がありません。前提条件が広すぎると思われるので、私はP -> I
を表示するのに問題があります。
ご協力いただきありがとうございます。これらは、アルゴリズムの正しさを証明するために使用することができ、論理ルールです:
事後条件は、その継続条件の逆であります) '、すなわち' l + 1 == r'である。 – dasblinkenlight