我想用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函数的正确方法是什么?
答案 0 :(得分:0)
Why3中的Lambda函数是纯函数。特别是,它们的类型不能包含任何可变区域。这就是为什么您的定义被拒绝的原因。将array
替换为没有区域的类型(例如set
)可以正常工作:
use set.Set
let map (t : set int) (f : set int -> set int) : set int = f t