Введение

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

Происхождение

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

Развитие XXI века

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