在Why3ML中键入lambda的正确方法是什么?

时间:2019-01-23 18:02:22

标签: sml why3 why3ml

我想用lambda验证功能。例如:

  let map (t : array int) (f : array int -> array int) : array int =
    f t

但是,这会产生错误:

  

文件“ map_reduce.mlw”,第25行,字符4-7:   此应用程序使用可变类型数组实例化纯类型变量'b   诠释

在Why3中可以使用lambda函数吗?键入这些lambda函数的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

Why3中的Lambda函数是纯函数。特别是,它们的类型不能包含任何可变区域。这就是为什么您的定义被拒绝的原因。将array替换为没有区域的类型(例如set)可以正常工作:

use set.Set
let map (t : set int) (f : set int -> set int) : set int = f t