以下λ项,此处为标准形式:
sort = (λabc.(a(λdefg.(f(d(λhij.(j(λkl.(k(λmn.(mhi))l))
(h(λkl.l)i)))(λhi.(i(λjk.(bd(jhk)))(bd(h(λjk.(j
(λlm.m)k))c)))))e))(λde.e)(λde.(d(λfg.g)e))c))
为教堂编码的列表实现排序算法。即,结果为:
sort (λ c n . (c 3 (c 1 (c 2 n)))) β→ (λ c n . (c 1 (c 2 (c 3 n))))
同样,
sort_below = λabcd.a(λef.f(λghi.g(λj.h(λkl.kj(ikl)))(hi))e(λgh.h))
(λe.d)(λe.b(λf.e(f(λghi.hg)(λgh.cfh))))
还可以对与上述相同的列表进行排序,不同之处在于您必须为参数提供一个额外的参数,并限制其数量:
sort_below 4 [5,1,3,2,4] → [1,2,3]
我正在尝试确定这些术语是否可以在基本仿射逻辑上键入。由于我不知道任何公开的EAL类型检查器,因此事实证明这比我预期的要难。sort
基本仿射逻辑中有一种类型吗?
它是否具有“普通”类型?如果将其插入Haskell,会发生什么?
—
安德烈·鲍尔
我同意安德烈(Andrej)的观点,因此无法理解。它们实现什么算法?一些不基于比较的整数排序?您正在考虑使用哪种基于EAL的打字系统?天真的一个(没有主题还原)还是科波拉,达拉戈和罗奇的一个?它们是否在系统F中可,例如,其中?如果没有,那么就没有希望它们可以在任何基于EAL的系统中键入。Ñ 一吨大号我小号吨:= ∀ X 。(N a t → X → X )→ X → X
—
达米亚诺·马扎
是的,这是因为从EAL到系统F(或简单类型,如果您不使用多态性)有一个健忘的函子,使得如果EAL中的,则在系统F中。简化的评估程序有效的事实与此并不矛盾:使Lamping的算法在没有括号和牛角面包的情况下工作的原因是术语的分层属性,它纯粹是结构性的,并且与类型无关:在系统中存在不可分的术语F,EAL,Haskell或其他)。我想你的学期一定属于这一类。 t :A t −:A −
—
达米亚诺·马扎
也许这些评论可以变成答案?
—
安德烈·鲍尔
在阅读问题时。:-)
—
Tayfun Pay'7