考虑两个函数定义
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 };
在 Overture 中运行 test2(1000) 给出的自然数集最多为 1000。运行 test1(1000) 给出的自然数集合最多为 255。我知道在显式函数定义中存在显式类型绑定时会出现复杂情况,但在这种情况下它只是默默地给出了错误的答案。似乎当自然数的类型绑定出现在定义中时,范围被限制为 0..255。至少,这似乎是从外面发生的事情。
语言手册的第 8 章指出“请注意,类型绑定只能由 VDM 解释器执行,以防可以静态推断类型是有限的。” 对于何时可以静态推断为有限类型是否有任何规则?