- •М. С. Нікітченко теорія програмування Частина 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. Теорія рекурсії (теорія найменшої нерухомої точки)
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, яка є коренем рівняння .
y
Рисунок 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 є повною ЧВМ.