Малюнок 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 з правилами

          SaSb

          SbSa

          S→e

Застосувавши до цієї граматики описаний метод видалення e-правил, отримаємо граматику G¢ з правилами

SaSb

SbSa

Sab

Sba

яка еквівалентна з точністю до порожнього ланцюжка граматиці G.

4.8.3 Нормальна форма Хомського

Визначення 4.36 Назвемо КВ-граматику G=(N, T, P, S) граматикою у нормальній формі Хомсього, якщо її правила мають вигляд S→e, Aa, ABC для деяких 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.

Видалимо правила вигляду AA1A2An, де n >2, замінюючи його на наступний ряд нових правил AA1N(A2An), N(A2An)→ A2N(A3An), …, N(An-1An)→ An-1An (при цьому додаються нові нетермінальні символи N(A2An), N(A3An), …, N(An-1An)).

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

Нарешті, змінимо S на S¢,  та додамо правила S¢→e, SS¢ в тому випадку, коли мова L(G) містить порожній ланцюжок. 

Приклад 4.21 Граматика  еквівалентна наступній граматиці в нормальній формі Хомського: , , , , .

4.8.4 Нормальна форма Грейбах

Визначення 4.37 КВ-граматику G=(N, T, P, S) будемо називати граматикою в нормальній формі Грейбах, якщо її правила мають вигляд Aaa (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 Розглянемо граматику, множина Р якої складається з наступних правил виведення:

          SAB

       AC

          Aa

          Bb

          CA

Мова, породжена цією граматикою, складається з єдиного ланцюжка ab. Але нетермінали A та C є рекурсивними.

Отже, наведена лема дозволяє сформулювати необхідну умову породження КВ-граматикою нескінчених мов: нескінчена мова може породжуватися лише граматикою з рекурсивними нетерміналами. Але ця умова, як показує приклад, не є достатньою.

Для нескінченних мов має місце наступне твердження.

Лема 4. 10 Нехай граматика G=(N, T, P, S) породжує нескінченну мову. Тоді існує суттєвий рекурсивний нетермінал A такий, що має місце АÞ*t1Аt2, де t1,t2ÎT* та |t1t21.

Ця лема буде використовуватись для доведення властивостей КВ-мов.

 

4.9 Властивості контекстно-вільних мов

В цьому розділі розглянемо властивості КВ-мов, тобто структуру ланцюжків, виразну потужність КВ-мов та їх замкненість відносно операцій над формальними мовами.

Спочатку сформулюємо для КВ-мов аналог твердження (Лема 4.10), яке характеризувало властивості КВ-граматик. 

Лема 4.11 (лема про розростання, лема про накачку). Нехай – КВ-мова над алфавітом T. Тоді знайдеться таке натуральне число k, що для довільного ланцюжка tÎL довжини не менше k знайдуться ланцюжкі u, v, t1, t2, x ÎT*, для яких вірно u t1 x t2 v=t, |t1t21, |t1 x t2k та u t1 i x t2 i vÎL для всіх i=0,1,….

Ідея доведення полягає в тому, що для породження мови  L розглядається граматика у нормальній формі Хомського (нескорочуюча граматика). Тоді для достатньо довгих виводів можна виділити рекурсивний нетермінал A такий, що має місце АÞ*t1Аt2, де t1,t2ÎT* та |t1t21 (дивись попереднью лему). Звідси і буде випливати твердження леми.

 

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 так, щоб N1N2=Æ, та додамо новий нетермінал S;

· об’єднаємо множини правил P1 і P2, додаючи два нових правила SS1 та SS2.

Таким чином отримуємо граматику G=(N1ÈN2È{S}, T, P1ÈP2È{SS1, SS2}, S), яка складається з усіх правил граматик G1 та G2 з перейменованими множинами нетерміналів так, що N1N2=Æ, та з доданих правил SS1, SS2. З побудови очевидно, що G породжує всі слова з мов L1 та L2. Доведемо, що вона не породжує інших слів.

Згідно твердження (Лема 4.) перейменування нетерміналів не змінює породжувану мову. Оскільки найпершим правилом у виводі є SS1 або SS2, то далі ми продовжуємо вивід або для S1, або для S2, породжуючи слова лише з мови L1 або L2 відповідно. Отже, L належить класу КВ-мов.

Лема 4.14 Клас КВ-мов не замкнений відносно перетину.

Для доведення цього факту достатньо розглянути приклад.

Візьмемо мови L1={anbmcm | n,m³0} та L2={anbncm | n,m³0}. Ці мови є КВ-мови. Однак мова L1L2={anbncn| n0}= L3 не є КВ-мовою.

Лема 4.15 Клас КВ-мов не замкнений відносно доповнення.

Твердження леми випливає з попередньої леми, оскільки, в силу законів де Моргана, будь-який клас мов, замкнений відносно об’єднання та доповнення, має бути замкненим відносно перетину. Тобто, з припущення замкненості класу КВ-мов відносно доповнення випливає замкненість відносно перетину, що суперечить попередній лемі.

Приклад 4.24 Побудуємо КВ-граматику, яка задає мову, доповнення до якої не буде КВ-мовою.

Ідея побудови випливає з лем 4.14 та 4.15. Візьмемо мову L3={anbncn| n0}, яка не є КВ-мовою. Покажемо, що її доповнення – мова є КВ-мовою. Оскільки = = È , то спочатку доведемо, що доповнення мов 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) відповідно. Будемо вважати, що N1N2=Æ. Візьмемо символ SÏN1ÈN2. Тоді мова L1L2={w1w2| w1ÎL1, w2ÎL2} буде породжена КВ-граматикою G=(N1ÈN2È{S}, T, P1ÈP2È{SS1S2}, S). Це випливає з того, що вивід будь-якого ланцюжка починається з доданого правила SS1S2, а далі будується з правил 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!