从隐式到显式函数定义

From implicit to explicit function definitions

我一直在使用 VDM-SL 中的隐式函数定义来创建规范,并且效果很好。我现在想使用显式函数定义(在这个阶段没有操作)来制作规范原型。

我能看到的一种方法是创建一个新模块,模仿隐式规范中定义的函数,但给它们明确的定义。

我确信这可以做到,但我怀疑它是否理想。隐式规范和显式规范之间没有 link,尽管其中一个是对另一个的改进。

是否有推荐的从隐式函数定义过渡到显式函数定义的方法。从长远来看,我确实想正式调查这样做,但在第一个实例中,我只是想实现隐式函数规范来演示规范的实际应用。

有一个正式的细化规范的过程,虽然它很费力,特别是因为目前没有工具支持它。

如果您保留隐式函数类型签名和 pre/postconditions,那么显式版本 "certain" 是一个改进,假设所有输入的实现都是正确的(这是组合测试可以的地方帮助)。请注意,您还可以为以 "implicit" 样式编写的函数提供实现(主体),这可能会简化事情:

f(x:nat) r:nat
== x + 1        -- This line added to the implicit spec!
pre x > 10
post r < 100