프로그래밍 언어 의미론을 위한 정리 증명 지원
초록
이 논문은 Coq 증명 도구를 이용해 간단한 프로그래밍 언어의 자연 의미론, 데노테이션 의미론, 공리적 의미론, 추상 해석을 형식화하고, 각각을 자연 의미론에 대해 정리적으로 증명한다. 또한 의미론을 재귀 함수로 구현해 검증 조건 생성기와 정적 분석기를 제공하고, 데노테이션 의미론으로부터 인터프리터를 추출한다.
상세 분석
본 연구는 Coq의 귀납적 구성법(CIC)을 기반으로 프로그래밍 언어 의미론을 전면적으로 형식화한다는 점에서 의미론 연구와 정리 증명 기술을 융합한 선구적 시도라 할 수 있다. 먼저 자연 의미론(Natural Semantics, big‑step) 을 관계형 정의로 기술하고, 이를 Coq의 인디케이션(Inductive) 타입으로 구현한다. 이 정의는 프로그램 상태와 명령어 사이의 전이 관계를 명시적으로 나타내며, 증명 전개 시 기본적인 전이 규칙을 그대로 활용할 수 있게 한다.
다음으로 데노테이션 의미론(Denotational Semantics)을 함수형 방식으로 정의한다. 여기서는 각 구문을 의미론적 도메인(예: 상태 변환 함수)으로 매핑하는 재귀 함수 ⟦·⟧ 를 Coq의 Fixpoint 로 구현한다. 중요한 점은 이 함수가 구조적 재귀에 의해 정의되므로 Coq의 정당성 검증 절차를 통과하고, 추출 메커니즘을 통해 OCaml 등 실행 가능한 코드로 변환할 수 있다는 것이다. 논문은 이 함수와 자연 의미론 사이의 동치 정리를 정리적으로 증명함으로써, 함수형 구현이 의미론적으로 정확함을 보장한다.
공리적 의미론(Axiomatic Semantics)은 Hoare 논리 기반의 전후조건 체계로 제시된다. 전후조건은 Coq의 Prop 타입으로 표현되며, 명령어 별 Hoare 삼중항 규칙을 인디케이션 형태로 정의한다. 핵심 기여는 이 공리적 체계가 자연 의미론에 대해 완전·음향(sound)임을 두 단계 증명으로 입증한다는 점이다. 특히, 증명에서는 자연 의미론의 전이 관계를 활용해 Hoare 삼중항의 유효성을 직접 확인함으로써, 전통적인 메타이론적 증명과 동일한 수준의 엄밀성을 확보한다.
추상 해석(Abstract Interpretation) 부분에서는 상태 추상화 도메인과 전이 함수의 추상 버전을 Coq 함수로 구현한다. 이 구현은 정적 분석기 역할을 수행하며, 분석 결과가 자연 의미론의 실제 실행 결과를 과잉 근사(over‑approximate)한다는 soundness 정리를 Coq 안에서 기계적으로 증명한다. 특히, 분석기 자체가 Coq 내부에서 실행 가능하도록 설계돼, 반사적 증명(reflective proof) 기법과 결합해 자동화된 검증 파이프라인을 구성한다.
마지막으로, 데노테이션 의미론에서 정의한 의미 함수 ⟦·⟧ 를 추출(extraction) 메커니즘을 이용해 실행 가능한 인터프리터로 변환한다. 이 인터프리터는 Coq 내부에서 검증된 의미론과 일치하므로, 외부 실행 환경에서도 동일한 의미론적 보장을 제공한다. 전체 논문은 네 가지 의미론적 관점을 상호 연계하고, 각각을 자연 의미론에 대해 정리적으로 증명함으로써, 프로그래밍 언어 설계·검증에 있어 Coq 기반 통합 프레임워크를 제시한다. 이러한 접근은 정리 증명과 실행 가능한 도구 사이의 격차를 메우는 데 중요한 전기를 마련한다.
댓글 및 학술 토론
Loading comments...
의견 남기기