Чи можуть регулярні мови бути Тюрінгом завершеними?


32

Я читав про Йоту та Джота і вважав цей розділ заплутаним:

На відміну від Iota, де синтаксичне дерево для рядка може розгалужуватися або зліва, або справа, синтаксис Jot рівномірно ліво-розгалужений. Як результат, Iota суворо без контексту, але Jot є звичайною мовою.

Я розумію, що і Йота, і Джот Тюрінг завершені. Але, мабуть, один без контексту, а інший регулярний! Невже звичайні мови не можуть бути завершеними?


3
Зауважте, що мова, що описує машину Тюрінга, може бути тривіально записана звичайною мовою, наприклад, i = {0,1, -1}, b = {кінець введення} (i + bi + bi) + b (i +) не порожній набір правил, за яким слідує не порожній ввід. А точніше, ви можете його інтерпретувати так, якщо у вас є перекладач, який, як згадуються у відповідях, є окремим поняттям для класу мови.
Кубічний

1
@ Cubic: з цього приводу машини Тюрінга можуть бути пронумеровані таким чином, що кожне число являє собою рівно одну машину (тобто їх підрахунок), і ці числа можуть бути виражені в одинарних позначеннях. Я ніколи не вивчав належним чином цей матеріал, тому мені доводиться працювати над визначеннями, але я вважаю 1*0, що це звичайна мова ;-) Хоча це не дуже доброзичлива мова програмування ні для програміста, ні для компілятора-автора.
Стів Джессоп

Відповіді:


40

Словом, відповідь - так.

Але ви змішуєте два абсолютно неспоріднених значення терміна "мова" (так, це заплутано):

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

Зауважте, що ви можете говорити про "мову C ++" з двох абсолютно неспоріднених точок зору, використовуючи два неспоріднених значення слова "мова":

  • C ++ як набір рядків, які є законними відповідно до граматики C ++
  • C ++ як спосіб визначення програм.

Риси "мови С ++" з цих двох точок зору не пов'язані.

Більше прикладів, які допоможуть вам розділити ці поняття:

  • Вираз "[az] + @ [az]. [Az]" описує набір рядків, розпізнаваних кінцевими автоматами, тобто звичайною мовою. Однак це лише набір рядків: це не спосіб конкретизації програм (якщо ви не призначите спосіб інтерпретації кожної такої рядки як програми), тому не має сенсу говорити про те, чи це Тюрінг- завершено.
  • Мова блок-схем - спосіб визначення програм; залежно від конкретного аромату блок-схем, він може бути, а може бути і не повним Тьюрінгом. Однак блок-схеми не є рядками, тому абсолютно не має сенсу говорити про блок-схеми в сенсі "мова як набір рядків".

3
Я додам, що (([a-z][0-9]*)*[A-Z][0-9]*([a-z][0-9]*)*->([a-zA-Z][0-9]*)*)*це звичайна мова, яка здатна описати граматику будь-якої мови класу 0
Ербурет говорить: Відновити Моніку

2
{0,1}

10

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

До речі, без контекстних мов також (мабуть) не є NP-повною, оскільки вони мають алгоритм синтаксичного розбору багаточлени.


9

Сам синтаксис (як закодований у синтаксичних деревах) сучасних мов програмування далеко не все, що вони роблять. Насправді формальні мови, визначені набором усіх програм на даній мові, які компілюються без помилок, рідко бувають навіть без контексту .

Статичний та динамічний коефіцієнт семантики в рівняння. Вони не помітні в дереві синтаксису, але визначають, чи частина коду насправді є програмою та що вона обчислює. Підсумок, без контексту, відповідно. звичайна формальна мова, яка визначається "синтаксисом", дає надпроксимізацію мови програмування.

Тепер, щоб відповісти на ваше запитання: так, це можливо. Розглянемо, наприклад, будь-яку нумерацію Gödel машин Тюрінга; ви отримуєте "мову програмування" всіх натуральних чисел, кожен з яких представляє TM. Зрозуміло, це не дуже приємна мова для програмування, але це, звичайно, цільна мова Тьюрінга, яка є регулярною - тривіальною, рівною.


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

  2. Синтаксис мови програмування , тобто набір рядків, що відповідають дійсним програмам в мові програмування, сам по собі є мовою. Наприклад, врахуйте набір усіх можливих програм Python. Синтаксис мови програмування може бути контекстно-залежним , без контексту , регулярним і т. Д. Нас цікавить складність перевірки того, що даний рядок є дійсною програмою мовою програмування (це роблять компілятори / інтерпретатори). Коли ми кажемо, що синтаксис мови програмування є без контексту, це означає, що існує синтаксис граматики для її синтаксису, і це означає, що є автоматичні автоматичні перевірки дійсності програм,

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


1

Відповідь - так. Ви бачите, як сказана прийнята відповідь, граматика не залежить від її значення. Самими словами Хомського:

Я думаю, що ми змушені зробити висновок, що граматика є автономною і незалежною від смислу ...

Хомський, Синтаксичні структури (1956)

Якщо граматика може створити достатньо речень для опису всіх речей, які можна обчислити, то ми можемо довільно призначити обчислювальне значення її реченням - по одному для кожної речі, яку можна обчислити.

Що стосується реального конкретного прикладу, то популярна мова whitespaceмає звичайну граматику і, можливо, навіть x86 assembly languages(потребує перевірки).


Я не думаю, що цей уривок означає, що граматика Го є звичайною мовою у формальному розумінні; Я думаю, це просто означає, що граматика не є неправильною , тобто послідовною. Якби синтаксис Го був насправді звичайною мовою в ієрархії Хомського, він не міг би створити, наприклад, врівноважені, вкладені дужки.
Цлейсон

Так, в граматиці Го є рекурсія. Оновлення публікації.
Ерік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.