2025-11-24T09:28:17.353555

Herb.jl: A Unifying Program Synthesis Library

Hinnerichs, Reid, de Jong et al.
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: 통합 프로그램 합성 라이브러리

기본 정보

  • 논문 ID: 2510.09726
  • 제목: Herb.jl: A Unifying Program Synthesis Library
  • 저자: Tilman Hinnerichs, Reuben Gardos Reid, Jaap de Jong, Bart Swinkels, Pamela Wochner, Nicolae Filat, Tudor Magurescu, Issa Hanou, Sebastijan Dumancic (Technische Universiteit Delft)
  • 분류: cs.PL (프로그래밍 언어), cs.AI (인공지능), cs.SE (소프트웨어 공학)
  • 발표 시간: Journal of Machine Learning Research 10 (2025) 1-48, 제출 10/25
  • 논문 링크: https://arxiv.org/abs/2510.09726

초록

프로그램 합성(주어진 명세에 따라 자동으로 코드를 생성하는 것)은 인공지능의 가장 기본적인 작업 중 하나이며, 많은 프로그래머의 꿈이기도 합니다. 지수적으로 증가하는 프로그램 공간을 처리하기 위해 수많은 지능형 프로그램 합성 도구가 개발되었지만, 기존 방법의 재사용과 재조합은 번거롭고 시간이 많이 소요됩니다. 본 논문은 이러한 문제를 해결하기 위해 Julia 프로그래밍 언어로 작성된 통합 프로그램 합성 라이브러리인 Herb.jl을 제시합니다. 기존 방법들이 유사한 구성 요소에 의존하기 때문에, 저자들은 기저 합성 알고리즘을 상호 통신 가능하고 완전히 확장 가능한 하위 구성 요소로 모듈화하여 이러한 모듈을 직접 재적용할 수 있도록 하는 것을 목표로 합니다.

연구 배경 및 동기

핵심 문제

프로그램 합성 분야는 네 가지 주요 문제에 직면하고 있습니다:

  1. 영역 특화성: 합성기 구현은 일반적으로 특정 언어를 위해 설계되어 새로운 구문 규칙에 적응하기 어렵습니다
  2. 모듈화 부족: 동일한 구성 요소를 쉽게 재사용할 수 없어 연구자들이 동일한 아이디어를 반복적으로 구현해야 합니다
  3. 비교의 어려움: 공학적 선택의 차이로 인해 방법 비교가 구현 품질 비교로 퇴화됩니다
  4. 벤치마크 재사용의 어려움: 벤치마크의 구문 규칙 선택이 종종 암묵적이어서 공정한 비교에 영향을 미칩니다

연구 동기

기존의 프로그램 합성 방법은 각자의 영역에서 우수한 성능을 보이지만 다음과 같은 한계가 있습니다:

  • 구현이 과도하게 전문화되어 재사용성 계획이 부족합니다
  • 프로그램 합성 분야 전반에 걸친 모듈화 설계가 부족합니다
  • 암묵적 가정과 최적화로 인해 방법 비교가 어렵습니다
  • 벤치마크의 구문 규칙 정의가 통일되지 않습니다

핵심 기여

  1. Herb.jl 제시: Julia 언어로 작성된 새로운 통합 프로그램 합성 라이브러리
  2. 모듈화 구현 시연: Herb.jl을 사용하여 기존 합성기를 쉽게 구현하는 방법 시연
  3. 표준화된 벤치마크 제공: 인간이 읽을 수 있고 확장 가능한 형식으로 표준 벤치마크 재구현
  4. 설계 원칙 요약: Herb.jl의 지도 설계 원칙을 개괄하여 다른 합성기 구현에 참고 가치 제공

방법론 상세 설명

작업 정의

프로그램 합성 문제는 두 가지 구성 요소로 정의됩니다:

  1. 명세(Specification): 사용자의 의도를 설명하며, 일반적으로 입출력 예제로 표현됩니다
  2. 문법(Grammar): 대상 언어를 설명하며, 문맥 자유 파생 규칙으로 구성됩니다

아키텍처 설계

