
- •Функции и графы
- •Вычислимость и разрешимость
- •Программы и схемы программ
- •Базис класса стандартных схем программ
- •Графовая форма стандартной схемы
- •Линейная форма стандартной схемы
- •Интерпретация стандартных схем программ
- •Эквивалентность, тотальность, пустота, свобода
- •Свободные интерпретации
- •Согласованные свободные интерпретации
- •Логико-термальная эквивалентность
- •Одноленточные автоматы
- •Многоленточные автоматы
- •Двухголовочные автоматы
- •1.4.3.1. Проблемы пустоты и эквивалентности.
- •1.4.3.2. Двоичный двухголовочный автомат
- •1.4.3.3. Построение схемы, моделирующей автомат
- •Рекурсивное программирование
- •Определение рекурсивной схемы
- •Трансляция обогащенных схем
- •О сравнении классов схем
- •Схемы с процедурами
- •Классы обогащенных схем
- •Трансляция обогащенных схем
- •Структурированные схемы
- •Описание смысла программ
- •Операционная семантика
- •Аксиоматическая семантика
- •2.1.2.1. Краткое введение в исчисление высказываний
- •2.1.2.2. Преобразователь предикатов
- •2.1.2.3. Аксиоматическое определение операторов языка программирования в терминах wp.
- •Денотационная семантика
- •Декларативная семантика
- •Методы доказательства правильности программ
- •Использование высказываний в программах
- •Правила верификации к. Хоара
- •Определения
- •Реализация процессов
- •Протоколы
- •Операции над протоколами
- •Протоколы процесса
- •Спецификации
- •Взаимодействие
- •Параллелизм
- •Задача об обедающих философах
- •I.Встаёт праваЯi).
- •Помеченные процессы
- •Множественная пометка
- •Ввод и вывод
- •Взаимодействия
- •Подчинение
- •Поочередное использование
- •Общая память
- •Кратные ресурсы
- •Планирование ресурсов
- •Основные понятия
- •Многопоточная обработка
- •Условные критические участки
- •Мониторы
- •Instanсе ракетa: счет; р.
- •Обмен сообщениями
- •Параллелизм данных
- •Модель общей памяти
- •Теоретико-множественное определение сетей Петри
- •Графы сетей Петри
- •Маркировка сетей Петри
- •Правила выполнения сетей Петри
- •События и условия
- •Одновременность и конфликт
- •Моделирование параллельных систем взаимодействующих процессов
- •Свойства сетей Петри
- •Методы анализа
2.1.2.2. Преобразователь предикатов
Введем обозначение (триада Хоара)
{Q}S{R}, (2.2)
где Q, R- предикаты,S- программа (оператор или последовательность операторов). Обозначение определяет следующий смысл: «Если выполнениеSначалось в состоянии, удовлетворяющемQ, то имеется гарантия, что оно завершится через конечное время в состоянии, удовлетворяющемR».
Предикат Qназываетсяпредусловиемили входным высказываниемS, предикатR-постусловиемили выходным высказыванием. Следовательно,Rопределяет то, что нужно установить. Можно сказать, чтоRопределяет спецификацию задачи. В предусловииQнужно отражать тот факт, что входные переменные получили начальные значения.
В дальнейшем при изучении высказываний мы будем предполагать, что предусловия операторов вычисляются на основе постусловий, хотя этот процесс можно рассматривать и с противоположной точки зрения.
Пример 2.3.Рассмотрим оператор присваивания для целочисленных переменных и постусловие:
sum:= 2 *х+ 1 {sum > 1}
Одним из возможных предусловий данного оператора может быть {х> 10}.
Слабейшими предусловияминазываются наименьшие предусловия, обеспечивающие выполнение соответствующего постусловия. Например, для приведенного выше оператора и его постусловия предусловия {х> 10}, {х> 50} и {х> 1000} являются правильными. Слабейшим из всех предусловий в данном случае будет {х> 0}.
Э. Дейкстра рассматривает слабейшие предусловия, т.е. предусловия, необходимые и достаточные для гарантии желаемого результата.
«Условие, характеризующее множество всех начальных состояний, при которых запуск обязательно приведет к событию правильного завершения, причем система (машина, конструкция) останется в конечном состоянии, удовлетворяющем заданному постусловию, называется слабейшим предусловием, соответствующим этому постусловию».
Условие называют слабейшим, так как чем слабее условие, тем больше состояний удовлетворяют ему. Наша цель - охарактеризовать все возможные начальные состояния, которые приведут к желаемому конечному состоянию.
Если S- некоторый оператор (последовательность операторов),R- желаемое постусловие, то соответствующее слабейшее предусловие будем обозначатьwp(S, R).
Аббревиатура wpопределяется начальными буквами английских словweakest(слабейший) иprecondition(предусловие). Предполагается, что известно, как работает операторS(известна семантикаS), если можно вывести для любого постусловияRсоответствующее слабейшее предусловиеwp(S, R).
Определение семантики оператора дается в виде правила, описывающего, как для любого заданного постусловия R можно вывести соответствующее слабейшее предусловиеwp(S, R).
Для фиксированного оператора Sтакое правило, которое по заданному предикатуRвырабатывает предикатwp(S, R), называется «преобразователем предикатов»: {wp(S, R)}S{R}.
Это значит, что описание семантики оператора Sпредставимо с помощью преобразователя предикатов. Применительно к конкретнымSиRчасто бывает неважным точный видwp(S, R), бывает достаточно более сильного условияQ, т.е. условия, для которого можно доказать, что высказываниеQ=>wp(S, R) справедливо для всех состояний. Значит, множество состояний, для которых Q - истина, является подмножеством того множества состояний, для которыхwp(S, R) - истина. Возможность работать с предусловиямиQ, не являющимися слабейшими, полезна, поскольку выводитьwp(S, R) явно не всегда практично.
Сформулируем свойства (по Э. Дейкстра) wp(S, R).
Свойство 1.wp(S, F) =Fдля любогоS. (Закон исключенного чуда).
Свойство 2.Закон монотонности. Для любогоS,предикатовPиRтаких, чтоP=>Rдля всех состояний, справедливо для всех состоянийwp(S, P) =>wp(S, R).
Свойство 3.Дистрибутивность конъюнкции. Для любыхS, P, Rсправедливо
wp(S, P) AND wp(S, R) = wp(S, P AND R).
Свойство 4.Дистрибутивность дизъюнкции. Для любыхS, P, R справедливо
wp(S, P) OR wp(S, R) = wp(S, P OR R).
Если для каждого оператора языка по заданным постусловиям можно вычислить слабейшее предусловие, то для программ на данном языке может быть построено корректное доказательство. Доказательство начинается с использования результатов, которые надо получить при выполнении программы, в качестве постусловия последнего оператора программы, и выполняется с помощью отслеживания программы от конца к началу с последовательным вычислением слабейших предусловий для каждого оператора. При достижении начала программы первое ее предусловие отражает условия, при которых программа вычислит требуемые результаты.
Для некоторых операторов программы вычисление слабейшего предусловия на основе оператора и его постусловия является достаточно простым и может быть задано с помощью аксиомы. Однако, как правило, слабейшее предусловие вычисляется только с помощью правила логического вывода, т.е. метода выведения истинности одного высказывания на основе значений остальных высказываний.