Глава 4. Универсальный решающий алгоритм

advertisement
Глава 4.
Универсальный
решающий
алгоритм
Структура курса
Область возможных
новых исследований
Иные
методы
Иные
приложения
Методы
Приложения
Базовые
понятия и методы метавычислений метавычислений
метавычислений
Суперint, SR, ptr
Приложения
компиляция
суперкомпиляции,
scp
в том числе
Окрестностный
анализ
nan
Инверсное
вычисление
ura
Специализация
программ
Инверсное
программирование
Окрестностное
тестирование
Реализация
нестандартных
семантик
[1] С.М.Абрамов «Метавычисления и их применения»
[2] Л.В.Парменова «Метавычисления и их применения. Суперкомпиляция»
Глава 4. Универсальный
решающий алгоритм
 УРА — один из методов метавычислений,
позволяющий выполнять инверсное вычисление
программ
Проблема инверсного вычисления
программы — построение представления
множества:
<x>p-1y = { d | d <x>, p d *
<x> (p-1 y)
y}=
где p — TSG-программа, x — класс
(обобщенное данное для p), y EVal — езначение
Глава 4. Универсальный
решающий алгоритм
Актуальность проблемы:
 вычисление функции, обратной к функции
заданной программы
 построение множества истинности
программы-предиката
 обработка сложных запросов к базе знаний
 решение уравнений, без разработки
специальных методов и алгоритмов их
решений
Структура URA
запрос на инверсное
вычисление
p
x
ppt
перфектное
дерево
процессов
tree
y
tab’
L
табличное
представление
функции
программы
urac
ans
ответ
на запрос
инверсного
вычисления
Глава 4. Универсальный
решающий алгоритм
Алгоритм tab приведения функции программы к
табличной форме
tab p x *
L = [(x1,cex1), (x2,cex2),...]
где xi — непересекающиеся подклассы x, cexi — cвыражения
Для любого d <x> выполнено:
cexi/.s
— если d <xi> и s — подстаpd=
новка, xi/.s = (d,RESTR[])
undefined — если нет i такого, что d <xi>
Глава 4. Универсальный
решающий алгоритм
Две модификации ura’ и ura универсального
решающего алгоритма:
ura’ p x y *
L’ = [x1, x2,...]
ura p x y *
L = [(s1,r1), (s2,r2),...]
 ura’
перечисляет подклассы xi класса x, на
которых вычисление p приводит к результату
y: p <xi> = {y}
 ura перечисляет значения c-переменных из x,
