Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Открытые проблемы

Repeat

Begin

Begin

Примеры

Приклад. Розглянемо застосування методу a) теореми 6.2 для доведення інваріантності рівності програми, що обчислює найменше число Фібоначчі, більше, ніж .

Procedure Fib(N: Integer; var x: Integer);

var y: Integer;

x:= 1; y:= 1;

While x < N do Begin

x:= x + y;

y:= x - y

End {Invariant: (x^2 - x*y - y^2)^2 - 1}

End;

Побудуємо словник операторів:

Побудуємо регулярний вираз програми:

Послідовне застосування обчислюючи операторів у циклі перетворимо в один оператор Регулярний вираз програми при цьому спроститься: . Інваріант програми представимо у вигляді добутку

. Далі,

Будуємо . . Знаходимо номер стабілізації ланцюжка ідеалів

.

Обчислимо

=

Отже, . Таким чином, і . Доведено, що - інваріант циклу. Відзначимо, що якщо - інваріант циклу а - тіло циклу, то - також інваріант циклу. Цей факт можна використовувати. Наприклад, якщо ідеал інваріантів циклу породжується одним поліномом ланцюжок ідеалів обірветься вже на першому кроці. У противному випадку отримаємо новий інваріант.

Нехай При перетвореннях циклу переходить в , а - в . Таким чином, ідеал інваріантів цього прикладу не є простим. Він розкладається у перетин простих ідеалів, породжених відповідно поліномами та .

Далі, обчислюємо . Отримаємо . Тому

Для доведення інваріантності треба перевірити, що Підставляючи в , переконуємося в цьому:

Приклад Генерація інваріантів методом невизначених коефіцієнтів. Процедура цього приклада здійснює поворот точки на кут доти, поки вона не потрапить в -околицю свого початкового положення .

Procedure Rotation (a, b: Real; e: Real; var x, y: Real);

var u, v: Real;

x:= a; y:= b;

u:= (4/5)*x - (3/5)*y;

v:= (3/5)*x + (4/5)*y;

x:= u; y:= v;

until Sqr((x-a)) + Sqr(y-b) < e;

end;

Cформуємо cловник операторів, редукуючи оператор у тілі циклу до виду

Програму представлено регулярним виразом .

Будемо шукати інваріант у вигляді однорідного поліному 2-ой ступені від змінних .

(6.1)

На практиці можна використовувати метод, намічений в цьому й наступному прикладах. Відзначимо, що обчислення уздовж будь-якого шляху програми, що виконуються для конкретних числових значень вхідних параметрів, приводять до лінійних рівнянь від невизначених коефіцієнтів . Розглянемо обчислення уздовж шляху

Покладемо

. Одержимо: (6.2)

. Одержимо: (6.3)

. Одержимо: (6.4)

Виключаючи з (6.1) , отримаємо:

(6.5)

Рівняння (6.2) - (6.4) лінійно незалежні. Однак, подальші обчислення показують, що рівняння, отримані при інших початкових значеннях уздовж шляху , залежать від них. Таким чином, можливості отримання нових залежностей з використанням шляху вичерпані. Розглянемо обчислення уздовж шляху . Покладемо . З (6.5) отримаємо:

(6.6)

Знаходячи з (6.6) коефіцієнт C, отримаємо:

(6.7)

Покладемо . З (6.7) отримаємо:

(6.8)

Знаходячи з (6.8) коефіцієнт , отримаємо:

Нарешті, методом a) теореми 6.2 переконаємося в тому, що - інваріант програми.

Инварианты рационально определенных программ

В [3] отмечено, что алгоритмы теоремы 2 могут быть модифицированы для рационально определенных программ. С этой целью можно рассмотреть алгоритм решения задачи 2 в случае, когда в операторе X:= H(X)

H(X) = (h1(X), …, hn(X))hi(X) = ri(X)/si(X),

причем правые части в этом операторе – несократимые дроби.

Для этого множеству X = <x1, …, xn > поставим в соответствие набор Z = < z1, …, zn >, переменные которого играют роль вспомогательных. Далее, рассмотрим набор полиномов

f1(Z), …, fk(Z), x1*s1(Z) - r1(Z), …, xn*sn(Z) - rn(Z) (11)

Построим базис Гребнера этого набора, элиминируя переменные набора Z. Полученный базис Гребнера g1(X), …, gk (X) является решением задачи 2.

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

- Проблема построения базиса .

- Проблема построения базиса векторногно пространства для программ с рекурсивными вызовами процедур. Эти программы определяются к.с. грамматиками.

 


II. Полиномиальные инварианты линейных циклов

<== предыдущая лекция | следующая лекция ==>
Основные задачи и алгоритмы | Введение. Задача генерации полиномиальных инвриантов для произвольных полиномиально определенных программ, повидимому
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 314; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.