假设我有一个计算某些东西的方法: ensures a + c == b || b + c ==a ...现在先别管它的实现。如果我可以在Dafny中实现这个方法,这意味着对于所有可能的参数a和b,必须有一些返回值c满足后置条件。换句话说,该方法的主体是一个构造性证明,它:
forall a: nat, b: nat :: exists c: n
我正在通读的教程,它以Semigroup Nat为例: (<+>) x y = x + y
(<+>) x y = x * y
如果我想使用Plus定义,(<+>) @{PlusNatSemi} Z (S Z)是有效的。Z <+> S Z抱怨缺乏实现,Z <+> @{PlusNatSemi} S Z和Z (<+>