Herb.jl은 계층화된 모듈화 아키텍처를 채택하며, 다음과 같은 핵심 구성 요소를 포함합니다:

핵심 모듈

  • HerbCore.jl: 문법, 프로그램 및 제약 조건의 인터페이스 정의
  • HerbSpecification.jl: 문제 명세 정의 처리
  • HerbGrammar.jl: 프로그램 구문 구조 정의
  • HerbInterpret.jl: 프로그램 의미론 및 평가 처리
  • HerbConstraints.jl: 제약 조건 공식화 및 전파
  • HerbSearch.jl: 검색 방법 및 열거 기법

특수 모듈

  • Herb.jl: 전체 패키지 래퍼 모듈
  • HerbBenchmarks.jl: 표준 벤치마크 모음
  • Garden.jl: 알려진 합성기의 구현 모음

기술 혁신 포인트

1. 문법과 의미론의 분리

Herb.jl은 문법과 의미론을 명확히 분리합니다:

  • 프로그램 열거는 순전히 문법 기반이며, 추상 구문 트리(AST) 업데이트를 통해 완성됩니다
  • 프로그램은 명세 확인을 위해 실행 가능한 표현식으로 변환됩니다
  • 사용자는 내부 메커니즘을 이해할 필요 없이 실행 가능한 표현식만 제공하면 됩니다

2. 통합 트리 구조

"통합 트리"라는 사용자 정의 데이터 구조를 도입합니다:

  • 유사한 형태의 작업은 유사한 형태의 프로그램을 생성합니다
  • 통합 노드는 단일 작업이 아닌 동일한 형태의 작업 영역을 설명합니다
  • 메모리 사용을 현저히 감소시키며, 효율적인 제약 조건 적용 및 전파를 지원합니다

3. 열거 순서 최적화

두 가지 함수를 통해 프로그램 열거 순서를 정의합니다:

  • 우선순위 함수: 우선순위 큐의 요소에 대한 우선순위 값 정의
  • 파생 휴리스틱: 통합 트리 내 요소 영역의 열거 순서 정의

실험 설정

사용 사례 시연

사례 1: 간단한 문제 정의 및 해결

# 입출력 명세 정의
problem = Problem([
    IOExample(Dict(:x => 0), 1),
    IOExample(Dict(:x => 1), 3),
    IOExample(Dict(:x => 2), 5),
    IOExample(Dict(:x => 3), 7)
])

# 문법 정의
grammar = @cfgrammar begin
    Int = 1 | 2 | x
    Int = Int + Int
    Int = Int * Int
end

# 검색 실행
iterator = BFSIterator(grammar, :Int, max_depth=5)
solution, flag = synth(problem, iterator)

사례 2: Probe 알고리즘 구현

몇 줄의 코드로 Probe 합성기를 재구현하는 방법을 시연합니다:

  • 최대 가능성 우선 검색 반복자(MLFSIterator) 구현
  • 확률 계산 함수 정의
  • Probe 루프 로직 구현

사례 3: 벤치마크 실행

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

기술 구현 세부 사항

  • Julia의 다중 디스패치 특성을 활용한 모듈화 구현
  • Julia의 메타프로그래밍 능력을 활용한 AST 작업 처리
  • 메모리 사용 및 제약 조건 전파 최적화를 위한 통합 트리 구조 채택

실험 결과

모듈화 효과 시연

논문은 세 가지 사용 사례를 통해 Herb.jl의 효과성을 검증합니다:

  1. 간단한 문제 해결: 몇 줄의 코드로 기본 프로그램 합성 문제를 정의하고 해결할 수 있습니다
  2. 기존 알고리즘 재구현: Probe 알고리즘의 재구현 코드는 간결하고 효율적입니다
  3. 벤치마크 통합: 표준 벤치마크에서 합성기를 쉽게 실행하고 성능 지표를 수집할 수 있습니다

실용성 검증

  • 코드 간결성: 원래 구현과 비교하여 코드량이 현저히 감소합니다
  • 모듈 상호 교환성: 검색 전략, 제약 조건 유형 등의 구성 요소를 쉽게 교체할 수 있습니다
  • 확장성: 새로운 문법 규칙, 검색 방법 및 제약 조건 유형 추가를 지원합니다

