
- •М. С. Нікітченко теорія програмування Частина 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. Конструювання похідних -областей
У програмуванні поруч із базовими типами даних часто використовуються похідні (структуровані) дані. Для дослідження рівнянь над похідними даними доречно розглянути побудову похідних -областей з базових областей. Найпростішим методом побудови є об’єднання областей.
Розмічене об’єднання -областей
Не
втрачаючи загальності, розглянемо
випадок двох областей. Нехай D1
та
D2
–
-області.
Будемо індексувати відповідні поняття
наступним чином: D1,
D1,
–
для першої області, D2,
D2,
–
для другої області. Нехай також D1
та
D2
не перетинаються. Будуємо нову множину
D = D1D2{},
де
– новий елемент, що не належить ні D1,
ні D2.
На множині D вводимо частковий порядок наступним чином:
D = D1 D2 {(,)} {(, d1) | d1 D1} {(, d2) | d2 D2}
Інакше кажучи, новий частковий порядок є об’єднанням часткових порядків на D1 та D2, і крім того елемент визначено найменшим елементом в D.
Неважко довести, що колапсу так побудованого відношення часткового порядку не буде. Повнота D відносно порядку D випливає з його розміченості (множини D1 та D2 не перетинаються, тому ланцюг обов’язково складається з елементів однієї множини крім, можливо, ).
Лема 5.3. Розмічене об’єднання -областей є -областю.
Декартовий добуток -областей
Нехай D1 та D2 – -області. Побудуємо -область для D = D1D2.
Задамо частковий порядок на D покоординатно:
(d1, d2)
D (d1, d2)
(d1
D1 d1) & (d2)
D2 d2).
Неважко довести, що так визначене відношення є частковим порядком.
Найменшим елементом D буде елемент (D1, D2).
Доведемо
повноту D
відносно введеного відношення. Нехай
{(d1i, d2i)}i
– ланцюг в D.
З визначення часткового порядку на D
випливає, що
{d1i}i
та {d2i}j
– ланцюги
відповідно в D1
та
D2. З
повноти цих областей випливає, що існують
та
.
Очевидно, що пара (
,
)
є мажорантою елементів ланцюга
{(d1i, d2i)}i.
Можна показати, що ця мажоранта є
найменшою. А це означає, що
=(
,
),
тобто, що D –
повна.
З
наведеного доведення також випливають
наступні співвідношення:
=
та
=
,
де d1D1,
d2D2.
Отже, доведено наступне твердження.
Лема 5.4. Декартовий добуток -областей є -областю.
Лема
5.5. Нехай
D1
та
D2
–
-області.
Тоді відображення
неперервне
тоді і тільки тоді, коли воно неперервне
за кожним аргументом.
Доведення
Необхідність.
Нехай відображення
неперервне
на множині
D =D1D2.
Це означає, що для довільного
ланцюга
з D =
D1D2
маємо, що
.
Щоб
довести неперервність за першим
аргументом розглянемо ланцюг
,
у елементів якого другий компонент
дорівнює
.
Звідси випливає, що
та
.
Використовуючи ці співвідношення, отримуємо, що
.
Аналогічно доводиться неперервність і за другим аргументом.
Достатність. Треба довести, що з неперервності за кожним аргументом випливає неперервність в цілому. Беремо довільний ланцюг і користуючись властивостями супремуму на декартовому добутку та неперервністю за кожним аргументом, отримуємо наступні рівності:
.
■
Класи функцій на -областях. Доведемо, що множина тотальних (всюди визначених) функцій F=[DD] на -області є -областю.
Щоб
відрізняти елементи та відношення на
множинах F
та D будемо
вживати відповідні індекси, позначаючи
частковий порядок на D
як
,
а на F
– як
.
Спочатку визначимо частковий порядок на F=[DD] наступним чином.
Нехай
.
Тоді вважаємо, що
.
Для так введеного бінарного відношення виконуються всі аксіоми часткового порядку: рефлекcивність, транзитивність, антисиметричність.
Дійсно,
оскільки
,
то
(рефлексивність).
Далі,
(
),
тому
(транзитивність).
Нарешті, справедливе співвідношення
(
),
з якого випливає
(антисиметричність).
Тепер
визначимо найменший елемент
.
Тут вираз у квадратних дужках називається
функціональним
конструктором.
Він задає значення функції на кожному
її аргументі. Це означає, що
(
).
Тому для
довільної функції g
з F
маємо, що
.
За визначенням, це означає, що F
g.
Далі
треба продемонструвати повноту F.
Нехай
– ланцюг в F.
Треба довести,
що
F, тобто, що
супремум функцій є функцією.
Спочатку
визначимо нову функцію
.
Наведений функціональний
конструктор
задає значення функції на кожному її
аргументі. Це означає, що
.
Доведемо,
що
(тобто
що
–
найменша з мажорант ланцюга
).
Спочатку доведемо, що – мажоранта множини функцій {
}
. Дійсно, за визначенням f ( ). Звідси випливає, що
(
). Переставляючи універсальні квантори, отримуємо, що .
А
це означає (за визначенням часткового
порядку на F),
що
.
Тобто,
– мажоранта
множини функцій {
}
.
2.
Доведемо тепер, що
– найменша
мажоранта множини функцій
{
}
.
Нехай
– довільна
мажоранта цієї множини. Тоді
.
Це означає, що доведена наступна лема.
Лема
5.6.
Відображення
є супремумом
множини функцій {
}
,
тобто
.
З
доведених властивостей випливає, що
множини неперервних функцій є
-областю.
Отриманий результат можна посилити для
випадку множини функцій
на
-областей
D1
та
D2.
Лема 5.7. Множина функцій, визначених на -областях, є -областю.
Неперервні
функції на
-областях.
Нехай
F=
– клас неперервних тотальних функцій
на
-області
D.
Відношення часткового порядку на
є
обмеженням часткового порядку на множині
функцій
,
оскільки клас
є підкласом класу
.
Залишилося довести, що
– неперервне відображення, і що супремум
неперервних відображень є неперервним
відображенням.
Доведемо
неперервність відображення
,
тобто, що
.
Це означає, що треба довести рівність
для довільного ланцюга
елементів з D.
Дійсно,
.
Лема
5.8.
Якщо
функції
(
)
– неперервні, то функція
–
також неперервна.
Доведення.
За лемою 5.6,
якщо
,
то
.
Щоб довести, що
– неперервна,
треба довести, що
для довільного ланцюга
.
Маємо, що
.
За
лемою 5.2
,
тому
.▄
Це
означає, що клас
є
-областю.
Отриманий результат можна посилити для
випадку множини неперервних функцій
,
заданих на
-областей
D1
та
D2.
Це дозволяє сформулювати наступний
результат.
Лема 5.9. Множина неперервних функцій, заданих на -областях, є -областю.