我想用lambda验证一个函数。例如:
let map (t : array int) (f : array int -> array int) : array int =
f t
但是,这会产生一个错误:
文件"map_reduce.mlw",第25行,字符4-7:此应用程序使用可变类型数组int实例化纯类型变量'b‘。
在Why3中可以使用lambda函数吗?键入这些lambda函数的正确方法是什么?
发布于 2020-05-08 14:08:13
Why3中的Lambda函数是纯函数。特别是,它们的类型不能包含任何可变区域。这就是你的定义被拒绝的原因。将array
替换为没有区域的类型(例如,set
),效果很好:
use set.Set
let map (t : set int) (f : set int -> set int) : set int = f t
https://stackoverflow.com/questions/54333137
复制相似问题