Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
NikitchenkoNEWNEW.doc
Скачиваний:
30
Добавлен:
08.11.2019
Размер:
2.99 Mб
Скачать

4.5. Приклад породжуючої граматики та її властивості

Розглянемо на прикладі основні визначення та методи доведення властивостей граматик та породжуваних мов.

Нехай задана граматика G3=({S,B}, {a,b,c}, P, S), де

P={

P1: SaBSc,

P2: S  ,

P3: BaaB,

P4: BbbB,

P5: Bcbc

}

Тут P1, P2, P3, P4, P5 – мітки відповідних правил.

Щоб зрозуміти, яку мову породжує ця граматика, побудуємо декілька виводів. Будемо використовувати розмічені виводи. Маємо:

  1. S .

  2. S aBSc aBc abc.

  3. S aBSc aBaBScc aBaBcc aaBBcc aaBbcc aabBcc aabbcc.

  4. S aBSc aBaBScc aBaBaBSccc aBaaBBSccc aaBaBBSccc aaaBBBSccc aaaBBBccc aaaBBbccc aaaBbBccc aaabBBccc aaabBbccc aaabbBccc aaabbbccc

Отже, в цих виводах породжено ланцюжки , abc, aabbcc, aaabbbccc. Це дозволяє висунути припущення, що граматика G3 породжує мову L3={anbncn | n0}. Доведемо, що це дійсно так.

Теорема 4.1. L(G3)={anbncn | n0}.

Спочатку доведемо, що L(G3){anbncn | n0}. Це доведення базується на наступній лемі, ідея якої полягає в тому, щоб сформулювати загальний вигляд ланцюжків в об’єднаному алфавіті, що виводяться в G3 (загальний вигляд словоформ).

Лема 4.1. Нехай S*G3  ((NT)*). Тоді існує n0 таке, що

  1. =cn , де {a,B}*, =S або {b,B}*;

  2. ||a=||c=||{b,B}= n.

Доведення леми: індукція по довжині виводу.

База індукції. Для виводу довжини 0 маємо, що n=0, =S. Значить,  має вигляд c0 (=, =S, c0=) і тому ||a=||c=||{b,B}=0. Лема виконується.

Крок індукції. Нехай лема виконується для усіх виводів довжини k0. Доведемо, що вона виконується для виводів довжини k+1.

Візьмемо довільний вивід SG31G3 ... G3kG3k+1. Особливість виводів полягає в тому, що початкова послідовність SG31G3... G3k буде виводом довжини k, і тому за індуктивним припущенням для k виконується твердження леми. Інакше кажучи, є деяке n0, таке що k=cn та |k|a=|k|c=|k|{b,B}=n. Безпосередній вивід kG3k+1 здійснюється за допомогою одного з правил P1, P2, P3, P4, P5. Розглянемо ці правила по черзі.

  1. Нехай вивід kG3k+1 відбувся із застосуванням правила P1, тобто k G3k+1. Тоді k має вигляд Scn ({a,B}*), а k+1=aBScn+1. Тому k+1 має вигляд Scn+1 ({a,B}*), як того вимагає лема, і крім того, |k+1|a=|k+1|c=|k+1|{b,B}= n+1. Для цього випадку лему доведено.

  2. Нехай вивід kG3k+1 відбувся застосуванням правила P2, тобто k G3 k+1. Тоді k має вигляд Scn ({a,B}*), а k+1=cn. Тому k+1 можна подати у вигляді cn (=), як того вимагає лема, і крім того, |k+1|a=|k+1|c=|k+1|{b,B}= n. Для цього випадку лему доведено.

  3. Нехай вивід kG3k+1 відбувся застосуванням правила P3. Оскільки k має загальний вигляд cn, то правило P3 може бути застосовано лише для підланцюжка . Це правило не змінює ані загального вигляду k+1, ані кількості символів, тому |k+1|a=|k+1|c=|k+1|{b,B}= n. Для цього випадку лему доведено.

  4. Нехай вивід kG3k+1 відбувся застосуванням правила P4. Оскільки k має загальний вигляд cn, то правило P4 може бути застосоване лише для підланцюжка  (хоча можливо замінюване B є останнім символом ). Застосування правила не змінює ані загального вигляду k+1, ані кількості символів, тому |k+1|a=|k+1|c=|k+1|{b,B}= n. Для цього випадку лему доведено.

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

Лему доведено.

Нехай тепер S*G3t (tT*). Оскільки t – ланцюжок в термінальному алфавіті, то він не містить нетерміналів, і за твердженням леми існує n0 таке, що t=cn, де a*, b* та|t|a=|t|c=|t|b=n. Звідси випливає, що t=anbncn. Інакше кажучи, будь який термінальний ланцюжок, що виводиться в G3, належить мові L3, тобто L(G3)L3.

Доведемо тепер зворотне включення, тобто L3L(G3).

Для цього продемонструємо, як побудувати вивід ланцюжка anbncn для довільного n. Використовуємо індукцію за n.

База індукції. Ланцюжок anbncn (=) отримуємо виводом S .

Крок індукції. Нехай існує вивід слова anbncn (n0), тобто S*G3 anbncn. Доведемо, що існує вивід слова an+1bn+1cn+1, тобто S*G3 an+1bn+1cn+1.

Відповідний вивід будуємо наступним чином. Спочатку до аксіоми застосуємо перше правило, а потім зробимо вивід слова anbncn. Отримали наступний вивід: S aBSc*G3aBanbncnc. Далі n разів застосовуємо правило P3. Отримали ланцюжок aanBbncnc(=an+1Bbncn+1). Після цього n разів застосовуємо правило P4. Отримали ланцюжок an+1bnBcn+1. Нарешті, застосуванням правила P5 отримуємо ланцюжок an+1bn+1cn+1.

Теорему 4.1 доведено.

Наступним кроком у вивченні породжуючих граматик буде їх класифікація.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]