
- •2.3 Розвиток основних понять програмування 53
- •1. Формалізація простої мови програмування
- •1.1 Неформальний опис простої мови програмування
- •1.2 Формальний опис синтаксису мови sipl
- •Малюнок 1.1. Дерево синтаксичного виводу програми gcd
- •1.3 Формальний опис семантики мови sipl
- •Малюнок 1.3. Алгебра даних мови sipl
- •1.3.2 Функції
- •1.3.3 Композиції
- •1.3.4 Програмні алгебри
- •Малюнок 1.4. Алгебра функцій (програмна алгебра)
- •1.3.5 Визначення семантичних термів
- •1.3.6 Побудова семантичного терму програми
- •1.3.7 Обчислення значень семантичних термів
- •1.3.8 Загальна схема формалізації мови sipl
- •Малюнок 1.5 Схема визначення композиційної семантики
- •1.4 Властивості програмної алгебри
- •2. Розвиток основних понять програмування
- •2.1 Аналіз словникових визначень поняття програми
- •2.2 Розвиток поняття програми з гносеологічної точки зору
- •2.3 Розвиток основних понять програмування
- •2.3.1 Початкова тріада понять програмування
- •Малюнок 2.2. Сфера інформатизації як особлива сфера суспільства
- •Малюнок 2.3. Тріада цільового призначення програм
- •2.3.2 Тріада прагматичності програм
- •Малюнок 2.4. Тріада прагматичності програм
- •2.3.3 Тріада основних понять програмування
- •Малюнок 2.5. Тріада основних понять програмування
- •2.3.4 Пентада основних понять програмування
- •Малюнок 2.6. Пентада основних понять програмування
- •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.3 Породжуючі граматики
- •4.5 Ієрархія граматик Хомського
- •4.6 Автоматні формалізми сприйняття мов
- •4.6.1 Машини Тьюрінга
- •4.6.2 Еквівалентність машин Тьюрінга та породжуючих граматик
- •4.6.3 Лінійно-обмежені автомати
- •4.6.4 Магазинні автомати
- •4.6.5 Скінченні автомати
- •4.7 Методи подання синтаксису мов програмування
- •4.7.1 Нормальні форми Бекуса–Наура
- •4.7.2 Модифіковані нормальні форми Бекуса–Наура
- •4.7.3 Синтаксичні діаграми
- •4.8 Властивості контекстно-вільних граматик
- •4.8.1 Видалення несуттєвих символів
- •4.8.2 Видалення -правил
- •4.8.3 Нормальна форма Хомського
- •4.8.4 Нормальна форма Грейбах
- •4.8.5 Рекурсивні нетермінали
- •4.9 Властивості контекстно-вільних мов
- •4.10 Операції над формальними мовами
- •4.11 Дерева виводу
- •4.12 Однозначні та неоднозначні граматики
- •4.13 Розв’язні та нерозв’язні проблеми кв-граматик та мов
- •4.14 Рівняння в алгебрах формальних мов
- •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( |
(Монотонність
g
та умова
|
… |
… |
… |
… |
g(k)( |
D |
…D
g(k-m)(h(m)
( |
(Монотонність
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). Індуктивна гіпотеза доведена. Звідси випливає справедливість теореми.▄
Таким чином, для подання формальних мов можна використовувати формалізм рекурсивних визначень та теорію ННТ. Правда, цей формалізм є більш потужним, якщо допускається використання нескінченних мов у визначеннях. Разом з тим, неважко довести, що для слабко рекурсивних визначень (із скінченними мовами у визначеннях), найменшими розв’язками будуть лише КВ-мови.
Вибір формалізму подання синтаксису залежить від способу його використання (від прагматики).
Тепер розглянемо використання теорії ННТ для подання семантики мов програмування.