Computer science 我如何修改我的岗位条件以达到防火花金标准-Ada Spark
我是Ada的新手,一直在尝试实现一些基础知识。我有一个简单的功能来抛硬币-不是随机的,正面应该被抛到反面,反之亦然。我添加了一个post条件,即flipcoin!=硬币据说一枚抛过的硬币不能等于原来的硬币,但当我试图用-mode gold来证明文件时,我得到了以下警告:Computer science 我如何修改我的岗位条件以达到防火花金标准-Ada Spark,computer-science,ada,formal-methods,spark-ada,Computer Science,Ada,Formal Methods,Spark Ada,我是Ada的新手,一直在尝试实现一些基础知识。我有一个简单的功能来抛硬币-不是随机的,正面应该被抛到反面,反之亦然。我添加了一个post条件,即flipcoin!=硬币据说一枚抛过的硬币不能等于原来的硬币,但当我试图用-mode gold来证明文件时,我得到了以下警告: flip_coin.ads:8:06: warning: postcondition does not mention function result flip_coin.ads:8:14: warning: call to &
flip_coin.ads:8:06: warning: postcondition does not mention function result
flip_coin.ads:8:14: warning: call to "flip" within its postcondition will lead to infinite recursion
flip_coin.ads:8:14: medium: postcondition might fail, cannot prove flip(x) /= x[#0]
这是广告文件
package flip_coin with SPARK_Mode
is
type Coin is (Heads, Tails);
function flip (x : Coin) return Coin with
Post => flip(x) /= x;
end flip_coin;
这是.adb文件
package body flip_coin with SPARK_Mode
is
function flip (x : Coin) return Coin
is
begin
if x = Heads then return Tails; else return Heads; end if;
end flip;
end flip_coin;
任何帮助都会很好!在接下来的两周里,我会提出更多的要求。试试后条件:
function flip (x : Coin) return Coin with
Post => flip'Result /= x;
这可确保函数结果不等于函数输入x
在后置条件中声明flipx确实会导致无限递归,因为每次调用flip时都会检查后置条件。因此,该函数将始终再次求值,以检查后置条件:无限递归。非常感谢!我尝试了flip'Resultx/=x,但它不起作用,现在我知道了原因。太神了