при которых вычисление p приводит к
результату y: p <x/.(S si)/.(R ri)>={y}
Глава 4. Универсальный
решающий алгоритм
«Естественность» перечисления
В некоторых случаях ura’ позволяет
построить конечное представление
множества <x>p-1y — список L’ может
быть пустым или конечным
Примеры инверсного вычисления для
языка TSG
Обзор иных подходов к инверсии
программ
4.1 Приведение программы
к табличной форме
type TLevel = [(Class,Tree)]
type Tab = [(Class, CExp)]
tab :: ProgR -> Class -> Tab
tab p x = tab’ [ (x,tree) ] [ ]
where tree = xptr p x
4.1 Приведение программы
к табличной форме
tab’ :: TLevel -> TLevel -> Tab
tab’ ((xi, LEAF c):lv1) lv2 =
(xi,cex):(tab’ lv1 lv2)
where
((exp,ce),_) = c
cex = exp/.ce
tab’ ((xi, NODE _ bs):lv1) lv2 = tab’ lv1 lv2’
where lv2’ = tabB xi bs lv2
tab’ [ ]
[]=[]
tab’ [ ]
lv2 = tab’ lv2 [ ]
4.1 Приведение программы
к табличной форме
tabB :: Class -> [Branch] -> TLevel
->TLevel
tabB xi ((cnt,tree):bs) lv =
tabB xi bs ((xi/.cnt,tree):lv)
tabB xi [ ]
lv = lv
4.1 Приведение программы
к табличной форме
Теорема 12 Пусть p — произвольная
программа на языке TSG, x — класс,
обобщенное данное для p. Тогда
алгоритм tab по заданным p и x строит
перечислениe — то есть список
L=[(x1,cex1),(x2,cex2),...], возможно
бесконечной длины:
tab p x *
L
где xi — класс, cexi — c-выражение над
переменными из класса xi. При этом
выполнено следующее:
4.1 Приведение программы
к табличной форме
1. Классы xi — попарно непересекающиеся
подклассы класса x
2. Для любого i и любого d <xi> — программа
p определена на d
3. Для любого данного d <x>, на котором
программа p определена — p d * res —
существует i такой, что d <xi>, и если
подстановка s такая, что xi/.s=(d, RESTR[]),
то выполнено res=cexi/.s. Кроме того, в
данном случае, префикс длины i списка L
будет построен алгоритмом tab за конечное
число шагов.
4.2 Алгоритм инверсного
вычисления программ
ura’ :: ProgR -> Class -> EVal -> Classes
ura’ p x y = urac (tab p x) y
urac :: Tab -> EVal -> Classes
urac ((xi, cex):ptab’) y =
case (unify [cex] [y]) of
(False,_) ->
tail
(True, s) -> case xi’ of
(_, INCONSISTENT) -> tail
_
-> xi’:tail
where xi’ = xi/.s
where tail = urac ptab’ y
urac [ ]
y=[]
4.2 Алгоритм инверсного
вычисления программ
Теорема 13 Пусть p — произвольная
программа на языке TSG, x — класс,
обобщенное данное для p, y — eзначение (y Eval).
Тогда алгоритм ura’ по заданным p, x, y
строит перечислениe — то есть список
L’=[x’1,x’2,...], возможно бесконечной
длины:
ura’ p x y * L’
При этом выполнено следующее:
4.2 Алгоритм инверсного
вычисления программ
1. Классы x’i — попарно непересекающиеся
подклассы класса x
2. Для любого i и любого данного d <x’i> —
программа p определена на d и p d = y
3. Для любого данного d <x>, на котором
программа p определена и p d = y,
существует номер i такой, что d <x’i>.
Кроме того, в данном случае, префикс длины
i списка будет построен алгоритмом ura’ за
конечное число шагов
Теорема 13 кратко
Пусть p — произвольная программа на
языке TSG, x — класс, c-данное для p, y —
e-значение (y Eval).
Пусть ura’ p x y *
[x’1,x’2,...]
Тогда <x> (p-1 y) =
{ d | d <x>, p d *
i <x’i>
y} =
4.3 Альтернативное представление
результатов инверсного вычисления
ura :: ProgR -> Class -> EVal ->
[(Subst,Restr)]
ura p x y = map altRepr (ura’ p x y)
where altRepr:: Class -> (Subst,Restr)
altRepr xi = subClassCntr x xi
4.3 Альтернативное представление
результатов инверсного вычисления
subClassCntr :: Class -> Class -> (Subst,Restr)
subClassCntr x@(cesx,rx) x’@(cesx’,rx’) = (s, r)
where
(True,s) = unify cesx cesx’
RESTR ineqs = rx/.s
r = case rx’ of
INCONSISTENT -> INCONSISTENT
RESTR ineqs’ -> RESTR
[ ineq | ineq<-ineqs’,
not(ineq‘elem‘ineqs)]
Корректность ura (кратко)
Пусть p — произвольная программа на
языке TSG, x — класс, c-данное для p, y —
e-значение (y Eval).
Пусть ura p x y *
[(s1,r1), (s2,r2),...]
Тогда <x> (p-1 y) =
{ d | d <x>, p d * y} =
i <x/.(S si)/.(R ri)>
4.4 Универсальный
решающий алгоритм. Примеры
str = CONS ’A(CONS ’B(CONS ’C ’NIL))
x = ( [E.1,str], RESTR[])
aaa = CONS ’A(CONS ’A(CONS ’A ’NIL))
xa = ( [E.1,aaa], RESTR[])
true
= ’SUCCESS
false = ’FAILURE
4.4 Универсальный
решающий алгоритм. Примеры
ura prog x true =
[([E.1 :-> A.4],RESTR[]),
([E.1 :-> CONS ’A A.10],RESTR[]),
([E.1 :-> CONS ’A (CONS ’B A.16)],RESTR[]),
([E.1 :-> CONS ’B A.10],RESTR[]),
([E.1 :-> CONS ’A (CONS ’B (CONS ’C A.22))],
RESTR[]),
([E.1 :-> CONS ’B (CONS ’C A.16)],RESTR[]),
([E.1 :-> CONS ’C A.10],RESTR[])]
4.4 Универсальный
решающий алгоритм. Примеры
 ura prog xa true =
[ ([E.1 :-> A.4],[]),
([E.1 :-> CONS ’A A.10],[]),
([E.1 :-> CONS ’A (CONS ’A A.16)],[]),
([E.1 :-> CONS ’A (CONS ’A
(CONS ’A A.22))],[])
]
 ura prog x false = … класс, какой
результат? ...
4.4 Универсальный
решающий алгоритм. Примеры
 ura prog x false =
