このQ3
メソッドは、res | n0 |にm0を追加することによってn0 * m0を通勤させます。回。 n0が負の場合、n0とm0の両方をn0 * m0 = -n0 * -m0のように反転させます。dafnyの2つのintに不変式を掛ける簡単な方法
問題は、不変量がブール型である必要があるため、私のインバリアントがどのように見えるかを正確にはわからないということです。誰かが不変のブール条件がどのように見えるか教えていただけますか?私はAbs((n0)-n)*m == res
について考えましたが、うまくいきません。
method Q3(n0 : int, m0 : int) returns (res : int)
ensures n0*m0 == res
{
var n, m : int;
res := 0;
if (n0 >= 0)
{n,m := n0, m0;}
else
{n,m := -n0, -m0;}
while (0 < n)
invariant Abs((n0)-n)*m
{
res := res + m;
n := n - 1;
}
}
function Abs(x: int): int
{
if x < 0 then -x else x
}