長さ「l」の文字列と長さ「ll」の文字列を含む配列「nl」を含む配列「line」を持っています"p"。 注: "l"と "p"は必ずしも対応する配列の長さである必要はありません。パラメータ "at"は "line"内に挿入される位置になります。 再開:長さ「p」の配列が「行」に挿入され、位置(at、i、at + p)、「p」位置の間の「行」のすべての文字が右に移動して挿入されます。Dafny挿入メソッドで、この戻りパスで事後条件が成立しない可能性があります
私の論理は、「行」に挿入された要素の順序が同じで、「nl」に含まれる文字と同じ順序であるかどうかを確認することです。ここで
はthe codeです:ここでは
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;
}
}
は、私が受けていerrorsです。
ありがとうございました。
あなたは、私の他の質問で助けるために気にしませんか?あなたはDafnyを理解しているスタックコミュニティ上の唯一の男のように思えます:) http:// stackoverflow。com/questions/37099671/dafny-unsolved-errors ありがとうございますm8 – pmpc2