- 英国のパスポート申請手続きをパズルゲームのように捉え、この複雑な申請プロセスを Haskell でプログラミングしてルール化した経験を扱う
- オンラインのパスポート申請では、さまざまな書類収集と複雑なルールの解釈、そして予期しないサブクエストが中核的な面白さとなっている
- 申請プロセスの論理を「Constructive Logic」と結び付け、それぞれの証明を裏付ける原本書類が必須であることを強調
- Haskell のLogicT モナドと状態管理(State)を活用し、必要書類の一覧と英国市民権証明の論理的な経路を追跡
- HMPO は実際には最も複雑な証明経路を最初に要求する傾向があり、自動化ツールは複雑な法解釈の限界から導入が進んでいない
はじめに: パスポート申請をゲームとして見る
- 最近はプログラミングでオンラインゲームやパズルを解く流れが強まる中、英国の Passport Application もそのような試みの対象として扱われる
- Passport Application は約 £100 の費用と徹底してミニマルなテキストベースのデザインを持ち、英国人が 10 年ごとに楽しむ一種の「アドベンチャーパズル文書収集ゲーム」である
- このゲームの目的は、複数の官公庁を通じて複数の証明書類(artefacts)を集め、「この申請者は英国人である」と複雑な法的基準の下で証明することにある
- ゲームの報酬はパスポート冊子 1 冊と「次回プレイ可能日」である
ゲームの構造と難易度
- 紙ベースのオフライン版は書留郵便と認証手続きで進み、各段階で集めるべき書類が説明書または表の形で案内される
- 初期手続きは比較的簡単だが、ゲームが進むにつれてさまざまな「サイドクエスト」や難関が現れる
- 例: 特定の職業に就く知人に本人確認を依頼する、外国語書類の認証翻訳を確保する、家族で協力プレイをする、各官公庁固有の行政手続きを探検する、など
体験談: 「初の海外出生子女」難易度への挑戦
- 筆者は自分に代わって幼い娘の「初の海外出生子女」難易度に挑戦し、すでに多くの経験があったため相当な難しさを予想していた
- 初期に要求された書類の半分は後になって不要だと分かり、書類要件と説明はかなり曖昧で混乱しやすく設計されている
- 担当審査官(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)経路が自動的に導出される
- 各証明経路ごとに、必要書類(certificate、marriage certificate などの組み合わせ)の一覧が算出される
- 最も複雑な経路では、祖先までさかのぼる再帰的証明と婚姻関係の立証が必要になることが確認できる
議論と結論
- 現実には HMPO がわざと最も複雑な証明経路を最初に要求しているように見え、実際の法的矛盾や細かな規定は別個のガイドラインや**「balance of probabilities」**の原則に従う
- 自動化ツールが普及すれば、申請者は自分の証明経路と必要書類をはるかに容易に把握できるようになる
- しかし法律はきわめて微妙で可変的であるため、「コンピュータが yes / no verdict を出す」ような単純な自動化には危険がある
- 筆者は現在、2 番目と 3 番目の経路で証明を試みている
参考コードと文書構造の要約
- Haskell コード全体は GitHub で確認できる
- さまざまな型、証明経路、モジュール構造、問い合わせ関数など、Haskell ロジックの詳細実装を確認可能
1件のコメント
Hacker Newsのコメント
:や=も初心者には混乱ポイントなので、直感性は慣れの結果だという意見