360 likes | 572 Views
Системы представления знаний Knowledge Representation Systems. Автоматический синтез программ Automatic Program Synthesis Ф.А. Новиков fedornovikov@rambler.ru. Тема 6 . Автоматический синтез программ. 6.1. Задача автоматического синтеза 6. 2 . Дедуктивный синтез программ
E N D
Системы представления знанийKnowledge Representation Systems Автоматический синтез программ Automatic Program Synthesis Ф.А. Новиков fedornovikov@rambler.ru
Тема 6. Автоматический синтез программ • 6.1. Задача автоматического синтеза • 6.2. Дедуктивный синтез программ • 6.3. Синтез программ на основе метода резолюций • 6.4. Структурный синтез программ • 6.5. Индуктивный синтез программ Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Синтез 6.1. Задача автоматического синтеза программ • Идеал: • Автоматический синтез программы – по спецификации задачи • Подходы: • Дедуктивный синтез = логический вывод • Индуктивный синтез = по примерам • Трансформационный синтез = трансляция • Утилитарный синтез = все остальное Задача Программа Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
История развития 1 • 60-е годы XX века: начало • АДТ, LISP, Метод резолюций АСП • Логическая верификация ~ дедуктивный синтез • 70-е годы XX века: первая волна • Дедуктивный синтез алгоритмически неразрешим Сэр Чарльз Энтони Ричард Хоар, род. 1934 • «быстрая сортировка» • язык Z спецификаций • параллельная модель взаимодействия последовательных процессов (CSP, Communicating Sequential Process) • аксиоматика Хоара Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
История развития 2 Дана Стюарт Скотт, род. 1932 • исследования теории моделей, теории автоматов, конструктивной математики • деривационная семантика языков программирования • 80-е годы: спад Непейвода Николай Николаевич, род. 1949 • теория неформализуемых понятий и теории логического синтеза программ на базе конструктивных логик • методика логического подхода • интуиционистское доказательство теоремы существования = программа Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
История развития 3 • 90-е годы XX века:застой • ООП не способствует синтезу • XXI век:вторая волна • Генеративное программирование • Исполнимые визуальные спецификации • Модельно-центрированная разработка (Model Driven Architecture – MDA) • UML • ...СКИФ 4 Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Задача: заданы два предиката: предусловие P(x) постусловиеQ(x, y) Теорема: x (P(x) y Q(x,y)) x (P(x) Q(x,f(x))) –сколемизация Схемадоказательства: нотация Хоара (наука программирования) P(x) {y: = f(x)} Q(x, y) 6.2. Дедуктивный синтез программ Задача Теорема Доказательство Программа Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Тотальная корректность proc f(x); y:=x; whileQ(x,y) doy:=random(y)endwhile return y endproc Эффективность Алгоритма синтеза Синтезированной программы Реализуемость proc f1(x); y:=f(x); IifQ(x,y) thenreturn y elsereturnfail endif endproc Q(x, y, z) = n>2 x, y, z(xn+yn=zn) 6.2. Дедуктивный синтез программ • Из любого конструктивного доказательства теоремы существования может быть извлечена императивная программа Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
6.3. Дедуктивный синтез на основе метода резолюций Одноадресная машина с тремя ячейками и сумматором Задача:c:=a+b Команды:load, add, store 1. P(u,x,y,z,s1) P(x,x,y,z,load(a,s1)) 2. P(u,x,y,z,s2) P(u+y,x,y,z,add(b,s2)) 3. P(u,x,y,z,s3) P(u,x,y,u,store(c,s3)) 4. P(e1,e2,e3,e4,d) 5. P(u,x,y,x+y,s) ANS(s) 6. P(x+y,x,y,z,s1) ANS(store(c,s)) 5,3 7. P(x,x,y,z,s2) ANS(store(c,add(b,s))) 6,2 8. P(u,x,y,z,s3) ANS(store(c,add(b,load(a,s)))) 7,1 9. ANS(store(c,add(b,load(a,d)))) 8,4 Программа в функциональной форме Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Алгоритм извлечения программы из доказательства • Вход: дерево вывода T0 (в узлах - предложения) • Выход: схема программы T (дерево решений) • Шаг 1: на дуги отрицание литерала с унификатором (T1) • Шаг 2: удаление всех узлов (и ребер), где нет ANS (T2) • Шаг 3: переворот дерева и удаление предложений (T3) • Шаг 4: удаление литералов на дугах, выходящих из узлов с одним выходом (T) Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Пример: синтез программыy := if x>0 then 1 else –1 end if 1. P(x) Q(x,1) P(x) Q(x, 1) 2. P(x) Q(x,-1) P(x) Q(x, –1) 3. Q(x,y) ANS(y) 4. P(x) ANS(1) 1,3 5. P(x) ANS(–1) 2,3 6. ANS(1) ANS(–1) 4,5 Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Ø Ú Ø Ú Ú - Ø Ú P ( x ) Q ( x , 1 ) Q ( x , y ) ANS ( y ) P ( x ) Q ( x , 1 ) Q ( x , y ) ANS ( y ) Q(x,-1) Q(x,-1)y:=-1 Q(x,1)y:=1 Q(x,1) Ú - Ø Ú P ( x ) ANS ( 1 ) P ( x ) ANS ( 1 ) Ø P(x) P(x) P ( x ) P(x) Ú - ANS ( 1 ) ANS ( 1 ) y:=–1 y:=1 Преобразование дерева вывода Дерево доказательства Синтезированная блок-схема Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Синтез невыполнимой программы • Аксиомы: • P(x) Q(x, 1) • P(x) Q(x, –1) • Цель: • Q(x, y) ANS(y) • Вывод: • Q(x, 1) Q(x, –1) 1,2 • Q(x, –1) ANS(1) 3,4 • ANS(1) ANS(–1) 3,5 Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Ø Ú Ú - P ( x ) Q ( x , 1 ) P ( x ) Q ( x , 1 ) Ø P ( x ) P ( x ) Ø - Ú Ø Ú Q ( x , 1 ) ANS ( 1 ) Q ( x , y ) ANS ( y ) Q ( x , 1 ) Ø Q ( x , 1 ) = y : 1 Ø Ú Q ( x , y ) ANS ( y ) Ø - Ú Q ( x , 1 ) ANS ( 1 ) - Q ( x , 1 ) Ø - Q ( x , 1 ) - Q ( x , 1 ) Ø - Q ( x , 1 ) = - y : 1 = - y : 1 Ú - ANS ( 1 ) ANS ( 1 ) = y : 1 Синтез невыполнимой программы Дерево доказательства Невыполнимаяблок-схема Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Примитивная резолюция (1) • Примитивные символы исходной спецификации (константы, функциональные символы, предикаты) – те, которым разрешается появляться в синтезированной программе • P, 1, – 1 примитивные • Q не примитивный • Жизненное предложение– содержит предикат ANS • Жизненная переменная– входит в жизненное предложение • P(x) Q(x, 1) не жизненное • Q(x, –1) ANS(1) жизненное Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Примитивная резолюция (2) • C1 L1 C2 L2 C, где =Н.О.У.(L1,L2) • C является примитивной резольвентой, если • С1 и С2 - НЕ жизненные или • С1 - жизненное, С2 - не жизненное и все константы и функции, подставляемые вместо жизненных переменных в являются примитивными • С1 и С2 - жизненные и все константы функции, подставляемые вместо жизненных переменных в являются примитивными и предикатыL1и L2являютсяпримитивными • Примитивная резолюция полна Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Ø Ú Ø Ú Ú - Ø Ú Ø Ú Ú - P ( x ) Q ( x , 1 ) Q ( x , y ) ANS ( y ) P ( x ) Q ( x , 1 ) Q ( x , y ) ANS ( y ) P ( x ) Q ( x , 1 ) P ( x ) Q ( x , 1 ) Ø - Ú Ø Ú Q ( x , 1 ) ANS ( 1 ) Q ( x , y ) ANS ( y ) Ú - Ø Ú P ( x ) ANS ( 1 ) P ( x ) ANS ( 1 ) Ø Ú Q ( x , y ) ANS ( y ) Ø - Ú Q ( x , 1 ) ANS ( 1 ) Ú - ANS ( 1 ) ANS ( 1 ) Ú - ANS ( 1 ) ANS ( 1 ) Пример: y := if x>0 then 1 else –1 end if Не жизненная! Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
y1:=0 A y1=x y1x y1:=y1+1 y:=y2 B Синтез циклических программ (1) 1. R(0,1) R(x,y):= y=f(x) f(0)=1 2. R(x,y)R(x+1,(x+1)*y) f(x+1)=(x+1)*f(x) (y R(0,y)x (y1R(x,y1)y2 R(x+1,y2))) x y R(x,y) 3. R(0, y2) ANS(y2) 4. R(y1,y2) 5. R(y1+1, y2)ANS(y2) Специальная схема для частного случая Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
y1:=0 y2:=1 y1=x y1x y1:=y1+1 y:=y2 y2:=(y1+1)*y2 Синтез циклических программ (2) В общем случае невозможно автоматически догадаться, какую схему нужно применить • Синтез программы А: • 6. ANS(1) из 1,3 т.е. A = y2:=1 • Синтез программы B: • 7. R(y1+1,(y1+1)*y2)ANS(y2) из 2,3 • 8. ANS((y1+1)*y2) из 5,7 • т.е. A = y2:=(y1+1)*y2 Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
6.3. Структурный синтез программ • Синтез программ из операторов: не стоят трудов • Примитивы: не операторы, а БОЛЬШИЕ компоненты (библиотека программ) • Правильность программы определяется правильностью компонент (не доказывается) • Синтезируется только управляющая структура (все вычисления заданы заранее в компонентах) • Ограничение: нет времени ( x := f(… , x, …) ) Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
70-е годы XX века: Таллинн Тыугу Энн Харальдович, род. 1935 идея структурного синтеза программ система ПРИЗ – Программа Решения Инженерных Задач - реализация 80-е: Ленинград под руководством С.С. Лаврова идея была значительно развита несколько десятков реализаций Настоящее время: В.Б.Новосельцев programming in constraints, СКИФ 4 История развития Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Синтез программ в концептуальных базах знаний • База знаний: понятия (величины, атрибуты) и система отношений (связей) = модель предметной областиM • Этапы: • Синтезируется «абстрактная» программа решения исходной задачи в концептуальной компоненте базы знаний M (здесь же проводится анализ разрешимости задачи) • Конкретизация зависимостей → конкретная программа • Вычислительная задача → Дерево анализа задачи → Программа решения задачи Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Модель предметной области(Семантическая вычислительная сеть) Направленный двудольный граф x Множество функций F Множество переменных V M f g y Модель предметной области: M = {( X f Y)} fF, XV, YV Задача: на Mнайти Wпо U Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Алгоритм прямой волны Трудоемкость O(|M|2) Proc Wave (U, W, M) : P S:=U;P:= L: if WS thenreturnOKendif g:=nil forfFdo if X(f)S & Y(f)S then g:=f endif endfor ifg=nilthenreturnfail else S:=SY(g); F:=F\{g}; P:=P+g; goto L endif endproc Обратная волна - чистка программы Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Предварительная обработка МПО Каждый узел входит в 2 двухсвязных списках Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Proc S(u) for xX(u) do del(x) if f(x).l=nilthen G:=G+f /* применима */ endif endfor for yY(u) do del(y) if f(y).r=nilthen G:=G\{f} /* бесполезна*/ endif endfor endproc Proc DU(U,W,M) P:=nil; G:=nil foruUdo W:=W\{u}; S(u) endfor L: if W= thenreturn P endif ifG=nilthenreturnfailendif g:=car(G); G:=cdr(G); P:=P+g foryY(g) do S(y); W:=W\{y} endfor goto L endproc Алгоритм Диковского-Ульмана Линейный по длине модели P - синтезируемая программа G - список применимых функций f(u) - функциональный узел для узла u Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Расширения и границы применимости • Условные предложения вычислимости • определяется условие, при котором можно использовать некоторое уравнение • синтезируются линейно-ветвящиеся программы • R-предложения вычислимости • отношения, а не функции; граф неориентированный • процедуры • Рекуррентные предложения вычислимости • составляются по уравнениям типа F[n] = F[n–1]+F[n–2] • циклические программы определенного вида • Предложения вычислимости с функционалами • процедуры с процедурными параметрами • Рекурсивные предложения вычислимости • рекурсивные программы ограниченного вида Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
6.5. Индуктивный синтез программ • Очень любопытный подход, но не очень популярный • Синтез программ по примерам (протоколам выполнения) • Синтез общих утверждений по частным • Синтез доказательства для общего случая по доказательствам для частных случаев • Т.е. усмотрение общих закономерностей: повторений, прогрессий, … Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Многоточечные термы • Алфавит A: N – числа, W – буквы, U – разделители ( ) [ ] { }, T – специальные < > … • Символьная разность: xy:= 0, если x=y; x-y, если x,yN; не определено в остальных случаях • …-терм: выражение D=<a1 a2 an … b1 b2bn> где ai,biAи qZi 1≤i≤n bi=aibiai=qqназывается фактором …-терма • Значение …-термаV(D):=d10…dn0 d11…dn1… … d1|q|…dn|q| где di0 = ai, di|q| =biи dijdij–1 = 0, если bi=ai; dijdij–1 = +1, если biai>0; dijdij–1 = –1, если biai>0 Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Многоточечные слова и выражения • Если XNили XW,то X …-слово • Если X …-слово, то (X) {X} [X] …-слова • Если X и Y …-слова, то XY …-слово • Если X и Y …-слова, то <X…Y> …-слово если выполнены условия …-терма • Значение …-слова: рекурсивно по термамПример: E = <<1…3>…<1…1>> <(4)(3)…(2)(1)>V(E) = <1…3> <1…2> <1…1> (4)(3)(3)(2)(2)(1)= 1 2 3 1 2 1 (4)(3)(3)(2)(2)(1) • …-выражение это …-слово с параметром k<<1…k>…<1…1>> <(k+1)(k)…(2)(1)> Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Формальные примеры • Пример использования языка …-выражений<<if A(1)>A(2) then A(1)A(2);… if A(k-1)>A(k) then A(k-1)A(k);> …<if A(1)>A(2) then A(1)A(2);… if A(1)>A(2) then A(1)A(2);>> • Формальный пример – значение …-выражения для заданного значения k • Значение предыдущего …-выражения для k=3if A(1)>A(2) then A(1)A(2); if A(2)>A(3) then A(2)A(3); if A(1)>A(2) then A(1)A(2); • …-выражения – форма записи циклических программ Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Правила вывода • Подслово Y слова X называется (s,t) регулярным, если оно является значением …-терма D = <x11 xs1…x1txst> • M(X) max входящее из N, m(X) – min • f – некоторая целочисленная функция • Правило Af: ищем самое левое максимальное (s,t)-регулярное подслово, такое что t>f(M(X)) и заменяем его на …-терм • Правило B: числа х > (M(X)+m(X))/2 заменяем выражением k-c, где с = M(X)-x • Правило В применимо только если не применимо Af Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Вывод ...-выражения из формального примера • Пусть слово: X = A(1) A(2) A(3) A(4) A(1) A(2) A(3) A(1) A(2) A(1) • Ограничение: f – целая часть квадратного корня, f(M(X))=2 ВыводA(1) A(2) A(3) A(4) A(1) A(2) A(3) A(1) A(2) A(1)<A(1)…A(4)> A(1) A(2) A(3) A(1) A(2) A(1)<A(1)…A(4)> <A(1)…A(3)> A(1) A(2) A(1)<A(1)…A(4)> <A(1)…A(3)> <A(1)…A(2)> A(1)<A(1)…A(4)> <A(1)…A(3)> <A(1)…A(2)><A(1)…A(1)><A(1)…A(k)><A(1)…A(k-1)><A(1)…A(2)><A(1)…A(1)>< <A(1)…A(k)>… <A(1)…A(1)>> Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Основной результат • Два …-выражения называются почти эквивалентными, если их значения совпадают почти для всех значений k • X c k>c (SAf,B(V(X,k)X) • Для любого …-выражения существует такая константа, что для любого формального примера этого выражения, более длинного, чем заданная константа, результат индуктивного синтеза по данному примеру почти эквивалентен исходному …-выражению Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ
Вот и все, что было... Ф. Новиков. SPZ. Тема 6. Автоматический синтез программ