Ануреев И.С.
Институт систем информатики СО РАН
A new specification language is suggested. Its main advantage is an easiness of familiarization. In spite of simplicity the language has sufficient expressive power and has a satisfiability method for unquantified formulas. A methodology of application of the language for program verification is given by the example of a program of bubble sorting.
Освоение этого разнообразия средств языка спецификаций требует многих месяцев работы с системой. Только после этого можно решить, какие средства системы подходят наилучшим образом для верификации конкретного класса программ.
Часто оказывается, что из всего арсенала средств для рассматриваемого класса программ достаточно использовать одно или два, а изучение других средств оказывается потерянным временем.
В докладе представлен язык спецификаций SIMPLE, который можно освоить за один-два дня.
Он не является заменой серьезным языкам спецификаций, а скорее средством фильтрации программ. Критерий перехода к изощренным системам верификации - невозможность верифицировать программу, используя язык SIMPLE.
Несмотря на простоту, язык SIMPLE не игрушечный, а класс программ, которые можно верифицировать с его помощью, достаточно представителен. Таким образом, язык SIMPLE - это инструмент для улучшения производительности процесса верификации программ.
Каждому функциональному символу соответствует неотрицательное целое число -- его местность.
Множество функциональных символов разделяется на два непересекающихся подмножества детерминированных функциональных символов и недетерминированных фунциональных символов . Множество детерминированных функциональных символов содержит символ неопределенности .
- если -- переменная, то -- терм;
- если
-- термы, , то
-- терм.
Термы делятся на детерминированные и недетерминированные. Терм называется недетерминированным, если он содержит недетерминированный функциональный символ, иначе он называется детерминированным.
Формулы языка спецификаций SIMPLE строятся из атомарных формул с помощью пропозициональных логических связок и кванторов:
- если -- атомарная формула, то -- формула;
- , -- формулы;
- если -- формулы, то , , ,
,
-- формулы;
- если -- переменная, -- формула, то и -- формулы.
- -- множество элементов;
- -- множество всех подмножеств из элементов множества
;
- -- предикат принадлежности элемента множеству;
- если , -- местность , то --
тотальная функция из в ;
- если , -- местность , то --
тотальная функция из в .
Значением переменной при интерпретации называется элемент множества . Функция , сопоставляющая всем переменным множества их значения при интерпретации , называется означиванием переменных при интерпретации .
- если
-- термы, , то
Атомарная формула истинна при интерпретации и означивании , если . Атомарная формула истинна при интерпретации , если для любого означивания . Атомарная формула истинна, если для любой интерпретации и для любого означивания . Атомарная формула выполнима при интерпретации , если для некоторого означивания .
С помощью атомарных формул выразимо отношение равенства элементов. Если -- детерминированный терм, то означает равенство термов и .
Семантика пропозициональных логических связок и кванторов определяется обычным образом.
Распространим выполнимость на множества и множества множеств бескванторных формул. Множество бескванторных формул выполнимо при интерпретации , если формула выполнима при интерпретации . Множество множеств бескванторных формул выполнимо при интерпретации , если формула выполнима при интерпретации . С помощью множеств множеств формул с такой семантикой будет задаваться дизъюнктивная нормальная форма для бескванторных формул.
Для множества формул пусть обозначает множество переменных, входящих в формулы множества . Для множеств формул пусть обозначает множество переменных .
Пусть -- правило пополнения формул вида .
Отношение пополнения , порождаемое правилом определяется как множество пар , где -- конечное множество формул, -- подстановка такая, что для любого .
Предложение 1. Пусть для правила выполнено следующее условие:
- формула
истинна при
интерпретации .
Пусть . Тогда выполнимо при интерпретации тогда и только тогда, когда выполнимо при интерпретации .
Пусть -- правило пополнения формул вида .
Отношение пополнения , порождаемое правилом определяется как множество пар , где -- конечное множество формул, -- подстановка такая, что для любого .
Предложение 2. Пусть для правила выполнено следующее условие:
- формула
истинна при интерпретации .
Пусть . Тогда выполнимо при интерпретации тогда и только тогда, когда выполнима при интерпретации .
Пусть -- правило пополнения формул вида .
Отношение пополнения , порождаемое правилом определяется как множество пар , где -- конечное множество формул, -- подстановка такая, что для любого .
Предложение 3. Пусть для правила выполнены следующие
условия:
- формула
истинна при интерпретации .
- формула
истинна при
интерпретации для каждого . Здесь
.
Пусть . Тогда выполнимо при интерпретации тогда и только тогда, когда выполнимо при интерпретации .
Пусть -- правило пополнения формул вида .
Отношение пополнения , порождаемое правилом определяется как множество пар , где -- конечное множество формул, -- подстановка такая, что для любого , -- подстановка, заменяющая экстра-переменные правила на новые переменные, не содержащиеся в .
Предложение 4. Пусть для правила выполнены следующие
условия:
- формула
, где --
экстра-переменные, входящие в формулы множества , истинна при
интерпретации .
- формула
истинна при
интерпретации для каждого . Здесь
.
Пусть . Тогда выполнимо при интерпретации тогда и только тогда, когда выполнимо при интерпретации .
Распространим правила пополнения формул на множества множеств формул.
Отношение пополнения , порождаемое правилом определяется как множество пар , где , .
Система пополнения формул -- это множество правил пополнения формул.
Отношение пополнения для системы пополнения формул определяется как объединение отношений для правил пополнения формул, входящих в систему.
Проблем с коммутативными и ассоциативными правилами не возникает. Например, правило переписывания термов приводит к зацикливанию, в то время как соответствующее правило пополнения нет.
Аналог условного правила переписывания термов в случае, когда -- нормализованные литералы, имеет вид , где -- новая переменная, не встречающаяся в .
Он основан на специальном (нормализованном) представлении литералов в дизьюнктивной нормальной форме и применении правил пополнения к дизьюнктивной нормальной форме с нормализованными литералами.
Алгоритм приведения формул языка к дизьюнктивной
нормальной форме с нормализованными литералами заключается в
недетерминированном применении к обычной дизьюнктивной
нормальной форме, представленной в виде множества множеств формул,
следующих правил:
-
где -- не переменная, заменяется на
Предложение 5. Пусть -- дизъюнктивная нормальная форма с нормализованными литералами для бескванторной формулы . Тогда выполнимо при интерпретации тогда и только тогда, когда выполнима при интерпретации .
Пусть -- бескванторная формула, проверяемая на выполнимость.
Шаг 1. Приводим формулу к дизъюнктивной нормальной форме с нормализованными литералами.
Пусть -- дизъюнктивная нормальная форма с нормализованными литералами для формулы , -- пустая система пополнения формул (пустое множество правил пополнения формул).
Шаг 2. Расширяем систему правилами для понятий (интерпретированных функциональных символов), входящих в . Формулы, входящие в правила системы должны быть нормализованными литералами.
Шаг 3. Применяем приведенные ниже правила в указанном порядке до тех
пор, пока применимо хотя бы одно правило:
-
, где
, заменяется на ;
-
, заменяется на ;
-
, где
, заменяется на
;
-
, заменяется на ;
-
заменяется на
;
-
заменяется на ;
- eсли
, где , то
заменяется на
;
-
, где -- переменные, заменяется на
;
- eсли
, то заменяется на .
Шаг 4. Если имеет вид или , то КОНЕЦ с результатом . В противном случае, перейти к шагу 2.
Метод позволяет проверять невыполнимость формул. Его можно использовать также в качестве упрощающего метода, если ограничить число повторений шагов 2 и 3. Множество , полученное поcле выполнений шагов 2 и 3, называется -м упрощением формулы .
Предложение 6. Пусть -- результат применения алгоритма разрешения бескванторных формул языка SIMPLE к формуле . Тогда выполнимо при интерпретации тогда и только тогда, когда выполнима при интерпретации .
1.Для массивов (ниже -- массив, -- целые числа):
- -- кортеж из элементов массива от -го до -го. Если
, результатом является пустой кортеж;
- -- -й элемент массива (нумерация начинается с нуля). Если
, то .
2. Для кортежей (ниже -- кортеж ) определены понятия
такие, что:
- -- множество кортежей, перестановочных с ;
- -- множество упорядоченных кортежей;
- -- множество кортежей, любой элемент которых меньше или равен
любого элемента кортежа ;
3. Для целых чисел (ниже -- целые числа) определены понятия
такие, что:
- -- множество элементов, меньших или равных ;
- -- множество элементов, меньших ;
- и определяются аналогично;
- -- сумма и разность и , соответственно.
Заметим, что предикаты в языке SIMPLE представляются недетерминированными функциями. Так предикату упорядоченности элементов кортежа соответствует недетерминированная функция , значением которой является любой упорядоченный кортеж, а предикату перестановочности кортежей -- недетерминированная функция , которая выдает в качестве значения любой кортеж, перестановочный с кортежем-аргументом функции.
Еще одно замечание заключается в том, что для массивов, кортежей и целых чисел не определяется равенство, так как оно, как уже было отмечено выше, встроено в предикат .
Жирным шрифтом выделены строки кода на языке C, , , , -- формулы на языке SIMPLE, задающие предусловие, постусловие, инвариант внешнего цикла и инвариант внутреннего цикла соответственно.
Предусловие имеет вид .
Постусловие имеет вид .
Инвариант имеет вид .
Инвариант имеет вид
Заметим, что если аннотации были бескванторными формулами, то условия корректности (при определенных ограничениях на язык программирования) также будут бескванторными формулами.
Для применения метода необходимо задать
правила пополнения для понятий, входящих в условия корректности.
Вот несколько примеров правил пополнения для понятий , и
, определенного на кортежах:
-
;
-
;
-
;
;
.
Кроме того, имеется ряд правил пополнения для арифметики, например . Если комбинировать метод разрешения бескванторных формул языка SIMPLE с разрешающей процедурой для арифметики Пресбургера, то необходимость в этих правилах отпадает.
Если невыполнимость всех отрицаний условий корректности доказана, то исходная аннотированная программа корректна.
Ваши комментарии |
[Головная страница] [Конференции] [СО РАН] |
© 2001, Сибирское отделение Российской академии наук, Новосибирск
© 2001, Объединенный институт информатики СО РАН, Новосибирск
© 2001, Институт вычислительных технологий СО РАН, Новосибирск
© 2001, Институт систем информатики СО РАН, Новосибирск
© 2001, Институт математики СО РАН, Новосибирск
© 2001, Институт цитологии и генетики СО РАН, Новосибирск
© 2001, Институт вычислительной математики и математической геофизики СО РАН, Новосибирск
© 2001, Новосибирский государственный университет
Дата последней модификации Tuesday, 28-Aug-2001 21:47:31 NOVST