Förslag till invarianter till programmen från föreläsning 5.
Vissa av invarianterna är förenklade och därmed inte fullständigt
matematiskt/logiskt riktiga, men det ska inte vara något problem
att med hjälp av dom bli övertygad om att programmen är korrekta.
InsertionSort(v[1..n]) =
POST v[1..n] sorterad, v[1..n] permutation av indata
for i:=2 to n do
INV v[1..i-1] sorterad, v[1..n] permutation av indata
x:=v[i]
j:=i
while j>1 and v[j-1]>x do
INV v[1..j-1] sorterad, v[j+1..i] sorterad, v[j-1]<=v[j+1], x<v[j+1], perm
v[j]:=v[j-1]
j:=j-1
v[j]:=x
SelectionSort(v[1..n]) =
POST v[1..n] sorterad, v[1..n] permutation av indata
for i:=1 to n-1 do
INV v[1..i-1] sorterad, v[i-1]<=alla element i v[i..n], permutation
mini:=i
for j:=i+1 to n do
INV v[mini] minsta elementet i v[i..j-1], permutation
if v[j]<v[mini] then mini:=j
tmp:=v[i]
v[i]:=v[mini]
v[mini]:=tmp