Lean 4와 PB 증명 인증: PBLean의 혁신적인 통합
초록
PBLean은 VeriPB 형식의 의사불린(pseudo‑Boolean) 증명서를 Lean 4에 직접 가져와 검증하는 시스템이다. 핵심은 증명 단계마다 Lean 내부에 증명 용어를 만들지 않고, Boolean 체크러 함수를 반사(reflection) 기법으로 정의하고 그 안전성을 Lean에서 한 번만 증명한 뒤, 네이티브 코드로 실행한다. 이를 통해 수만 단계에 달하는 대형 증명도 메모리 부족 없이 검증할 수 있다. 모든 VeriPB 커널 규칙(컷팅‑플레인, 증명‑대‑모순 서브프루프 등)을 지원하며, 문제 인코딩 자체도 Lean에서 형식화·증명함으로써 솔버 출력과 원문 문제 사이의 신뢰 격차를 메우는다. 독립 집합, Langford 페어링, Schur 수 등 다양한 조합론 문제에 적용해 완전 검증된 정리를 얻었다.
상세 분석
PBLean은 기존 SAT/SMT 증명 검증 방식이 갖는 두 가지 한계를 동시에 해결한다. 첫째, VeriPB와 같은 의사불린 증명 포맷은 컷팅‑플레인 연산을 포함하는 복잡한 규칙을 사용한다. 이러한 규칙을 그대로 Lean의 증명 객체로 변환하면, 각 단계마다 새로운 Expr를 생성해야 하므로 증명 길이가 수천·수만 단계에 달할 경우 메모리 사용량이 급증한다. 둘째, 외부 검증기(예: CakePB)는 검증 결과를 단순 ‘SAT/UNSAT’ 판정으로만 제공하므로, 그 결과를 다른 정리와 조합하거나 문제 자체에 대한 의미론적 해석을 연결하기 어렵다. PBLean은 이러한 문제를 ‘반사(reflection)’라는 메커니즘으로 극복한다. 구체적으로, Boolean 체크러 check : F → π → Bool를 정의하고, 이 함수가 VeriPB 증명 문자열 π를 순차적으로 해석해 모순이 발생하면 true를 반환하도록 구현한다. 체크러의 동작은 순수 함수형 코드이지만, Lean의 native_decide를 통해 네이티브 코드로 컴파일되어 실행된다. 따라서 실행 시간은 Lean 커널 내부에서 증명 객체를 생성·검증하는 비용이 아니라, 순수 계산 비용에 국한된다.
안전성은 두 단계로 증명된다. (1) 각 VeriPB 커널 규칙에 대응하는 13개의 기본 레마를 Lean 내부에 정의하고, 이 레마들이 Boolean 평가와 정확히 일치함을 정리한다. (2) 체크러가 반환한 true에 대해 “F는 만족 불가능하다”는 정리를 check_sound라는 하나의 정리로 증명한다. 이 정리는 Lean 표준 공리(propext, Classical.choice, Quot.sound)와 Lean.trustCompiler만을 신뢰 기반으로 한다. 따라서 전체 시스템의 신뢰 기반은 기존 bv_decide 전술과 동일하게 최소화된다.
구현 측면에서 PBLean은 두 개의 주요 모듈로 구성된다. PseudoBoolean.lean은 의사불린 제약을 표현하는 타입과 13개의 레마를 제공하며, 약 700줄 정도의 코드로 구현된다. Reflect.lean은 VeriPB 커널 파일을 토큰화하고 AST로 변환한 뒤, 해시맵 기반 제약 데이터베이스를 유지하면서 각 규칙을 적용한다. 특히 `@
댓글 및 학술 토론
Loading comments...
의견 남기기