Чи є доповненням {www | …} Без контексту?


12

Загальновідомо, що доповнення {wwwΣ} без контексту. А як щодо доповнення {wwwwΣ} ?


1
Я виявив, що це теорема 4 у П. Домьосі, С. Горвата, М. Іто, Л. Кашоні, М. Кацури: Формальні мови, що складаються з примітивних слів. link.springer.com/chapter/10.1007/3-540-57163-9_15
domotorp

Відповіді:


11

Я все-таки вважаю, CFL, з адаптацією класичного доказу. Ось ескіз.

Розглянемо L={xyz:|x|=|y|=|z|(xyyz)} , що є доповненням {www} , при цьому слова довжиною не 0 мод 3 вилучені.

Нехай L={uv:|u|3|v|30u2|u|/3v|v|/3} . Зрозуміло, що L - CFL, оскільки ви можете здогадатися про позицію p і вважати, що u закінчується p/2 після цього. Покажемо, що L=L .

  • LL : Нехайw=xyzL . Припустимо, є такийp , щоxpyp . Потім напишітьu для3p/2 перших символівw , аv для решти. Природно,u2|u|/3=xp . Тепер що такеv|v|/3 ? Спочатку:

|v|/3=(|w|3p/2)/3=|w|/3p/2.

Отже, у w це положення:

|u|+|v|/3=3p/2+|w|/3p/2=|w|/3+p,
або, іншими словами, позиція p в y . Це показує, що u2|u|/3=xpyp=v|v|/3 .

Якщо ypzp , то нехай u є першим 32(|w|/3+p)символівw, так щоu2|u|/3єyp; v- рештаw. Потім:

|u|+|v|/3=2|w|/3+p
отже, аналогічно,v|v|/3=zp.

  • LL : Повертаємо попередній процес. Нехайw=uvL . Запишітьp=2|u|/3 . Тоді:
    p+|w|/3=2|u|/3+|uv|/3=|u|+|v|/3.
    Таким чиномwp=u2|u|/3v|v|/3=wp+|w|/3 іwL (оскільки якщоw має виглядxxx , він повинен містити, щоwp=wp+|w|/3 для всіхp ).

2
Нічого, неймовірного! Я не стверджую, що я дотримувався кожної деталі вашого аргументу, так як я не бачу, що ви маєте на увазі під останнім рядком ("За останній шматочок"), або чому ви не розділяєте випадок, коли , але ваше рішення все-таки працює. Я б узагальнив основний трюк як 3 a + 3 b = 2 a + ( b - a ) + 2 a + 2 b . Подібний трюк також працює для доповнення будь-якого L r = { w r|w|/3<p/23a+3b=2a+(ba)+2a+2b . Цікаво, чи L = { x y z : | х | = | у | = | z | ( x y ) } без контексту чи ні. Lr={wr}L={xyz:|x|=|y|=|z|(xy)}
домоторп

1
@domotorp: Привіт! Гаразд, "останній шматочок" був непотрібним, дякую! Що стосується "випадку, коли ", я не впевнений, де ти це маєш на увазі. Я щось пропустив? Що стосується вашого L ' , то я дивувався тому ж, роблячи це "доказ"! Не впевнений ще :)|w|/3<p/2L
Michaël Cadilhac

2
Ой, моє погано, завжди тримається! p/2|w|/3
domotorp

Напевно, це не проблема, але може бути дивним, тому вам слід займатися справами | u | = 3 p / 2 ( ? ), Коли р непарний. p|u|=3p/2(?)p
Марціо Де

@MarzioDeBiasi: Так, саме тому це ескіз :-)
Michaël Cadilhac

10

Ось як я думаю про вирішення цієї проблеми за допомогою КПК. На мою думку, це інтуїтивно зрозуміліше.

xwww|x|0ab|w|

Ми використовуємо звичайний трюк використання стека для підтримки цілого числа , маючи новий символ "знизу стека" , зберігаючи абсолютне значенняяк кількість лічильників на стеку, так і sgn ( ) за станом PDA. Таким чином, ми можемо збільшити чи зменшити , зробивши відповідну операцію.tZ|t|tt

Мета полягає у використанні недетермінізму для відгадування позицій двох символів, які ви порівнюєте, та використання стека для запису , де - відстань між цими двома символами. t:=|x|3dd

Ми виконуємо це наступним чином: приріст для кожного символу, що бачиться, поки не буде обраний перший відгаданий символ , і запишіть у стан. Для кожного наступного символу введення, поки ви не вирішите, що бачили , зменшіть на ( для введення довжини та для відстані). Відгадайте положення другого символу і запишіть, чи . Продовжуйте збільшувати для наступних символів введення. Прийміть, якщо (виявляється зверху) і .taabt213babtt=0Zab

Приємне в тому, що слід повністю зрозуміти, як поширити це на довільні повноваження.


2
Справді, дуже акуратно!
домоторп

1
Так, набагато приємніше :-)
Michaël Cadilhac

4

Просто інша ("орієнтована на граматику") перспектива, щоб довести, що доповнення є CF для будь-якого фіксованого використанням властивостей закриття.{wk}k

Спершу зауважте, що у додатку завжди є таке, що . Ми зосереджуємося на і починаємо з простої граматики CF, яка створює:{wk}iwiwi+1w1w2

L={a00...0w1b00...0w2...000...0wk|wi|=n}={a0n1b0n(k1)1}

Наприклад, , маємо ,k=3L={ab0,a0b000,a00b00000,...}GL={Sab0|aX00,X0X00|0b0}

Потім застосуйте закриття при зворотному гомоморфізмі та об'єднанні :

Перший гомоморфізм:φ(1)a,φ(0)b,φ(1)0,φ(0)0

Другий гомоморфізм:φ(0)a,φ(1)b,φ(1)0,φ(0)0

L=φ1(L)φ1(L) все ще вільний від контексту

Застосовуйте замикання під циклічними зрушеннями до щоб отримати набір рядків довжиною не виду :Lknwk

L=Shift(L)={uuwk|u|=kn} .

Нарешті додайте звичайний набір рядків, довжина яких не ділиться на , щоб отримати точно доповнення :k{wk}

L{{0,1}nnmodk0}={uuwk}

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