Lambda演算表达式试验台?

时间:2013-03-28 19:51:47

标签: testing expression lambda-calculus

我想测试一下Lambda微积分解释器,我是针对相当大的Lambda微积分表达式测试集编写的。有谁知道我可以使用的Lambda Calc表达式生成器(在Google上进行初始搜索时找不到任何内容)?这些表达式显然必须正确形成。

更好的是,虽然我自己创建了各种示例并制定了解决方案,因此我可以检查结果,是否有人知道一套好的(和大量)解决方案的Lambda微积分减少问题?我可以自己输入表达式,所以更重要的是只需要各种更简单(和更大)的lambda演算表达式,我可以在其上测试我的解释器(目前模拟正常顺序和按名称调用评估策略)。 / p>

非常感谢任何帮助或指导。

1 个答案:

答案 0 :(得分:2)

Asperti和Guerrini(1998年,功能编程语言的最佳实现,CUP出版社;特别参见第5章和第6章)描述了Jean-Jacques Levy理论中出现的一些更痛苦的lambda术语redex家族和标记缩减:这些衡量了碰撞beta减少之间相互作用的复杂性,减少redex为另一个减少了。

碰撞减少的一个相对简单的例子是:

let D =  λx(x x); F= λf.(f (f y)); and I= λx.x in
    (D  (F I))

有两个beta-redexes并缩减为(y y):通过常规替换减少其中一个,你将创建两个新的redex,每个redex与原始术语中的一个结构相关。

以相同的方式迭代教会数字:

let T = λfx. f(f( x)) in 
    λfx.(T (T (T (T T))) f x)

(减少教堂数字为65 536),这会产生大量碰撞重建索引。

通常,将高阶项应用于彼此,无论它们是“良好类型”还是明显有意义,都是产生复杂中间结构的艰苦工作的良好来源。

相关问题