- •СамотестирующиЕся и самокорректирующиЕся программы
- •Вводные замечания
- •Общие принципы создания двухмодульных вычислительных процедур и методология самотестирования
- •Устойчивость, линейная и единичная состоятельность
- •Метод создания самокорректирующейся процедуры вычисления теоретико-числовой функции дискретного экспоненцирования
- •Обозначения и определения для функции дискретного возведения в степень вида gxmodulo m.
- •Построение самотестирующейся/самокорректирующейся программной пары для функции дискретного экспоненцирования
- •Метод создания самотестирующейся расчетной программы с эффективным тестирующим модулем
- •Алгоритм st
- •Исследования процесса верификации расчетных программ
- •Области применения самотестирующихся и самокорректирующихся программ и их сочетаний
- •Общие замечания
- •Вычислительная математика
- •Целочисленная арифметика и арифметика многократной точности
- •Теоретико-групповые и теоретико-числовые вычисления
- •Вычисления над полиномами
- •Вычисления над матрицами
- •Линейные рекуррентные соотношения
- •Аппроксимирующие функции
- •Криптография, интерактивные доказательства Вводные замечания
- •Распределение ключей, цифровая подпись, схемы аутентификации
- •Интерактивные системы доказательств
- •Задача «Изоморфизм графа»
- •Протокол ig
- •Чекер для задачи «Изоморфизм графа»
- •Чекер cgip(g,h,k)
- •Другие направления
- •Применение самотестирующихся и самокорректирующихся программ Вводные замечания
- •Применение вычислительных методов к задачам гидролокации
- •Метод наименьших квадратов и задача самотестирования
Устойчивость, линейная и единичная состоятельность
Пусть свойство Iвыражается уравнениемI(x1,...,xk)=0, где кортеж (x1,...,xk) выбирается с распределениемEиз пространстваDk. Пара (I,E) характеризует семейство функцийF, гдеfFтогда и только тогда, когда для всех (x1,...,xk) с ненулевой выборкой элементов кортежа изE,I f(x1,...,xk)=0. Базовой техникой самотестирования является идентификация свойстваустойчивостидля семейства функцийF. Неформально (D,D)-устойчивостьпары (I,E) для семейства функцийGреализует, что если для программыPG, свойствоIP(x1,...,xk)=0 удовлетворяется с высокой вероятностью, когдаx1,...,xkвыбрано с распределениемEизDk, тогда существует функцияgFG, которая согласуется сPна большей части входов изD.
Рассмотрим некоторое свойство линейности (I,E), где свойствоI f(x1,x2,x3) тождественноf(x1)+f(x2)=f(x3) иEозначает (x1RZp,x2RZp,x1+x2). Пара (I,E) характеризуетF={f(x)=cxcZp} – множество всех линейных функций надZp. В этом примереG– тривиальное множество всех функций и пара (I,E) устойчива для G.
Как только мы убедились посредством рандомизированных попыток, что программа Рудовлетворяет свойству устойчивости, можно переходить к тестированию программы на линейную и единичную состоятельность.
Существует два базовых теста для самотестирующихся программ – тест линейной состоятельностиитест единичной состоятельности [BLR]. Продемонстрируем построение таких тестов на примере следующей тривиальной модулярной функции. Пустьx,R– положительные целые, тогдаfR(x)x (mod R), гдеR- фиксировано.
Пусть x1иx2случайно, равновероятно и независимо от других событий выбраны из ZR2nиxпринимает значение:x:x1+x2(mod R2n). Необходимо отметить, чтоfR(x)[fR(x1)+fR(x2)](modR) – линейная функция по всем входам (аргументам). Тогдатест линейной состоятельностизаключается в выполнении или не выполнении равенства:PR(x)[PR(x1)+PR(x2)](modR), аошибка линейной состоятельности– есть вероятность того, что данный тест не выполнился.
Пусть zслучайно выбрано из ZR2nв соответствии с распределениемиzпринимает значение:z:z+1(mod R2n). Отметим также, чтоfR(z)[fR(z)+1](modR). Тогдатест единичной состоятельностизаключается в выполнении или не выполнении равенства:PR(z)[PR(z)+1](modR), аошибка единичной состоятельности– есть вероятность того, что данный тест не выполнился.
Метод создания самокорректирующейся процедуры вычисления теоретико-числовой функции дискретного экспоненцирования
Обозначения и определения для функции дискретного возведения в степень вида gxmodulo m.
Пусть In=Zqпредставляет собой множество {1,...,q}, гдеq=(M) - значение функции Эйлера для модуляM, аZ*M- множество вычетов по модулюM, гдеn=log2M. Пусть распределениеDpесть равномерное распределение вероятностей. Оракульной программой, в данном случае, является программа вычисления функцииgxmoduloM, по отношению к исследуемым самотестирующейся и самокорректирующейся программам.
Алгоритм AxmoduloN можно вычислить многими способами [Кн и др.], один из наиболее общеизвестных и применяемых на практике, - это алгоритм, основанный на считывании индекса (значения степени) слева направо. Этот метод достаточно прост и нагляден, история его восходит еще к 200 г. до н.э. Он еще также известен как русский крестьянский метод.
Пусть x[1,...,n] - двоичное представление положительного числаxиA,BиN- положительные целые числа вr-ичной системе счисления, тогда псевдокод алгоритмаAxmoduloN, реализованного программой Exp() имеет следующий вид.
Program Exp(x,N,A,R); {вход x,N,A, выход R}
begin
B:=1;
for i:=1 to n do
begin
B:=(B*B)modN;
if [i]=1 then B:=(A*B)modN;
end;
R:=B;
end.
Рис. 4.1. Псевдокод алгоритма AxmoduloN
Из описания алгоритма видно, что число обращений к операции вида (A*B)moduloNбудет logx+(x), где(x) число единиц в двоичном представлении операндаxили вес Хэммингаx.