Several software systems are polyglot; that is, they comprise programs implemented in a combination of programming languages. Verifiers that directly run on mainstream programming languages are currently customized for single languages. Thus, to verify polyglot systems, one usually translates them into a common verification language or formalism on which the verifier runs. In this paper, we present an alternative approach, PolyVer, which employs abstraction, compositional reasoning, and synthesis to directly perform polyglot verification. PolyVer constructs a formal model of the original polyglot system as a transition system where the update functions associated with transitions are implemented in target languages such as C or Rust. To perform verification, PolyVer then connects a model checker for transition systems with language-specific verifiers (e.g., for C or Rust) using pre/post-condition contracts for the update functions. These contracts are automatically generated by synthesis oracles based on syntax-guided synthesis or large language models (LLMs), and checked by the language-specific verifiers. The contracts form abstractions of the update functions using which the model checker verifies the overall system-level property on the polyglot system model. PolyVer iterates between counterexample-guided abstraction-refinement (CEGAR) and counterexample-guided inductive synthesis (CEGIS) until the property is verified or a true system-level counterexample is found. We demonstrate the utility of PolyVer for verifying programs in the Lingua Franca polyglot language using the UCLID5 model checker connected with the CBMC and Kani verifiers for C and Rust respectively.
- 논문 ID: 2503.03207
- 제목: PolyVer: A Compositional Approach for Polyglot System Modeling and Verification
- 저자: Pei-Wei Chen, Shaokai Lin, Adwait Godbole, Ramneet Singh, Elizabeth Polgreen, Edward A. Lee, Sanjit A. Seshia
- 분류: cs.PL (프로그래밍 언어)
- 발표 시간/학회: Formal Methods in Computer-Aided Design 2025
- 논문 링크: https://arxiv.org/abs/2503.03207
다중언어 소프트웨어 시스템(polyglot systems)은 여러 프로그래밍 언어로 구현된 프로그램의 조합으로 이루어져 있으나, 기존의 프로그램 검증기는 일반적으로 단일 언어에만 맞춤화되어 있습니다. 다중언어 시스템을 검증하기 위해서는 보통 이를 공통 검증 언어 또는 형식적 표현으로 변환해야 합니다. 본 논문은 추상화, 조합 추론 및 합성 기술을 활용하여 다중언어 검증을 직접 수행하는 대안적 방법인 PolyVer를 제시합니다. PolyVer는 다중언어 시스템을 전이 시스템의 형식적 모델로 구성하며, 여기서 전이와 관련된 업데이트 함수는 목표 언어(예: C 또는 Rust)로 구현됩니다. 검증을 수행하기 위해 PolyVer는 업데이트 함수의 전제조건/후제조건 계약을 통해 전이 시스템의 모델 검사기를 언어별 검증기와 연결합니다. 이러한 계약은 구문 유도 합성 또는 대규모 언어 모델 기반 합성 오라클을 통해 자동으로 생성되며, 언어별 검증기에 의해 검사됩니다.
현대 소프트웨어 시스템은 ROS2, Lingua Franca 등의 프레임워크가 개발자가 각 구성 요소에 가장 적합한 프로그래밍 언어를 선택할 수 있도록 하는 다중언어 아키텍처를 점점 더 많이 채택하고 있습니다. 그러나 이러한 유연성은 검증 측면에서 다음과 같은 과제를 야기합니다:
- 언어 의미론의 차이: 서로 다른 프로그래밍 언어는 서로 다른 구문과 의미론을 가지고 있습니다. 예를 들어, Rust의
saturating_add 함수는 오버플로우 시 최댓값으로 포화되지만, C의 덧셈은 래핑될 수 있습니다. - 기존 검증기의 한계: 대부분의 프로그램 검증기(예: C용 CBMC, Rust용 Kani)는 단일 언어에 특화되어 설계되었으며 다중언어 시스템을 직접 처리할 수 없습니다.
- 번역의 복잡성: 전체 다중언어 시스템을 단일 검증 언어로 번역하려면 모든 언어의 완전한 구문과 의미론을 지원해야 하며, 이는 현대 언어에서는 불가능합니다.
다중언어 시스템의 복잡성은 소프트웨어 결함의 위험을 증가시키며, 자율주행, 항공우주 등의 안전 관련 분야에서는 테스트 등의 불완전한 방법이 아닌 형식적 검증이 제공하는 강력한 보증이 필요합니다.
- 단일체 번역 방법: 각 언어에 대해 완전한 컴파일러 인프라를 개발해야 함
- 의미론 보존의 어려움: 목표 검증 언어에서 소스 언어의 모든 언어별 구성을 충실하게 포착하기 어려움
- 확장성 문제: 생성된 검증 문제가 과도하게 커질 수 있음
- 다중언어 검증 문제의 형식화: 다중언어 검증 문제를 처음으로 체계적으로 형식화하고 여러 언어별 검증기를 통합하는 조합 솔루션을 제시합니다.
- 자동화된 계약 합성: 중간 언어와 CEGIS-CEGAR 루프를 사용하여 전제조건/후제조건 계약을 자동으로 합성하고 정제하는 방법을 제시하며, 구문 유도 합성과 대규모 언어 모델을 합성 오라클로 지원합니다.
- 도구 구현: UCLID5를 기반으로 PolyVer 도구를 구현하여 C와 Rust를 지원하며, CBMC 및 Kani 검증기를 통해 LLM 기반 합성 오라클이 순수 기호 합성 방법보다 우수함을 입증합니다.
- 사례 연구 및 평가: Lingua Franca 조정 언어의 검증기를 개발하여 C 및 Rust 프로세스를 포함하는 다중언어 시스템과 이전 작업에서 지원할 수 없었던 C 언어 조각을 검증합니다.
입력: 다중언어 모델 M = (Q,V,I₀,T,F) 및 시스템 속성 φ
출력: 검증 결과(통과/실패) 및 가능한 반례 궤적
목표: M ⊨ φ 여부 결정
여기서:
- Q: 모드 집합
- V: 타입화된 변수 집합
- I₀: 초기 상태 집합
- T: 모드 전이 집합
- F: 프로세스 집합
PolyVer는 다중언어 시스템을 확장 상태 머신으로 모델링하며, 여기서:
- 상태는 모드와 변수 할당으로 구성됨
- 전이는 보호 조건 및 업데이트 관계와 연관됨
- 업데이트 관계는 프로세스 호출 시퀀스로 특화됨
핵심 혁신은 중간 언어 L*을 서로 다른 언어 간의 "접착제"로 도입하는 것입니다:
- 계약은 L*로 작성됨
- 의미론 보존 컴파일 compL을 통해 구체적 언어로 변환됨
- 완전한 언어 번역의 복잡성을 회피함
알고리즘의 핵심은 두 계층의 반복 루프입니다:
외부 CEGAR 루프:
- 현재 계약으로 추상 모델 M' 구성
- 모델 검사기가 M' ⊨ φ 검증
- 실패 시 반례가 거짓인지 확인
- 거짓이면 계약 정제; 아니면 참 반례 보고
내부 CEGIS 루프:
- 합성 오라클이 후보 계약 생성
- 검증 오라클이 계약 유효성 확인
- 무효이면 양성 예제 추가 후 재합성
단일체 번역과 달리 PolyVer는 "분할 정복" 전략을 채택합니다:
- 계약을 사용하여 개별 프로세스 추상화
- 언어별 검증기가 계약 유효성 검증
- 모델 검사기가 시스템 수준 속성 검증
여러 합성 오라클을 지원합니다:
- LLM 기반 합성기: 사고의 연쇄 프롬프트 및 Python DSL 사용
- SyGuS/SyMO 합성기: 문제를 예제 프로그래밍 문제로 인코딩
{V = d} C {V' ≠ d'}를 검증하여 반례 궤적의 도달 가능성을 확인하고 참 반례와 거짓 반례를 구분합니다.
- LFVerifier 벤치마크: 제한된 C 구문을 포함하는 22개의 Lingua Franca 프로그램
- 완전한 LF 예제: LED 컨트롤러, 클라이밍 로봇, 위성 자세 제어기 등의 임베디드 시스템
- 다중언어 시스템: C/Rust 혼합 LF 프로그램, ROS2 애플리케이션, FFI 호출 프로그램
- 합성 반복 횟수(IS: CEGIS 반복, AR: CEGAR 반복)
- 실행 시간(SOT: 합성 오라클 시간, VOT: 검증 오라클 시간, UT: UCLID5 시간)
- 검증 성공률
유일하게 알려진 엔드투엔드 자동화 LF 프로그램 검증 도구인 LFVerifier15와 비교합니다.
- OpenAI o1-mini를 LLM 합성기로 사용, 프로세스당 3개의 병렬 쿼리
- CBMC-6.3.1, Kani-0.56.0, z3-4.8.7을 검증 백엔드로 사용
- 3.7GHz Intel Core i9 머신, 62GB RAM
22개의 벤치마크에서:
- PolyVer는 모든 벤치마크를 성공적으로 검증하며, LFVerifier는 TrafficLight 예제를 검증할 수 없음
- 18개의 벤치마크에서 단일 CEGIS 루프에서 계약을 올바르게 합성, 평균 37초
- 총 실행 시간은 더 느리지만(주로 계약 합성 시간 지배), 상당한 정성적 개선을 제공
완전한 C 코드를 포함하는 임베디드 시스템 검증 성공:
- LED 컨트롤러: 1개 프로세스, 123줄 C 코드, 31.0초 합성 시간
- 클라이밍 로봇: 12개 프로세스, 75줄 C/Rust 코드, 685.4초 합성 시간
- 위성 제어기: 6개 프로세스, 424줄 C 코드, 729.0초 합성 시간
진정한 다중언어 시스템 검증:
- C/Rust 혼합 LF 프로그램
- ROS2 서비스 애플리케이션
- FFI 크로스 언어 호출 프로그램
- LLM이 기호 방법보다 우수: SyGuS/SyMO 솔버는 많은 CEGAR 반복이 필요하며 종종 종료되지 않음
- 계약 합성의 과제: 복잡한 제어 흐름과 데이터 의존성을 가진 프로세스는 더 많은 반복 필요
- 실용성 검증: 장난감 예제가 아닌 실제 구현 코드를 처리할 수 있음
- 수동 번역 방법: Cook 등이 Xen 하이퍼바이저 검증을 위해 어셈블리 코드를 C로 번역
- 조각 자동 번역: LFVerifier가 C 조각을 검증 언어로 자동 번역
- 블랙박스 방법: 입출력 동작에서 요약 추론
- Hoare 논리 기반 조합 검증이 대규모 단일언어 프로그램에 광범위하게 적용됨
- 추상 해석 및 CEGAR를 사용한 전제조건/후제조건 학습 자동화
- 속성 유도 계약 추론 방법
- 제약 Horn 절 솔버
- 규격 학습에서 최근 LLM의 응용
- PolyVer는 다중언어 시스템 검증의 핵심 과제를 성공적으로 해결함
- 조합 방법은 완전한 언어 번역의 복잡성을 회피함
- 자동화된 계약 합성이 방법을 실용적으로 만듦
- LLM 기반 합성기가 전통적 기호 방법보다 성능이 우수함
- 종료성: 알고리즘이 종료를 보장하지 않으며 합성 오라클의 품질에 의존
- 언어 지원: 현재 C와 Rust만 지원하며 다른 언어를 위해 검증 오라클 개발 필요
- 계약 표현성: 중간 언어 L*의 표현 능력이 검증 가능한 속성의 복잡성을 제한
- 확장성: 대규모 시스템의 계약 합성 시간이 병목이 될 수 있음
- 다른 다중언어 분산 소프트웨어 시스템 및 로봇 소프트웨어 시스템으로 확장
- 코드 번역의 형식적 검증에 적용(예: C에서 Rust로의 번역)
- 계약 합성의 효율성 및 정확성 개선
- 더 복잡한 시간 논리 속성 지원
- 문제의 중요성: 다중언어 시스템 검증은 실제적이고 중요한 문제
- 방법의 창의성: 조합 검증 + 자동 계약 합성의 결합이 새로움
- 이론적 기초: 형식적 정의가 명확하고 정확성 보증이 명확함
- 실용적 가치: 장난감 예제가 아닌 실제 시스템을 처리할 수 있음
- 도구 구현: 사용 가능한 도구 구현 제공
- 성능 오버헤드: 계약 합성 시간이 길어 실제 적용을 제한할 수 있음
- 언어 커버리지: 현재 C와 Rust만 지원하며 확장성 검증 필요
- 벤치마크 제한: 실제 예제를 포함하지만 규모가 상대적으로 작음
- LLM 의존성: 상용 LLM 서비스에 의존하여 재현성에 영향을 미칠 수 있음
- 학술적 기여: 다중언어 시스템 검증을 위한 새로운 연구 방향 개척
- 실용적 가치: 안전 관련 다중언어 시스템을 위한 검증 도구 제공
- 기술적 영감: 계약을 언어 간 인터페이스로 사용하는 아이디어의 보편적 가치
- 임베디드 시스템: C/Rust 혼합 실시간 시스템
- 분산 시스템: ROS2, gRPC 등의 다중언어 프레임워크
- 안전 관련 애플리케이션: 형식적 검증 보증이 필요한 시스템
- 레거시 시스템 통합: 신구 코드 혼합 시스템
논문은 다중언어 시스템, 형식적 검증, 계약 추론, 구문 유도 합성 등 여러 분야의 중요한 작업을 포함하는 50개의 관련 문헌을 인용하여 연구에 견고한 이론적 기초를 제공합니다.
종합 평가: 이는 중요하고 실제적인 문제를 해결하는 고품질의 시스템 연구 논문입니다. 방법은 창의적이고 실험이 충분하며 도구 구현이 완전합니다. 성능과 확장성 측면에서 개선의 여지가 있지만, 다중언어 시스템 검증 분야에 중요한 기여를 했습니다.