Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по инвариантам программ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.47 Mб
Скачать

3. Инварианты программ

Многочлен g(X) Î A[X] называется полиномиальным инвариантом программы P, если при любом начальном состоянии памяти a = < a1, …, an>, если программа P завершает работу, для заключительного состояния памяти b выполняется равенство g(b) = 0.

Множество всех полиномиальных инвариантов рационально определенных программ образует радикальный идеал кольца A[X], который мы будем обозначать через .

В дальнейшем мы будем рассматривать также множество всех элементов , степени которых ограничены некоторой константой M. Множество таких многочленов образует векторное пространство, которое обозначается через . Понятно, что .

4. Теоретические результаты

Теорема 1. Если ch(A) = 0 и язык условий L включает предикаты равенства и их отрицания (=, ), проблема построения базиса в классе линейно определенных программ алгоритмически неразрешима.

Понятно, что из этой теоремы сразу следует неразрешимость рассматриваемой проблемы для всех классов программ, рассматриваемых в настоящей лекции. Поэтому в дальнейших результатах условия в программах приходится игнорировать, считая программы абсолютно недетерминированными. Список (1) операций над программами при этом редуцируется до

, . (6)

Основной результат [3] настоящей работы, состоит в следующем:

Теорема 2. Пусть P - программа, интерпретированная над полиномиальным кольцом A[X], и .

Тогда:

а) Проблема принадлежности алгоритмически разрешима.

б) Проблема построения базиса векторного пространства алгоритмически разрешима.

Доказательство. (Индукция по структуре регулярного выражения, представляющего программу)

Пусть все вычисляющие операторы, встречающиеся в программе P, и .

Доказательство утверждения а) будем вести индукцией по структуре редуцированной программы P, т.е. по структуре ее регулярного выражения в сигнатуре (6), в которой вычисляющие операторы – суть атомы .

Пусть w = yj1*yj2**yjk программа, представляющая собою последо­ва­тельность вычисляющих операторов. Мы будем говорить, что w Î P, если P допускает вычисления, описанные w. Mы будем также называть w словом P. Собственно программа P ассоциируется тогда со множеством принадлежащих ей слов (множество слов – это множество всевозможных путей вычислений P).

Введём следующие обозначения. Через g(w), , обозначим многочлен , а через - множество многочленов вида g(w), . Идеал, порожденный множеством , обозначим через .

Мы покажем, что для каждой программы существует и может быть эффективно построено конечное подмножество слов такое, что . Поскольку g - инвариант программы P тогда и только тогда, когда g(w) = 0 для любого , проверка инвариантности g сведётся к проверке равенств g(w) = 0, .

1. (базис индукции) . Тогда .

2. (шаг индукции)

а).

б)

Пусть . Поскольку из следует , где имеем , откудa

(7)

в)

Тогда , где E – обозначение тождественного вычисляющего оператора. Рассмотрим последовательность идеалов:

Поскольку кольцо A[X] нетерово, эта последовательность стабилизируется на некотором номере . Покажем, что - наименьшее натуральное число такое, что

(8)

В самом деле, из (7) следует

поэтому из равенства следуют равенства для любого натурального k, откуда

(9)

Поскольку проблема принадлежности алгоритмически разрешима, формулы (6) - (8) описывают рекурсивный алгоритм построения . Утверждение а) доказано.

Для доказательства утверждения б) необходимо рассмотреть многочлен степени M с неопределенными коэффициентами и для него построить множество . Поскольку кольцо также нетерово, это построение можно осуществить с помощью алгоритма пункта а).

Пусть . Система равенств определяет систему линейных уравнений над A с неизвестными , фундамен­таль­ная система решений которой задаёт искомый базис .