Jump to content

Синтез программы

(Перенаправлено с СыГуС-ИФ )

В информатике , синтез программ — это задача создания программы которая доказуемо удовлетворяет заданной формальной спецификации высокого уровня . В отличие от верификации программы , программу необходимо сконструировать, а не дать; однако в обеих областях используются формальные методы доказательства, и обе включают подходы разной степени автоматизации. В отличие от методов автоматического программирования , спецификации при синтезе программ обычно представляют собой неалгоритмические утверждения в соответствующем логическом исчислении . [ 1 ]

Основное применение синтеза программ — избавить программиста от бремени написания правильного, эффективного кода, удовлетворяющего спецификации. Однако синтез программ также имеет приложения для супероптимизации и вывода инвариантов цикла . [ 2 ]

Источник

[ редактировать ]

Во время Летнего института символической логики в Корнельском университете в 1957 году Алонзо Чёрч определил проблему синтеза схемы на основе математических требований. [ 3 ] Несмотря на то, что эта работа относится только к схемам, а не к программам, эта работа считается одним из самых ранних описаний синтеза программ, и некоторые исследователи называют синтез программ «проблемой Черча». В 1960-х годах аналогичная идея «автоматического программиста» рассматривалась исследователями искусственного интеллекта. [ нужна ссылка ]

С тех пор различные исследовательские сообщества рассматривали проблему синтеза программ. Известные работы включают теоретико-автоматный подход Бючи и Ландвебера 1969 года , [ 4 ] и работы Манны и Вальдингера (около 1980 г.). Развитие современных языков программирования высокого уровня также можно понимать как форму синтеза программ.

События 21 века

[ редактировать ]

В начале XXI века наблюдался всплеск практического интереса к идее синтеза программ в сообществе формальной верификации и смежных областях. Армандо Солар-Лезама показал, что можно кодировать задачи синтеза программ в булевой логике и использовать алгоритмы решения булевой задачи выполнимости для автоматического поиска программ. [ 5 ]

Синтаксис-ориентированный синтез

[ редактировать ]

В 2013 году исследователями из Университета Пенсильвании , Калифорнийского университета в Беркли и Массачусетского технологического института была предложена единая структура для решения задач синтеза программ под названием Синтаксис-ориентированный синтез (стилизованный SyGuS) . [ 6 ] Входные данные алгоритма SyGuS состоят из логической спецификации и бесконтекстной грамматики выражений, ограничивающей синтаксис допустимых решений. [ 7 ] Например, для синтеза функции f , возвращающей максимум два целых числа, логическая спецификация может выглядеть следующим образом:

( ж ( Икс , y ) знак равно Икс ж ( Икс , y ) знак равно y ) ∧ ж ( Икс , y ) ≥ Икс ∧ ж ( Икс , y ) ≥ y

и грамматика может быть:

<Exp> ::= x | y | 0 | 1 | <Exp> + <Exp> | ite(<Cond>, <Exp>, <Exp>)
<Cond> ::= <Exp> <= <Exp>

где «ite» означает «если-то-иначе». Выражение

ite(x <= y, y, x)

было бы допустимым решением, поскольку оно соответствует грамматике и спецификации.

С 2014 по 2019 год на ежегодном конкурсе синтаксического синтеза (или SyGuS-Comp) сравнивались различные алгоритмы синтеза программ в рамках конкурентного мероприятия. [ 8 ] В конкурсе использовался стандартизированный формат ввода SyGuS-IF, основанный на SMT-Lib 2 . Например, следующий SyGuS-IF кодирует задачу синтеза максимума двух целых чисел (как представлено выше):

(set-logic LIA)
(synth-fun f ((x Int) (y Int)) Int
  ((i Int) (c Int) (b Bool))
  ((i Int (c x y (+ i i) (ite b i i)))
   (c Int (0 1))
   (b Bool ((<= i i)))))
(declare-var x Int)
(declare-var y Int)
(constraint (>= (f x y) x))
(constraint (>= (f x y) y))
(constraint (or (= (f x y) x) (= (f x y) y)))
(check-synth)

Совместимый решатель может вернуть следующий результат:

((define-fun f ((x Int) (y Int)) Int (ite (<= x y) y x)))

Индуктивный синтез под руководством контрпримера

[ редактировать ]

Индуктивный синтез с использованием контрпримеров (CEGIS) — эффективный подход к созданию звуковых программных синтезаторов. [ 9 ] [ 10 ] CEGIS предполагает взаимодействие двух компонентов: генератора , который генерирует программы-кандидаты, и верификатора , который проверяет, соответствуют ли кандидаты спецификации.

