- •М. С. Нікітченко теорія програмування Частина 1
- •1. Формалізація простої мови програмування
- •1.1. Неформальний опис простої мови програмування
- •1.2. Формальний опис синтаксису мови sipl
- •1.3. Формальний опис семантики мови sipl
- •1.3.2. Функції
- •1.3.3. Композиції
- •1.3.4. Програмні алгебри
- •1.3.5. Визначення семантичних термів
- •1.3.6. Побудова семантичного терму програми
- •1.3.7. Обчислення значень семантичних термів
- •1.3.8. Загальна схема формалізації мови sipl
- •1.4. Властивості програмної алгебри
- •2. Розвиток основних понять програмування
- •2.1. Аналіз словникових визначень поняття програми
- •2.2. Розвиток поняття програми з гносеологічної точки зору
- •2.3. Розвиток основних понять програмування
- •2.3.1 Початкова тріада понять програмування
- •2.3.2. Тріада прагматичності програм
- •2.3.3. Тріада основних понять програмування
- •2.3.4. Пентада основних понять програмування
- •2.4. Розвиток основних програмних понять
- •2.4.1. Тріада основних програмних понять
- •Малюнок 2.7. Програма як діалектичне заперечення проблеми
- •2.4.2. Пентада основних програмних понять
- •2.5. Сутнісні та семіотичні аспекти програм
- •2.6. Програми і мови
- •2.7. Пентада програмних понять процесного типу
- •3. Формалізація програмних понять
- •3.1. Теоретико-функціональна формалізація
- •3.2. Класи функцій
- •3.3. Програмні системи
- •3.4. Рівні конкретизації програмних систем
- •4. Синтактика: формальні мови та граматики
- •4.1. Розвиток понять формальної мови та породжуючої граматики
- •4.2. Визначення основних понять формальних мов
- •4.3. Операції над формальними мовами
- •4.4. Породжуючі граматики
- •4.5. Приклад породжуючої граматики та її властивості
- •4.6. Ієрархія граматик Хомського
- •4.7. Автоматні формалізми сприйняття мов
- •4.7.1. Машини Тьюрінга
- •4.7.2. Еквівалентність машин Тьюрінга та породжуючих граматик
- •4.7.3. Лінійно-обмежені автомати
- •4.7.4. Магазинні автомати
- •4.7.5. Скінченні автомати
- •4.8. Методи подання синтаксису мов програмування
- •4.8.1. Нормальні форми Бекуса–Наура
- •4.8.2. Модифіковані нормальні форми Бекуса–Наура
- •4.8.3. Синтаксичні діаграми
- •4.9. Властивості контекстно-вільних граматик
- •4.9.1. Видалення несуттєвих символів
- •4.9.2. Видалення -правил
- •4.9.3. Нормальна форма Хомського
- •4.9.4. Нормальна форма Грейбах
- •4.9.5. Рекурсивні нетермінали
- •4.10. Властивості контекстно-вільних мов
- •4.11. Операції над формальними мовами
- •4.12. Дерева виводу
- •4.13. Однозначні та неоднозначні граматики
- •4.14. Розв’язні та нерозв’язні проблеми кв-граматик та мов
- •4.15. Рівняння в алгебрах формальних мов
- •5. Теорія рекурсії (теорія найменшої нерухомої точки)
- •5.1. Рекурсивні визначення та рекурсивні рівняння
- •5.2. Частково впорядковані множини, границі ланцюгів та -області
- •5.3. Неперервні відображення
- •5.4. Теореми про нерухомі точки
- •5.5. Конструювання похідних -областей
- •5.6 Властивості оператора найменшої нерухомої точки
- •5.7. Застосування теорії ннт
- •5.7.1. Уточнення синтаксису мов програмування
- •5.7.2. Семантика мов програмування
- •5.7.3. Рекурсивні розширення мови sipl
4.7.2. Еквівалентність машин Тьюрінга та породжуючих граматик
Наведений у попередньому прикладі протокол машини Тьюрінга підказує ідею побудови породжуючої граматики за програмою машини. Таку побудову зробимо в два етапи: спочатку за програмою побудуємо продукції переходу (перетворення) конфігурацій машини Тьюрінга, потім зробимо обернення побудованих продукцій та додамо правило для аксіоми та правила породження і видалення порожніх символів. Отримана породжуюча граматика буде еквівалентна вибраній машині Тьюрінга.
Кожна команда машини Тьюрінга породжує наступні правила перетворення конфігурацій:
Команда виду qapbR породжує правило qabp.
Команда виду qapbL породжує множину правил перетворення { cqapcb | сA}.
Команда виду qapb породжує правило qapb.
На другому етапі побудови обернемо отримані правила (перетворення виду α→β замінимо на правило породжуючої граматики β→α), додамо правило для аксіоми S#qF#. Враховуючи, що за таких побудованих простих правилах можуть бути зайві #, переведемо їх в пустий ланцюжок правилом #, або створимо у разі необхідності додаткові порожні символи # правилом ###. Нарешті, потрібно буде видалити початковий стан, щоб отримати (породити) початковий ланцюжок правилом q0.
Таким чином, буде створена граматика GM=(N,T, P, S), яка має наступні параметри:
N={S}Q{#} (S Q{#}).
T=A\{#}.
SN.
P будується за вказаним вище алгоритмом.
Продемонструємо наведений алгоритм прикладом.
Приклад 4.15. Візьмемо машину Тьюрінга, запропоновану в попередньому прикладі, та побудуємо еквівалентну їй граматику. Отримаємо граматику GM =({ S, q0, qa, q-a, qb, q-b, qL, qF, #}, {a, b}, P, S).
Потрібні перетворення команд наведено в таблиці, третій стовпчик якої задає продукції P.
Таблиця 4.1
Команди машини Тьюрінга |
Правила перетворення конфігурацій |
Продукції породжуючої граматики |
|
#q-bbqL##;
|
0. S #qF# 0#. # ##
|
Правила, отримані перетворенням команди з номером n (n=6, 10, 11, 12), будемо далі нумерувати як n(1), n(2), n(3).
Продемонструємо коректність правил виводу для породження ланцюжка abba (індекси вказують на застосоване правило):
S0#qF#14#q0#13#qL#0##qL##10(3) ##q-bb#16#q-bb#9#bqb#8 #qbb#0###q0b#13#qL#bb#12(3)##qLbb#16#qLbb#12(2) #bqLb#0#
#bqLb##6(2) #bbq-aa#5#bbaqa#3#bbqaa#4#bqaba#4#qabba#1
#q0abba#16 q0abba#16 q0abba.
Зауважимо, що в процесі виводу застосовувались правила породження та знищення порожнього символу #.
Наведені вище міркування та приклад дозволяють сформулювати наступне твердження.
Теорема 4.3. За кожною машиною Тьюрінга M можна побудувати еквівалентну їх породжуючу граматику G, що породжує ту ж мову, яку сприймає M, тобто: LT(M)=L(G).
Ця теорема може бути обернена.
Теорема 4.4. За кожною породжуючою граматикою G можна побудувати еквівалентну їх машину Тьюрінга M, що сприймає ту ж мову, яку породжує G, тобто: LT(M)=L(G).
Доведення може бути конструктивним, коли машиною Тьюрінга моделюється зворотній до породження процес сприйняття ланцюжка, або можна скористатися тезою Чорча, що стверджує існування машини Тьюрінга для формального подання інтуїтивних алгоритмів. Тут деталі такої побудови описувати не будемо.
З наведених теорем випливає, що граматики типу 0 породжують усі рекурсивно-зліченні множини (мови) в алфавіті A. Тим самим клас породжуючих граматик має таку ж виразну потужність, як і інші універсальні моделі алгоритмів.
Відзначимо, що є різні варіанти машин Тьюрінга, наприклад, машини з різною кількістю стрічок, з різними обмеженнями на команди. Зокрема, виділяють детерміновані (не існує команд з однаковими лівими частинами та різними правими частинами), та недетерміновані машини Тьюрінга (існують команди з однаковими лівими частинами та різними правими частинами). Клас формальних мов, що сприймаються машинами Тьюрінга, є однаковий для детермінованих та недетермінованих машин, та для машин з різною кількістю стрічок.