Загальна мова, яку може інтерпретувати лише повна мова Тюрінга


16

Будь-яка мова, яка не є Тюрінг повною, не може самостійно написати перекладача. У мене немає поняття, де я це читав, але я бачив, що він використовувався не раз. Схоже, що це породжує своєрідну "кінцеву" нетургійну повну мову; ті, які можуть тількиінтерпретувати машину Тюрінга. Ці мови не обов'язково зможуть обчислити всі сукупні функції від природних до природних, а також не обов'язково бути ізоморфними (тобто, можливо, кінцеві мови A і B існують такі, що існує функція F, яку A може обчислити, але B не може). Агда може інтерпретувати систему Годеля T, а Агда є тотальною, так що така кінцева мова повинна бути суворо потужнішою, ніж система Годеля Го, як здавалося б. Мені здається, що така мова була б принаймні такою потужною, як і agda (хоча я не маю жодних доказів, лише хизування).

Чи проводилось якесь дослідження в цій галузі? Які результати відомі (а саме відома така "кінцева" мова)?

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


2
Ваші твердження заплутані через те, як ви використовуєте термінологію. Замість посилань на термінологію спробуйте викласти своє питання математично суворо і чітко, щоб ми могли зрозуміти ваше питання. Що ви розумієте під мовою програмування в контексті теорії обчислюваності? Ви маєте на увазі перерахування обчислюваних функцій?
Каве

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

Неофіційно було зазначено, де я його знайшов. Щось буквально в руслі того, що я тут дав. Я не знаю, як це констатувати і математично. Після деякого читання я не впевнений, що таке "діагональна функція класу функцій". Я думаю, з ваших термінів, що я маю на увазі, що "клас тотальних функцій не може містити власну універсальну функцію", і тому я думаю, я запитую "для якого класу загальних функцій C це так, що жоден клас загальних функцій не містить універсальна функція для С ". Якщо я розумію, що таке "універсальна функція", я думаю, що це правильно.
Джейк

1
Строго кажучи, це не питання рівня дослідження. Крім того, чому це вікі спільноти? Або це?
Андрій Бауер

"Схоже, що це породжує своєрідну" кінцеву "неістинну повну мову; таку, яку можна інтерпретувати лише машиною Тюрінга". не слідкуйте за цим твердженням, це здається не послідовником, що ви маєте на увазі, чому це здається?
vzn

Відповіді:


42

Це погано сформульоване питання, тому спочатку розберемося з цим. Я зроблю це в стилі теорії обчислень. Таким чином, я буду використовувати цифри замість рядків: фрагмент вихідного коду - це число, а не рядок символів. Це неважливо, ви можете замінити на s t r i n g протягом нижче.Nstring

Нехай бути функцією спарювання .m,n

Скажемо, що мова програмування задається такими даними:L=(P,ev)

  1. вирішується безліч з «діючих програм», іPN
  2. обчислюваних і часткова функція .ev:P×NN

Те, що визначається, означає, що існує загальна обчислювальна карта v a l i d : N{ 0 , 1 } така, що v a l i d ( n ) = 1Pvalid:N{0,1} . Неофіційно ми говоримо, що можна сказати, чи дана строка є дійсним фрагментом коду. Функція e v є істотним перекладачем для нашої мови: e v ( m , n ) виконує код m на вході n - результат може бути невизначеним.valid(n)=1nPevev(m,n)mn

Тепер ми можемо запровадити деяку термінологію:

  1. Мова є всього , якщо є повною функцією для всіх м P .nev(m,n)mP
  2. Мова інтерпретує мову L 2 = ( Р 2 , е v 2 ) , якщо існує у Р 1 таким чином, що е v 1 ( U , п , м ) е v 2 ( n , m ) для всіх n PL1=(П1,еv1) L2=(П2,еv2)уП1ev1(u,n,m)ev2(n,m)nPі . Тут u - тренажер для L 2, реалізований у L 1 . Він також відомий як універсальна програма для L 2 .mNuL2L1L2

Можливі й інші визначення " інтерпретує L 2 ", але дозвольте мені зараз не вникати в це.L1L2

Ми говоримо, що і L 2 рівнозначні, якщо вони інтерпретують один одного.L1L2

Існує "найпотужніша" мова машин Тьюрінга (яку ви називаєте "машиною Тюрінга"), в якій n N - кодування машини Тьюрінга, а φ ( n , m ) - часткова обчислювальна функція, яка "запускає машину Тюрінга, закодовану n на вході m ". Ця мова може переривати всі інші мови, очевидно, оскільки ми вимагали, щоб e v була обчислена.T=(N,φ)nNφ(n,m)nmev

