
- •Введение
- •1 Схемы программ
- •1.1 Предварительные математические сведения
- •1.1.1 Функции и графы
- •1.1.2 Вычислимость и разрешимость
- •1.1.3 Программы и схемы программ
- •1.2 Стандартные схемы программ
- •1.2.1 Базис класса стандартных схем программ
- •1.2.2 Графовая форма стандартной схемы
- •1.2.3 Линейная форма стандартной схемы
- •1.2.4 Интерпретация стандартных схем программ
- •1.3 Свойства и виды стандартных схем программ
- •1.3.1 Эквивалентность, тотальность, пустота, свобода
- •1.3.2 Свободные интерпретации
- •1.3.3 Согласованные свободные интерпретации
- •1.3.4 Логико-термальная эквивалентность
- •1.4 Моделирование стандартных схем программ
- •1.4.1 Одноленточные автоматы
- •1.4.2 Многоленточные автоматы
- •1.4.3 Двухголовочные автоматы
- •1.4.4 Двоичный двухголовочный автомат
- •1.5 Рекурсивные схемы
- •1.5.1 Рекурсивное программирование
- •1.5.2 Определение рекурсивной схемы
- •1.6 Трансляция схем программ
- •1.6.1 О сравнении класс сов схем.
- •1.6.2 Схемы с процедурами
- •1.7 Обогащенные и структурированные схемы
- •1.7.1 Классы обогащенных схем
- •1.7.2 Трансляция обогащенных схем
- •1.7.3 Структурированные схемы
- •Контрольные вопросы
- •2 Семантическая теория программ
- •2.1 Описание смысла программ
- •2.2 Операционная семантика
- •2.3 Аксиоматическая семантика
- •2.3.1 Преобразователь предикатов.
- •2.3.2 Аксиоматическое определение операторов языка программирования
- •2.4 Денотационная семантика
- •2.5 Декларативная семантика
- •2.6 Языки формальной спецификации
- •2.7 Верификация программ
- •2.7.1 Методы доказательства правильности программ
- •2.7.2 Использование утверждений в программах
- •2.7.3 Правила верификации К. Хоара
- •Контрольные вопросы
- •3 Теоретические модели вычислительных процессов
- •3.1 Взаимодействующие последовательные процессы
- •3.1.1 Базовые определения
- •3.1.2 Законы взаимодействия последовательных процессов
- •3.1.3 Реализация процессов
- •3.1.4 Протоколы поведения процесса
- •3.1.5 Операции над протоколами
- •3.1.6 Протоколы процесса
- •3.1.7 Спецификации
- •3.2 Параллельные процессы
- •3.2.1 Взаимодействие процессов
- •3.2.2 Параллелизм
- •3.2.3 Задача об обедающих философах
- •3.2.4 Помеченные процессы
- •3.2.5 Множественная пометка
- •3.3 Взаимодействие – обмен сообщениями
- •3.3.1 Ввод и вывод
- •3.3.2 Взаимодействия
- •3.3.3 Подчинение
- •3.4 Разделяемые ресурсы
- •3.4.1 Поочередное использование
- •3.4.2 Общая память
- •3.4.3 Кратные ресурсы
- •3.4.4 Планирование ресурсов
- •3.5 Программирование параллельных вычислений
- •3.5.1 Основные понятия
- •3.5.2 Многопоточная обработка
- •3.5.3 Условные критические участки
- •3.5.4. Мониторы
- •3.6 Модели параллельных вычислений
- •3.6.1 Процесс/канал
- •3.6.2 Обмен сообщениями
- •3.6.3 Параллелизм данных
- •3.6.4 Общей памяти
- •Контрольные вопросы
- •4 Моделирование взаимодейстия процессов. Сети Петри
- •4.1 Введение в сети Петри
- •4.2 Основные определения
- •4.2.1 Теоретико-множественное определение сетей Петри
- •4.2.2 Графы сетей Петри
- •4.2.3 Маркировка сетей Петри
- •4.2.4 Правила выполнения сетей Петри
- •4.3 Моделирование систем на основе сетей Петри
- •4.3.1 События и условия
- •4.3.2 Одновременность и конфликт
- •4.4 Моделирование параллельных систем взаимодействующих процессов
- •4.4.1. Моделирование последовательных процессов
- •4.4.2 Моделирование взаимодействия процессов
- •4.4.3 Задача о взаимном исключении
- •4.4.4 Задача о производителе/потребителе
- •4.4.5 Задача об обедающих философах
- •4.5 Анализ сетей Петри
- •4.5.1 Свойства сетей Петри
- •4.5.2 Методы анализа.
- •4.5.3 Анализ свойств сетей Петри на основе дерева достижимости
- •4.5.3 Матричные уравнения
0:start(х) goto 1;
1:у:=а goto 2;
2:If р(х) then 5 else 3;
3:у:=g (x, y) goto 4;
4:х:=h(x) goto 2;
5:stop(у);
а)
start(х);
у:=а;
2:If р(х) then 5 else 3;
3:у:=g(x, y); х:=h(x) goto 2;
5: stop(у);
б)
1.2.4 Интерпретация стандартных схем программ
ССП не является записью алгоритма, поэтому позволяет исследовать только структурные свойства программ, но не семантику вычислений. При построении «семантической» теории схем программ вводится понятие интерпретация ССП. Определим это понятие.
Пусть в некотором базисе B определен класс ССП. Интерпрета-
цией базиса B в области интерпретации D называется функция I ,
которая сопоставляет:
1)каждой переменной x из базиса B - некоторый элемент d = I (x) из области интерпретации D ;
2)каждой константе a из базиса B - некоторый элемент d = I (а ) из области интерпретации D ;
3)каждому функциональному символу f (n ) - всюду определенную функцию F = I ( f (n ));
4)каждой логической константе p0 - один символ множества {0,1} ;
5)каждому предикатному символу p(n ) - всюду определенный предикат P(n ) = I (p(n )).
Пара (S, I ) |
называется интерпретированной стандартной схемой |
|||
(ИСС), или стандартной программой (СП). |
|
|
||
Определим понятие выполнения программы. |
|
|||
Состоянием |
памяти |
программы(S, I ) |
называют |
функцию |
W : X S ® D , которая каждой переменной x |
из памяти схемы S со- |
|||
поставляет элемент W (x) из области интерпретации D . |
|
|||
Значение терма t при |
интерпретации I |
и состоянии памятиW |
||
(обозначим tI (W ) ) определяется следующим образом: |
|
|||
1) если t = x , |
x – переменная, то tI (W ) = I (x) ; |
|
2) |
если t = a , |
a – константа, то tI (W ) = I (a ) ; |
|
|
|
|
|
||||||||||||||
3) |
если t = f (n ) |
t |
,t |
2 |
,K,t |
n ) |
, то t |
W |
= I |
( |
f (n ) |
t |
W |
,t |
W |
,K,t |
W |
||||
|
|
( 1 |
|
|
|
|
I ( |
) |
( |
|
1I ( |
) |
2 I ( |
) |
|
nI ( |
|||||
|
Аналогично определяется значение теста p при интерпретации |
||||||||||||||||||||
состоянии памяти W или pI (W ) : |
|
( |
|
|
|
|
|
|
|
|
|
||||||||||
|
если p = p(n ) |
t |
,t |
2 |
,K,t |
n ) |
, то p |
W |
= I |
p(n ) |
t |
|
W |
,t |
W |
,K,t |
|
W |
|||
|
( 1 |
|
|
|
|
I ( |
) |
( |
|
1I ( |
) 2 I ( |
) |
nI ( |
n ³ 0 .
Конфигурацией программы называют паруU = (L,W ) , где
)) .
I и
)) ,
L -
метка вершины схемы S , а W - состояние ее памяти. Выполнение программы описывается конечной или бесконечной последовательностей конфигураций, которую называют протоколом выполнения программы (ПВП).
Протокол (U0 ,U1 ,K,Ui ,Ui +1 ,K) выполнения программы (S, I ) оп-
ределяем следующим образом (ниже ki означает метку вершины, а Wi
- состояние памяти в i — й конфигурации протокола, Ui = (ki ,Wi ) ):
U0 = (0,W0 ) – начальное состояние памяти схемы S при интерпретации I .
Пусть Ui = (ki ,Wi ) - i — я конфигурация ПВП, а O - оператор схе-
мы S в вершине с меткой ki . Если O - заключительный оператор stop (τ1,..., τm), то Ui - последняя конфигурация, так что про-
токол конечен. В этом случае считают, что, программа (S, I ) останав-
ливается, а последовательность значенийt1I (W ),t2I (W ),K,tnI (W )
объявляют результатом val (S, I ) выполнения программы (S, I ) . В
противном случае, т. е. когда O - не заключительный оператор, в протоколе имеется следующая, (i +1) -я конфигурация Ui +1 = (ki +1 ,Wi +1 ) , причем
a)если O - начальный оператор, а выходящая из него дуга ведет к вершине с меткой L , то ki +1 = L и Wi +1 = Wi ;
b)если O - оператор присваивания x := t , а выходящая из него дуга ве-
дет к вершине с меткой L , то ki +1 = L , Wi +1 = Wi , Wi +1 (x) =t I (Wi ) ;
c)если O - условный оператор p и pI (Wi ) = D , где D Î{0,1} , а
выходящая из него дуга ведет к вершине с меткой L , то ki +1 = L и Wi +1 = Wi ;

