Мови програмування з канонічними функціями


29

Чи існують (функціональні?) Мови програмування, де всі функції мають канонічну форму? Тобто, будь-які дві функції, які повертають однакові значення для всього набору вхідних даних, представлені однаково, наприклад, якщо f (x) повернуто x + 1, а g (x) повернуто x + 2, то f (f (x )) і g (x) генерують нерозрізні виконувані файли при компіляції програми.

Можливо, важливіше, де / як я можу знайти більше інформації про канонічне представлення програм ("канонічні програми представництва" Гуглінга були менш ніж плідними)? Це здається закономірним питанням, і я боюся, що я просто не знаю належного терміна для того, що шукаю. Мені цікаво, чи можливо така мова бути Тюрінгом повною, а якщо ні, то якою виразною мовою програмування ви можете володіти, зберігаючи таку властивість.

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

Відповіді:


38

Наскільки це можливо, насправді є головним відкритим питанням в теорії обчислення лямбда. Ось короткий підсумок відомостей:

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

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

  • Додавання необмежених типів, таких як натуральні числа, робить проблему нерозбірливою. В основному, тепер ви можете закодувати десяту проблему Гільберта.

  • Додавання рекурсії робить проблему нерозбірливою, оскільки наявність нормальних форм робить рівність вирішальною, і це дозволить вирішити проблему зупинки.


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

Маючи лише одиниці, продукти та функції, простота всього, що ви можете записати, - 1, тоді як якщо додати суми, ви раптом отримаєте багато різних кардиналізмів (і можете зробити «корисні обчислення»). Чи пов'язані ці факти?
glaebhoerl

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