Я новичок в Дафни. Я не понимаю, почему я получаю это сообщение с x == Sum(i);
, я начинаю сходить с ума. А также почему он компилируется, когда if n==0 then 0 else n + Sum(n-1)
превращается в if n==0 then 0 else n-1 + Sum(n-1)
function Sum(n: nat): nat
{
if n==0 then 0 else n + Sum(n-1)
}
method ComputeSum(n: nat) returns (x: nat)
ensures x == Sum(n);
{
x := 0;
var y := 0;
var i : nat := 0;
while i < n
invariant 0 <= i <= n && x == Sum(i);
{
x,y := y,x + y ;
i := i + 1;
}
}