20120309 formal semantics shilov_lecture05
TRANSCRIPT
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
1
Fun with Formal Program Semantics (О формальной семантике программ –
просто)
Шилов Николай Вячеславович
Computer Science клуб - ЕкатеринбургМарт 2012
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
2
Тема 4: Верификация программ с точки зрения семантики
языков программирования
(на примере диалекта ToyPL)
Продолжение лекции от 10.03.12
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
3
Основы верификации программ ToyPL
Уже знакомая нам аксиоматическая семантика ToyPL
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
4
Основы верификации программ ToyPL
• Специфицированная ToyPL программа – это тройка Хоара, в которой пред- и пост-условия – формулы первого порядка над Z/2N, а программа – это программа ToyPL.
• Аксиоматическая семантика специфицированной ToyPL-программы – это любое её доказательство в аксиоматической семантике.
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
5
Основы верификации программ ToyPL
• В силу надёжности аксиоматической семантики ToyPL, если специфицированная ToyPL-программа {ϕ}α{ψ} имеет аксиоматическую семантику, то {ϕ}α{ψ} – истинная тройка Хоара.
• В силу полноты аксиоматической семантики ToyPL, если специфицированная ToyPL-программа {ϕ}α{ψ} – истинная тройка Хоара, то {ϕ}α{ψ} имеет аксиоматическую семантику.
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
6
Основы верификации программ ToyPL
• Как следует из доказательства утверждения о надёжности и полноте аксиоматической семантики для языка ToyPL, – поиск доказательства специфицированная
ToyPL-программы – алгоритмическая, – но неэффективная процедура, использующая
явное построение слабейших предусловий.
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
7
Основы верификации программ ToyPL
• Как следует из доказательства утверждения о надёжности и полноте аксиоматической семантики для языка ToyPL,поиск доказательства специфицированная ToyPL-программы – алгоритмическая, – но неэффективная
процедура в силу генерации слабейших предусловий.
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
8
Основы верификации программ ToyPL
• При переходе от ToyPL к его диалекту, в котором единственный тип данных – математические целые числа Z (а не кольцо вычетов Z/2N) поиск доказательства специфицированной программы вообще перестаёт быть алгоритмической процедурой в силу – неэффективности алгоритма генерации
слабейших предусловий– и неразрешимости теории первого порядка
кольца целых чисел Z.
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
9
Основы верификации программ ToyPL
• Квазидоказательство специфицированной ToyPL-программы – это любое «доказательство» в аксиоматической семантике, в котором при использовании правила Stretching (усиления предусловия и ослабления заключения) не проверяются условия его применения.
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
10
Основы верификации программ ToyPL
• Все формулы первого порядка, встречающиеся в квазидоказательстве в качестве условий применения правила Stretching, называются условиями корректности этого квазидоказательства.
• Очевидно, что специфицированная ToyPL-программа корректна, если для неё есть квазидоказательство, в котором все условия корректности – истинные формулы (над Z/2N).
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
11
Основы верификации программ ToyPL
• Для того, чтобы автоматизировать процесс доказательства специфицированных программ, разработчику программы и ее спецификации (ее предусловия и постусловия) предлагается аннотировать все циклы программы утверждениями, которые разработчик считает инвариантами этих точек (т.е. которые остаются верными при каждой легальной итерации тела соответствующего цикла).
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
12
Основы верификации программ ToyPL
• Аннотированная ToyPL-программа – это специфицированная программа, в которой каждый цикл «while-do» аннотирован некоторой формулой, которая называется инвариантом этого цикла.
• В дальнейшем лексему «WHILE» цикла, аннотированного инвариантом , будем записывать в виде «WHILE».
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
13
Пример аннотированной ToyPL-программы
{}(((x:=1 ; y:=1) ; ( WHILE yz DO (y:=y+2x+1 ; x:=x+1))) ; x:=x–1){}где (z1), (x2 z (x+1)2> z), (y=x2 (x-1)2 z).
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
14
Правильные (квази)доказательства аннотированных программ
• (Квази)доказательство в аксиоматической семантике аннотированной программы называется правильным, если в этом (квази)доказательстве все правила для цикла используют инварианты этих циклов:
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
15
Пример правильного квазидоказательства для аннотированной ToyPL-программы
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
16
Пример правильного квазидоказательства для аннотированной ToyPL-программы
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
17
Пример правильного квазидоказательства для аннотированной ToyPL-программы
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
18
Пример правильного квазидоказательства для аннотированной ToyPL-программы
• Как видно из квазидоказательства, его условия корректности – это следующие три формулы:
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
19
Пример правильного квазидоказательства для аннотированной ToyPL-программы
• Упражнение #1: Является ли приведённое квазидоказательство доказательством для языка ToyPL? А для диалекта ToyPL, в котором переменные интерпретируются математическими целыми числами Z? Ответ объяснить.
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
20
О генерации условий корректности для ToyPL
• Для автоматизации построения условий корректности для аннотированных программ определим два рекурсивных алгоритма AC (от «Annotation Condition») и VC (от «Verification Condition»).
• Оба алгоритма имеют два аргумента: аннотированная программа и формула первого порядка. Алгоритм AC возвращает формулу, а алгоритм VC – конечное множество формул.
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
21
О генерации условий корректности для ToyPL
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
22
О генерации условий корректности для ToyPL
• Утверждение 1: Для любой аннотированной ToyPL-программы и формулы первого порядка над кольцом вычетов тройка Z/2N аннотированная программа {AC(, )}{} имеет правильное квазидоказательство, условия корректности которого – это формулы из VC(, ) и некоторые пропозициональные тавтологии.
• Упражнение #2: Попробуйте доказать утверждение 1 индукцией по структуре аннотированной программы.
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
23
О генерации условий корректности для ToyPL
• Из доказанного утверждения следует, что любая аннотированная ToyPL-программа {}{} имеет правильное квазидоказательство, в котором все условия корректности – это пропозициональные тавтологии, формулы множества VC(, ) и формула ( AC(, )).
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
24
О генерации условий корректности для ToyPL
• Утверждение 2: Для любой аннотированной ToyPL-программы {}{} всякое её правильное доказательство может быть перестроено в правильное доказательство, в котором все условия корректности – это пропозициональные тавтологии, формулы множества VC(, ) и формула ( AC(, )).
• Упражнение #3: Попробуйте доказать утверждение 2 индукцией по высоте исходного правильного доказательства.
05/03/23 Шилов Николай Вячеславович Всего слайдов 25
25
О генерации условий корректности для ToyPL
• Вывод: Для верификации аннотированной ToyPL-программы {}{} не надо искать доказательство, но можно и надо – cгенерировать множество условий
корректности VC(, ) {( AC(, ))}– и проверить истинность всех этих формул в
кольце вычетов Z/2N.