Мова програмування, яка може реалізовувати лише обчислювані біективні функції?


10

Чи існують мови програмування (або логіка), які можуть реалізовувати (або виражати) функцію якщо і лише якщо - обчислювані біективні функції?f:N→Nf


Хтось довів мені, що неможливо створити мову, яка приймає лише програми, що закінчуються. Оскільки у вас питання дуже схоже, я думаю, що ні.
— FUZxxl

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

@FUZxxl Це не охоплює багато програм, що закінчуються, насправді навіть функцію f (x) = 1 неможливо виразити цією мовою. Крім того, у мене є відчуття, що такі функції охоплені загальним функціональним програмуванням, оскільки кожна функція є загальною функцією.
— Чао Сю

@FUZxxl, я не думаю, що це правильно, але таку мову потрібно було б обмежити. Наприклад, мова, еквівалентна кінцевим детермінованим автоматам, гарантовано припиниться, але буде надзвичайно обмежена у тому, що вона може обчислити.
— jmite

@FUZxxl, деталі такого твердження важливі. Розробити мову програмування, на якій кожна програма закінчується, легко. Інша справа - створити мову, якою ми можемо виразити кожну обчислювальну функцію.
— Vijay D

Відповіді:


9

Немає такої мови.

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

Доцільно вимагати від мови програмування, щоб набір дійсних програм був розпізнаваний інтерпретатором або компілятором, тобто, щоб це був обчислювальний набір. Припустимо, тоді у нас була мова програмування, набір дійсних програм, який був обчислимо численним і який реалізував саме всі обчислювані біекції . Це означає, що ми можемо обчислити всі обчислювані біекції (просто перерахувати всі дійсні програми на цій мові програмування), але це неможливо наступною теоремою.N→N

Теорема: Припустимо, що - це обчислювана послідовність обчислюваних біекцій. Тоді відбувається обчислювальна біекція, яка не в послідовності.f0,f1,f2,…

Доказ. Побудуємо біекцію наступним чином. Щоб визначити значення і , подивимося на :g:N→Ng(2k)g(2k+1)fk(2k)

  • якщо тоді встановлюємо і ,fk(2k)=2kg(2k)=2k+1g(2k+1)=2k
  • якщо тоді встановлюємо і .fk(2k)≠2kg(2k)=2kg(2k+1)=2k+1

Очевидно, що для будь-якого , відрізняється від тому , що . Крім того, обчислюється, і це біекція, оскільки це своя власна інверсія. QED.k∈Ngfkg(2k)≠fk(2k)g


Навіщо вам навіть потрібна ця хитрість та ? Використання повинно вистачити. 2k2k+1g(k)=fk(k)+1
— FUZxxl

@FUZxxl: якщо ви використовуєте то отримана функція не є сюжетноюfk(k)+1
— Vor

Вам потрібно переконатися, що бієктивна. g
— Андрій Бауер

Початкове твердження неправильне, таких мов у літературі багато.
— Натаніел

З іншого боку, ваш доказ здається законним. Можливо, я якось плутаюсь. Мені потрібно уважно прочитати папір Аксельсена та Глюка (див. Мою відповідь), щоб зрозуміти, що тут відбувається.
— Натаніел
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.