1

配列のスライスを別のスライスにコピーする次のコードでは、ソース配列が保持されることを示すループ不変式は検証されません。

これはthis questionthis other oneに関連していますが、この場合に機能するものはまだ見つかりません。

method copy
  (a: array<int>, a0: nat,
  b: array<int>, b0: nat,
  len: nat)
  requires a != null && b != null
  requires a0 + len <= a.Length
  requires b0 + len <= b.Length
  modifies b
{
  var i := 0;
  while i < len
    decreases len - i
    invariant i <= len
    invariant a[..] == old(a[..])
  {
    b[b0 + i] := a[a0 + i];
    i := i + 1;
  }
}
4

1 に答える 1