1 / 30

Суперкомпилятор SCP4

Верификация как параметрическое тестирование. ( Эксперименты с суперкомпилятором SCP4.) Алексей Лисица The University of Liverpool, Андрей П. Немытых Институт программных систем РАН. Суперкомпилятор SCP4. - экспериментальный специализатор функционального языка программирования РЕФАЛ -5.

jeb
Download Presentation

Суперкомпилятор SCP4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Верификация как параметрическое тестирование.(Экспериментыс суперкомпилятором SCP4.)Алексей ЛисицаThe University of Liverpool,Андрей П. НемытыхИнститут программных систем РАН.

  2. Суперкомпилятор SCP4 • - экспериментальный специализатор функционального языка программирования РЕФАЛ-5. • Реализован также на РЕФАЛе-5. • Исходные тексты суперкомпилятора, исполняемые модули и исходные тексты РЕФАЛа-5 свободно распространяются: http://www.botik.ru/pub/local/scp/refal5/ (Андрей П. Немытых и Валентин Ф. Турчин) Windows 98, Windows NT/2000/XP, Linux (Intel)

  3. Верификацияпараметризованныхсистемсуперкомпилятором SCP4. ( http://www.csc.liv.ac.uk/~alexei/VeriSuper/ ) • Удачные экспериментыпо верификации cache coherence протоколов с глобальными свойствами: • IEEE Futurebus+, MOESI, MESI, MSI, “The University of Illinois”, DEC Firefly, “Berkeley”, Xerox PARC Dragon. • А также параметризованных протоколов: • Java Meta-Locking Algorithm, Reader-Writer protocol.

  4. Тестирование. • Пусть дана общерекурсивная функция f: D  M, Im(f) является подмножеством множества истинности общерекурсивного предиката . • ПустьP – программа, реализующая ;Pf – программа, d0D завершающая исполнение вызова Pf(d0) в конечное время, и о которой предполагается что она реализует f. • Тестированием Pfпо постусловию  назовём программу T: D  {True, False} , реализующую композицию P∘Pf . • d0Dрезультат вычисления T(d0) = Trueподтверждает корректность Pf на d0, аT(d0) = Falseдаёт тестd0, на котором корректность нарушается.

  5. Верификация. • Перебор всего множества D с корректным результатом тестирования верифицирует Pf по постусловию . • Пусть – оптимизирующая программа, результат вычисления которой (P∘Pf,d) есть программа , обладающая простым синтаксическим свойством, позволяющим утверждать, что Im() = {True}. • Пусть результат оптимизации, по определению , всегда реализует некоторое расширение частичной функции, которая реализована преобразуемой программой (в нашем случае P∘Pf). • В таком случае получаем верификацию Pf по постусловию .

  6. Суперкомпилятор SCP4 • - экспериментальный специализатор функционального языка программирования РЕФАЛ-5. • Реализован также на РЕФАЛе-5. • Исходные тексты суперкомпилятора, исполняемые модули и исходные тексты РЕФАЛа-5 свободно распространяются: http://www.botik.ru/pub/local/scp/refal5/ (Андрей П. Немытых и Валентин Ф. Турчин) Windows 98, Windows NT/2000/XP, Linux (Intel)

  7. Кодировка некоторого классаcache coherence протоколов • Эволюция состояний мультипроцессорной системы представляет собой недетерминированную динамическую систему с дискретным временем time. • Пусть Int(time,InitConfig) – интерпретатор этой системы, который по данной начальной конфигурации InitConfig системы выдаёт конфигурацию Config системы через время time. • Мы моделируем недетерминированность, помечая такты времени случайными действиями, которые будут происходить в системе. • Корректность протоколов выражается в недостижимости конфигураций определённого вида и проверяется предикатом-программой (Config). • Задача для суперкомпилятора: проспециализировать композицию ∘Int(time,InitConfig0)

  8. Cache coherence протокол MOESI.(Структурадоказательствакорректности построенного SCP4) Theorem1 Theorem2 True 8 True 2 # $ $ $ # Lemma $ True 4 # $ 5 $ 6 True 7

  9. Верификация cache coherence протокола Xerox PARC Dragon. • В результате анализа остаточной программы – результата суперкомпиляцииобнаружена ошибка в описании протокола данном в: • G. Delzanno, Automatic Verification of Parameterized Cache Coherence Protocols. и построен тест, на котором нарушается корректность протокола. • Удачно верифицировано уточнённое описание этого протокола: • http://www.disi.unige.it/person/DelzannoG/protocol.html

  10. Суперкомпиляция • Supercompilation (отsupervised compilation) есть техника специализациифункциональных программ. • В 70-х годах В.Ф. Турчин предложил ряд идей по автоматическому преобразованию программ, которые неудачно назвал суперкомпиляцией. Он поставил задачу создать инструменты для наблюдения за операционной семантикой программы, когда фиксирована функция F, вычисляемая этой программой. • Результатом таких наблюдений должно стать новое алгоритмическое определение некоторого продолжения функции F. Новый алгоритм строится с целью более быстрого вычисления F на конкретных аргументах. • Главная цель суперкомпилятора: исполнить максимальное число действий некоторого параметризованного применения программы равномерно по значениям параметров.

  11. Общая структураРЕФАЛинтерпретатора. task final inp.-prog. Internal language Entry config. Source prog. Refal-5 result := ; /* undefined */ do { Refal-step; } while( the task is not solved ) /* still is not completely evaluated */ if( the task is determined ) { result := task; } Result Refal-5

  12. Общая структура SCP4 tasks final input program Parameterized entry config.-s Source program Intern. language Refal-5 residual := ; /* empty */ do { current-task := head(tasks); driving; folding; if( the current-task is solved ) { global-analysis; /* folded */ specialization w.r.t the global properties; propagation of the global inf. over the tasks; if( the current-task is not empty ) { residual := residual current-task; } tasks := tail(tasks); } } while( tasks ) dead-code-analysis; C Refal-5 parameterized entry points, residual program

  13. Прогонка Прогонка есть расширениеинтерпретацииодногошага REFAL-graph машинына параметризованноемножествовходных конфигураций. Школьная прогонка: a x + b = 0 b =? 0 any x ℝ b = 0 a =? 0 a x + b = 0 driving b ? 0 Ø a ? 0 x = -b/a; a  0

  14. Свёртка Свёртка сворачивает мета-дерево возможных вычислений в конечный граф и вызывается сразу после прогонки. Т.е. она пробуетсвернуть часть пути (который не свёрнут к данному моменту)от корня мета-дерева к текущему в текущей грозди, построенной прогонкой. Алгоритм состоит из двух логически замкнутых инструментов: сведенияи обобщения. Оба эти инструмента как синтаксические так и семантические свойства функционального стека. преобразуемой программы. . . . . . . . . previous node current node

  15. Глобальный анализ(построение выходных форматов) • Построение выходных форматов компонент факторизации критично, когда длина стека вызовов функций преобразуемой программы не является равномерно ограниченной по входным данным. • После построения очередного выходного формата мета-граф специализируется по этому формату (без дополнительных развёрток в мета-дереве). • Без построения выходных форматов интересных преобразований не происходит, за редким исключением.

  16. РЕФАЛ (В.Ф. Турчин) строгий функциональный языкпервого порядка, в котором конкатенация ассоциативна. Имеется также унарный конструктордля построения структура дерева. Семантика языка базируется на отождествлении по образцу и модели вычислений – алгорифмахМаркова. Данные РЕФАЛаопределяются следующей грамматикой: d ::= (d1) | d1 d2 | SYMBOL | empty empty ::= /* nothing */ Введение в РЕФАЛ(данные) Example: (A + B) * (C – D) * A + B C - D

  17. Введение в РЕФАЛ(ассоциативность конкатенации) Example 2: (Refal style reversing) Example 1: * The palindrome predicate: * Reversing a list of terms: Palindrome { = True;   s.1 = True;   -- application constr. s.1 e.2 s.1 = <Palindrome e.2>;  e.1 = False; } rev { t.x e.ys = <rev e.ys> t.x; = ; -- empty expression } -- on the both sides. /* Reversing a list of terms: we may concatenate a term taken by the variable t.x right on the end of the list. The blank is used to denote the concatenation. */ /* Pattern may be split from both sides: a symbol-variable s.1 is split from the left and right sides. */

  18. Cache coherence протокол MOESI.(Структурадоказательствакорректности построенного SCP4) Theorem1 Theorem2 True 8 True 2 # $ $ $ # Lemma $ True 4 # $ 5 $ 6 True 7

  19. Языковая зависимость(протокол MOESI) RandomAction { … … = (invalid e.x1) (modified ) (shared I e.x3 e.x4) (exclusive )(owned e.x2 e.x5); … } Append { () (e.y) = e.y; (s.z e.x) (e.y) = s.z <Append (e.x) (e.y)>; } RandomAction { … … = (invalid e.x1) (modified ) (shared I <Append (e.x3) (e.x4)>) (exclusive )(owned <Append (e.x2) (e.x5)>); … }

  20. SCP4 as a simple theorem prover. The task: $ENTRY Go { e.ls = <palindrome e.ls <rev e.ls>>; } palindrome { = True; s.x = True; s.x e.ls s.x = <palindrome e.ls>; s.x e.ls s.y = False; } rev { = ; t.x e.ls = <rev e.ls> t.x; } The result of specialization: A simple theorem has been proven. $ENTRY Go { = True ; s.102 e.41 = True ; }

  21. Использование SCP4 дляупрощения определений. Задача:Решитьуравнение'a' X = X 'a', гдеобласть допустимых значений переменной X есть множество конечных строк. $ENTRY Go { e.x = <Eq ('a' e.x) (e.x 'a')>; } Eq { (s.1 e.x) (s.1 e.y) = <Eq (e.x) (e.y)>; ((e.1) e.x) ((e.2) e.y) = <Eq (e.1 e.x) (e.2 e.y)>; () () = True; (e.x) (e.y) = False; } Упрощённоеопределение:построенное SCP4. Доказана простая теорема. $ENTRY Go { e.41 = <F7 e.41 > ; } F7 { 'a' e.41 = <F7 e.41> ; = True ; e.41 = False ; }

  22. SCP4 as a simple theorem prover(идея Александра Корлюкова) Задача (по мотивам Л. Ф. Магнитцкого):Летитстая гусей.Навстречу ей гусь: “Привет сотня гусей!”. Вожак отвечает: “Нас не сотня. Если всех нас сосчитать и прибавить ещё столько же, и пол-столько, и четверть-столько, да ещё и тебя, Гусь, тогда получится сотня.” Вопрос:Сколько гусей в стае? $ENTRY Go { e.n = <Eq (<Counter e.n>) (<Hundred>)>; } Eq { ( ) ( ) = TRUE; ('g' e.xs) ('g' e.ys) = <Eq (e.xs) (e.ys)>; (e.xs) (e.ys) = FALSE; } Hundred { = 'gggggggggggggggggggggggggggggggggggggggggggggggggg' 'gggggggggggggggggggggggggggggggggggggggggggggggggg' ; } Counter { 'gggg' e.n = 'gggg' 'gggg' 'gg' 'g' <Counter e.n>; = 'g'; } Здесь'gg' := 'g''g'

  23. Вопрос: Сколько гусей в стае? Ответданный суперкомпилятором SCP4: $ENTRY Go { 'gggggggggggggggggggggggggggggggggggggggg' e.n = FALSE ; * The following string has 36 of 'g' (of geese). 'gggggggggggggggggggggggggggggggggggg' = TRUE ; 'gggggggggggggggggggggggggggggggg' = FALSE ; * The length of the (n+3)-th left side is 36-4(n+1), * while the right side is FALSE. ... = FALSE ; } Мыне толькоответили на поставленный вопрос, но и доказали что других решений не существует. В процессе суперкомпиляции произошла индукция поe.nи рекурсиярекурсия данная в исходной программе удалена.

  24. Более адекватная кодировка. Counter { e.n = <All e.n> <All e.n> <Half e.n> <Quoter e.n> 'g'; } All { e.n = e.n; } Half { = ; 'gg' e.n = 'g' <Half e.n>; } Quoter { = ; 'gggg' e.n = 'g' <Quoter e.n>; } Остаточная программа подобна предыдущей, но содержит сто предложений.

  25. Головоломка (Эйнштейн): (идея использованияАлександра Корлюкова) Имеются 5 домовраскрашенные в разные цвета, в каждом доме живёт один человек. Все они разной национальности, предпочтения к напиткам у всех разные, все они курят разные сорта сигарет и имеют слабость к совершенно разным животным. Дано: 1. Англичанин живёт в красном доме. 2. У шведа живёт собака. 3. Датчанин пьёт чай. 4. Зелёный дом– ближайший слева от белого дома. 5. Хозяин зелёного дома пьёт кофе. 6. Курящий сигареты PallMall держит птицу. 7. Жилец центрального дома пьёт молоко. 8. Хозяин жёлтого дома курит Dunhill. 9. Норвежец живёт в первом доме. 10. Поклонник Marlboro – сосед любителя кошек. 11. Любитель покататься на лошади – сосед фаната сигарет Dunhill. 12. Один из них предпочитает курить Winfield потягивая пиво. 13. Дом норвежца – соседний к синему дому. 14. Немец курит Rothmans. 15. Поклонник Marlboro соседствует с поклонником чистой водички. КТО Д Е Р Ж И Т Р Ы Б У ?

  26. Вопрос:ктодержит рыбку? ОпределениеZiестьпереформулировкаi-огоутвержденияв терминах РЕФАЛа. LookForFish { (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 = <LookForFish e.b>; } * 1. Англичанин живёт в красном доме. Z1 { (Englishman Red s.3 s.4 s.5) e.b = (Englishman Red s.3 s.4 s.5) e.b; (e.1) e.b = (e.1) <Z1 e.b>; } * 2. У шведа живёт собака. Z2 { (Swede s.2 s.3 Dog s.5) e.b = (Swede s.2 s.3 Dog s.5) e.b; (e.1) e.b = (e.1) <Z2 e.b>; } * 3. Датчанин пьёт чай. Z3 { (Dane s.2 s.3 s.4 Tea) e.b = (Dane s.2 s.3 s.4 Tea) e.b; (e.1) e.b = (e.1) <Z3 e.b>; } …

  27. Входная точка программы: $ENTRY Puzzle { e.buildings = <LookForFish <Z15 <Z11 <Z10 <Z12 <Z14 <Z8 <Z6 <Z5 <Z3 <Z2 <Z1 <Z7 <Z4 <Z13 <Z9 e.buildings >>>>> >>>>> >>>>> >; } Программа проверяет удовлетворяют ли выбранные входные данные условиям головоломки или нет. Если данные удовлетворяют условиям, То программа возвращает ответ на поставленный в головоломке вопрос, иначе программа попадает в ситуацию аварийной остановки (“Отождествление невозможно”).

  28. Формулировка задачи и результат суперкомпиляции. Параметризованная входная конфигурация: <Puzzle (s.11 s.12 s.13 s.14 s.15) (s.21 s.22 s.23 s.24 s.25) (s.31 s.32 s.33 s.34 s.35) (s.41 s.42 s.43 s.44 s.45) (s.51 s.52 s.53 s.54 s.55) > Параметрs.ijсоответствуетодному объекту в i-омдоме, каждая пара скобок представляет дом. Остаточная программа: $ENTRY Puzzle { (Norwegian Yellow Dunhill Cat Water ) (Dane Blue Marlboro Horse Tea ) (Englishman Red PallMall Bird Milk ) (German Green Rothmans Fish Coffee) (Swede White Winfield Dog Beer ) = German ; }

  29. Фильтрация $ENTRY Puzzle { e.buildings = <LookForFish <Z15 <Z11 <Z10 <Z12 <Z14 <Z8 <Z6 <Z5 <Z3 <Z2 <Z1 <Z7 <Z4 <Z13 <Z9 e.buildings >>>>> >>>>> >>>>> >; } Порядок фильтровZiможет бытьизменён. Время суперкомпиляции зависит от этого порядка. Число всех возможных вариантов перебора в Головоломке равно525(примерно1018).Если компьютер будет перебирать со скоростью миллиард вариантов в секунду, то ему понадобится 9лет. Суперкомпилятор (подобно PROLOG интерпретатору) сужает входные Параметры согласно образцам, данным в фильтрах, и обнаруживает что область определения состоит из одной точки; она и является ответом на вопрос.Дополнительный эксперимент показывает, что подсказкуZ15можно убрать из описания головоломки: ответ тот же самый (немец).

  30. Литература [1] Turchin, V. F., The concept of a supercompiler, ACM Transactions on Programming Languages and Systems, 1986, 8:292-325. [2] Nemytykh A.P., and Turchin V.F. The Supercompiler Scp4: sources, on- line demonstration. http://www.botik.ru/pub/local/scp/refal5/ ,2000. [3] Nemytykh A.P., The Supercompiler Scp4: General Structure., LNCS vol. 2890, pp.162-170, 2003. [4] Nemytykh A.P., A Note on Elimination of Simplest Recursions. In Proc. of the ACM SIGPLAN Asia-PEPM'02, 138-146. ACM Press, 2002. [5] Nemytykh A.P., Playing on REFAL. In: Proc. of the PU03, pp:29-39, Institute of Informatics Systems, Novosibirsk, Russia, 2003. [6] Lisitsa A., and Nemytykh A.P., Verification of parameterized systems using supercompilation. In Proc. of the APPSEM05, Fraunchiemsee, Germany, 12-15 September 2005.

More Related