错误:假设语句无法编译

时间:2018-11-26 08:02:03

标签: dafny

我正在尝试一次从文件中读取一定数量的字节(如果我一次性读取了整个文件,则效果很好)。我在以下代码中添加了引号(/^[A-Z]+(?:'?[A-Z])?$/i.test("asdgrr'ssde"); // false /^[A-Z]+(?:'?[A-Z])?$/i.test("asdgrr's"); // true /^[A-Z]+(?:'?[A-Z])?$/i.test("asdgrr'S"); // true /^[A-Z]+(?:'?[A-Z])?$/i.test("ATRr'g"); // true /^[A-Z]+(?:'?[A-Z])?$/i.test("AGTrr'ssde"); // false /^[A-Z]+(?:'?[A-Z])?$/i.test("asdssde"); // true /^[A-Z]+(?:'?[A-Z])?$/i.test("arr'ss'de"); // false ,以帮助消除while循环中的修饰符子句错误,但现在我得到了ReadLemma。有关如何解决此问题的任何想法?

Error: an assume statement cannot be compiled

读取功能是从文件读取的功能。如我所说,如果我读取文件的全部内容,它将很好地工作。没有引理,我得到这个错误include "Io.dfy" lemma ReadLemma(fs: FileStream, file_offset: nat32, buffer: array?<byte>, num_bytes: int32) requires fs.IsOpen(); requires fs.env.Valid(); requires fs.env.ok.ok(); requires fs.Name() in fs.env.files.state(); ensures fresh(buffer); { assume false; } method {:main} Main(ghost env: HostEnvironment?) requires env != null && env.Valid() && env.ok.ok() modifies env.ok modifies env.files { var argc := HostConstants.NumCommandLineArgs(env); if argc != 3 { print "[USAGE]: mono cp.exe SrcFilename DstFilename!\n"; return; } var src := HostConstants.GetCommandLineArg(1, env); var dst := HostConstants.GetCommandLineArg(2, env); var srcResult := FileStream.FileExists(src, env); var dstResult := FileStream.FileExists(dst, env); if !srcResult { print "Source File Does Not Exist!\n"; return; } if dstResult { print "Destiny File Already Exist!\n"; return; } var srcSuccess, srcFs := FileStream.Open(src, env); if !srcSuccess { print "Failed to open src file!\n"; return; } var dstSuccess, dstFs := FileStream.Open(dst, env); if !dstSuccess { print "Failed to open dst file!\n"; return; } var success, len: int32 := FileStream.FileLength(src, env); if !success { print "Couldn't get stream size!\n"; return; } var BYTES_TO_READ := 256; var file_offset, buffer, start, srcOk, dstOk := 0, new byte[BYTES_TO_READ], 0, true, true; while file_offset as int + BYTES_TO_READ as int < len as int decreases len as int - (file_offset as int + BYTES_TO_READ as int); invariant srcFs.IsOpen() && srcFs.env.Valid() && srcFs.env.ok.ok() invariant srcFs.Name() in srcFs.env.files.state() { ReadLemma(srcFs, file_offset as nat32, buffer, BYTES_TO_READ); srcOk := srcFs.Read(file_offset as nat32, buffer, start, BYTES_TO_READ); dstOk := dstFs.Write(file_offset as nat32, buffer, start, BYTES_TO_READ); file_offset := file_offset + BYTES_TO_READ; } }

0 个答案:

没有答案