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


11

Циклічний зсув (також званий поворотом або кон'югацією ) з мови визначається як . Згідно з вікіпедієютут ), в рамках цієї операції без контекстні мови закриваються посилання на документи Ошиби та Маслова. Чи є простий доказ цього факту?L{yxxyL}

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

Відповіді:


5

Ви можете спробувати скористатись автоматичними розгортаннями. Враховуючи автоматичний віджимання для мови оригіналу, ми побудуємо його для циклічного зсуву. Новий автомат працює у два етапи, що відповідає і частині слова (де - мовою оригіналу). На першому етапі, коли автомат хотів би спливати нетермінальний , він може замість цього натиснути нетермінальний ; ідея полягає в тому, що в кінці першого етапу стек міститиме в зворотному порядку символи, які знаходять у стеку після читання оригінальним автоматом. На другій стадії (вимикач недетермінований) замість натискання нетермінальногоx y x x y A A x A A xyxyxxyAAxA, нам дозволено спливати нетермінальний . Якщо оригінальний автомат справді може генерувати стек при прочитанні , то новий міг би точно викласти весь стек.Ax

Редагувати: Ось ще кілька деталей. Припустимо, нам дають PDA з алфавітом , набором станів , набором станів , нетерміналами , початковим станом та набором допустимих переходів. Кожен допустимий перехід має вигляд , тобто в стані , читаючи (або ; у такому випадку це вільний перехід), якщо вершиною стека є (або , що означає, що стек порожній), тоді PDA може (це недетермінована модель) перейти до стану , замінюючиQ F Γ q 0 ( q , a , A , q , α ) q a A a = ϵ A Γ A = ϵ q A α Γ ΣQFΓq0(q,a,A,q,α)qaAa=ϵAΓA=ϵqA з .αΓ

Новий КПК має новий нетермінальний для кожного . Для кожного двох станів та існують два стани . Вихідні стани (фактичний вихідний стан вибирається серед них не детерміновано через -переходи) . Для кожного переходу є відповідні переходи і . Є й інші переходи.AAΓq,qQAΓ{ϵ}(q,q,1),(q,q,2,A)ϵ(q,q,1)(q,a,A,q,α)((q,q,1),a,A,(q,q,1),α)((q,q,2,B),a,A,(q,q,2,B),α)

Для кожного переходу існують переходи , де і . Для кожного остаточного стану є переходи , де .(q,a,A,q,α)((q,q,1),a,B,(q,q,1),BAα)BΓ{ϵ}ϵ=ϵqF((q,q,1),ϵ,A,(q0,q,2,ϵ),A)AΓ{ϵ}

Для кожного переходу існують переходи , де . Для кожного переходу існують переходи , де . Для кожного переходу існують "узагальнені переходи" ; вони реалізуються як послідовність двох переходів через проміжний новий стан. Переходи\ альфа) з(q,a,ϵ,q,α)((q,q,2,A),a,B,(q,q,2,A),Bα)AΓ{ϵ}(q,a,ϵ,q,A)((q,q,2,B),a,A,(q,q,2,A),ϵ)BΓ{ϵ}(q,a,A,q,B)((q,q,2,C),a,BA,(q,q,2,C),ϵ)(q,a,ϵ,q,α)|α|2обробляються аналогічно. Для кожного переходу існують переходи , де . Переходи обробляються аналогічно. Нарешті, існує єдиний остаточний стан та переходи .(q,a,A,q,A)((q,q,2,A),a,B,(q,q,2,A),B)BΓ{ϵ}(q,a,A,q,Aα)f((q,q,2,A),ϵ,ϵ,f,ϵ)

(Можливо, я пропустив кілька переходів, і деякі деталі, які я опускаю, дещо безладні.)

Нагадаємо, ми намагаємось прийняти слово , де приймається оригінальним КПК. Стан означає, що ми перебуваємо на етапі 1, у стані , а початковий PDA знаходиться у стані після читання . Стан подібний, де відповідає останньому що вискочив. На етапі 1, ми маємо право висунути замість того , щоб плескати . Ми робимо це для кожного нетермінального, який виробляється при обробці , але тільки вискакується під час обробки . На другому етапі нам дозволено попyxxy(q,q,1)qqx(q,q,2,A)AAAAxyAзамість того, щоб натискати . Якщо ми це робимо, тоді ми повинні пам’ятати, що топ-запас - це справді ; це застосовується лише тоді, коли на стеку немає «тимчасових» речей, які в модельованому КПК такі самі, як або форми .AAϵB

Ось простий приклад. Розглянемо автомат для який висуває для кожного , і pops для кожного . Новий автомат приймає слова двох форм: і . Для слів першої форми, 1 -й ступені складається з штовхаючи раз«2 -й ступені складається з вискакують раз , штовхаючи раз , і вискакують раз . Для слів другої форми спочатку натискаємо разxnynAxAyykxnynkxkynxnkkAkAnkAnkAkA, потім поп раз , натисніть раз , перехід до етапу 2 та pop разів .kAnkAnkA