[ ([E.1:->CONS (CONS E.13 E.14) E.11],[]),
([E.1:->CONS ’A (CONS (CONS E.19 E.20) E.17)],[]),
([E.1:->CONS ’A (CONS ’B (CONS (CONS E.25 E.26) E.23))],[]),
([E.1:->CONS ’B (CONS (CONS E.19 E.20) E.17)],[]),
([E.1:->CONS ’A (CONS ’B (CONS ’C (CONS
(CONS E.31 E.32) E.29)))],[]),
([E.1:->CONS ’A (CONS ’B (CONS ’C (CONS E.33 E.29)))],[]),
([E.1:->CONS ’B (CONS ’C (CONS (CONS E.25 E.26) E.23))],[]),
([E.1:->CONS ’B (CONS ’C (CONS A.27 E.23))],[]),
([E.1:->CONS ’C (CONS (CONS E.19 E.20) E.17)],[]),
([E.1:->CONS ’C (CONS A.21 E.17)],[]),
([E.1:->CONS A.15 E.11], [A.15:≠:’A, A.15:≠:’B, A.15:≠:’C]),
([E.1:->CONS ’A (CONS A.21 E.17)], [A.21:≠:’B]),
([E.1:->CONS ’B (CONS A.21 E.17)], [A.21:≠:’C]),
([E.1:->CONS ’A (CONS ’B (CONS A.27 E.23))], [A.27:≠:’C])
]
4.4 Универсальный
решающий алгоритм. Примеры
Когда (критерий!) ura завершает свою
работу за конечное число шагов?
(Аудитория отвечает!)
p
x
ppt
tree
y
tab’
L
urac
ans
Критерий
Пусть p — произвольная программа на
языке TSG, x — класс, c-данное для p, y
— e-значение (y Eval). Тогда
следующие условия равносильны
 ura p x y терминируется
 xptr p x — конечное дерево
 xptr p x имеет конечную глубину L
 L: d <x> вычисление p d *
…
завершается не более чем за L шагов
Различные подходы к инверсному
вычислению и инверсии программ
«Прочтение в обратном порядке» программы
(или графа программы)
 Не всегда это возможно
 Reversible programming
Трансформационный подход (Burstall,
Darlington)
«Анализ грамматики» — терминируемость,
полнота, но нет непротиворечивости
УРА — не единственный подход к проблеме,—
доказательство существования решения
полного и непротиворечивого (без
терминированности).
Глава 4. Универсальный
решающий алгоритм
 УРА — один из методов метавычислений,
позволяющий выполнять инверсное вычисление
программ
Проблема инверсного вычисления
программы — построение представления
множества:
<x>p-1y = { d | d<x>, p d *
<x> (p-1 y)
y}=
где p — TSG-программа, x — класс
(обобщенное данное для p), y EVal — езначение
Глава 4. Универсальный
решающий алгоритм
Актуальность проблемы:
 вычисление функции, обратной к функции
заданной программы
 построение множества истинности
программы-предиката
 обработка сложных запросов к базе знаний
 решение уравнений, без разработки
специальных методов и алгоритмов их
решений
Структура URA
запрос на инверсное
вычисление
p
x
ppt
перфектное
дерево
процессов
tree
y
tab’
L
табличное
представление
функции
программы
urac
ans
ответ
на запрос
инверсного
вычисления
Глава 4. Универсальный
решающий алгоритм
Алгоритм tab приведения функции программы к
табличной форме
tab p x *
L = [(x1,cex1), (x2,cex2),...]
где xi — непересекающиеся подклассы x, cexi — cвыражения
Для любого d <x> выполнено:
cexi/.s
— если d <xi> и s — подстаpd=
новка, xi/.s = (d,RESTR[])
undefined — если нет i такого, что d <xi>
Глава 4. Универсальный
решающий алгоритм
Две модификации ura’ и ura универсального
решающего алгоритма:
ura’ p x y *
L’ = [x1, x2,...]
ura p x y *
L = [(s1,r1), (s2,r2),...]
 ura’
перечисляет подклассы xi класса x, на
которых вычисление p приводит к результату
y: p <xi> = {y}
 ura перечисляет значения c-переменных из x,
при которых вычисление p приводит к
результату y: p <x/.(S si)/.(R ri)>={y}
Глава 4. Универсальный
решающий алгоритм
«Естественность» перечисления
В некоторых случаях ura’ позволяет
построить конечное представление
множества <x>p-1y — список L’ может
быть пустым или конечным
Примеры инверсного вычисления для
языка TSG
Обзор иных подходов к инверсии
программ
Download