- •26.09.12 Лекция 2
- •Основные свойства программы:
- •Логика программы
- •Логика базисных операторов
- •Логика оператора цикла
- •Корректность логики программы
- •Логика по всей программе
- •Аппроксимация логики программы
- •x, y ― наборы переменных Оператор S(x: y)
- •2. Задача дедуктивной
- •Программа – оператор S(x, y)
- •Предикат A(x, y) является однозначным в области X, если:
- •Теорема 2.1 тождества спецификации и программы
- •Докажем истинность формулы L(S(x, y)) Q(x, y). Поскольку истинны P(x) и формула (2.6),
- •Лемма 2.9. Допустим, программа (2.1) является корректной, а ее спецификация однозначной. Тогда истинна
- •Структура множества программ.
- •2. Класс объектно-ориентированных программ.
- •3. Класс простых процессов.
- •3. Язык исчисления вычислимых предикатов
- •Исчисление вычислимых предикатов ― множество вычислимых формул языка исчисления предикатов
- •Структура программы на языке CCP
- •Система типов данных
- •Структурный тип ― композиция компонентных типов
- •Произведение типов
- •Множество подмножеств конечного типа X:
- •Произвольный тип либо примитивный, либо вводится следующим определением:
- •Тип “подмножество типа” может быть параметризован набором переменных d
- •Примеры рекурсивных типов
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. Задача дедуктивной
верификации для класса невзаимодействующих программ