dafny 相应的 SMT 查询
dafny corresponding SMT queries
我正在尝试检查一个简单的循环程序,该程序在整数数组 中找到最大元素。这是永久链接 here。一切正常,但我真的很感兴趣
生成的 SMT 文件,所以我使用以下方法提取它:
$ dafny /compile:3 /proverLog:./mySMT.smt myCode.dfy
然后运行和z3
如下:
$ z3 ./mySMT.smt
我收到了 3 unsat
个回复,我想知道 对应的 3 个查询是什么?
我查看了 *.smt
文件,发现了 11K 的机器生成的 SMT。
关于解密 smt 文件的任何提示?谢谢!
如果您想要生成的 SMT 文件,那么 11K 文件就是您的答案。我想查看它会让您得出这样的结论,即您实际上不想查看生成的 SMT 文件。
所以,我不知道你想要完成什么。如果您想了解有关您的程序的更多信息,那么最好的方法是(仅)从 Dafny 程序文本开始工作。例如,您可以添加更多 assert
语句,本质上是询问验证者给定条件是否可在语句位置证明。
如果你对Dafny是如何对其验证条件进行编码感兴趣的(也就是说,如果你自己是一个工具开发者,想学习如何生成良好的验证条件),那么我建议你使用/print
开关生成 Dafny 生成的 Boogie 程序。对 Boogie 中间验证语言有一定了解后,Boogie 代码是可读的。有关如何将类 Dafny 语言编码为 Boogie 的更多教程,我推荐:
"Specification and verification of object-oriented software",
K. Rustan M. Leino.
Lecture note, Marktoberdorf 2008.
鲁斯坦
PS。除非您坚持特定格式,否则如果您首先将数组元素转换为序列,则无需使用循环即可打印数组元素:
print "a = ", a[..], "\n";
我正在尝试检查一个简单的循环程序,该程序在整数数组 中找到最大元素。这是永久链接 here。一切正常,但我真的很感兴趣 生成的 SMT 文件,所以我使用以下方法提取它:
$ dafny /compile:3 /proverLog:./mySMT.smt myCode.dfy
然后运行和z3
如下:
$ z3 ./mySMT.smt
我收到了 3 unsat
个回复,我想知道 对应的 3 个查询是什么?
我查看了 *.smt
文件,发现了 11K 的机器生成的 SMT。
关于解密 smt 文件的任何提示?谢谢!
如果您想要生成的 SMT 文件,那么 11K 文件就是您的答案。我想查看它会让您得出这样的结论,即您实际上不想查看生成的 SMT 文件。
所以,我不知道你想要完成什么。如果您想了解有关您的程序的更多信息,那么最好的方法是(仅)从 Dafny 程序文本开始工作。例如,您可以添加更多 assert
语句,本质上是询问验证者给定条件是否可在语句位置证明。
如果你对Dafny是如何对其验证条件进行编码感兴趣的(也就是说,如果你自己是一个工具开发者,想学习如何生成良好的验证条件),那么我建议你使用/print
开关生成 Dafny 生成的 Boogie 程序。对 Boogie 中间验证语言有一定了解后,Boogie 代码是可读的。有关如何将类 Dafny 语言编码为 Boogie 的更多教程,我推荐:
"Specification and verification of object-oriented software", K. Rustan M. Leino. Lecture note, Marktoberdorf 2008.
鲁斯坦
PS。除非您坚持特定格式,否则如果您首先将数组元素转换为序列,则无需使用循环即可打印数组元素:
print "a = ", a[..], "\n";