Учитывая набор входных данных I , набор возможных программ P и спецификацию S , цель синтеза программы состоит в том, чтобы найти программу p в P такую, что для всех входных данных i в I выполняется S ( p , i ). CEGIS параметризуется через генератор и верификатор:

  • Генератор T принимает набор входных данных T и выводит программу-кандидат c, которая правильна для всех входных данных в , то есть кандидата, такого, что для всех входных данных в T выполняется t ( c , t ) . S
  • Верификатор на всех входных данных берет программу-кандидат c и возвращает true, если программа удовлетворяет S , в противном случае возвращает контрпример , то есть входной e в I такой, что S ( c , e ) терпит неудачу.

CEGIS запускает генератор и верификатор в цикле, накапливая противоположные примеры:

algorithm cegis is
    input: Program generator generate,
           verifier verify,
           specification spec,
    output: Program that satisfies spec, or failure

    inputs := empty set
    loop
        candidate := generate(spec, inputs)
        if verify(spec, candidate) then
            return candidate
        else verify yields a counterexample e
            add e to inputs
        end if

Реализации CEGIS обычно используют решатели SMT в качестве верификаторов.

CEGIS был вдохновлен уточнением абстракции на основе контрпримеров (CEGAR). [ 11 ]

Структура Манны и Вальдингера

[ редактировать ]
Правила неклаузального разрешения (объединяющие замены не показаны)
Нет. Утверждения Цели Программа Источник
51
52
53 с
54 т
55 Решить(51,52)
56 с Решить(52,53)
57 с Решить(53,52)
58 п ? с : т Решить(53,54)

Концепция Манны и Вальдингера , опубликованная в 1980 году, [ 12 ] [ 13 ] начинается с заданной пользователем формулы спецификации первого порядка . Для этой формулы строится доказательство, тем самым также синтезируя функциональную программу из объединяющих подстановок.

Структура представлена ​​в виде таблицы, столбцы которой содержат:

Первоначально в таблицу вводятся базовые знания, предварительные и постусловия. После этого вручную применяются соответствующие правила доказательства. Фреймворк был разработан для повышения удобочитаемости промежуточных формул человеком: в отличие от классического разрешения , он не требует клаузальной нормальной формы , но позволяет рассуждать с формулами произвольной структуры и содержащими любые соединения (« неклаузальное разрешение »). Доказательство завершено, когда было получено в столбце «Цели» или, что то же самое, в столбце Утверждения . Программы, полученные с помощью этого подхода, гарантированно удовлетворяют формуле спецификации, начиная с которой; в этом смысле они верны по своей конструкции . [ 14 ] Только минималистский, но полный по Тьюрингу , [ 15 ] чисто функциональный язык программирования , состоящий из условных, рекурсивных, арифметических и других операторов. [ примечание 3 ] поддерживается. Тематические исследования, выполненные в рамках этой структуры, синтезировали алгоритмы для вычисления, например, деления , остатка , [ 16 ] квадратный корень , [ 17 ] объединение терминов , [ 18 ] ответы на к реляционной базе данных запросы [ 19 ] и несколько алгоритмов сортировки . [ 20 ] [ 21 ]

Правила доказательства

[ редактировать ]

К правилам доказательства относятся:

Например, строка 55 получается путем решения формулы утверждения от 51 и из 52, которые имеют общую подформулу . Резольвента образуется в результате дизъюнкции , с заменен на , и , с заменен на . Эта резольвента логически следует из конъюнкции и . В более общем смысле, и нужно иметь только две унифицируемые подформулы и , соответственно; их резольвента затем образуется из и как и раньше, где является наиболее общим объединителем и . Это правило обобщает разрешение статей . [ 22 ]
Программные члены родительских формул объединяются, как показано в строке 58, для формирования выходных данных резольвенты. В общем случае применяется и к последнему. Поскольку подформула появляется в выходных данных, необходимо позаботиться о том, чтобы разрешать только подформулы, соответствующие вычислимым свойствам.
  • Логические преобразования.
Например, может быть преобразован в ) как в Утверждениях, так и в Целях, поскольку оба они эквивалентны.
  • Расщепление конъюнктивных утверждений и дизъюнктивных целей.
Пример показан в строках с 11 по 13 примера игрушки ниже.
Это правило позволяет синтезировать рекурсивные функции . Для данного пред- и постусловия «Дано такой, что , находить такой, что заданное пользователем. ", а также соответствующее упорядочение, области , всегда разумно добавить утверждение " ". [ 23 ] Решение с помощью этого утверждения может привести к рекурсивному вызову в срок действия Программы.
Пример дан в Manna, Waldinger (1980), стр. 108-111, где синтезируется алгоритм вычисления частного и остатка двух заданных целых чисел с использованием нормального порядка. определяется (стр. 110).

