考虑两个函数定义执行在绑定类型的存在
test1 (x:nat) res:set of nat
== { m | m:nat & m in set {0,...,x} };
test2 (x:nat) res:set of nat
== { m | m in set {0,...,x} & true };
运行在序曲TEST2(1000)给出了自然数的集合到1000运行TEST1(1000)给出了自然数集高达255.我明白,当明确的函数定义中有明确的类型绑定时会有复杂性,但在这种情况下,它只是默默地给出了错误的答案。看起来,当定义中出现自然数的类型绑定时,范围限制为0..255。至少,这似乎是从外面发生的事情。
章语言手册指出的8“注意,类型结合只能由VDM口译的情况下,上式可推导为有限静态地执行。”对于什么时候该类型可以被推断为静态有限是否有任何规则?
谢谢尼克。我做了更多的调查。通过只包含这些定义的项目,我可以得到您显示的结果。当我将这些定义合并到我正在处理的项目中时,我会得到我描述的行为。 – Paul
只要显式函数定义使用类型绑定而不是将其留作运行时检查,编译器是否可以将其作为错误抛出? – Paul
我在Mac OSX 10.10.5上使用Overture 2.3.0。我正在通过Overture中的运行配置运行测试。 – Paul