次の関数のループ不変条件を正しく識別するのに苦労しています。
F(y)
X <-- 1
while (y > 1)
do x <-- x * y
y <-- y - 1
return (x)
x = 1 OR x = y!
そのステートメントが前提条件として真であり、事後条件として真であるため、ループ不変条件を特定しました。
たとえば、y = 3の場合、ループの最初の反復でx = 1 * 3になり、3ではなく3になります。たとえば、すべての反復に当てはまるとは限りません。これは6に相当します。
これは私の混乱が本当に私が推測するところです。いくつかの本の記事は、ループ不変条件は、ループの最初またはループ(したがって前提条件)で真に等しくなければならず、ループの終わり(したがって事後条件)でも真でなければならないステートメントであると述べていますが、必ずしもそうする必要はありませんループの途中で真を保持します。
上記の関数の正しいループ不変条件は何ですか?