- 영국에서 여권 신청 절차를 퍼즐 게임처럼 바라보고, 이 복잡한 신청 과정을 Haskell로 프로그래밍하여 규칙화한 경험을 다룸
- 온라인 여권 신청은 다양한 문서 수집과 복잡한 규칙 해석, 그리고 예기치 못한 서브 퀘스트가 핵심 재미 요소임
- 신청 과정의 논리를 'Constructive Logic'과 연결해, 각각의 증명을 뒷받침하는 원본 문서가 필수임을 강조
- Haskell의 LogicT 모나드와 상태 관리(State)를 활용해, 필요한 문서 목록과 영국 시민권 증명의 논리적 경로를 추적함
- HMPO가 실제론 가장 복잡한 증명경로를 먼저 요구하는 경향이 있으며, 자동화 도구는 복잡한 법률 해석의 한계로 도입이 더딘 실정임
서론: 여권 신청을 게임처럼
- 최근 프로그래밍을 이용해 온라인 게임이나 퍼즐을 해결하는 트렌드가 증가하는 가운데, 영국의 Passport Application도 이런 시도로 다룸
-
Passport Application은 약 £100의 비용과 철저한 미니멀 텍스트 기반 디자인을 가진, 영국인들이 10년마다 즐기는 일종의 "모험 퍼즐 문서 수집 게임"임
- 이 게임의 목표는 여러 관공서를 통해 여러 증빙 서류(artefacts) 를 모아 "이 지원자는 영국인임"을 복잡한 법적 기준 하에 증명하는 것임
- 게임의 보상은 여권 책자 한 권과 "다음 플레이가 가능한 날짜"임
게임의 구조와 난이도
- 종이 기반 오프라인 버전은 등기우편과 인증 절차로 진행되며, 각 단계별로 모아야 할 문서가 설명서 또는 표 형태로 안내됨
- 초기 절차는 비교적 쉽지만, 게임이 진행될수록 다양한 "사이드 퀘스트"와 난관이 등장함
- 예: 특정 직업을 가진 지인에게 신원확인을 의뢰, 외국어 서류의 인증 번역본 확보, 가족 협동플레이, 각 관공서의 고유한 행정 절차 탐험 등
체험기: '첫 해외출생 자녀' 난이도 도전
- 필자는 본인을 대신하여 어린 딸의 '첫 해외출생 아동' 난이도에 도전, 이미 다수의 경험이 있어 상당한 난이도를 예상함
- 초기 문서요구 중 절반은 불필요한 것임이 나중에 확인되며, 서류 요구 사항과 설명이 상당히 모호하거나 혼란스럽게 설계됨
- 담당 심사관(examiner)은 직접 소통 불가하고, 오직 상담 중계 에이전트를 통해 비공식적 조력만 받을 수 있음
- 반복적으로 요구 문서가 생기고, 때로는 존재하지 않는 서류까지 요구되며, 희귀한 가족 선조의 출생/혼인증명서 제출 요청 등 난도가 점점 높아짐
HMPO의 논리: Bureaucratic Logic
- 여권 신청의 논리는 Constructive Logic(구성적 논리)에서 파생된 Bureaucratic Logic(관료 논리) 로 볼 수 있음
- 단순한 "참/거짓" 증명 대신, 각 규칙에 해당하는 원본 서류 증빙을 직접 제출해야만 함
- 비배제적 중간(Excluded Middle)이 허용되지 않으므로, "어느 시나리오든 하나가 맞음"으로 증명 불가, 반드시 한 경로만 따라 서류를 제출해야만 함
- 특히 "Britishness"는 부모의 국적에 의존하며, 문서 요청이 가족 트리 형태로 재귀적으로 진행됨
- 베이스 케이스: 1983년 이전 영국 출생, 귀화 등 부모 증빙이 필요 없는 경우
Haskell 코드로 규칙 모델링
- 규칙 모듈화와 추론 자동화 목적에서 Haskell(특히 LogicT 모나드 활용)로 신청 로직 프로토타이핑
-
Person/Document/Proof 등 타입을 선언하여, 각 조건에 따른 다양한 증빙 문서 경로 모델링
- Britishness 증명 함수는 input(각 person에 대한 정보)과 함께 가능한 여러 증명 경로(Set of Proofs) 를 탐색
- Proof 트리를 따라 필요한 최소 문서 조합(Set of Set Document) 을 산출
-
StateT 및 LogicT IO 조합으로 인터랙티브 질의 및 상태 공유, "알고 있는 정보"에 따라 분기 & 백트래킹
- 영국 시민권 구조 분석 로직:
- 귀화 증거 단일 경로
- 1983년 이전 영국 출생시 조건부(베이스) 경로
- 부모를 통한 재귀적 증명(합법적 혼인 등 추가 조건 포함)
- 부모가 BOTBD(British Otherwise Than By Descent)인지 여부에 따른 특례 경로 신설
- Crown Service 등 예외 규정도 코드에서 처리
예시 실행 및 증명 경로
- ghci를 통해 실질적 입력(신청자 출생지, 부모의 국적 등)에 따라 총 3가지 증명(Proof) 경로 자동 도출
- 각 증명 경로마다 요구 문서(combination of certificates, marriage certificates 등) 목록 산출
- 가장 복잡한 경로에서는 조상까지 거슬러 올라가는 재귀적 증명과 혼인 관계 입증이 필요함을 확인
논의 및 결론
- 현실에선 HMPO가 일부러 가장 복잡한 증명경로를 먼저 요구하는 듯하며, 실제 법적 모순이나 미세 규정은 별도의 가이드라인이나 "balance of probabilities" 원칙에 따름
- 자동화 도구가 보급된다면, 신청인들은 자신의 증명 경로와 필요한 문서를 훨씬 쉽게 파악 가능함
- 그러나 법률이 워낙 미묘하고 가변적이어서 "컴퓨터가 yes/no verdict" 내리는 단순 자동화에는 위험이 있음
- 필자는 현재 두 번째, 세 번째 경로로 증명을 시도하는 중임
참고 코드 및 문서 구조 요약
- Haskell 코드 전체는 GitHub에서 확인 가능
- 다양한 타입, 증명 경로, 모듈 구조 및 질의 함수 등 Haskell 로직 상세 구현 확인 가능