Наше визначення мов програмування дуже розслаблене. Щоб пройти наступне, вимагаємо ще трьох умов:

  • реалізує функцію наступника: є s u c c P така, що e v ( s u c c , m ) = m + 1 для всіх m N ,LsuccPev(succ,m)=m+1mN
  • реалізує діагональ функція: є d I в г P такещо е V ( д я г , т ) = м , м для всіх м N ,LdiagPev(diag,m)=m,mmN
  • закритий за складом функцій: якщо L реалізує f і g, то він також реалізує f g ,LLfgfg

Класичний результат такий:

Теорема: Якщо мова може інтерпретувати себе, то вона не є тотальною.

Доказ. Припустимо , що є універсальна програма для повного LANGAUGE L , реалізованого в L , тобто, для всіх т Е Р і п Е N , е V ( U , м , п ) е v ( т , п ) . Як наступник, діагональ і e v ( u , - ) реалізуються в L , так і їх склад k uLLmPnN

ev(u,m,n)ev(m,n).
ev(u,)L . Там існує п 0P такещо е v ( п 0 , до ) е V ( U , до , до ) + 1 , а потім і V ( U , п 0 , п 0) е v (kev(u,k,k)+1n0Pev(n0,k)ev(u,k,k)+1 Оскільки існує число не дорівнює його власного наступника, то це означаєщо L не є повним абощо L Не брати до уваги себе. QED.
ev(u,n0,n0)ev(n0,n0)ev(u,n0,n0)+1
LL

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

Ось невелика теорема, яка, на мою думку, усуне непорозуміння.

Теорема: Кожна загальна мова може бути інтерпретована іншою загальною мовою.

Доказ. Нехай - загальна мова. Ми отримуємо загальний L ', який інтерпретує L , приєднавшись до L його оцінювача e v . Точніше, нехай Р ' = { 0 , п | п P } { 1 , 0 } і визначимо е V ' , як і V ' ( б , н , мLLLLevP={0,nnP}{1,0}ev Очевидно, що L ' є повнимтому що L є повним. Для того, щоб бачитищо L ' може імітувати L просто взяти у = 1 , 0

ev(b,n,m)={ev(n,m)if b=0,ev(m0,m1)if b=1 and m=m0,m1
LLLL , З тих пір е V ' ( U , м , н ) е V ( т , п ) ,мірі необхідності. QED.u=1,0ev(u,m,n)ev(m,n)

Вправа: [додано 2014-06-27] Мова побудована вище, не закрита за складом. Закріпити доказ теореми , так що L ' задовольняє додаткові вимоги , якщо L робить.LLL

LLLLLL


Якщо я перевірив прапорець Вікі, це було ненавмисно.
Андрій Бауер

2
Чи є додаткова потужність на мовах, де ви не можете сказати, чи дійсна дана програма чи ні?
Філліїда,

3
@DaniPhye: Якщо синтаксис мови не є однозначним, то ви можете "заховати" обчислювальну потужність у синтаксисі. Наприклад, мовні правила можуть вимагати, щоб кожна функція була оснащена бітом, який повідомляє, чи функція є повною. Тоді ми могли б реалізувати is_total, що інакше не є cmputable, але не вдалося реалізувати оцінку (тому що вам доведеться також обчислити біт отриманої функції). Взагалі я б сказав, що це не мова програмування, якщо ви навіть не можете реалізувати аналізатор.
Андрій Бауер

3
Як гель "Якщо мова може інтерпретувати себе, то це не є тотальним" гелем з таким результатом: Самоперекладач для F-омеги ?
Кактус


18

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

Це твердження невірне. Розглянемо мову програмування, в якій семантика кожного рядка - «Ігноруй свій вхід і негайно зупини». Ця мова програмування не є Тюрінгом повною, але кожна програма є інтерпретатором цієї мови.


Ах! Це хороший момент. Отже, повинні бути певні вимоги до того, що мова обчислює. Здається, що для того, щоб зробити це твердження правдивим, слід викласти якусь мінімальну вимогу щодо сили мови. Схоже, якби ми вимагали, щоб вона могла вирішити основні арифметичні задачі, то це може мати місце.
Джейк

@Jake Ви, можливо, зможете уникнути чогось неймовірно слабкого, наприклад, "мова визначає принаймні одну непостійну функцію" або "мова визначає більше однієї функції". Мій контрприклад явно тривіальний для будь-якого розумного визначення поняття "тривіальне".
Девід Річербі,

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