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


11

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

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

Відповіді:


5

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

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

Новий КПК має новий нетермінальний для кожного . Для кожного двох станів та існують два стани . Вихідні стани (фактичний вихідний стан вибирається серед них не детерміновано через -переходи) . Для кожного переходу є відповідні переходи і . Є й інші переходи.A′A∈Γq,q′∈QA∈Γ∪{ϵ}(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),B′A′α)B∈Γ∪{ϵ}ϵ′=ϵq∈F((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,B′A,(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)qq′x(q,q′,2,A)AA′A′AxyA′замість того, щоб натискати . Якщо ми це робимо, тоді ми повинні пам’ятати, що топ-запас - це справді ; це застосовується лише тоді, коли на стеку немає «тимчасових» речей, які в модельованому КПК такі самі, як або форми .AAϵB′

Ось простий приклад. Розглянемо автомат для який висуває для кожного , і pops для кожного . Новий автомат приймає слова двох форм: і . Для слів першої форми, 1 -й ступені складається з штовхаючи раз«2 -й ступені складається з вискакують раз , штовхаючи раз , і вискакують раз . Для слів другої форми спочатку натискаємо разxnynAxAyykxnyn−kxkynxn−kkA′kA′n−kAn−kAkA, потім поп раз , натисніть раз , перехід до етапу 2 та pop разів .kAn−kA′n−kA′

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


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

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

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

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

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

4

Розглянемо нормальну форму Грейбаха . Для побудови зміщеної мови потрібно лише змінити виробництво на і додати новий нетермінальний який поводиться так, як раніше , якщо у деяких випадках виробництво посилання .S→αA1…AnS→A1…AnαS′SS


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

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

1
Для фіксованого ви праві. Але тут не закріплено і не обмежено. Наприклад, якщо то отримаємо . nnL={anbn∣n≥0}{akbnaℓ∣k+ℓ=n}∪{bkanbℓ∣k+ℓ=n}
— Гендрик Ян

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

4

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

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

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

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

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

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