d) если O - оператор петли, то ki +1 = L и Wi +1 = Wi , так что протокол
бесконечен.
Таким образом, программа останавливается тогда и только тогда, когда протокол ее выполнения конечен. В противном случае программа зацикливается и результат ее выполнения не определен.
Рассмотрим две интерпретацииСПП S1 (рисунок 1.3, б). Интер-
претация (S1 , I1 ) задана так:
-область интерпретации D1 Í Nat - подмножество множества Nat целых неотрицательных чисел;
-I1 (x) = 4; I1 (y )= 0; I1 (a )= 1 ;
- I1 (g ) = G , где G - функция умножения чисел, т. е. G (d1 , d2 )= d1 ×d2 ;
-I1 (h) = H , где H - функция вычитания единицы, т. е. H (d )= d -1 ;
- |
I |
1 ( |
p |
) |
1 |
1 |
1 |
( |
d |
) |
= 1 |
, если d = 0 . |
|
|
= P |
, где P - предикат «равно 0», т. е. |
P |
|
|
Программа (S1 , I1 ) вычисляет 4! (рисунок 1.3, б).
Интерпретация (S1, I2 ) задана следующим образом:
-область интерпретации D2 = V * , где V = {a, b, c} , V * - множество всех возможных слов в алфавите V .
-I (x) = abc ;
2
-I2 (y) = e , где e - пустое слово;
-I2 (a) = e ;
-I2 (g ) = CONSTAR;
-I2 (h) = CDR;
-I2 ( p ) = P2 , где P2 - предикат «равное e», т. е. P2 (a) = 1 , если a=e. Программа (S1, I2 ) преобразует словоabc в слово cba (рисунок 1.3, в)
ПВП (S1 , I1 ) и (S1, I2 ) |
конечен, результат - 24 и - cba (таблица 1.1 и 1.2). |
|||||||||||||||||
|
|
|
Таблица 1.1 Протокол выполнения программы (S1 , I1 ) |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Конфигурация |
|
|
U0 |
U1 |
U2 |
U3 |
U4 |
U5 |
U6 |
U7 |
U8 |
U9 |
U10 |
U11 |
U12 |
U13 |
|
|
Метка |
|
|
0 |
1 |
2 |
3 |
4 |
2 |
3 |
4 |
2 |
3 |
4 |
2 |
3 |
|
|
|
Значения |
|
x |
|
4 |
4 |
4 |
4 |
3 |
3 |
3 |
2 |
2 |
2 |
1 |
1 |
1 |
0 |
|
|
|
y |
|
0 |
1 |
1 |
4 |
4 |
4 |
12 |
12 |
12 |
24 |
24 |
24 |
24 |
24 |