- •Затверджено Вченою радою факультету кібернетики Протокол № __ від __ ______ 2010 р.
- •1. Синтаксис та семантика. Мова sipl. Композиційна семантика
- •1.1. Синтаксис мови sipl
- •1.2. Композиційна семантика мови sipl
- •1.2.2. Функції
- •1.2.3. Композиції
- •1.2.4. Програмні алгебри
- •1.3. Побудова семантичного терму програми
- •1.4. Доведення коректності програм
- •1.5. Розв’язки типових задач
- •1.6. Розширення мови sipl: Введення булевих змінних
- •1.7. Приклади розв’язків задач.
- •1.8. Розширення мови sipl: Введення викликів функцій
- •1.9. Приклади задач
- •1.10. Завдання для самостійної роботи
- •1.11. Приклади завдань для контрольної роботи.
- •Тема 2. Формальні мови та граматики
- •2.1. Побудова мови за допомогою системи рівнянь з регулярними коефіцієнтами
- •2.2. Завдання для самостійної та контрольної роботи
- •2.3. Нормальні форми Хомського та Грейбах
- •2.4. Завдання для самостійної та контрольної роботи
- •Тема 3. Рекурсія та найменша нерухома точка. Неперервність операторів
- •Тема 4. Натуральна семантика
- •Тема 5. Аксіоматична семантика
- •Література
1.7. Приклади розв’язків задач.
Припустимо, що у SIPL введено лише базові необхідні предикати: , , . Виразимо решту предикатів , =, >, , <, через базові: у змінну res записати результат обчислення відповідного предикату над значеннями вхідних змінних A та B.
Завдання 1.7. Розписати через і .
begin
if then res:=true
else res:=false
end
Побудуємо дерево виводу:
Побудуємо семантичний терм:
Sem_P(P)=Sem_S(if then res:=true else res:=false)=IF(S1(neg,S2(or,S1(neg,A=>),S1(neg,B=>))),ASres( ), ASres( ))
Доведемо часткову коректність:
Маємо початкове дане d=[A ,B ].
Sem_P(P)(d)= IF(S1(neg,S2(or,S1(neg,A=>),S1(neg,B=>))),ASres( ), ASres( ))(d)=
= =
= =
=
=
=
Часткову коректність доведено.
Програма не має циклів, тому вона завершується. А оскільки часткова коректність доведена, то маємо тотальну коректність.
Завдання 1.8. Розписати = через ≤
begin
if then res:=true
else res:=false
end
Побудуємо дерево виводу:
Побудуємо семантичний терм:
Sem_P(P)=Sem_S(if then res:=true else res:=false)=
=IF(S2(and,S2(leq,X=>, Y=>),S2(leq, Y=>, X=>)),ASres( ), ASres( ))
Доведемо часткову коректність:
d=[X ,Y ]
Sem_P(P)(d)=
=IF(S2(and,S2(leq,X=>, Y=>),S2(leq, Y=>, X=>)),ASres( ), ASres( ))(d)=
= =
= =
=
=
Часткову коректність доведено.
Програма не має циклів, тому вона завершується. А оскільки часткова коректність доведена, то маємо тотальну коректність.
Завдання 1.9. Розписати >
begin
if then res:=true
else res:=false
end
Побудуємо семантичний терм:
Sem_P(P)=Sem_S(if then res:=true else res:=false)=
=IF(S1(neg,S2(leq,X=>, Y=>)),ASres( ), ASres( ))
Доведемо часткову коректність:
d=[X ,Y ]
Sem_P(P)(d)=IF(S1(neg,S2(leq,X=>, Y=>)),ASres( ), ASres( ))(d)=
= =
= =
= =
=
Часткову коректність доведено.
Програма не має циклів, тому вона завершується. А оскільки часткова коректність доведена, то маємо тотальну коректність.
Завдання 1.10. Розписати ≠
begin
if then res:=true
else res:=false
end
Побудуємо семантичний терм:
Sem_P(P)=Sem_S(if then res:=true else res:=false)=
=IF(S1(neg,S2(eq,X=>, Y=>)),ASres( ), ASres( ))
Доведемо часткову коректність:
d=[X ,Y ]
Sem_P(P)(d)=IF(S1(neg,S2(eq,X=>, Y=>)),ASres( ), ASres( ))(d)=
= =
= =
= =
=
Часткову коректність доведено.
Програма не має циклів, тому вона завершується. А оскільки часткова коректність доведена, то маємо тотальну коректність.
Завдання 1.11. Розписати <
begin
if then res:=true
else res:=false
end
Побудуємо семантичний терм:
Sem_P(P)=Sem_S(if then res:=true else res:=false)=
=IF(S2(and,S2(leq,X=>, Y=>),S2(neq, X=>, Y=>)),ASres( ), ASres( ))
Доведемо часткову коректність:
d=[X ,Y ]
Sem_P(P)(d)=
=IF(S2(and,S2(leq,X=>, Y=>),S2(neq, X=>, Y=>)),ASres( ), ASres( ))(d)=
= =
= =
= =
=
Часткову коректність доведено.
Програма не має циклів, тому вона завершується. А оскільки часткова коректність доведена, то маємо тотальну коректність.
Завдання 1.12. Розписати ≥
begin
if then res:=true
else res:=false
end
Побудуємо семантичний терм:
Sem_P(P)=Sem_S(if then res:=true else res:=false)=
=IF(S2(or,S2(gr,X=>, Y=>),S2(eq, X=>, Y=>)),ASres( ), ASres( ))
Доведемо часткову коректність:
d=[X ,Y ]
Sem_P(P)(d)=IF(S2(or,S2(gr,X=>, Y=>),S2(eq, X=>, Y=>)),ASres( ), ASres( ))(d)=
= =
= =
= =
=
Часткову коректність доведено.
Програма не має циклів, тому вона завершується. А оскільки часткова коректність доведена, то маємо тотальну коректність.