互动网是否通常会留下成堆的冗余粉丝?

时间:2015-07-23 23:21:23

标签: haskell lambda functional-programming lambda-calculus interaction-nets

我将lambda演算术语编译为交互网,以便使用Lamping的抽象算法对它们进行评估。为了测试我的实现,我使用了这个教会号码分割函数:

div = (λ a b c d . (b (λ e . (e d)) (a (b (λ e f g . (e (λ h . (f h g)))) (λ e . e) (λ e f . (f (c e)))) (b (λ e f . e) (λ e . e) (λ e . e)))))

将4除以4(即(λ k . (div k k)) (λ f x . (f (f (f (f x)))))),我得到这个网:

enter image description here

(抱歉可怕的渲染。λ是lambda,R是root,D是粉丝,e是橡皮擦。)

读回这个词,我按照预期得到了1号教堂。但这个网络非常膨胀:它有很多粉丝和橡皮擦没有明显的用途。划分更大的数字甚至更糟。这是div 32 32

enter image description here

这再次回读为one,但在这里我们可以看到冗余扇形节点的更长尾部。我的问题是:这是减少特定术语时预期的交互需求行为,还是我的实施可能出现的错误?如果这不是一个错误,那有什么办法吗?

1 个答案:

答案 0 :(得分:6)

是的,通常(但有减少其存在的技术)

使用Interaction Nets从您的实施细节中抽象出来, 以及你div的摘要算法的完整性假设, 对我来说一切似乎都很好。

  • 尽管有chi的声明,但您无法对您显示的输出应用进一步的互动,因为D-e对中的任何一对都无法通过其主要端口进行互动。

  • 后一种减少规则(IN框架不允许)可以提高效率,在某些特定情况下也是如此。 基本上,所涉及的粉丝不得有任何“双胞胎”,即网中不得存在D',以致最终可能发生湮灭D-D'。 有关详细信息,请查看The optimal implementation of functional programming language,章Safe nodes(可在线获取!),或查看原始论文:

      

    Asperti,Andrea和Juliusz Chroboczek。 “安全操作员:托架永远关闭优化最佳λ微积分实现。” 适用于工程,通信和计算的代数 8.6(1997):437-468。

  • 最后,回读程序的目的不是作为减少程序的某种外部成本,而是作为计算重复和擦除的延迟成本。 正如您所注意到的,这样的成本很少可以忽略不计,因此如果您想在真实场景中测试效率,请始终总结共享减少和回读减少。