次のコードでループ不変条件を見つけようとしています。
最も近い対 Iter(A) を見つける:
# Precondition: A is a non-empty list of 2D points and len(A) > 1.
# Postcondition: Returns a pair of points which are the two closest points in A.
min = infinity
p = -1
q = -1
for i = 0,...,len(A) - 1:`=
for j = i + 1,...,len(A) - 1:
if Distance(A[i],A[j]) < min:
min = Distance(A[i],A[j])
p = i
q = j
return (A[p],A[q])
ループの不変条件は min = Distance(A[i],A[j]) なので、 A の最も近い点は A[p] と a[q] だと思います。プログラムの正しさを示そうとしています。ここでは、i を定数にして内側のループを証明したいと思います。内側のループを証明したら、それをループ不変式に置き換えて、外側のループを証明します。ちなみに宿題です。どんな助けでも大歓迎です。