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

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

Программы, интерпретированные над алгебрами данных

Пусть A – алгебра с сигнатурой операций S = <s1, …, sk> и носителем A. Пусть, далее, X = < x1, …, xn > - вектор переменных, которые мы интерпретируем как переменные программы. Для краткости мы будем называть X памятью программы, а векторы a = < a1, …, an>, ai Î A - состояниями памяти. Множество U = Anобразует пространство - универсум состояний памяти программы. Вычисляющий оператор – это отображение F : U à U, определенное покоординатно системой присвоений

x1 := f1(X), …, xn := fn(X) (2)

Вычисляющий оператор мы будем записывать в векторной форме X := F(X), а вектор координатных функций (вычислений) – в форме F= <f1, …, fn>. Отметим, что в таких обозначениях вычисляющий оператор интерпретируется как одновременное присвоение вектору переменных значений – правых частей покоординатных операторов присвоений.

Мы будем говорить, что программа P определена линейно (интерпретирована над векторным про­странством), если A – некоторое поле (область целостности), а все ее вычисляющие операторы имеют вид

X := F*X + b, (3)

гдеF– линейный оператор, действующий в векторном пространствеU,аb Î U.

Мы будем говорить, что программа P определена полиномиально (интерпретирована над полиномиальным кольцом), если A – некоторое поле (область целостности), а все ее вычисляющие операторы имеют вид

X := F(X), (4)

гдеfi Î A [X], т.е. многочлены с коэффициентами из A.

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

X := F(X), (5)

гдеfi Î A (X), т.е. рациональные выражения с коэффициентами из A.

Условия определяются как предикаты в некотором специальном языке L условий. Во всяком случае, этот язык включает предикаты равенства и их отрицания (=, ¹).

Таким образом, программы, интерпретированные над линейными пространствами, на каждом шаге вычислений осуществляют линейные преобразования универсума состояний памяти U, программы, интерпретированные над полиномиальными кольцами – полино­миаль­ные преобразования U, а программы, интерпретированные над полем рациональных выражений - рациональные преобразования U.

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

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

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

 

Теорема 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 с неизвестными , фундамен­таль­ная система решений которой задаёт искомый базис .