隐式函数:柯里化和整体性

Implicit functions: currying and totality

在VDM-SL中指定隐式函数时,是否可以指定柯里化函数?在下面的 test1 和 test2 是显式未柯里化和柯里化函数,而 test3 是隐式未柯里化函数。 Overture 全部接受。 test4 是对隐式柯里化函数的尝试,但被 Overture 拒绝了。

另外,有没有办法用隐式函数定义指定它应该是总计?

module moduleName
  exports all
  definitions
  functions

  test1 : nat * nat +> nat
  test1 (arg1,arg2) == arg1+arg2;

  test2 : nat -> nat +> nat
  test2 (arg1) (arg2) == arg1+arg2;

  test3 (arg1:nat,arg2:nat) res:nat
  post res = arg1+arg2;

  test4 (arg1:nat) (arg2:nat) res:nat
  post res = arg1+arg2;

end moduleName

不,恐怕只为显式函数定义提供柯里化函数。并且没有 partial/total 用于隐式定义的指示符。

(我只是问为什么我们会有这种差异。这似乎与语言的历史有关:英语学派产生隐式函数但没有柯里化,而丹麦学派有显式函数但柯里化。他们应该真的要协调 - 你猜的语法可能就是结果。)