- •М. С. Нікітченко теорія програмування Частина 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
5.6 Властивості оператора найменшої нерухомої точки
Операцію взяття нерухомої точки можна трактувати як оператор , де – множина неперервних відображень. Доведемо, що оператор lfp – неперервний. Але спочатку покажемо, що він – монотонний.
Лема 5.10. Відображення – монотонне відображення, тобто для .
Доведення. Нехай . Розглянемо наступні співвідношення:
|
D |
|
|
g( ) |
D |
h( ) |
(Умова ) |
g(g( )) |
D |
g(h( ))D h(h( )) |
(Монотонність g та умова ) |
… |
… |
… |
… |
g(k)( ) |
D |
…D g(k-m)(h(m) ( ))…D h(k) ( ) |
(Монотонність g та умова ) |
… |
… |
… |
… |
|
D |
|
|
Оскільки lfp(g)= та lfp(h)= , то .▄
Теорема 5.3 (неперервність lfp). Якщо – -область, то відображення - неперервне, тобто .
Доведення. Неперервність означає, що для довільного ланцюга має виконуватись співвідношення
.
Спочатку доведемо, що . Оскільки , то за лемою 5.10 для довільного , а отже .
Тепер доведемо, що . Для цього покажемо, що – нерухома точка для (тобто, ). Дійсно
.Позначимо , . Неважко довести, що засновки леми 5.2 виконуються, тому
= .
Оскільки – найменша нерухома точка, то вона менша за будь-яку нерухому точку для . Тому .
Отже ми довели, що . ▄
Таким чином, досліджено основні властивості оператора найменшої нерухомої точки, який може вважатися одним із уточнень рекурсії.
5.7. Застосування теорії ннт
Найважливішими способами визначення нескінченних об’єктів (множин, послідовностей, функцій і таке інше), є рекурентні, індуктивні та рекурсивні способи. Оскільки перші два способи є частковими випадками рекурсії, то звідси випливає важливість теорії найменшої нерухомої точки (ННТ), як одного із способів уточнення рекурсії, в різних застосуваннях. Тут ми розглянемо застосування ННТ для уточнення синтаксису та семантики мов програмування.
5.7.1. Уточнення синтаксису мов програмування
Синтаксис мов програмування переважно задається за допомогою БНФ, граматик та інших подібних формалізмів. Сама структура правил БНФ говорить про можливість застосування теорії ННТ для уточнення формальних мов, що задаються БНФ.
У попередньому розділі було розглянуто приклад подання породжуючої граматики як системи рівнянь.
Так, правила задають мову, яка є розв’язком рівняння . Але для того, щоб стверджувати існування розв’язку, необхідно дослідити область, на якій задаються такі рівняння.
Розглянемо слабку алгебру формальних мов, в якій задано наведене рівняння (відображення ):
, де
– множина мов, та – операції об’єднання та конкатенації.
Достатніми умовами існування розв’язків рекурсивних рівнянь в алгебрах наведеного типу є умови для множини бути -областю, та для операцій об’єднання та конкатенації буди неперервними. Доведемо виконання цих умов.
Лема 5.11. Множина – -область
Доведення. Щоб множина була -областю треба визначити на ній частковий порядок та показати його повноту та вказати найменший елемент.
Для множини частковим порядком буде включення, порожня множина буде найменшим елементом, а об’єднання множин буде супремумом, тобто є така відповідність:
1) –
2) –
3) –
Очевидно, що всі необхідні умови -області виконуються для так введеного часткового порядку. ▄
Лема 5.12. Операції об’єднання та конкатенації – -неперервні.
Доведення. Розглянемо операцію об’єднання . Згідно леми 5.5 досить довести неперервність об’єднання за кожним аргументом. Не обмежуючи загальності, доведемо неперервність за першим аргументом.
Нехай – ланцюг з множини , , . За визначенням, . Щоб довести неперервність, треба показати, що . Дійсно, для довільного елемента x маємо:
.
Отже, – неперервна операція.
Розглянемо тепер операцію . За визначенням,
.
Доведемо, що . Маємо, що
.
Отже, операція також неперервна. ▄
Таким чином, множина формальних мов над певним алфавітом є -областю, а операції слабкої алгебри формальних мов – неперервними. Похідні операції також будуть неперервними. Тому рекурсивні визначення (рівняння) над цією алгеброю завжди мають найменший розв’язок. Цей розв’язок, за теоремою КТК, можна знайти методом послідовних наближень.
Доведемо, що якщо за КВ-граматикою побудувати відповідну систему рекурсивних визначень, то розв’язок цієї системи співпаде з мовою, породженою граматикою.
Отже, нехай G = (N, Т, Р, S) – КВ-граматика, (NT)*. Задамо відображення s:(NT)(N2T), вважаючи, що s(A)=A, AN, та s(a)={a}, aT. Це відображення розповсюджуємо на послідовності символів з алфавіту (NT), вважаючи, що s(x1x2…xn)=s(x1)s(x2)…s(xn). Тепер маємо, що s:(NT)*(N2T)*. Сукупність усіх правил A1,A2,…, Ak з граматики G з одним і тим же нетерміналом у лівій частині замінюємо на рекурсивне визначення A= s(1)s(2)…s(k). Такі визначення будуємо для всіх нетерміналів. Отриману систему рекурсивних визначень над слабкою алгеброю формальних мов позначимо E(G). Відображення, що задається правими частинами цієї системи позначимо G, його складову за нетерміналом A позначимо A, а найменшу нерухому точку цього відображення за змінною (нетерміналом) S позначимо lfpS(G).
Приклад 5.1. Для граматики G = ({S, A, B, C, D}, {a, b, c), P, S), де P складається з наступних правил:
SAB | CD |
A| aA
B| bBc
C| aCb
D| cD,
отримуємо наступну систему рекурсивних визначень:
|
S=AB CD {} A={} {a}A B={} {b}B{c} C={} {a}C{b} D={} {c}D.
|
Доведемо тепер, що мова, породжена КВ-граматикою, співпадає з найменшим розв’язком системи рекурсивних визначень (рівнянь), побудованих за цією граматикою.
Теорема 5.4. Для КВ-граматики G = (N, Т, Р, S)
L(G)= lfpS(G).
Доведення. Нехай L(k)A(G) – множина термінальних ланцюжків породжених з нетермінала A деревами виводу глибини не більше k. Індукцією за k доводимо, що
L(k)A(G)=(k)A().
Дійсно, для виводів довжини 0 маємо, що L(0)A(G)= та (0)A()==.
Припускаючи, що індуктивна гіпотеза вірна для k, доведемо її справедливість для k+1. Дійсно, мова L(k+1)A(G) складається з термінальних ланцюжків t, які виводяться з A деревами виводу глибини не більше k+1. Такі дерева породжуються деяким правилом Ax1x2…xnP, а виводи з нетермінальних символів з x1, x2, …, xn мають глибину не більшу k. Термінальні ланцюжки, що породжуються з таких нетерміналів x входять у мову (k)x(). З побудови (k+1)A() випливає, що ланцюжок t буде належати цій мові. Також є вірним і зворотне: якщо t(k+1)A(), то tL(k+1)A(G). Індуктивна гіпотеза доведена. Звідси випливає справедливість теореми. ▄
Таким чином, для подання формальних мов можна використовувати формалізм рекурсивних визначень та теорію ННТ. Правда, цей формалізм є більш потужним, якщо допускається використання нескінченних мов у визначеннях. Разом з тим неважко довести, що для слабко рекурсивних визначень (із скінченними мовами у визначеннях), найменшими розв’язками будуть лише КВ-мови.
Вибір формалізму подання синтаксису залежить від способу його використання (від прагматики).
Тепер розглянемо використання теорії ННТ для подання семантики мов програмування.