91299f234a4c6522a7366ebf9ee18979.ppt
- Количество слайдов: 42
Специализация функциональных программ методами суперкомпиляции Андрей Петрович Немытых Институт Программных Систем РАН.
Реализация функционального языка Определение 1. Реализацией функционального языка программирования R назовём четвёрку
, где множество P называется множеством R-программ, множество D называется множеством R-данных; частично рекурсивные функции U: P D D и T: P D N называются соответственно универсальной функцией (или семантикой) и сигнализирующей функцией времени языка R. Здесь N – множество натуральных чисел. Рассмотрим реализацию функционального языка программирования R =
где D = n N Mn для некоторого непустого множества M. 2
Задача специализации • Пусть программа p(x, y) из P, определяет функцию F(x, y): X Y D, где X D, Y D. Зафиксируем значение первого аргумента этой функции x 0 X. В задаче специализации требуется построить другую программу qp(y) P такую, что y Y. (qp(y) = p(x 0, y)) (T(qp, y) T(p, x 0, y)). Таким образом, программа qp определяет некоторое продолжение функции F(x 0, y) по второй компоненте. Программу qp называют остаточной программой. 3
Простейший пример специализации n 0=10 Специализатор qp(m) p(n, m) -- умножение натуральных чисел qp(m) = p(10, m) = m 0 4
Пример специализации • p(x, n) = xn , ------ 315 = 3*314 = 3*97 = 3*(3*96) = 3*(3*813) = 3*(3*(81*812)) = 3*(3*(81*6561)) = 14348907 ------ в прямом алгоритме 14 умножений; ------ в данном алгоритме 6 умножений; • p(x, n 0) = p(x, 2), n 0 = 2; p(x, 0) = 1; p(x, 2*n+1) = x*p(x, 2*n); p(x, 2*n+2) = p(x*x, n+1); • Остаточная программа: q(x) = x*x 5
История вопроса • 70 -е годы XX века – А. П. Ершов (смешанные вычисления). – В. Ф. Турчин (суперкомпиляция). – Y. Futamura (generalized partial computation). • 80 -е годы XX века – N. D. Jones (частичные вычисления) 6
Суперкомпиляция. . . • Основная цель суперкомпиляции: – выполнить как можно больше действий параметризованного применения программы равномерно по значениям параметров. . . . предыдущий узел . . 7
Пример дерева развёртки программы (дерева конфигураций) S( n, 1+m) = 1+S( n, m ); S( n, 0 ) = n; m>0 S(n, m) 1+S(n, m-1) m =? 0 m-1 > 0 1+(1+S(n, m-2)) . . … m-2 =? 0 m-1 =? 0 n m-2 > 0 1+n 2+n 8
Аппроксимация образа функции— вычисление выходных форматов функций • F(x, y) = g(h(x, y)), h(x, y) = x; F(x 0, y) = g(x 0); • . 9
Введение в РЕФАЛ (данные) РЕФАЛ (В. Ф. Турчин) строгий функциональный язык первого порядка, в котором конкатенация ассоциативна. Имеется также унарный конструктор для построения структура дерева. Семантика языка базируется на отождествлении по образцу и модели вычислений – алгорифмах Маркова. Данные РЕФАЛа определяются следующей грамматикой: d : : = (d 1) | d 1 d 2 | SYMBOL | empty : : = /* nothing */ Example: (A + B) * (C – D) * A + B C - D 10
Введение в РЕФАЛ (ассоциативность конкатенации) Example 1: Example 2: (Refal style reversing) * The palindrome predicate: * Reversing a list of terms: Palindrome { rev { = True; t. x e. ys =
SCP 4 как простой theorem prover Задача: $ENTRY Go { e. ls =
Использование SCP 4 для упрощения определений Задача: Решить уравнение 'a' X = X 'a', где область допустимых значений переменной X есть множество конечных строк. $ENTRY Go { e. x =
Алгоритм Маканина и суперкомпиляция Задача: Решить уравнение сопряжения x y = z x в свободном моноиде. xy=zx x' x |x| |z| x z x' x' y = z x' |x| < |z| z x z' y = z' x Параметризация: z' = s , x = r, z = r s, y = s r, x = zn x' = (r s)n r. 14
Частично рекурсивные тождественные функции • Частично рекурсивная функция F(x): D D тождественная на её области определения: x О. Д. З. F(x) = x 15
Достаточное условие тождественности F: , - множество пропозициональных формул. F( x ) = F(F( x )); F( x y ) = F( x ) F( F( y )); F( x y ) = F(F( F( x ))) F( y ); F( x y ) = F(F( x )) F(F( F( F( y )))); F( ) = ; После стирания всех метасимволов левые части равенств должны совпадать с правыми частями. Здесь переменные x, y пробегают множество пропозициональных формул; переменная пробегает множество пропозициональных переменных. 16
Частично рекурсивные мономы приписывания Определение. Пусть D – множество конечных последовательностей символов (конечных строк символов). Частично рекурсивную функцию F: Dn D назовём частичным моно- мом приписывания, если k 1 , k 2 , …, km и j 1 , j 2 , …, jm такие, что ki N, s. js N, n js > 0 и (x 1 , x 2 , …, xn) О. Д. З. Здесь операция умножения – приписывание строк; возведение в степень относится к той же операции. 17
Примеры рекуррентных определений частичных мономов приписывания F(x) = g(x, ); g( x, y) = g(x, y ); g( , y) = y; Здесь переменные x, y пробегают множество конечных строк символов; переменная пробегает множество символов. F(x) = x x g(x, y) = x y x 18
Пример формального повышения местности Переменные x, y пробегают множество g( x, y) = g(x, y ); конечных строк символов; переменная g( , y) = y; пробегает множество символов. • g 2, 1( x 1, x 2, y) g 2, 1( x, y) = g 2, 1(x, x, y ); g 2, 1( , , y) = y; • g(x, y) = g 2, 1( x, x, y) 19
Пример Переменные x, y пробегают множество g( x, y) = g(x, y ); конечных строк символов; переменная g( , y) = y; пробегает множество символов. • (1) = 1, (2) = 3, (3) = 2 g 2, 1( x, y, x) = g 2, 1(x, y , x); g 2, 1( , y, ) = y; • g(x, y) = g 2, 1(x, y, x) = x y x g 2, 1( x, y, x) = g 2, 1(x, y , x); g 2, 1( , y, ) = y; 20
Достаточное условие мономиальности Теорема. Пусть D – множество конечных строк символов. Пусть дано рекуррентное определение P частично рекурсивной функции F: Dn D. Предположим, что k 1 , k 2 , …, km такие, что ki N и перестановка параметров определения такая, что определение (программа) Q, полученная из формальным стиранием запятых разделяющих аргументы, определяет частично рекурсивную тождественную функцию, тогда определение P определят частично рекурсивный моном приписывания. 21
Стратегия выбора гипотезы мономиальности • На основании пассивных правых частей: они являются базисными случаями выхода из рекурсии. • Пассивные правые части не меняются при определённых ранее преобразованиях. • В g (пример на пред. слайде) существует бесконечно много гипотез вида: xk y xm 22
Достаточное условие конечности числа гипотез • Утверждение. Пусть в программе g существует хотя бы одно предложение g(p 1, . . . , pn) =. . . такое, что правая часть не содержит g(. . . ) и для всех k pk отличны от пустых строк. Тогда может существовать лишь конечное число гипотез, которые можно построить в рамках описанной выше стратегии. 23
Приложения. Доказательство свойств программ • Верифицированы параметризованные протоколы когерентности кэш-памяти (cache coherence): – IEEE Futurebus+, MOESI, MSI, “The University of Illinois”, DEC Firefly, “Berkeley”, Xerox PARC Dragon. • Верифицированы протоколы: – Java Meta-Locking Algorithm, Reader-Writer protocol, Steve German's directory-based consistency protocol. 24
Структура доказательства корректности протокола MOESI (индукция по структуре данных) Theorem 1 Theorem 2 True # 2 Lemma 4 $ # 8 $ $ 5 $ True 6 7 25
Структура доказательства корректности программной модели протокола Dragon (индукция по структуре данных) 26
Структура доказательства корректности программной модели протокола Dragon (индукция по структуре данных) 27
Математическая индукция и свойства обобщения конфигураций Выбор конфигураций для обобщения: – вариант упрощающего отношения Higman-Kruskal-а; – монотонность по функциям-конструкторам: • F 1(t 1, t 2) = t 1 t 2 , F 2(t 1) = (t 1) , Ff(t 1) =
Верификация Xerox PARC Dragon cache coherence протокола В результате анализа остаточной программы обнаружена ошибка описания протокола: – G. Delzanno, Automatic Verification of Parameterized Cache Coherence Protocols. и построен тест, указывающий на ошибку. • Удачно проверифицирована корректная версия описания этого протокола: – http: //www. disi. unige. it/person/Delzanno. G/protocol. html 29
Почему это происходит? (по поводу тезиса Чёрча) Конечный набор простейших операций, допускаемых в машине Тьюринга: – многообразие их композиций дает все алгоритмы. и в это трудно поверить. • Аналогичная ситуация с суперкомпиляцией. 30
История вопроса • 70 -е годы XX века – А. П. Ершов (смешанные вычисления). – В. Ф. Турчин (суперкомпиляция). – Y. Futamura (generalized partial computation). • 80 -е годы XX века – N. D. Jones (частичные вычисления) 31
SCP 4 as a simple theorem prover (идея Александра Корлюкова) Задача (по мотивам Л. Ф. Магнитцкого): Летит стая гусей. Навстречу ей гусь: “Привет сотня гусей!”. Вожак отвечает: “Нас не сотня. Если всех нас сосчитать и прибавить ещё столько же, и пол-столько, и четверть-столько, да ещё и тебя, Гусь, тогда получится сотня. ” Вопрос: Сколько гусей в стае? $ENTRY Go { e. n =
Вопрос: Сколько гусей в стае? Ответ данный суперкомпилятором SCP 4: $ENTRY Go { 'gggggggggggggggggggg' e. n = FALSE ; * The following string has 36 of 'g' (of geese). 'gggggggggggggggggg' = TRUE ; 'gggggggggggggggg' = FALSE ; * The length of the (n+3)-th left side is 36 -4(n+1), * while the right side is FALSE. . . . = FALSE ; } Мы не только ответили на поставленный вопрос, но и доказали что других решений не существует. В процессе суперкомпиляции произошла индукция по e. n и рекурсия данная в исходной программе удалена. 33
Более адекватная кодировка Counter { e. n =
Головоломка (Эйнштейн): (идея использования Александра Корлюкова) Имеются 5 домов раскрашенные в разные цвета, в каждом доме живёт один человек. Все они разной национальности, предпочтения к напиткам у всех разные, все они курят разные сорта сигарет и имеют слабость к совершенно разным животным. Дано: 1. Англичанин живёт в красном доме. КТО 2. У шведа живёт собака. Д 3. Датчанин пьёт чай. Е 4. Зелёный дом – ближайший слева от белого дома. Р 5. Хозяин зелёного дома пьёт кофе. Ж 6. Курящий сигареты Pall. Mall держит птицу. И 7. Жилец центрального дома пьёт молоко. Т 8. Хозяин жёлтого дома курит Dunhill. 9. Норвежец живёт в первом доме. 10. Поклонник Marlboro – сосед любителя кошек. Р 11. Любитель покататься на лошади – сосед фаната сигарет Dunhill. Ы 12. Один из них предпочитает курить Winfield потягивая пиво. Б 13. Дом норвежца – соседний к синему дому. У 14. Немец курит Rothmans. ? 15. Поклонник Marlboro соседствует с поклонником чистой водички. 35
Вопрос: кто держит рыбку? Определение Zi есть переформулировка i-ого утверждения в терминах РЕФАЛа. Look. For. Fish { (s. 1 s. 2 s. 3 Fish s. 5) e. b = s. 1 ; (s. 1 s. 2 s. 3 s. 4 s. 5) e. b =
Входная точка программы: $ENTRY Puzzle { e. buildings =
Формулировка задачи и результат суперкомпиляции Параметризованная входная конфигурация:
Фильтрация $ENTRY Puzzle { e. buildings =
Аппроксимация цикла в стеке функций: Обнинское условие Турчина Предполагаемое развитие стека функций: Top; Middlen; Context Previous top Current top Context Middle Context Имена вызовов функций в стеке помечаются временем их создания - Previous и Current. Скажем, что эта пара стеков указывает на цикл, если стеки можно представить в виде: Previous = Previous. Top; Context; Current = Current. Top; Middle; Context; где дно стеков есть совпадающий отрезок наибольшей длины, т. е. эта часть не участвовала в вычислении вдоль пути от одного стека до другого, а “вершины” стеков ( Previous. Top = F 1 ptime_1, …, FNptime_n Current. Top = F 1 ctime_1, …, FNctime_n ) совпадают с точностью до времен создания. Context определяет вычисления сразу за циклом. 40
Обнинское условие Турчина (пример) Определение унарного факториала. $ENTRY Inc. Fact {e. n =
Спасибо! 42


