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


10

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


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

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

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

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

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

Відповіді:


9

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

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

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

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

Доказ. Побудуємо біекцію наступним чином. Щоб визначити значення і , подивимося на :g:NNg(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.kNgfkg(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.