Ось більш складний приклад для мови збалансованих дужок різних типів ("()", "[]", "<>"), що безпосередні нащадки кожного типу дужок повинні належати до іншого типу. Наприклад, "([] <>)" добре, але "()" неправильно. Для кожного «(», ми поміщаємо якщо стек топ-ні , для кожного «)», ми вискочити . Аналогічно , пов'язані з "[]" і "<>". Ось як ми приймаємо слово ">) ([()] <". ">)", натискаючи , і переходимо до етапу 2. Ми споживаємо "(", вискакуючиі запам'ятовування верхньої межі стека . Ми споживаємо "[()]", штовхаючи та вискакуючи ; при натисканніA AABCCAAABAB , ми усвідомлюємо, що "справжня" вершина стека - це , і тому квадратні дужки дозволені (нас би не обдурили ">) (() <"); при натисканні на , оскільки вершина стека - це (що не або форма ), то ми знаємо, що також "справжня" вершина стека, і тому круглі дужки дозволені (незважаючи на те, що тіньова вершина стека - ). Нарешті, ми споживаємо "<" і поп .AABϵXBAC


Вибачте, у мене проблеми з розумінням - чи можете ви пояснити далі? З чого починається автомат і які його переходи? І чи відбувається перемикач для кожного символу стека? Дякую! AA
usul

Дуже цікава пропозиція. Дякую. Я трохи пережовую це, щоб воно затонуло.
Хендрік,

@usul, вам доведеться самостійно заповнювати дані. Перемикач (на першому етапі) повинен відбуватися, коли автомат "хоче" спливати але не може, і замість цього він натискає . Ви можете думати про це як недетермінований хід. AAAA
Yuval Filmus

@Yuval: Вибачте, але я не можу цього зробити. Як я розумію вашу ідею, новий автомат починається з імітації частини, зміни pops та push. Потім генеруйте на стеку, де початковий автомат починається з під час читання . Що це оригінал починається з натискання? Тоді автоматизатор nwe повинен вискочити з порожнього стека. Я все ще думаю, що ваша інтуїція варта, але, здається, потрібна додаткова турбота. yααy
Гендрик Ян

@Hendrik, вибачте, але я не можу слідувати вашому контрприкладу. У який момент ви думаєте, що новий автомат повинен вискочити з порожнього стека?
Yuval Filmus

4

Розглянемо нормальну форму Грейбаха . Для побудови зміщеної мови потрібно лише змінити виробництво на і додати новий нетермінальний який поводиться так, як раніше , якщо у деяких випадках виробництво посилання .SαA1AnSA1AnαSSS


Дякую, але це переноситься однією буквою. Мене цікавить загальна ротація, довільною кількістю літер.
Гендрик Ян

3
@HendrikJan. Ну, якщо без контексту, тож , безумовно , буде контекст безкоштовно , а також. Ви можете побудувати граматику для нього, застосовуючи метод , який я запропонував раз. Крім того, можна побудувати граматика безпосередньо, «сплощення» даної граматики Наприклад, якщо і граматика має виробництво і , ви додасте добуток і поверніть це. Звичайно, розмір Ваша граматика може зрости дуже швидко.shift1(L)shiftn(L)=shift1(shift1((L))nshiftn(L)n=2SαABAβCSαβCB
Karolis Juodelė

1
Для фіксованого ви праві. Але тут не закріплено і не обмежено. Наприклад, якщо то отримаємо . nnL={anbnn0}{akbnak+=n}{bkanbk+=n}
Гендрик Ян

@HendrikJan, я бачу. Я помилково припустив, що питання стосується кінцевої зміни. Я перегляну свою відповідь ...
Karolis Juodelė

4

Це виявилося гарною ідеєю перевірити старий класичний Хопкрофт та Уллмана Введення в теорію автоматів (1979). Закриття під циклом - вправа 6.4с і позначене S **. Подвійні зірки означають, що це одна з найскладніших проблем (у книзі). На щастя, S вказує, що це одна з обраних проблем з рішенням.

Рішення полягає в наступному. Прийміть CFG в нормальному вигляді Хомського. Розгляньте будь-яке похідне дерево і в основному переверніть його догори дном. Розглянемо шлях у вихідному дереві. Ліворуч дерево має внески праворуч , тобто похідний рядок дорівнює . (Насправді, оскільки граматика - це CNF, коли шлях продовжується ліворуч, внесок буде праворуч, а відповідний порожній тощо).S=X1,X2,,Xnx1,x2,,xny1,y2,,ynx1x2xnyny2y1xi

Дерево догори дном має шлях із внесками вліво і праворуч, тому результат є виведенням для . По мірі необхідності.S,X^n,X^2,X^1yn,,y2y1xn,,x2x1yny2y1x1x2xn

Повні деталі побудови наведені в книзі.

Зверніть увагу, як це нагадує про (прийняте) рішення Юваль. Нетермінали, які висуваються замість вискочивших, знаходяться в протилежному порядку на стеку. Досить схожий на перевернуте дерево.

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