Глава 5. Инверсное программи- рование

advertisement
Глава 5.
Инверсное
программирование
Структура курса
Область возможных
новых исследований
Иные
методы
Иные
приложения
Методы
Приложения
Базовые
понятия и методы метавычислений метавычислений
метавычислений
Суперint, SR, ptr
Приложения
компиляция
суперкомпиляции,
scp
в том числе
Окрестностный
анализ
nan
Инверсное
вычисление
ura
Специализация
программ
Инверсное
программирование
Окрестностное
тестирование
Реализация
нестандартных
семантик
[1] С.М.Абрамов «Метавычисления и их применения»
[2] Л.В.Парменова «Метавычисления и их применения. Суперкомпиляция»
Глава 5. Инверсное
программирование
Технология программирования,
основанная на использовании инверсных
вычислений
Инверсное программирование:
программист вместо того чтобы
программировать требуемую в задании
функцию f, реализует программу p,
функция которой при инверсном
вычислении совпадает с функцией f
Глава 5. Инверсное
программирование
С каждым текстом программы p можно связать не
одну, а две функции программы:
 p :: D -> EVal — обычная функция программы
(семантика):
p d = int p d
 pinv
:: Dinv -> Rinv — инверсная функция
(семантика) программы:
pinv (x,y) = ura p x y
где Dinv=(Class, Eval) — тип запросов на
инверсное вычисление;
Rinv=[(Subst,Restr)] — тип результатов
инверсного вычисления.
Перенос инверсных вычислений
на произвольный язык L
мотивация и варианты переноса
инверсных вычислений с языка R на
произвольный язык программирования L
inv :: ProgR -> D -> Dinv -> Rinv
inv intL p (x,y) = ura intL (p.:.x) y
where (.:.) :: ProgL->Class -> Class
p.:.(ces,r) = ((p:ces),r)
Корректность переноса
инверсных вычислений
Теорема. Пусть L — произвольный язык
программирования, p — L-программа,
intL — L/R-интерпретатор, x — класс,
обобщенное данное для p, y —
значение. Тогда вычисление:
inv intL p (x, y) * [(s1,r1), (s2,r2),...]
реализует инверсное вычисление и
выполнено:
Корректность переноса
инверсных вычислений
1. Классы xi = x/.(S si)/.(R ri) — попарно
непересекающиеся подклассы класса x
2. Для любого i и любого данного d <xi> —
программа p определена на d и p d * L y
3. Для любого данного d <x>, на котором
программа p определена и p d * L y,
существует номер i такой, что d <x’i>.
Кроме того, в данном случае, префикс длины
i списка будет построен inv intL p (x, y) за
конечное число шагов
Корректность inv (кратко)
Пусть L — произвольный язык
программирования, p — L-программа, intL —
L/R-интерпретатор, x — класс, обобщенное
данное для p, y — значение
Пусть inv intL p (x, y) * [(s1,r1), (s2,r2),...]
Тогда <x> (p-1 y) =
{ d | d <x>, p d * L y} =
i <x/.(S si)/.(R ri)>
Доказательство корректности
inv
inv intL p (x, y) *
[(s1,r1), (s2,r2),...]
ura intL (p.:.x) y * [(s1,r1), (s2,r2),...]
ura intL (p:ces,r) y *
[(s1,r1), (s2,r2),...]
{ pd | pd <p.:.x>, intL pd * R y} =
i <p.:.x/.(S si)/.(R ri)>
{ pd | pd <(p:ces,r)>, intL pd * R y} =
i <(p:ces,r)/.(S si)/.(R ri)>
Доказательство корректности
inv
{ pd | pd <p.:.x>, intL pd * R y} =
i <p.:.x/.(S si)/.(R ri)>
{ pd | pd <(p:ces,r)>, intL pd * R y} =
i <(p:ces,r)/.(S si)/.(R ri)>
{ p:d | p:d p:<ces,r>, intL p:d * R y} =
i p:(<(ces,r)/.(S si)/.(R ri)>)
p:{ d | d <x>, p d * L y} =
p: i (<x/.(S si)/.(R ri)>)
<x> (p-1 y) = { d | d <x>, p d * L y} =
i <x/.(S si)/.(R ri)>
Доказательство корректности
inv
inv intL p (x, y) * [(s1,r1), (s2,r2),...]
<x> (p-1 y) = { d | d <x>, p d * L y} =
i <x/.(S si)/.(R ri)>
Глава 5. Инверсное
программирование
 Сравнение логического программирования с
инверсным программированием программпредикатов:
 Свойства инверсного программирования программпредикатов позволяют рассматривать язык Linv, как
язык логического программирования.
 Инверсное программирование программ-предикатов
предоставляет больше изобразительных средств в
распоряжение программиста, нежели традиционные
языки логического программирования.
 Концепция инверсного программирования не
исчерпывается инверсным программированием
программ-предикатов. Ее можно использовать для
гораздо более широкого класса задач.
Download