【发布时间】:2020-08-20 01:23:32
【问题描述】:
我偶尔(不经常,但经常)看到证明会在 Dafny 中工作,然后看起来不相关的东西会改变(例如,与证明不相关的变量名、函数定义、等等),证明就会失效。
我很想知道发生这种情况的技术原因。我目前对电子匹配和量词实例化有一个粗略的了解。对我来说,这些算法应该对这些看似不相关的输入特征具有鲁棒性并不明显;它们不会健壮的原因也不是很明显。我也不知道在实践中是否有任何关于 E-matching 实现的注意事项会导致不鲁棒性。
“健壮”是指“要么总是成功,要么总是不成功,与变量名等因素无关”。
所以,我有兴趣了解这种不稳健的技术原因(无论是实际的还是理论上的)。
我想在这里获得更多直觉的部分原因是,当我遇到这种情况时,我可以修补证明以使其更健壮。 (相反,现在通常发生的情况是我会以某种任意方式修补证明,它会得到修复,然后它会再次中断。)
我希望找到的答案类似于“Z3 使用算法 X,它使用复杂的启发式 Y 来确定何时放弃在搜索空间的一部分中查找,很明显 Y 取决于搜索顺序”。这样的答案可能不会帮助我写出更好的 Dafny 证明,但它会满足我的好奇心。
【问题讨论】: