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


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.