- •М. С. Нікітченко теорія програмування Частина 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
1.3.2. Функції
Аналіз алгебри даних показує, що в мові SIPL можна вирізнити два види функцій: 1) n-арні функції на базових типах даних, 2) функції над станами змінних. Другий вид функцій будемо називати номінативними функціями. Назва пояснюється тим, що вони задані на наборах іменованих даних (латинське nomen – ім’я).
Визначимо тепер наступні класи функцій, які будуть задіяні при визначенні семантики мови SIPL:
n-арні операції над базовими типами:
FNA=Intn Int – n-арні арифметичні функції (операції);
FNB=Booln Bool – n-арні булеві функції (операції);
FNAB=Intn Bool – n-арні функції (операції) порівняння.
Функції над станами змінних
FA=State Int – номінативні арифметичні функції;
FB=State Bool – номінативні предикати;
FS=State State – біномінативні функції–перетворювачі (трансформатори) станів.
Для операцій мови SIPL зазвичай n=2, а для булевої операції заперечення n=1.
Рисунок 1.3. Алгебра даних мови SIPL
1.3.3. Композиції
Нагадаємо, що композиції формалізують методи побудови програм. Аналіз мови SIPL дає підстави говорити про те, що будуть вживатися композиції різних типів, а саме:
композиції, які пов’язані з номінативними функціями та предикатами;
композиції, пов’язані з біномінативними функціями.
Перший клас композицій використовується для побудови семантики арифметичних виразів та умов, другий – операторів.
Цей клас композицій складається із композицій суперпозиції в n-арні функції, які задані на різних основах (класах функцій):
суперпозиція номінативних арифметичних функцій в n-арну арифметичну функцію має тип Sn: FNAFAnFA;
суперпозиція номінативних арифметичних функцій в n-арну функцію порівняння має тип Sn: FNABFAnFB;
суперпозиція номінативних предикатів в n-арну булеву функцію має тип Sn: FNBFBnFB.
Зауваження 1.5. Суперпозиції різного типу позначаємо одним знаком.
Суперпозиція задається формулою
(Sn(f, g1,…,gn ))(st)=f(g1(st),…,gn(st)),
де f – n-арна функція, g1,…,gn – номінативні функції відповідного типу.
Другий клас композицій складається з наступних композицій.
Присвоєння ASx: FA FS (x – параметр).
Присвоєння задається формулою:
ASx (fa)(st)=st [x fa(st)].
Послідовне виконання : FS2FS
Послідовне виконання задається формулою:
(fs1fs2)(st)=fs2(fs1(st)).
Умовний оператор (розгалуження): IF:FBFS2FS. Задається формулою:
Цикл (ітерація з передумовою): WH:FBFSFS. Задається рекурентно (індуктивно) наступним чином:
WH(fb,fs)(st)=stn,
де st0=st, st1=fs(st0), st2=fs(st1),…, stn=fs(stn-1), причому
fb(st0)=true, fb(st1)=true,…, fb(stn-1)=true, fb(stn)=false.
Важливо відзначити, що для циклу наведена послідовність визначається однозначно. Позначимо число n (кількість ітерацій циклу) як NumItWH((fb, fs), st). Однозначність визначення n дозволяє розглядати NumItWH((fb, fs), st) як тернарне відображення, яке залежить від fb, fs, st. Якщо цикл не завершується, то NumItWH((fb, fs), st) вважається невизначеним. Це відображення буде використовуватись в індуктивних доведеннях властивостей циклу.