Program synthesis -- the automatic generation of code given a specification -- is one of the most fundamental tasks in artificial intelligence (AI) and many programmers' dream. Numerous synthesizers have been developed to tackle program synthesis, manifesting different ideas to approach the exponentially growing program space. While numerous smart program synthesis tools exist, reusing and remixing previously developed methods is tedious and time-consuming. We propose Herb.jl, a unifying program synthesis library written in the Julia programming language, to address these issues. Since current methods rely on similar building blocks, we aim to modularize the underlying synthesis algorithm into communicating and fully extendable sub-compartments, allowing for straightforward reapplication of these modules. To demonstrate the benefits of using Herb.jl, we show three common use cases: 1. how to implement a simple problem and grammar, and how to solve it, 2. how to implement a previously developed synthesizer with just a few lines of code, and 3. how to run a synthesizer against a benchmark.
academic
Herb.jl: Una Biblioteca Unificada de Síntesis de Programas
La síntesis de programas —la generación automática de código a partir de especificaciones dadas— es una de las tareas más fundamentales en inteligencia artificial y un sueño de muchos programadores. Aunque se han desarrollado numerosas herramientas inteligentes de síntesis de programas para abordar el crecimiento exponencial del espacio de programas, la reutilización y recombinación de métodos existentes es tediosa y consume tiempo. Este artículo propone Herb.jl, una biblioteca unificada de síntesis de programas escrita en el lenguaje de programación Julia para resolver estos problemas. Dado que los métodos existentes dependen de bloques de construcción similares, los autores tienen como objetivo modularizar los algoritmos de síntesis subyacentes en subcomponentes comunicables y completamente extensibles, permitiendo la reaplicación directa de estos módulos.
El campo de la síntesis de programas enfrenta cuatro problemas principales:
Especificidad de Dominio: Las implementaciones de sintetizadores suelen diseñarse para lenguajes específicos, siendo difícil adaptarse a nuevas reglas sintácticas
Modularización Insuficiente: Los mismos bloques de construcción no pueden reutilizarse fácilmente, requiriendo que los investigadores reimplementen ideas idénticas
Dificultad de Comparación: Debido a diferencias en las opciones de ingeniería, la comparación de métodos a menudo se reduce a comparar la calidad de la implementación
Dificultad de Reutilización de Pruebas: Las opciones de reglas sintácticas en las pruebas suelen ser implícitas, afectando la comparación justa
Aunque los métodos existentes de síntesis de programas muestran excelente desempeño en sus respectivos dominios, presentan las siguientes limitaciones:
Las implementaciones son demasiado especializadas, careciendo de planificación de reutilización
Falta de diseño modularizado entre ramas de síntesis de programas
Los supuestos implícitos y optimizaciones hacen que la comparación de métodos sea difícil
Definición no uniforme de reglas sintácticas en pruebas
Proporciona Pruebas Estandarizadas: Reimplementa pruebas estándar en formato legible por humanos y extensible
Resume Principios de Diseño: Describe los principios de diseño orientadores en Herb.jl, con valor de referencia para otras implementaciones de sintetizadores
using HerbBenchmarks
pairs = get_all_problem_grammar_pairs(PBE_SLIA_Track_2019)
solved_problems = 0
for (problem, grammar) in pairs
solution = probe(grammar, :Start, problem; max_depth=5)
if !isnothing(solution)
solved_problems += 1
end
end
El artículo cita trabajos importantes en el campo de síntesis de programas, incluyendo:
Pruebas de competencia SyGuS (Padhi et al., 2019)
Algoritmo Probe (Barke et al., 2020)
Sintetizador FrAngel (Shi et al., 2019)
Sintetizador Neo (Feng et al., 2018)
Revisión de síntesis de programas (Gulwani et al., 2017)
Evaluación General: Este es un artículo de alta calidad sobre sistemas que propone el marco unificado que el campo de síntesis de programas necesita urgentemente. Aunque hay espacio para mejora en la evaluación experimental, sus contribuciones técnicas y valor práctico son destacados, con potencial para convertirse en infraestructura importante en este campo.