이벤트‑B 모델을 알로이로 변환해 자동 검증하기
초록
이 논문은 이벤트‑B 사양을 알로이(Alloy) 언어로 인코딩하여 SAT 기반 모델 체커로 검증하는 방법을 제시한다. 모델 구조, 표현식, 이벤트를 알로이 서명과 사실(fact)로 변환하고, 상태 전이를 명시적으로 모델링한다. 간단한 뮤텍스 예제를 통해 인코딩 절차와 검증 과정이 설명되며, 향후 자동화와 도구 통합 가능성을 논의한다.
상세 분석
본 논문은 이벤트‑B와 알로이라는 서로 다른 형식화 패러다임을 연결함으로써, 이벤트‑B의 정리 증명에서 발생하는 자동화 한계를 보완하고자 한다. 핵심 아이디어는 이벤트‑B 머신과 컨텍스트를 알로이 서명(signature)과 관계(relation)로 변환하고, 상태(state)를 순서가 있는 집합으로 모델링하는 것이다. 이를 위해 “State” 서명을 정의하고, 각 변수는 해당 서명의 필드로 선언한다. 변수의 타입은 이벤트‑B의 캐리어 집합과 열거형을 알로이 서명으로 매핑함으로써 구현된다. 초기화는 “Initialisation” 이벤트를 사실(fact)로 변환해 첫 번째 상태를 설정하고, 모든 변수에 초기값을 할당한다.
이벤트는 두 개의 파라미터(현재 상태와 다음 상태)를 갖는 알로이 프레디케이트(predicate)로 변환된다. 프레디케이트 내부에서는 가드(guard)를 알로이 논리식으로, 액션(action)을 다음 상태의 필드값을 현재 상태와 관계식으로 정의한다. 모든 이벤트가 전이 가능한 상태를 보장하기 위해 “EventTrigger” 사실을 추가해, 각 상태에서 적어도 하나의 이벤트가 발생하도록 강제한다.
표현식 인코딩은 가장 어려운 부분으로, 이벤트‑B의 복합 관계 연산(예: 도메인, 레인지, 제한, 차집합 등)을 알로이의 평면 관계만으로 재현해야 한다. 논문은 이러한 연산을 기존 알로이 모듈이나 직접 정의한 함수로 매핑하고, 함수형 표현식은 관계와 사실을 조합해 의미를 보존한다. 특히 함수 중첩은 새로운 서명을 생성해 재귀적으로 표현한다.
예제로 제시된 뮤텍스 모델은 두 개의 캐리어 집합(프로세스, 뮤텍스)과 두 관계(Holds, Waits)를 포함한다. 각 이벤트(HoldOnMutex, WaitOnMutex, ReleaseMutex)는 가드와 액션을 알로이 프레디케이트로 변환하고, 상태 전이와 이벤트 종류를 “Ev” 필드에 기록한다. 인버턴트는 알로이 어설션(assert)으로 선언하고, “check” 명령으로 지정된 상태 수와 변수 범위 내에서 위배 사례를 탐색한다. 결과적으로 6개의 상태 안에서 교착 상태(deadlock)가 발견되었으며, 이는 이벤트‑B 인버턴트 위배와 일치한다.
논문은 현재 인코딩이 수동으로 이루어지고, 복잡한 이벤트‑B 연산에 대해 서명 수가 급증할 수 있다는 한계를 인정한다. 향후 작업으로는 인코딩 자동화, RODIN 도구와의 통합, 다른 백엔드(SMT 등)와의 연계, 그리고 제약 기반 검증 기법을 추가하는 방안을 제시한다. 이러한 발전은 이벤트‑B 사용자가 알로이의 고성능 SAT 솔버를 활용해 빠르게 반례를 찾고, 정리 증명 과정을 보조할 수 있게 한다.
댓글 및 학술 토론
Loading comments...
의견 남기기