我有一个数组“line”,其中包含一个长度为“l”的字符串,还有一个数组“nl”,其中包含一个长度为“p”的字符串。注意:“l”和“p”不一定是每个对应数组的长度。参数“at”将是在“line”内进行插入的位置。恢复:长度为“p”的数组将插入“line”,将“line”的所有字符在位置(at,i,at+p),'p'位置之间向右移动以进行插入。
我的确保逻辑是检查插入“line”中的元素是否具有相同的顺序并且是否与“nl”中包含的字符相同。
这是代码:
method insert(line:array<char>, l:int, nl:array<char>, p:int, at:int)
requires line != null && nl != null;
requires 0 <= l+p <= line.Length && 0 <= p <= nl.Length ;
requires 0 <= at <= l;
modifies line;
ensures forall i :: (0<=i<p) ==> line[at+i] == nl[i]; // error
{
var i:int := 0;
var positionAt:int := at;
while(i<l && positionAt < l)
invariant 0<=i<l+1;
invariant at<=positionAt<=l;
{
line[positionAt+p] := line[positionAt];
line[positionAt] := ' ';
positionAt := positionAt + 1;
i := i + 1;
}
positionAt := at;
i := 0;
while(i<p && positionAt < l)
invariant 0<=i<=p;
invariant at<=positionAt<=l;
{
line[positionAt] := nl[i];
positionAt := positionAt + 1;
i := i + 1;
}
}
这是 我收到的错误。
谢谢。