Мюррей показал, что эти правила полны для логики первого порядка . [ 24 ] В 1986 году Манна и Уолдингер добавили обобщенные правила электронного разрешения и парамодуляции, чтобы также обеспечить равенство; [ 25 ] позже эти правила оказались неполными (но тем не менее обоснованными ). [ 26 ]

Пример синтеза функции максимума
Нет. Утверждения Цели Программа Источник
1 Аксиома
2 Аксиома
3 Аксиома
10 М Спецификация
11 М Дистр(10)
12 М Сплит(11)
13 М Сплит(11)
14 х Решить(12,1)
15 х Решить(14,2)
16 х Решить(15,3)
17 и Решить(13,1)
18 и Решить(17,2)
19 х<у ? у : х Решить(18,16)

В качестве игрушечного примера — функциональная программа для вычисления максимального из двух чисел и можно вывести следующим образом. [ нужна ссылка ]

Начиная с описания требования « Максимум больше или равен любому заданному числу и является одним из заданных чисел », формула первого порядка получается как его формальный перевод. Эту формулу предстоит доказать. Путем сколемизации обратной [ примечание 4 ] получается спецификация в строке 10, где прописная и строчная буквы обозначают переменную и константу Скулема соответственно.

После применения правила преобразования распределительного закона в строке 11 целью доказательства является дизъюнкция, и, следовательно, ее можно разделить на два случая, а именно. строки 12 и 13.

Возвращаясь к первому случаю, разрешение строки 12 с аксиомой в строке 1 приводит к созданию экземпляра программной переменной. в строке 14. Интуитивно понятно, что последнее соединение строки 12 задает значение, которое надо брать в этом случае. Формально правило неклаузального разрешения, показанное в строке 57 выше, применяется к строкам 12 и 1, причем

  • p является распространенным экземпляром х=х из А=А и x=M , полученный синтаксическим объединением последних формул,
  • Ф[ п ] существование правда x=x , полученный из созданной строки 1 (дополненной соответствующим образом, чтобы сделать контекст F[⋅] вокруг p виден), и
  • Г[ п ] существование х ≤ х ∧ у ≤ х ∧ x = x , полученный из созданной строки 12,

