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

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

Источник

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

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

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

В начале 21 века наблюдался всплеск практического интереса к идее программного синтеза в сообществе формальной верификации и в смежных областях. Армандо Солар-Лезама показал, что можно закодировать задачи синтеза программ в булевой логике и использовать алгоритмы для задачи булевой выполнимости для автоматического поиска программ. В 2013 году исследователи из UPenn , Калифорнийского университета в Беркли и Массачусетского технологического института предложили унифицированную основу для задач синтеза программ . С 2014 года проводится ежегодное соревнование по синтаксису программ, в котором сравниваются различные алгоритмы синтеза программ на соревнованиях, соревнование по синтаксическому синтезу или SyGuS-Comp. Тем не менее, доступные алгоритмы способны синтезировать только небольшие программы.

Каркас Манна и Вальдингера

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

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

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

  • Номер строки («Nr») для справки.
  • Формулы, которые уже были установлены, включая аксиомы и предварительные условия, («Утверждения»)
  • Формулы еще предстоит доказать, включая постусловия, («Цели»),
  • Термины, обозначающие допустимое выходное значение («Программа»)
  • Обоснование текущей строки («Исходная точка»)

Первоначально в таблицу вводятся базовые знания, предварительные и пост-условия. После этого соответствующие правила проверки применяются вручную. Фреймворк был разработан для повышения читабельности промежуточных формул для человека: в отличие от классического разрешения , он не требует клаузальной нормальной формы , но позволяет рассуждать с помощью формул произвольной структуры и содержащих любые соединительные элементы (« неклаузальное разрешение »). Доказательство завершено, если оно было выведено в столбце « Цели» или, что то же самое, в столбце « Утверждения» . Программы, полученные с помощью этого подхода, гарантированно удовлетворяют формуле спецификации, начиная с; в этом смысле они правильны по построению . Только минималистский, но Тьюринг , чисто функциональный язык программирования , состоящий из условной, рекурсии и арифметических и других операторов поддерживаются. В тематических исследованиях, выполненных в рамках этой структуры, были синтезированы алгоритмы для вычисления, например, деления , остатка , квадратного корня , объединения терминов , ответов на запросы реляционной базы данных и нескольких алгоритмов сортировки .

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

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

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

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

Пример

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

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

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

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

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

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

дает истинуложь ) ∧ ( x ≤ x ∧ y ≤ x ∧ true , что упрощается до .

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

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

Смотрите также

Примечания

использованная литература

  • Зохар Манна, Ричард Уолдингер (1975). «Знание и рассуждение в синтезе программ». Искусственный интеллект . 6 (2): 175–208. DOI : 10.1016 / 0004-3702 (75) 90008-9 .