简单的方法后置条件可能不成立

时间:2017-12-04 03:27:15

标签: methods dafny

我在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行)

1 个答案:

答案 0 :(得分:1)

问题是xy可能相同,在这种情况下,bigsmall也会相等。

您可以通过将后置条件更改为big >= small来修复后置条件。或者,您希望禁止调用者通过相等的xy,您可以添加一个要求x != y的前置条件。