уступчивость правда ложь ) ∧ ( х ≤ х ∧ у ≤ х ∧ истинный , что упрощается до .

Аналогичным образом, строка 14 дает строку 15, а затем строку 16 по разрешению. Также второй случай, в строке 13 обрабатывается аналогичным образом, в результате чего получается строка 18.

На последнем этапе оба случая (т. е. строки 16 и 18) объединяются с использованием правила разрешения из строки 58; чтобы это правило стало применимым, необходим подготовительный этап 15→16. Интуитивно, строку 18 можно прочитать как «на случай, если , выход действителен (относительно исходной спецификации), а в строке 15 написано «в случае , выход является действительным; шаг 15→16 установил, что оба случая 16 и 18 дополняют друг друга. [ примечание 5 ] Поскольку и строка 16, и строка 18 содержат термин программы, условное выражение в столбце программы получается . Поскольку формула цели выведено, доказательство завершено, и столбец программы в " " Строка содержит программу.

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Различие «Утверждения» и «Цели» предназначено только для удобства; следуя парадигме доказательства от противного , цель эквивалентно утверждению .
  2. ^ Когда и — формула Цели и срок Программы в строке соответственно, то во всех случаях, когда держит, является действительным результатом программы, подлежащей синтезу. Этот инвариант поддерживается всеми правилами доказательства. Формула утверждения обычно не связана с термином Программы.
  3. ^ только условный оператор ( ?: С самого начала поддерживается ). Однако можно добавлять произвольные новые операторы и отношения, предоставляя их свойства в качестве аксиом. В приведенном ниже примере игрушки только свойства и те, которые действительно необходимы для доказательства, аксиоматизированы в строках с 1 по 3.
  4. ^ В то время как обычная сколемизация сохраняет выполнимость, обратная сколемизация, то есть замена универсально квантифицированных переменных функциями, сохраняет достоверность.
  5. ^ Для этого была необходима Аксиома 3; на самом деле, если не был полным порядком , максимум не мог быть вычислен для несравнимых входных данных .
  1. ^ Басин, Д.; Девиль, Ю.; Фленер, П.; Хамфельт, А.; Фишер Нильссон, Дж. (2004). «Синтез программ вычислительной логики». У М. Брюйноге и К.-К. Лау (ред.). Разработка программ по вычислительной логике . ЛНКС. Том. 3049. Спрингер. стр. 30–65. CiteSeerX   10.1.1.62.4976 .
  2. ^ ( Алур, Сингх и Фисман )
  3. ^ Церковь Алонсо (1957 г.). «Применение рекурсивной арифметики к задаче синтеза схем». Итоги Летнего института символической логики . 1 :3–50.
  4. ^ Ричард Бючи, Лоуренс Ландвебер (апрель 1969 г.). «Решение последовательных условий с помощью стратегий конечных состояний» . Труды Американского математического общества . 138 : 295–311. дои : 10.2307/1994916 . JSTOR   1994916 .
  5. ^ ( Solar-Lezama )
  6. ^ Алур, Раджив; др. и др. (2013). «Синтаксис-ориентированный синтез». Труды по формальным методам автоматизированного проектирования . IEEE. п. 8.
  7. ^ ( Дэвид и Кроенинг )
  8. ^ SyGuS-Comp (Конкурс синтаксического синтеза)
  9. ^ ( Solar-Lezama )
  10. ^ ( Дэвид и Кроенинг )
  11. ^ ( Solar-Lezama )
  12. ^ Зохар Манна, Ричард Уолдингер (январь 1980 г.). «Дедуктивный подход к синтезу программ». Транзакции ACM в языках и системах программирования . 2 : 90–121. дои : 10.1145/357084.357090 . S2CID   14770735 .
  13. ^ Зохар Манна и Ричард Уолдингер (декабрь 1978 г.). Дедуктивный подход к синтезу программ (PDF) (Техническая записка). НИИ Интернешнл. Архивировано (PDF) из оригинала 27 января 2021 г.
  14. ^ Правильность правил разрешения см. в Manna, Waldinger (1980), стр. 100.
  15. ^ Бойер, Роберт С.; Мур, Дж. Стротер (май 1983 г.). Механическое доказательство полноты по Тьюрингу чистого Lisp (PDF) (технический отчет). Институт компьютерных наук Техасского университета в Остине. 37. Архивировано (PDF) из оригинала 22 сентября 2017 г.
  16. ^ Манна, Вальдингер (1980), стр.108-111.
  17. ^ Зохар Манна и Ричард Уолдингер (август 1987 г.). «Происхождение парадигмы бинарного поиска». Наука компьютерного программирования . 9 (1): 37–83. дои : 10.1016/0167-6423(87)90025-6 .
  18. ^ Даниэле Нарди (1989). «Формальный синтез алгоритма объединения методом дедуктивной таблицы». Журнал логического программирования . 7 : 1–43. дои : 10.1016/0743-1066(89)90008-3 .
  19. ^ Даниэле Нарди и Риккардо Розати (1992). «Дедуктивный синтез программ ответа на запросы». В Кунг-Киу Лау и Тиме Клементе (ред.). Международный семинар по синтезу и преобразованию логических программ (LOPSTR) . Семинары по информатике. Спрингер. стр. 15–29. дои : 10.1007/978-1-4471-3560-9_2 .
  20. ^ Джонатан Трауготт (1986). «Дедуктивный синтез сортирующих программ». Материалы Международной конференции по автоматизированному дедукции . ЛНКС . Том. 230. Спрингер. стр. 641–660.
  21. ^ Джонатан Трауготт (июнь 1989 г.). «Дедуктивный синтез сортирующих программ». Журнал символических вычислений . 7 (6): 533–572. дои : 10.1016/S0747-7171(89)80040-9 .
  22. ^ Манна, Вальдингер (1980), стр.99
  23. ^ Манна, Вальдингер (1980), стр.104
  24. ^ Манна, Вальдингер (1980), стр.103, со ссылкой на: Нил В. Мюррей (февраль 1979 г.). Процедура доказательства бескванторной неклаузальной логики первого порядка (технический отчет). Сиракузский университет. 2-79.
  25. ^ Зохар Манна, Ричард Уолдингер (январь 1986 г.). «Особые отношения в автоматизированном выводе» . Журнал АКМ . 33 : 1–59. дои : 10.1145/4904.4905 . S2CID   15140138 .
  26. ^ Зоар Манна, Ричард Уолдингер (1992). «Правила особых отношений неполны». Учеб. КЕЙД 11 . ЛНКС. Том. 607. Спрингер. стр. 492–506.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0071a8db6e2cc662920c2a1323c0b316__1721152200
URL1:https://arc.ask3.ru/arc/aa/00/16/0071a8db6e2cc662920c2a1323c0b316.html
Заголовок, (Title) документа по адресу, URL1:
Program synthesis - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)