最小正常Lambda项不是最快的示例


12

让的被定义如下组术语:λs一世žËλ

  • s一世žËX=1个
  • s一世žËλXŤ=s一世žËŤ+1个
  • s一世žËŤs=s一世žËŤ+s一世žËs+1个

λt的复杂度Ť定义为从ŤX到其正常形式的并行beta减少的次数(使用Levy的最佳估算器)。

我正在寻找一个相同函数的两个正常 λ -term 的示例,其中较大的term具有较低的复杂性。

...

编辑清晰

由于似乎我要问的内容并不明显,因此我将尝试给出一个可靠的例子。通常认为,函数的“天真” /“最简单”定义是缓慢的而不是最优的。更好的性能会增加术语的复杂性,因为您需要添加数据结构,公式等。一个很好的例子是fibonacci,可以“天真的”定义为:

-- The fixed fibonacci definition
fib_rec fib n =
    if (is_zero x) 
        then 1 
        else fib (n - 1) + f (n - 2)

-- Using church numbers instead of the λ-combinator to get a normal form
fib n = n fib_rec 0 n 

这通常被视为fib的“最简单”定义,并且非常慢(指数)。如果我们扩展fib(的定义,教堂号加法的通常定义,pred,is_zero)并对其进行规范化,则得到以下术语:

fib = (λa.(a(λbc.(c(λdef.f)(λde.d)(λde.(de))
      (λde.(b(λfg.(c(λhi.(i(hf)))(λh.g)(λh.h)))
      d(b(λfg.(c(λhi.(i(h(λjk.(k(jf))))))(λhi.g)
      (λh.h)(λh.h)))de)))))(λbc.c)a))

备注表之类的改进将使此术语更大。但是,存在一个更小的术语……

fib = (λa.(a(λb.(b(λcde.(e(λfg.(cf(dfg)))c))))
      (λb.(b(λcd.(cd))(λcd.d)))(λbc.b)))

奇怪的是,它在渐近性上也优于天真的O(N)。在我知道的所有定义中,这既最快又最简单。排序也会产生相同的效果。诸如冒泡排序和插入排序之类的“幼稚”定义通常会扩展为庞大的术语(长20+行),但是存在一个小的定义:

-- sorts a church list (represented as the fold) of church numbers
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

渐近地,这比我所知道的其他定义还快。这种观察使我相信,与通常的看法相反,最简单的术语具有最小的Kolmogorov复杂度,通常更快。我的问题是基本上是否有相反的证据,尽管我很难正式化它。


3
没有具有sqrt(n)复杂度。n!=n.n1 .... 2.1
T ....

2
我敢肯定,您可以使用比AKS算法更短的 -term 来编码试验划分。λ
EmilJeřábek'15

2
我同意@EmilJeřábek和,实际上,我看不出一个例子不被看的排序算法得到的,因为你已经做了:是不是 -term实现冒泡排序比短 -term implmenting ,比如说堆排序?或者,我不知道,蛮力搜索,实现起来非常短,但是却需要指数时间,而聪明的polytime算法需要更多的代码行...?我一定想念一些东西,恐怕我不太了解这个问题。λλλ
Damiano Mazza

1
我实际上并未写下来,但是作为一种启发式原理,两种算法的相对长度通常不受编程语言选择的影响很大,而且我绝对看不出 -calculus应该是一个例外。特别要注意的是,这里的规范化是一个红色的鲱鱼:如何在 -calculus中表达算法的最自然的方法是从一开始就给出正则项,无论如何,根据我对Unlambda的经验,IIRC可以将任何项转化为相似长度的标准术语在应用时给出相同的结果。λλλ
EmilJeřábek'15

2
是的,正如达米亚诺(Damiano)所说,AKS只是一个例子。在我们拥有微不足道的低效率算法,以及针对同一问题的高效但复杂得多的解决方案的任何情况下,都应采用相同的方法。
EmilJeřábek'15

Answers:


10

Blum的加速定理通常用部分递归函数的语言来表示,但是在符号上的细微差别之前,它在微积分的语言中作用相同。λ

中号FXÿ2ÿPX

λGPHPFG

FX中号HX中号GX 对于所有足够大的输入 X

中号GXGX中号

所以:

  • P

  • P

  • P

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.