Jump to content

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

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

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

Происхождение [ править ]

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

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

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

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

Синтаксис-ориентированный синтез [ править ]

В 2013 году исследователями из Университета Пенсильвании , Калифорнийского университета в Беркли и Массачусетского технологического института была предложена единая структура для решения задач синтеза программ под названием Syntax-guided Synthesis (стилизованный 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)))

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

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

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

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

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

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

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

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

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

Пример [ править ]

Пример синтеза функции максимума
Нет. Утверждения Цели Программа Источник
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. ^ Солар-Лезама, Армандо (2008). Синтез программы путем эскизирования (PDF) (доктор философии). Калифорнийский университет, Беркли.
  6. ^ Алур, Раджив; др. и др. (2013). «Синтаксис-ориентированный синтез». Труды по формальным методам автоматизированного проектирования . IEEE. п. 8.
  7. ^ Дэвид, Кристина; Кренинг, Дэниел (13 октября 2017 г.). «Программный синтез: проблемы и возможности» . Философские труды Королевского общества A: Математические, физические и технические науки . 375 (2104): 20150403. doi : 10.1098/rsta.2015.0403 . ISSN   1364-503X . ПМЦ   5597726 . ПМИД   28871052 .
  8. ^ SyGuS-Comp (Конкурс синтаксического синтеза)
  9. ^ Зохар Манна, Ричард Уолдингер (январь 1980 г.). «Дедуктивный подход к синтезу программ». Транзакции ACM в языках и системах программирования . 2 : 90–121. дои : 10.1145/357084.357090 . S2CID   14770735 .
  10. ^ Зохар Манна и Ричард Уолдингер (декабрь 1978 г.). Дедуктивный подход к синтезу программ (PDF) (Техническая записка). НИИ Интернешнл. Архивировано (PDF) из оригинала 27 января 2021 г.
  11. ^ Правильность правил разрешения см. в Manna, Waldinger (1980), стр. 100.
  12. ^ Бойер, Роберт С.; Мур, Дж. Стротер (май 1983 г.). Механическое доказательство полноты по Тьюрингу чистого Lisp (PDF) (технический отчет). Институт компьютерных наук Техасского университета в Остине. 37. Архивировано (PDF) из оригинала 22 сентября 2017 г.
  13. ^ Манна, Вальдингер (1980), стр.108-111.
  14. ^ Зохар Манна и Ричард Уолдингер (август 1987 г.). «Происхождение парадигмы бинарного поиска». Наука компьютерного программирования . 9 (1): 37–83. дои : 10.1016/0167-6423(87)90025-6 .
  15. ^ Даниэле Нарди (1989). «Формальный синтез алгоритма объединения методом дедуктивной таблицы». Журнал логического программирования . 7 : 1–43. дои : 10.1016/0743-1066(89)90008-3 .
  16. ^ Даниэле Нарди и Риккардо Розати (1992). «Дедуктивный синтез программ ответа на запросы». В Кунг-Киу Лау и Тиме Клементе (ред.). Международный семинар по синтезу и преобразованию логических программ (LOPSTR) . Семинары по информатике. Спрингер. стр. 15–29. дои : 10.1007/978-1-4471-3560-9_2 .
  17. ^ Джонатан Трауготт (1986). «Дедуктивный синтез сортирующих программ». Материалы Международной конференции по автоматизированному дедукции . ЛНКС . Том. 230. Спрингер. стр. 641–660.
  18. ^ Джонатан Трауготт (июнь 1989 г.). «Дедуктивный синтез сортирующих программ». Журнал символических вычислений . 7 (6): 533–572. дои : 10.1016/S0747-7171(89)80040-9 .
  19. ^ Манна, Вальдингер (1980), стр.99
  20. ^ Манна, Вальдингер (1980), стр.104
  21. ^ Манна, Вальдингер (1980), стр.103, со ссылкой на: Нил В. Мюррей (февраль 1979 г.). Процедура доказательства бескванторной неклаузальной логики первого порядка (технический отчет). Сиракузский университет. 2-79.
  22. ^ Зохар Манна, Ричард Уолдингер (январь 1986 г.). «Особые отношения в автоматизированном выводе» . Журнал АКМ . 33 : 1–59. дои : 10.1145/4904.4905 . S2CID   15140138 .
  23. ^ Зоар Манна, Ричард Уолдингер (1992). «Правила особых отношений неполны». Учеб. КЕЙД 11 . ЛНКС. Том. 607. Спрингер. стр. 492–506.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d3b30577a309b87ae0b347f6e2da87bc__1714615200
URL1:https://arc.ask3.ru/arc/aa/d3/bc/d3b30577a309b87ae0b347f6e2da87bc.html
Заголовок, (Title) документа по адресу, URL1:
Program synthesis - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)