
- •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. Теорія рекурсії (теорія найменшої нерухомої точки)
5.1 Рекурсивні визначення та рекурсивні рівняння
Рекурсивні визначення – це такі визначення, в правій частині яких використовується посилання на поняття, що визначається. Такі визначення мають вид
.
Рекурсивне визначення можна тлумачити
-
операційно, тобто вказати алгоритм, за яким можна обчислити рекурсивно визначений об’єкт,
-
або денотаційно, тобто як рівняння, розв’язком якого є нерухомі точки (НТ) оператора .
Зауваження 5.1 Тут на (x) ми дивимось синкретично (не розрізнюючи різні аспекти), та тлумачимо (x) або як вираз в певній алгебрі (коли говоримо про рівняння), або як оператор в цій алгебрі (коли говоримо про нерухомі точки оператора).
Зауваження 5.2 Часто також розглядаються системи рівнянь виду
Такі системи зводяться до одного рівняння над послідовністю (x1, x2, . . . , xn).
Історія математики та логіки говорить про необхідність обережного поводження з рекурсією. Розглянемо приклад.
Припустимо, що ми хочемо визначити суму 2+22+23+24+... . Позначимо цю суму через x, тобто x=2+22+23+24+... . Якщо винести 2 з усіх членів суми, крім першого члена, отримаємо наступне рекурсивне визначення: x=2+2x. Звідси x = –2, що зовсім не відповідає очікуванню.
Рекурсія може бути прихованою (неявною). Для ілюстрації розглянемо парадокс Рассела з теорії множин. А саме, множина x називається нормальною, якщо x x. Позначимо через N множину усіх нормальних множин, тобто N ={ x | x x}. Парадокс виявляється, якщо запитати, чи є N нормальною множиною? Отримуємо, що N N тоді і тільки тоді, коли N N. Тут рекурсія виступає неявно, бо в визначенні N (неявно) припускається, що N може бути елементом N.
Наведені приклади говорять про необхідність детального вивчення рекурсії, щоб уникнути некоректностей та парадоксів.
Рекурсія широко використовується в мовах програмування. В таких випадках вона, як правило, визначається операційно, тобто вказується алгоритм, за яким можна обчислити рекурсивну процедуру або функцію.
Традиційні проблеми, що розглядаються для такого роду рівнянь, є проблеми існування та опису всіх можливих розв’язків, зокрема, формулювання умов єдиності розв’язку.
Існують різні методи розв’язку рекурсивних рівнянь. Найчастіше використовують метод послідовних наближень, який полягає у наступному.
Береться
початкове наближення d0.
Далі обчислюється послідовність
наближень
За
результат береться границя обчисленої
послідовності:
.
Зауваження 5.3 В теорії найменших нерухомих точок зазвичай використовується позначення виду i, де – перший нескінченний ординал, тобто ={0, 1, 2, . . .} – множина натуральних чисел.
Метод
послідовних
наближень
графічно представлений на малюнку 5.1.
Наближення
мають границю d,
яка є коренем
рівняння
.
Малюнок 5.1 Розв’язок рівнянь методом послідовних наближень
5.2 Частково впорядковані множини, границі ланцюгів та -області
Для того, щоб метод послідовних наближень міг бути застосований, необхідно задати відношення “наближеності” (це – частковий порядок), початкове наближення (у нашому випадку це буде найменший елемент), та гарантувати існування границі (повнота).
Вказані поняття можна формалізувати наступним чином.
Визначення 5.1
Множина
D
з заданим бінарним відношенням
DD
називається
частково впорядкованою множиною
(ЧВМ), якщо для відношення
виконуються наступні аксіоми часткового
порядку
(d,
d1,d2,d3D):
-
Рефлексивність:
,
-
Транзитивність:
,
-
Антисиметричність:
.
Визначення
5.2 Нехай
– ЧВМ,
– індексована підмножина D.
Ця підмножина – ланцюг,
якщо
.
Для частково впорядкованих множин границею ланцюга вважається точна верхня границя (супремум, найменша мажоранта).
Визначення
5.3
Нехай
–
ланцюг в ЧВМ
.
Границею
X (позначається
lim
X
= sup
X
=
X
=
)
називається
точна верхня границя (супремум, найменша
мажоранта) множини X,
якщо вона існує.
В
теорії рекурсії зазвичай використовується
позначення
,
або
idi
, або
{di
| i},
або
X.
Останнім позначенням і будемо користуватися
у подальшому.
Визначення
5.4
ЧВМ
– повна, якщо
для довільного ланцюга
з D
існує його границя
(що
належить D).
Інтегруючи
наведені визначення, отримуємо поняття
-області.
Визначення
5.5
Множина D
–
-область
(також вживається термін індуктивна
множина,
-домен),
якщо
-
на D введено частковий порядок
,
-
в D існує найменший елемент
,
-
D є повною ЧВМ.