Приклад, коли найменший нормальний лямбда-термін не найшвидший


12

Нехай з -термінах бути визначений таким чином :λsizeλ

  • size(x)=1 ,
  • size(λx.t)=size(t)+1 ,
  • size(ts)=size(t)+size(s)+1 .

Нехай складність λ -term t визначається як кількість паралельних скорочень бета-версії від tx до нормальної форми (використовуючи оптимальну оцінку в сенсі Леві).

Я шукаю приклад двох нормальних λ -термінів для тієї ж функції, де більший термін має меншу складність.

...

Редагувати для наочності

оскільки здається, що не очевидно, про що я прошу, спробую навести ґрунтовний приклад. Часто існує думка, що "наївне" / "найпростіше" визначення функції повільне і не оптимальне. Кращі показники підвищують складність терміна, оскільки вам потрібні додані структури даних, формули тощо. Чудовим прикладом є те 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( звичайні визначення для додавання церковних чисел, 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

Що також відбувається швидше, асимптотично, ніж будь-яке інше я знаю визначення. Це спостереження приводить мене до думки, що, на відміну від загальноприйнятої думки, найпростіший термін із найменшою складністю Колмогорова, як правило, швидше. Моє питання, в основному, чим раніше є якісь докази протилежного, хоча мені було б важко його формалізувати.


3
Ні має складність sqrt (n). n!=n.n1....2.1
Т ....

2
Я впевнений, що ви можете кодувати пробний поділ за коротким -терміном, ніж алгоритм AKS. λ
Emil Jeřábek

2
Я погоджуюся з @ EmilJeřábek і, власне, я не бачу, як приклад не отримується, дивлячись на алгоритми сортування, як ви вже робили: чи не сортування міхура -term коротше, ніж -term implmenting , скажімо, купа сорту? Або, я не знаю, жорстокий пошук, надзвичайно короткий для впровадження, але експоненціальний час, порівняно з розумним політайм-алгоритмом, що вимагає більше рядків коду ...? Я, мабуть, щось пропускаю, боюся, що я не дуже розумію питання. λλ
Даміано Мацца

1
Я не доклав жодних зусиль, щоб насправді записати його, але, як евристичний принцип, відносна довжина двох алгоритмів зазвичай не сильно впливає на вибір мови програмування, і я не бачу абсолютно жодної причини -calculus повинен бути винятком . Зокрема, зауважте, що нормалізація - це червона оселедець: найприродніший спосіб вираження алгоритмів у -calculus дає нормальні терміни з початку руху, і все одно, IIRC з мого досвіду роботи з Unlambda, ви можете перетворити будь-який термін у нормальний термін подібної довжини, що дає однаковий результат при застосуванні. λλ
Emil Jeřábek

2
І так, як згадує Даміано, AKS був лише прикладом. Те саме повинно мати місце в більш-менш будь-якій ситуації, коли у нас є тривіально неефективний алгоритм та ефективне, але набагато більш досконале рішення тієї ж проблеми.
Emil Jeřábek

Відповіді:


10

Теорема про прискорення Блума зазвичай викладається мовою частково рекурсивних функцій, але, до тривіальних відмінностей у позначенні, вона працює точно так само в мові -cculus.λ

У ньому йдеться про те, що, враховуючи будь-яку міру розумної складності (наприклад, оптимальна кількість скорочень, як у питанні) та рекурсивну функцію (наприклад, ), ми можемо знайти рекурсивний предикат таким, що:f ( x , y ) 2 y P ( x )Mf(x,y)2yP(x)

Для кожного алгоритму (тобто -term у звичайній формі тут) обчислень , існує інший алгоритм для який має -скорость над : g P h P f g f ( x , M ( h , x ) ) M ( g , x )  для всіх досить великих входів  x ,λgPhPfg

f(x,M(h,x))M(g,x) for all large enough inputs x,

де позначає складність обчислення на вході в відповідно вимірювання .g x MM(g,x)gxM

Отже:

  • P не має асимптотично оптимального алгоритму в даній мірі

  • зокрема, найкоротший алгоритм не є асимптотично оптимальнимP

  • для будь-якого алгоритму для існує асимптотично більш швидкий алгоритм, нормальна форма якого довше (тому що до перейменування змінних існує лише кінцево багато нормальних доданків заданої довжини)P

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.