Малюнок 2.7. Програма як діалектичне заперечення проблеми 10 страница
Наведений алгоритм можна уточнити за допомогою наступних індуктивних визначень.
1. P0=P
2. P i={B→aβ çє правила B→aA βÎР, A→eÎP i-1} È R i-1 (i=1,2, …).
Оскільки множина правил є скінченною, а праві частини нових правил коротші, то формула для визначення Pi задає монотонне за і відображення. Тому існує k (k³0), що Pk=Pk+1. Іншими словами, послідовність P0, P1, P2, … стабілізується на k-му кроці. Покладемо P¢=Pk\{A→eÎPk} .
Одержана граматика G¢=(N, T, P¢, S) породжує мову L(G)\ {e}.
Дійсно, кожен вивід в граматиці G, який не породжує порожнє слово, може бути промодельований в граматиці G¢, що легко доводиться індукцією по довжині виводу. Так само, можна промоделювати виводи в G¢ виводами в G, використовуючи замість модифікованих правил виду B→aβ початкові правила виду B→aAβ з подальшим виводом порожнього ланцюжка з A▄
Приклад 4.20 Розглянемо граматику G з правилами
S→aSb
S→bSa
S→e
Застосувавши до цієї граматики описаний метод видалення e-правил, отримаємо граматику G¢ з правилами
S→aSb
S→bSa
S→ab
S→ba
яка еквівалентна з точністю до порожнього ланцюжка граматиці G.
4.8.3 Нормальна форма Хомського
Визначення 4.36 Назвемо КВ-граматику G=(N, T, P, S) граматикою у нормальній формі Хомсього, якщо її правила мають вигляд S→e, A→a, A→BC для деяких A, B, CÎN, aÎT.
Лема 4.7 За кожною КВ-граматикою можна побудувати еквівалентну їй граматику у нормальній формі Хомського.
|
|
Доведення. Нехай дана КВ-граматика G=(N, T, P, S). Проведемо ряд перетворень цієї граматики так, що породжувана нею мова залишиться незмінною. Спочатку побудуємо еквівалентну граматику G¢=(N¢, T¢, P¢, S¢) без e-правил.
Далі замінимо у всіх правилах кожен термінальний символ a на новий нетермінальний символ N(a) і додамо до множини P правила N(a)→a для всіх aÎT.
Видалимо правила вигляду A→A1A2…An, де n >2, замінюючи його на наступний ряд нових правил A→A1N(A2…An), N(A2…An)→ A2N(A3…An), …, N(An-1…An)→ An-1An (при цьому додаються нові нетермінальні символи N(A2…An), N(A3…An), …, N(An-1…An)).
Якщо для деяких і множина містить правила , але не містить правила , то додамо це правило в . Повторюємо цю процедуру, доки можливо. Після цього видалимо із множини всі правила вигляду .
Нарешті, змінимо S на S¢, та додамо правила S¢→e, S →S¢ в тому випадку, коли мова L(G) містить порожній ланцюжок.
Приклад 4.21 Граматика еквівалентна наступній граматиці в нормальній формі Хомського: , , , , .
4.8.4 Нормальна форма Грейбах
Визначення 4.37 КВ-граматику G=(N, T, P, S) будемо називати граматикою в нормальній формі Грейбах, якщо її правила мають вигляд A→aa (aÎT, aÎ(NÈT)*), тобто кожне правило починається з термінального символу.
|
|
Сформулюємо без доведення наступне твердження.
Лема 4.8 За кожною КВ-граматикою можна побудувати e-еквівалентну їй (з точністю до порожнього ланцюжка) граматику у нормальній формі Грейбах.
Зауважимо, що наявність нормальної форми Грейбах дозволяє досить легко за кожною граматикою побудувати еквівалентний їй недетермінований магазинний автомат. Також в таких граматиках довжина виводу термінального ланцюжка не перевищує його довжину.
Приклад 4.22 Граматика еквівалентна наступній граматиці в нормальній формі Грейбах: , .
4.8.5 Рекурсивні нетермінали
Визначення 4.38 Нетермінал А Î N КВ-граматики назвемо рекурсивним (самовставним, циклічним), якщо існує вивід виду АÞ*aАb. Якщо такого виводу немає, то нетермінал називають нерекурсивним.
Лема 4.9 Якщо КВ-граматика G не має рекурсивних нетерміналів, то мова L(G) скінченна.
Дійсно, в цьому випадку може бути лише скінченна кількість виводів, тому породжується лише скінченна мова.
Зауважимо, що зворотнє твердження не є справедливим для довільної граматики, бо може бути рекурсивний нетермінал, що породжує скінченну мову. Це можливо для рекурсивного нетерміналу, коли є вивід АÞ*aАb, але завжди з a та b породжуються порожні ланцюжки: aÞ*e та bÞ*e. Крім того, рекурсивні недосяжні або непродуктивні рекурсивні нетермінали не впливають на породжувану мову.
|
|
Приклад 4.23 Розглянемо граматику, множина Р якої складається з наступних правил виведення:
S→AB
A→C
A→a
B→b
C→A
Мова, породжена цією граматикою, складається з єдиного ланцюжка ab. Але нетермінали A та C є рекурсивними.
Отже, наведена лема дозволяє сформулювати необхідну умову породження КВ-граматикою нескінчених мов: нескінчена мова може породжуватися лише граматикою з рекурсивними нетерміналами. Але ця умова, як показує приклад, не є достатньою.
Для нескінченних мов має місце наступне твердження.
Лема 4. 10 Нехай граматика G=(N, T, P, S) породжує нескінченну мову. Тоді існує суттєвий рекурсивний нетермінал A такий, що має місце АÞ*t1Аt2, де t1,t2ÎT* та |t1t2|³1.
Ця лема буде використовуватись для доведення властивостей КВ-мов.
4.9 Властивості контекстно-вільних мов
В цьому розділі розглянемо властивості КВ-мов, тобто структуру ланцюжків, виразну потужність КВ-мов та їх замкненість відносно операцій над формальними мовами.
|
|
Спочатку сформулюємо для КВ-мов аналог твердження (Лема 4.10), яке характеризувало властивості КВ-граматик.
Лема 4.11 (лема про розростання, лема про накачку). Нехай – КВ-мова над алфавітом T. Тоді знайдеться таке натуральне число k, що для довільного ланцюжка tÎL довжини не менше k знайдуться ланцюжкі u, v, t1, t2, x ÎT*, для яких вірно u t1 x t2 v=t, |t1t2|³1, |t1 x t2|£k та u t1 i x t2 i vÎL для всіх i=0,1,….
Ідея доведення полягає в тому, що для породження мови L розглядається граматика у нормальній формі Хомського (нескорочуюча граматика). Тоді для достатньо довгих виводів можна виділити рекурсивний нетермінал A такий, що має місце АÞ*t1Аt2, де t1,t2ÎT* та |t1t2|³1 (дивись попереднью лему). Звідси і буде випливати твердження леми.
4.10 Операції над формальними мовами
Лема 4.12 Мова L3={anbncn | n³0} не є КВ-мовою.
Доведення. Якби мова L3 була б КВ-мовою, то тоді існували б ланцюжи u, v, t1, t2, x Î{a,b,c}* такі, що u t1 i x t2 i vÎL3 для всіх i=0,1,…. Зрозуміло, що t1 (так само як і t2) не може складатися з різних символів (інакше для деякого i ланцюжок u t1 i x t2 i v не буде належати L3. Але якщо t1 складається лише з одного символу, то збільшуючи i можна порушити баланс символів a,b,c. Тому мова L3 не може бути КВ-мовою.
Далі почнемо розгляд властивостей КВ-мов відносно теоретико-множинних операцій.
Лема 4.13 Клас КВ-мов замкнений відносно об’єднання.
Дійсно, нехай КВ-мови L1 та L2 породжені граматиками G1=(N1, T, P1, S1) та G=(N2, T, P2, S2) відповідно. Задамо граматику G, отриману в результаті об’єднань граматик G1 та G2, наступним чином:
· перейменуємо (якщо це потрібно) множини нетерміналів N1 і N2 так, щоб N1∩N2=Æ, та додамо новий нетермінал S;
· об’єднаємо множини правил P1 і P2, додаючи два нових правила S→S1 та S→S2.
Таким чином отримуємо граматику G=(N1ÈN2È{S}, T, P1ÈP2È{S→S1, S→S2}, S), яка складається з усіх правил граматик G1 та G2 з перейменованими множинами нетерміналів так, що N1∩N2=Æ, та з доданих правил S→S1, S→S2. З побудови очевидно, що G породжує всі слова з мов L1 та L2. Доведемо, що вона не породжує інших слів.
Згідно твердження (Лема 4.) перейменування нетерміналів не змінює породжувану мову. Оскільки найпершим правилом у виводі є S→S1 або S→S2, то далі ми продовжуємо вивід або для S1, або для S2, породжуючи слова лише з мови L1 або L2 відповідно. Отже, L належить класу КВ-мов.
Лема 4.14 Клас КВ-мов не замкнений відносно перетину.
Для доведення цього факту достатньо розглянути приклад.
Візьмемо мови L1={anbmcm | n,m³0} та L2={anbncm | n,m³0}. Ці мови є КВ-мови. Однак мова L1∩L2={anbncn| n≥0}= L3 не є КВ-мовою.
Лема 4.15 Клас КВ-мов не замкнений відносно доповнення.
Твердження леми випливає з попередньої леми, оскільки, в силу законів де Моргана, будь-який клас мов, замкнений відносно об’єднання та доповнення, має бути замкненим відносно перетину. Тобто, з припущення замкненості класу КВ-мов відносно доповнення випливає замкненість відносно перетину, що суперечить попередній лемі.
Приклад 4.24 Побудуємо КВ-граматику, яка задає мову, доповнення до якої не буде КВ-мовою.
Ідея побудови випливає з лем 4.14 та 4.15. Візьмемо мову L3={anbncn| n≥0}, яка не є КВ-мовою. Покажемо, що її доповнення – мова є КВ-мовою. Оскільки = = È , то спочатку доведемо, що доповнення мов L1 та L2, тобото мови та , є КВ-мовами. Дійсно, L1, L2 Í a*b*c*. Остання мова є регулярною, тому її доповнення = ({a,b,c}*\ a*b*c*) також є регулярною мовою. Ця мова містить слова, які мають заборонені комбінації двох символів, тобто комбінації, які порушують порядок слідування символів у мовах L1 та L2. Порядок слідування є наступним:
· літера a передує літері b, або літері c;
· літера b передує літері c.
Заперечення цих тверджень дає наступні комбіції: ba, ca, cb. Тому ({a,b,c}*\ a*b*c*)={a,b,c}*ba{a,b,c}*È{a,b,c}*ca{a,b,c}*È{a,b,c}*cb{a,b,c}*. Ця мова задається наступною граматикою:
S®R ba R |R ca R |R cb R
R®e|aR | bR | cR
Отже, ={a,b,c}*\L1=({a,b,c}*\ a*b*c*)È (a*b*c*\L1). Покажемо, що мова (a*b*c*\L1) є КВ-мовою. В ланцюжках цієї мови кількість літер b не співпадає з кількістю літер c. Ця мова задається граматикою:
S®AbBE
S®AEcC
E ®e| bEc
A®e| aA
B®e| bB
C®e| cC
Аналогічно будується граматика другої мови ={a,b,c}*\L2=({a,b,c}*\ a*b*c*)È (a*b*c*\L2), в ланцюжках якої кількість літер a не співпадає з кількістю літер b:
S®Q b B C
S® A aQ C
Q ®e| aQb
A®e| aA
B®e| bB
C®e| cC
Об’єднуючи три граматики (а це можна зробити, бо колізії нетерміналів не відбувається), отримуємо наступну граматику:
S®R ba R |R ca R |R cb R | AbBE | AEcC | Q b B C | A aQ C
R®e|aR | bR | cR
E ®e| bEc
Q ®e| aQb
A®e| aA
B®e| bB
C®e| cC
Ця граматика породжує КВ-мову, але її доповнення не є КВ-мовою. ▄
Розглянемо тепер деякі специфічні операції над мовами, які відповідають більш конкретному рівню абстракції, який трактує ланцюжки як послідовності символів.
Лема 4.16 Клас КВ-мов замкнений відносно конкатенації.
Дійсно, нехай КВ-мови L1 та L2 породжені граматиками G1=(N1, T, P1, S1) та G2=(N2, T, P2, S2) відповідно. Будемо вважати, що N1∩N2=Æ. Візьмемо символ SÏN1ÈN2. Тоді мова L1∙L2={w1w2| w1ÎL1, w2ÎL2} буде породжена КВ-граматикою G=(N1ÈN2È{S}, T, P1ÈP2È{S→S1S2}, S). Це випливає з того, що вивід будь-якого ланцюжка починається з доданого правила S→ S1S2, а далі будується з правил P1 та P2, які виводять лише слова з мов L1 та L2 відповідно.
Лема 4.17 Клас КВ-мов замкнений відносно ітерації.
Дійсно, нехай КВ-мова L породжена граматикою G=(N, T, P, S). Тоді мова L* буде породжена КВ-граматикою G=(NÈ{S¢}, T, PÈ{ S¢→S¢S, S¢→ε}, S¢), де S¢ÏN. Це випливає з того, що вивід будь-якого слова починається з доданого правила S¢→S¢S, що дозволяє породжувати будь-яку кількість ланцюжків з мови L.
Дата добавления: 2019-02-13; просмотров: 240; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!