CPG 기반 C-to-Lean 4 자동 형식화 검증: 거절된 번역과 조용히 잘못된 번역 분리
요약
본 논문은 대규모 C 코드베이스를 형식적으로 검증하기 위해 결정론적 코드-속성 그래프(CPG)-기반 익스포터를 제시합니다. 이 방법론은 기존 연구가 혼합하여 보고하던 '거부된 오류'와 '조용히 잘못 번역된 오류' 모드를 분리하여 분석하는 데 중점을 둡니다.
핵심 포인트
- C 코드베이스를 Lean~4 핵심 의미론으로 변환하는 익스포터 제시
- 기존 연구의 단일 성공률 보고 방식의 한계 지적
- 거부(hole)된 오류와 조용히 잘못 번역된 오류 분리 분석
- 전체 구성 요소별 신뢰 원장(trust ledger) 제공
대규모 C 코드베이스를 검증하려면 이를 형식적으로 검사 가능한 의미론으로 변환해야 하지만, 대부분의 자동 형식화(autoformalization) 연구는 두 가지 다른 실패 모드를 혼합하여 단일 종합 성공률을 보고합니다. 즉, 트랜슬레이터가 처리하기를 거부한 코드와 트랜슬레이터가 잘못 번역한 코드가 있습니다. 우리는 세 단계의 정확성 규율(hole-free, call-closed, dynamic-hole-risk) 하에 C 소스를 작은 Lean~4 핵심 의미론으로 변환하는 결정론적 코드-속성 그래프(CPG)-기반 익스포터(exporter)를 제시하며, 이를 통해 이 모드들을 분리합니다. SQLite 소스 트리 재익스포트(8,602 함수, 150만 개 이상의 AST 노드)에 적용했을 때, 이 익스포터는 5,222개 함수(60.7%)를 hole-free로 번역하며, 그중 오직 2,134개(24.8%)만이 call-closed 상태입니다. 이는 단일 비율로는 가려질 수 있는 $2.4 imes$의 격차입니다. 이 두 수치는 단일 점수가 아닌 전체 구성 요소별 신뢰 원장(trust ledger)에 보고됩니다. 우리의 주요 기여는 방법론적입니다. 즉, 전체 프로그램 정적 분석으로는 근본적으로 해결 불가능한 구성 요소(예: public API 경계)와 단순히 그렇게 보이는 구성 요소를 분리하는 프로토콜입니다. 예를 들어, 우리는 대상 코드베이스에서 구체적인 반례를 추적한 후 함수 포인터/vtable 디스패치에 대한 자체의 '불가능' 분류를 철회했습니다. 별도로, '더 많은 hole 닫기' 검색을 통해 잠재적인 조용한 오답 버그(silent-wrong-answer bug)가 발견되었는데, 이는 거부하는 대신 잘못된 결과로 성공한 번역입니다. 우리는 이 실패 모드가 어떤 hole보다 더 위험하며, hole 개수만으로 평가하는 방식으로는 절대 드러나지 않는다고 주장합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 arXiv cs.PL (Programming Languages)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기