Модели программ
Для решения задач автоматической генерации программных инвариантов в качестве модели программ используются U-Y схемы программ над памятью, интерпретированные над алгебрами данных. В этой модели программу представляет инициальный ориентированный граф с выделенными заключительными вершинами. Вершины этого графа называются состояниями, а дуги – переходами. Состояния программы – суть ее контрольные точки. Переходы программы отмечены условиями и вычисляющими операторами (определения см. ниже). Эта модель по существу эквивалентна модели transition system, используемой в современных работах западных авторов. Отметим, что эта модель представляет неструктурированную программу.
Наши алгоритмы доказательства и генерации полиномиальных инвариантных равенств для программ, алгеброй данных которых является поле или области целостности. в качестве модели программы используют выражения в алгоритмической алгебре Глушкова, представляющие структурированные программы.
Различие моделей программ не является существенным, т.к. для преобразования U-Y схемы программы в эквивалентное ей выражение алгоритмической алгебры Глушкова можно использовать, например, алгоритм анализа конечного автомата.
Алгоритм вычисления полиномиальных инвариантных равенств, изложенный ниже, основан на свойстве нетеровости колец полиномов. Мы рассмотрим предложены алгоритмы, основанные на вычислениях базисов Гребнера.
Основные операции алгоритмической алгебры Глушкова:
, (1)
Здесь P, Q – программы, а u – условия. Семантику этих операций определим с помощью операторов языка Паскаль:
~ // последовательное выполнение
~ If u then P else Q
~ While u do P
~ Repeat P until u
Атомарными программами являются т.н. вычисляющие операторы (определение см. ниже). Таким образом, семантика программы определяется семантикой вычисляющих операторов и условий, т.е. интерпретацией программы над некоторой областью данных.