На жаль, ваша проблема не вирішена. Підхід, на який я натрапив (який, можливо, переборщив, тому кожен, хто має більш доцільний підхід, повинен посилити!) Спочатку використовує діагональний аргумент, щоб продемонструвати, що є одинарний CSL X який не є регулярним (на відміну від позитивного результату для одинарних CFL), а потім зменшує проблему зупинки для машин Тьюрінга, задавши TM M , побудувавши CSG G який імітує M на довжині стрічки, коротшої за рядок розбору w , розпізнаючи X якщо M зупиняється, не переступаючи межі і не в змозі проаналізувати інакше, так що G успішно аналізує всі w∈X які є досить довгими iff зупинками (так що L ( GM відрізняється від X лише на кінцево багато рядків і тому не може бути регулярним), інакше G розпізнає порожню мову (яка, очевидно, регулярна).L(G)XG
Ключовим у цьому підході є зауваження, що CSG не стосуються лише граматичних питань, таких як структура фрази - дійсно, послідовності деривації CSG можуть проводити довільні недетерміновані обчислення, обмежені простором (насправді існують PSPACE-повні CSL-файли), перш ніж приступити до справи вирівнювання з рядком розбору. Це найлегше спостерігається за допомогою стандартних перетворень між CSG та монотонними граматиками (яка продовжує працювати при обмеженні унарних алфавітів), а також використання простих монотонних виробництв для імітації машинних переходів Тьюрінга на рядках деривації, які представляють етапи в історії обчислень. Протягом цієї відповіді я припускаю, що читач може зрозуміти більшість деталей, коли потрібен CSG для імітації заданих обчислень. (Я припускаю, що запитуючий задоволений усім цим, але я переглядаю це для повноти. Тим не менш, не соромтеся вимагати роз'яснень у коментарях.)
По-перше, нам потрібна наша нерегулярна одинарна CSG. ( EDIT: значить, це було надмірно - нерегулярні одинарні CSL-файли можна легко демонструвати, наприклад, через перекачувальну лему на будь-якій мові, яка виявляє найосновнішу нерегулярність. Див. Коментарі для прикладів. Заднім оглядом, використовуючи діагональний аргумент було як привести ядерну боєголовку до бою з ножами. Перевірте цю конструкцію, якщо вам цікаво, інакше перейдіть до скорочення.
Нехай бути перерахуванням DFA за алфавітом { 1 } , таким чином, що кількість станів у D i збільшується в i . Ми описуємо CSG G X з точки зору його поведінки під час розбору рядка 1 n ∈ { 1 } ∗ :D1,D2,...{1}DiiGX1n∈{1}∗
- Недетерміновано генерують рядок з "порожніх" нетерміналів, які ми вважаємо "стрічкою". Один із порожніх нетерміналів повинен бути окремим нетерміналом "порожня + голова читання-запису + старт запуску". Якщо рядок розбору не дорівнює 1 n, то ця деривація закінчиться невдалою. Ми описуємо решту процесу з допомогою детермінованих обчислень, імітованих єдино можливим виведенням.n1n
- Надрукуйте на стрічці кодування наступним числом i у двійковій формі , де i = n - c і c обрано так, щоб у нас на стрічці завжди було достатньо місця, щоб зробити те, що нам потрібно. (Це можливо, оскільки простір, необхідний для кодування і D i, і i)Diii=n−ccDii логарифмически зростає в ) .i
- Оцініть на вході 1 i . Для цього не потрібно зображувати стрічку D i - ви можете просто зберігати єдиний стан, який ви змінюєте відповідно до переходів D iDi1iDiDi під час декременту .i
- Якщо відхиляє 1 iDi 1i , перезапишіть усю стрічку нетерміналами, які створюють . Інакше не вдасться.1
Беремо . Чітко X ≠ L ( D i ) для будь-якого i , оскільки 1 i + c ∈ X ⇔ 1 i + c ∉ L ( DX=L(GX)X≠L(Di)i .1i+c∈X⇔1i+c∉L(Di)
Наступним кроком є розробка скорочення від проблеми зупинки до проблеми запитувача. (Якщо ви пропустили вищевказаний розділ, нехай - це довільна нерегулярна одинарна CSL, породжена CSGX )GX
Нехай - довільна ТМ. Ми перетворюємо M в CSG G, який веде себе так, як це робиться в рядку розборуMMG :1n
- Породжувати порожніх нетермінали, причому крайній лівий - окремий порожній + голова читання-запису, нетермінальний, а також генерують "граничний" нетермінал з кожної сторони. Знову ж таки, якщо ми генеруємо неправильну кількість нетерміналів, то ми провалюємося.n−2
- Моделюйте у просторі між граничними нетерміналами. Якщо МMM колись переходить на один з граничних станів, ми припиняємо моделювання і припускаємо, що ніколи не зупиняється.M
- Якщо зупиняється, поводься такM . Якщо нам довелося припинити моделювання, то провалити.GX
Зауважте, що якщо вдається запуститись назавжди в межах, G ніколи не може генерувати рядок розбору, і таким чином вийде з ладу. Якщо M зупиняється, то існує деякий простір n, якого вистачає, щоб містити весь обчислення M , отже, G аналізує 1 м, коли m ≥ n + 2 та 1 m ∈ X , а значить, X є об'єднанням L ( G ) і кінцева мова, звідки LMGMnMG1mm≥n+21m∈XXL(G)L(G)не є регулярним. З іншого боку, якщо ніколи не зупиняється, то L ( G ) = ∅ явно регулярний.ML(G)=∅
Алгоритм для визначення того, чи є регулярним, чи ні, визначав би, чи не зупиняється M на порожній стрічці, що не можна визначити. Звідси випливає, що проблема запитувача не може бути вирішена.L(G)M