Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lectures / lecture2.ppt
Скачиваний:
8
Добавлен:
06.06.2015
Размер:
264.7 Кб
Скачать

26.09.12 Лекция 2

Предикатное программирование

Логика программы

2. Задачи дедуктивной верификации

Программа в виде тройки Хоара, однозначность программы, тотальность и однозначность спецификации Тотальная корректность программы

Теорема тождества спецификации и программы

Иерархия классов программ

3.Язык исчисления вычислимых предикатов

Структура программы на языке CCP Система типов данных

Основные свойства программы:

автоматическая вычислимость

наличие спецификации программы

логика программы

Свойство 2. Программа должна соответствовать спецификации.

Логика программы

предикат точный эквивалент программы логика решения задачи

Программа реализация логики решения задачи в

конструкциях языка программирования

Взаимодействие программы с окружением:

ввод данных, исполнение программы, вывод результатов.

Других взаимодействий с окружением нет.

Ввод можно собрать в начале, вывод – в конце

Ограничение: программа не взаимодействует с окружением

Класс невзаимодействующих программ

Логика базисных операторов

L(B; C) ? Необходима специализация

S(x: y) оператор S(x, y) с аргументами x и результатами y.

Оператор суперпозиции B(x: z); C(z: y), параллельный оператор B(x: y) || C(x: z)

x, y и z – разные наборы переменных

L(B(x: z); C(z: y)) z. L(B(x: z)) & L(C(z: y)) L(B(x: y) || C(x: z)) L(B(x: y)) & L(C(x: z))

L(if (E) B(x: y) else C(x: y)) E & L(B(x: y)) E & L(C(x: y))

if (E) L(B(x: y)) else L(C(x: y))

Логика оператора цикла

W(u, x) while E do B(u, x) end

proc W(u, x) { if (E) { B(u, x); W(u, x)}}

L(W(u, x: x’)) =

if (E) z. L(B(u, x: z) & L(W(u, z: x’)) else x’ = x

наименьшая неподвижная точка

Логика бесконечного цикла не существует ( = false)

Корректность логики программы

определяется как согласованность логики с операционной семантикой языка программирования для любых выражений и операторов.

Программа – оператор S(x, y)

x и y наборы переменных, аргументы и результаты.

RUN(S, x, y) любое исполнение оператора S для аргументов со значениями x завершается и значения результатов есть y.

x, y. L(S(x, y)) RUN(S, x, y)

Логика по всей программе

z – набор переменных

p – произвольная точка в программе S(z)

Логика Lp(S(z)) истинна исполнение программы, достигающее точку p с теми же значениями z

Lp(S(z)) – сильнейший предикат, истинный в точке p.

Для доказательства истинности свойства X в точке p достаточно доказать истинность формулы

Lp(S(z)) X

Аппроксимация логики программы

Предикат R называется аппроксимацией логики

Lp(S(z)) , если Lp(S(z)) R

Если R X, то свойство X доказуемо из логики:

Lp(S(z)) X

Логика программы сильнейшая из аппроксимаций Тождественно истинный предикат true надежная, но

бесполезная аппроксимация логики Lp(S(z))

Инвариант цикла – достаточно сильная аппроксимация логики в начале цикла

Другие примеры: результаты статического анализа,

бизнес-логика в реинжиниринге, абстрактные предикаты в статическом анализаторе достижимости места ошибки

x, y ― наборы переменных Оператор S(x: y)

Предикаты P(x), Q(x, y)

Тройка Хоара {P(x)} S(x: y) {Q(x, y)} истинна

P(x) истинно перед исполнением S

Q(x, y) истинно после исполнения S

Q = sp(S, P) сильнейшее постусловие относительно P

{P} S {Q} &

({P} S {Q’} (Q Q’))

Важнейший факт:

L(S(x: y)) sp(S, true).

2. Задача дедуктивной

верификации для класса невзаимодействующих программ

Соседние файлы в папке lectures