Обчислення конструкцій: стиснути вираз до його найменшої форми


11

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

Але в певних випадках нормалізація може зменшити невеликий вираз до величезного вираження (з точки зору розміру).

Чи є найменша форма виразів? Форма, яка обчислює однакове значення з найменшим розміром.

Іншими словами, замість ефективної у часі нормальної форми, просторової.

Відповіді:


8

Трохи свободи в тому, що ми вважаємо "однаковою цінністю". Дозвольте мені показати, що такого алгоритму не існує, якщо "однакове значення" означає "спостережно еквівалент". Я буду використовувати фрагмент обчислення конструкцій, а саме систему Gödel T (просто набрав -рахунок, натуральні числа та примітивну рекурсію на них), тому аргумент застосовується до значно слабшого числення.λ

Дано число , нехай ¯ n - відповідна цифра, що представляє його, тобто n додатків s u c c до 0 . Враховуючи махін Тюрінга M , нехай M some є числом, що кодує M, у певний розумний спосіб.нн¯нсуcc0МММ

Скажімо , що дві замкнуті умови будуть еквівалентні , написані т U , коли для всіх п N , тт,у:натнаттунN іsтн¯ обидва нормалізуються на одне число (вони нормалізуються до числа, оскільки ми перебуваємо в сильно нормалізуючому члені).сн¯

Припустимо, у нас був алгоритм, який задає будь-який закритий термін типу обчислює мінімальний еквівалентний термін. Тоді ми можемо вирішити оракул Халтінг наступним чином.натнат

Існує термін такий, що для всіх n N та всіх машин Тюрінга M , S ( M , ¯ n ) нормалізується до ¯ 1, якщо T зупиняється протягом n кроків , і в нормі він нормалізується до ¯ 0 . Це добре відомо, оскільки моделювання машини Тьюрінга за фіксовану кількість кроків n є примітивною рекурсивною.S:нат×натнатнNМS(М,н¯)1¯Тн0¯н

Існує кінцево багато замкнених доданків які є мінімальними членами, еквівалентними λ x : n a t .Z1,,Zк . Наш алгоритм мінімізації повертає один з них, коли ми даємо йому λ x : n a t .λх:нат.0 , і навіть може бути так, що λ x : n a t .λх:нат.0 насправді єдиний такий мінімальний термін. Все це не має значення, єдине, що має значення, це те, що існує кінцево багато мінімальних термінів, еквівалентних λ x : n a t .λх:нат.0 .λх:нат.0

Тепер, задавши будь-яку машину , розглянемо термін u : = λ x : n a t .М Якщо M працює вічно, то u ¯ n нормалізується до ¯ 0 для кожного n і еквівалентно λ x : n a t .

у:=λх:нат.S(М,х)
Мун¯0¯н . Щоб вирішити, чипрацює M вічно, ми подаємо u в наш алгоритм мінімізації і перевіряємо, чи алгоритм повернув один із Z 1 , , Z k . Якщо це сталося, то М працює назавжди. Якщо цього не сталося, то воно зупиняється. (Примітка: алгоритм не повинен обчислювати Z 1 , ... , Z k сам по собі, вони можуть бути жорстко закодовані в алгоритм.)λх:нат.0МуZ1,,ZкМZ1,,Zк

Було б непогано знати аргумент, який працює зі слабшим поняттям еквівалентності, наприклад, просто зводимість.β


Як обчислити Z1, .. Zk?
user47376

Вам не доведеться. Тобто алгоритм, який я описую, є там, і ми точно не знаємо, що це таке, але це не має значення. Я насправді не намагаюся запустити алгоритм, мені просто потрібно його існування, щоб показати, що ваш алгоритм не існує.
Андрій Бауер

Так, але ваш аргумент говорить, що якщо мій алгоритм існує, то ми можемо вирішити проблему зупинки. Щоб визначити, чи машина Turing зупиняє ваш алгоритм, нормалізує u і перевіряє, чи є він одним із Z1, .. Zk. Тому потрібно вміти їх перелічити, інакше це може не зупинитися.
user47376

є зашитими в алгоритмі, алгоритм не потрібно перерахувати їх в обчислювальному сенсі. Якщо ви віддаєте перевагу, вихідний код алгоритму починався б з оголошення цілого числа k (наприклад, директива #define в C) та масиву Z довжиною k , і тоді код може вільно використовувати Z [ i ] , що б вони не були є. Нам не потрібно їх чітко знати, нам просто потрібно знати, що вони існують. Z1,,ZkkZkZ[i]
Даміано Мацца

7

Як сказав Андрій, проблема не може бути вирішена, якщо ви дозволяєте замінювати один термін іншим, рівним за часом. Тим НЕ менше, ви можете бути зацікавлені в оптимальному обміні виразів, в наступному сенсі: з урахуванням скорочення , ясно , що входження терміна у можуть бути спільно в пам'яті , і кожне зменшення, застосоване до одного, може бути застосоване до іншого.

(λх:Т.С х х) уβС у у
у

У цьому сенсі відомо, як оптимально зменшити нетипізовані терміни, максимально зменшивши спільний доступ. Це пояснюється тут: https://stackoverflow.com/a/41737550/2059388, а відповідною цитатою є алгоритм Дж. Лампінга для оптимального зменшення обчислення лямбда . Мало сумнівів, що теорему про нетипізований обчислення можна поширити на CIC.

Іншим відповідним питанням є кількість інформації про тип, яку можна стерти при здійсненні перетворення типу, або, як саме зробити ефективне перетворення, що є активною сферою дослідження, див., Наприклад , тезу Мішра-Лінгера .


6

Дозвольте наполягати на точці зору, яку торкнулася відповідь Коді.

Наскільки це бачимо, питання пошуку найменшого -терміна, еквівалентного іншому λ -термі, насправді не цікавий, навіть якби в ньому був алгоритм, який його обчислює. Насправді, більшість програм, які ви пишете в λ -калькуляції (або що б не було числення λ -куби), вже перебувають у нормальній формі, або, принаймні, у голові нормальної форми, тому вони вже є "найменшими" у тому сенсі, який ви описуєте. Крім того, бути "маленьким" не означає бути більш ефективним, як обговорювалося в цьому питанні .λλλλ

Мf

Мх¯л(|х|)f(х)¯
л(|х|)л(н)=О(нк)кf

λΘ(н)Θ(2н)λλ

λλ

λ

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

  1. розмір не вибухає;
  2. λ

Це все пояснено у статті Accattoli та Dal Lago "Скорочення бета-версії є дійсно інваріантним" (LICS 2014, і тоді я думаю, що є новіша версія журналу).

λ


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

β

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