КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |