Чи є яка-небудь мова, яка може виражати свій власний компілятор Turing-завершений?


12

Коментар над tex.SE змусив мене замислитися. Заява по суті:

Якщо я можу написати компілятор для мови X мовою X, то X є повним Тьюрінгом.

З точки зору обчислюваності та формальної мови, це:

Якщо вирішує і , тоді .L L Т ММ L F L = R EMLLTMMLFL=RE

Тут позначає мову всіх Тьюринга машин кодувань і позначає безліч функцій , обчислених машин в . F L LLTMFLL

Це правда?


близько, подумайте / погодьтесь, має бути якийсь справжній thm, близький до подібного, будь-яка "нетривіальна" чи "досить складна" мова, яка може виражати власний симулятор, є TM завершена. компілятор, як правило, не є частиною тренажера. це дійсно "модель дизайну", що зустрічається в багатьох доказах повноти ТМ, але, можливо, не була узагальнена / формалізована. можливо, тема для подальшого аналізу / обговорення в Чаті з інформатики . підозрюваний / здогад існує ще одна цікава ТМ, яка на зразок "кожна нетривіальна / досить складна рекурсивна та рекурсивно перелічувана мова може бути відображена / зменшена до кожної іншої".
vzn

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

Чи можете ви пояснити друге твердження? Що таке ? Як це твердження пов'язане з першим? M
reinierpost

@reinierpost типово позначає кількість , враховуючи деяке (допустиме) кодування. Отже, . Через я позначаю набір функцій, обчислений мовою машин Тюрінга. М Л Т М = { М | М  є машина Тьюринга } F L LMMLTM={MM is a Turing machine}FLL
Рафаель

Кращим способом висловити претензію буде: "Якщо є TM з та , тоді .М L L M = L F L = R EMMLLM=LFL=RE
Рафаель

Відповіді:


13

Неофіційне твердження не відповідає дійсності, про що свідчить наступна мова програмування. Будь-який рядок, скажімо, символів ASCII є дійсною програмою, а значення кожної програми - "Вивести програму, яка лише виводить копію свого вводу". Таким чином, кожна програма на цій мові є компілятором для цієї мови, але мова не є повною для Тьюрінга.

M2xxMLMFL


(ϕi)i0Q(x,y)pϕpyQ(p,y)Qx=ypϕp(y)=Q(p,y)ϕpp


1
У якому сенсі кожна програма з цієї мови є компілятором для цієї мови? Кожна програма - це програма, яка вводить програму на цій мові та виводить іншу програму на цій мові, так, але лайки зазвичай не вважаються компіляторами.
користувач253751

1
cc(P)={xreturn P}P(x)=Pc

1
@immibis Я (запізніло) вважаю, що ти маєш рацію. Здається, що я мав намір написати, що семантика кожної програми - це лише "вивести свій внесок". Це здається досить близьким до того, що я написав, що це, мабуть, те, що я мав на увазі сказати в першу чергу. А може, мені пощастило, що відстань від моєї неправильної відповіді до правильної відповіді була такою невеликою. :-)
Девід Річербі

1
Зараз у відповіді йдеться про те, що "ігнорує свої дані та видає копію свого вводу" - ви не можете зробити і те, і інше.
користувач253751

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