관련 연구

프로그램 합성 분야의 현황

  • 열거 검색 방법: 하향식 및 상향식 검색 전략 포함
  • 제약 조건 기반 합성: 제약 조건을 활용하여 검색 공간 제한
  • 휴리스틱 기반 유도: 영역 지식을 사용하여 검색 과정 유도
  • 신경 기호 방법: 기계 학습과 기호 추론 결합

Herb.jl의 위치

기존 도구와 비교하여 Herb.jl의 장점은 다음과 같습니다:

  • 영역 무관의 통합 프레임워크 설계
  • 모듈화되고 재사용 가능한 구성 요소 아키텍처
  • 표준화된 벤치마크 플랫폼
  • Julia 언어가 제공하는 성능 및 표현력 우위

결론 및 논의

주요 결론

Herb.jl은 프로그램 합성 분야의 네 가지 핵심 문제를 성공적으로 해결합니다:

  1. 영역 무관의 범용 프레임워크 제공
  2. 고도로 모듈화된 구성 요소 설계 구현
  3. 공정한 비교를 위한 기반 시설 구축
  4. 벤치마크의 정의 및 사용 표준화

한계

  • 신흥 프레임워크로서 생태계가 아직 건설 중입니다
  • 사용자가 Julia 언어와 Herb.jl의 설계 철학을 학습해야 합니다
  • 일부 고도로 최적화된 전문 합성기는 특정 영역에서 여전히 성능 우위를 가질 수 있습니다

향후 방향

  • 더 많은 합성 방법을 지원하기 위해 새로운 모듈화 구성 요소 지속적 추가
  • 더 많은 응용 분야를 포함하도록 벤치마크 모음 확장
  • 기계 학습 커뮤니티와의 협력을 통해 더 많은 신경 기호 방법 통합

심층 평가

장점

  1. 혁신적인 통합 프레임워크: 진정한 의미의 모듈화된 프로그램 합성 라이브러리를 처음으로 제공합니다
  2. 우수한 기술 설계: 통합 트리 구조 및 문법-의미론 분리 등의 설계가 정교합니다
  3. 높은 실용 가치: 프로그램 합성 연구의 진입 장벽을 현저히 낮춥니다
  4. 완전한 문서: 명확한 사용 사례 및 구현 지침을 제공합니다

부족한 점

  1. 제한된 평가: 기존 도구와의 상세한 성능 비교 부족
  2. 생태계 의존성: 성공이 Julia 커뮤니티의 수용도에 달려 있습니다
  3. 학습 곡선: 사용자가 새로운 프로그래밍 패러다임과 도구를 습득해야 합니다

영향력

  • 학술 기여: 프로그램 합성 연구를 위한 표준화 플랫폼 제공
  • 실용 가치: 연구 효율성 및 코드 재사용성을 현저히 향상시킵니다
  • 재현성: 통합 벤치마크 플랫폼이 결과 재현을 용이하게 합니다

적용 시나리오

  • 프로그램 합성 알고리즘의 프로토타입 개발 및 테스트
  • 서로 다른 합성 방법의 공정한 비교 및 평가
  • 프로그램 합성 개념의 교육 및 학습
  • 영역 간 프로그램 합성 응용의 빠른 배포

참고 문헌

논문은 프로그램 합성 분야의 중요한 연구를 인용합니다:

  • SyGuS 경쟁 벤치마크 (Padhi et al., 2019)
  • Probe 알고리즘 (Barke et al., 2020)
  • FrAngel 합성기 (Shi et al., 2019)
  • Neo 합성기 (Feng et al., 2018)
  • 프로그램 합성 개요 (Gulwani et al., 2017)

종합 평가: 이것은 프로그램 합성 분야에서 절실히 필요한 통합 프레임워크를 제시한 고품질의 시스템 논문입니다. 실험 평가 측면에서 개선의 여지가 있지만, 기술적 기여와 실용적 가치 모두 매우 뛰어나며, 해당 분야의 중요한 기반 시설이 될 것으로 예상됩니다.