我在Dafny遇到这个简单方法的问题,我不知道为什么它不起作用。由于没有调试器,我是这种语言的新手,我希望有人可以提供帮助。我认为规范不完整..
method Q2(x : int, y : int) returns (big : int, small : int)
ensures big > small;
{
if (x > y)
{big, small := x, y;}
else
{big, small := y, x;}
}
当我在microsoft dafny编译器中运行它时,我得到以下内容:
后退条件可能不会在此返回路径上保留。 (第8行) 这是可能无法实现的后置条件。 (第2行)
答案 0 :(得分:1)
问题是x
和y
可能相同,在这种情况下,big
和small
也会相等。
您可以通过将后置条件更改为big >= small
来修复后置条件。或者,您希望禁止调用者通过相等的x
和y
,您可以添加一个要求x != y
的前置条件。