지식 기반 프로그래밍 환경 프로토타입

본 논문은 선언적 배경 지식, 절차적 코드, 구체적 데이터를 각각 적합한 언어로 표현하고, 이들을 유연하게 결합할 수 있는 새로운 프로그래밍 환경인 declimp 을 제안한다. 선언적 지식은 1차 정렬 논리와 귀납적 정의·집합 연산을 확장한 형태로, 절차는 경량 스크립트 언어 Lua로 구현한다. 프로토타입은 모델 확장·검사·제약 전파·쿼리·정리 증명·시각화 등 다양한 추론 엔진을 연동하며, 수두쿠 퍼즐 생성 예제로 실용성을 보여준다.

저자: Stef De Pooter, Johan Wittocx, Marc Denecker

본 논문은 프로그래밍 패러다임이 “하나의 추론 방식”에 국한되는 문제점을 인식하고, 선언적 배경 지식, 절차적 코드, 구체적 데이터를 각각 적합한 언어로 표현하고 유연하게 결합할 수 있는 새로운 프로그래밍 환경을 제안한다. 저자들은 이 환경을 **declimp**(declarative + imperative)이라 명명하고, 이를 구현한 프로토타입 인터프리터를 소개한다. **1. 배경 및 동기** 전통적인 명령형 언어는 비실행성 배경 지식을 표현하기 어렵고, 논리 기반 선언형 언어는 절차적 연산을 지원하지 못한다는 한계가 있다. 예를 들어, Prolog은 Horn 절을 이용해 질의를 수행하지만, 스케줄링과 같은 모델 생성 문제를 다루려면 스케줄을 리스트 형태로 표현하고, 제약을 절로 변환해야 하는 불편함이 있다. 이러한 문제를 해결하기 위해 저자들은 각각의 정보 유형을 적합한 언어로 기술하고, 이들을 연결하는 다양한 추론 작업을 제공하는 환경을 설계한다. **2. 언어 설계** declimp 프로그램은 네 종류의 블록으로 구성된다. - **Procedure**: 실행 흐름을 담당하는 절차적 코드. Lua 스크립트 언어를 사용해 가볍고 C++와의 연동이 용이하도록 설계하였다. - **Vocabulary**: 정렬, 술어, 함수 이름을 정의하는 어휘 블록. 이는 논리 이론과 구조가 공유하는 메타데이터 역할을 한다. - **Theory**: 배경 지식을 기술하는 논리 이론 블록. 1차 정렬 논리를 기반으로 귀납적 정의, 집합 연산, 부분 함수, 산술 등을 확장한 형태를 사용한다. 이는 기존 1차 논리의 표현력 한계를 보완한다. - **Structure**: 구체적 데이터를 담는 구조 블록. 2값(완전)과 3값(불완전) 구조를 지원하며, 3값 구조는 “확실히 포함”, “확실히 제외”, “불확실” 세 집합을 통해 불완전 정보를 자연스럽게 모델링한다. 프로그램은 **include**와 **namespace**를 통해 다중 파일과 이름공간을 관리한다. 실행은 절차 블록이 제어하며, 메인 절차가 존재하면 그부터 시작하고, 없을 경우 인터랙티브 쉘에서 명령을 입력한다. **3. 추론 엔진 연동** declimp 인터프리터는 절차 안에서 다양한 추론 작업을 호출할 수 있다. 현재 지원되는 주요 작업은 다음과 같다. - **Finite model expansion**: 3값 구조와 이론을 입력으로 받아 2값 완전 모델을 생성한다. 이는 ASP·제약 프로그래밍·Alloy와 유사한 역할을 하며, IDP 시스템(GidL·MinisatID)을 백엔드로 사용한다. - **Finite model checking**: 주어진 2값 구조가 이론의 모델인지 검증한다. 모델 확장 기능을 재활용한다. - **Constraint propagation**: 3값 구조를 완전화하기 전에 반드시 참이어야 할 사실을 도출한다. 이는 구성 시스템 및 불완전 데이터베이스 질의에 활용된다. - **Querying**: FO 식과 2값 구조를 이용해 변수 바인딩을 찾는다. 구현은 BDD 기반 알고리즘을 사용한다. - **Theorem proving**: 두 FO 이론 사이의 함의를 TPTP 형식으로 외부 정리 증명기에 전달한다. 사용자는 원하는 증명기를 선택할 수 있다. - **Visualization**: 구조를 시각적으로 표현하기 위해 IDPDraw를 연동한다. 시각화 정의는 선언적 언어 혹은 ASP로 기술한다. 이러한 작업들은 모두 절차적 Lua 코드에서 자유롭게 호출 가능하며, 반환값은 다른 추론 작업이나 추가 절차 로직에 바로 활용될 수 있다. **4. 사례 연구 – 수두쿠 퍼즐 생성** 논문은 수두쿠 퍼즐 생성 애플리케이션을 예시로 사용한다. 주요 구성 요소는 다음과 같다. - **배경 지식**: 수두쿠 규칙을 정의한 논리 이론(sudokuTheory)으로, 행·열·블록마다 각 숫자가 정확히 한 번씩 등장한다는 제약을 귀납적 정의와 집합 연산으로 표현한다. - **데이터**: 퍼즐과 해를 나타내는 3값 구조(sudokuGrid)로, 아직 채워지지 않은 셀은 ‘불확실’ 상태로 표시한다. - **절차**: Lua로 구현된 createSudoku, solve, printSudoku 등. createSudoku는 빈 그리드를 초기화하고, 모델 확장을 통해 두 개의 해를 찾는다. 두 해가 다르면 첫 번째 해와 두 번째 해가 다른 셀을 찾아 해당 값을 고정한다. 이 과정을 해가 하나만 남을 때까지 반복한다. 최종 퍼즐은 시각화 모듈을 통해 화면에 출력된다. 이 예시는 선언적 이론과 절차적 탐색이 어떻게 협업하는지를 명확히 보여준다. 모델 확장과 제약 전파를 통해 해를 제한하고, 절차적 루프가 이를 반복하면서 퍼즐을 생성한다. **5. 기존 연구와의 비교** 저자들은 CPLEX, Mozart, Comet 등 절차 언어와 제약 언어를 결합한 시스템, CLP·Prolog 기반 제약 전파 시스템, clingo·Zinc 등 단일 추론 엔진에 절차 언어를 부가한 시스템과 비교한다. 이들 시스템은 주로 **하나의 추론 방식**에 의존하거나, 절차 언어가 제어 흐름만 담당하고 추론 엔진이 독립적으로 동작한다는 제한이 있다. 반면 declimp은 **다중 추론**을 지원하고, 어휘·이론·구조를 1급 객체로 다루어 절차와 선언이 동등하게 상호작용한다. 이는 코드 가독성, 유지보수성, 재사용성을 크게 향상시킨다. **6. 결론 및 향후 과제** 논문은 선언적 배경 지식, 절차적 제어, 논리 구조를 명확히 구분하고, 다양한 추론 엔진을 통합한 프로그래밍 환경을 제시한다. 프로토타입 구현을 통해 수두쿠 퍼즐 생성이라는 실용적인 사례를 보여주었으며, 기존 단일 패러다임의 한계를 극복할 수 있음을 입증했다. 향후 작업으로는 더 많은 추론 엔진(예: 머신러닝 기반 추론) 연동, 대규모 데이터베이스와의 통합, 성능 최적화 및 IDE 지원 등이 제시된다.

원본 논문

고화질 논문을 불러오는 중입니다...

댓글 및 학술 토론

Loading comments...

의견 남기기