- Xem quy trình xin hộ chiếu ở Anh như một trò chơi giải đố, và kể lại trải nghiệm lập trình hóa quy trình xin đầy phức tạp này bằng Haskell để biến nó thành các quy tắc
- Việc xin hộ chiếu trực tuyến có điểm hấp dẫn cốt lõi là thu thập tài liệu đa dạng, diễn giải các quy tắc phức tạp, cùng những nhiệm vụ phụ bất ngờ
- Liên hệ logic của quá trình nộp đơn với 'Constructive Logic', nhấn mạnh rằng tài liệu gốc là điều bắt buộc để làm cơ sở cho từng chứng minh
- Tận dụng LogicT monad và quản lý trạng thái (State) của Haskell để theo dõi danh sách tài liệu cần thiết và lộ trình logic nhằm chứng minh quốc tịch Anh
- HMPO trên thực tế có xu hướng yêu cầu lộ trình chứng minh phức tạp nhất trước, còn các công cụ tự động hóa vẫn được áp dụng chậm do giới hạn trong việc diễn giải luật pháp phức tạp
Mở đầu: Xem việc xin hộ chiếu như một trò chơi
- Gần đây, xu hướng dùng lập trình để giải các trò chơi trực tuyến hay câu đố ngày càng tăng, và Passport Application của Anh cũng được tiếp cận theo cách như vậy
- Passport Application là một kiểu "trò chơi phiêu lưu giải đố thu thập tài liệu" mà người Anh chơi 10 năm một lần, với chi phí khoảng £100 và thiết kế tối giản nghiêm ngặt theo phong cách văn bản
- Mục tiêu của trò chơi này là thu thập nhiều giấy tờ chứng minh (artefacts) thông qua nhiều cơ quan công quyền để chứng minh rằng "đương đơn này là người Anh" theo các tiêu chuẩn pháp lý phức tạp
- Phần thưởng của trò chơi là một cuốn hộ chiếu và "ngày có thể chơi lần tiếp theo"
Cấu trúc và độ khó của trò chơi
- Phiên bản ngoại tuyến trên giấy được thực hiện qua thư bảo đảm và quy trình xác thực, với các tài liệu cần thu thập ở từng bước được hướng dẫn dưới dạng chỉ dẫn hoặc bảng biểu
- Giai đoạn đầu tương đối dễ, nhưng khi trò chơi tiến triển sẽ xuất hiện nhiều "nhiệm vụ phụ" và chướng ngại vật khác nhau
- Ví dụ: nhờ người quen có nghề nghiệp nhất định xác minh danh tính, xin bản dịch công chứng của giấy tờ bằng tiếng nước ngoài, phối hợp với gia đình, hoặc khám phá quy trình hành chính riêng của từng cơ quan
Trải nghiệm thực tế: thử sức ở độ khó 'đứa con đầu tiên sinh ở nước ngoài'
- Tác giả thay mặt mình thử thách ở độ khó 'đứa trẻ đầu tiên sinh ở nước ngoài' cho cô con gái nhỏ, và do đã có nhiều kinh nghiệm trước đó nên dự đoán đây sẽ là một thử thách khá nặng
- Về sau mới xác nhận rằng một nửa số giấy tờ được yêu cầu ở giai đoạn đầu là không cần thiết, và các yêu cầu cũng như hướng dẫn về hồ sơ được thiết kế khá mơ hồ và dễ gây nhầm lẫn
- Không thể liên lạc trực tiếp với người thẩm định phụ trách (examiner), và chỉ có thể nhận hỗ trợ không chính thức thông qua đại lý trung gian tư vấn
- Các yêu cầu giấy tờ liên tục phát sinh lặp đi lặp lại, đôi khi còn yêu cầu cả những giấy tờ không tồn tại, và độ khó tăng dần với những yêu cầu như nộp giấy khai sinh/giấy đăng ký kết hôn của các tổ tiên xa trong gia đình
Logic của HMPO: Bureaucratic Logic
- Logic của việc xin hộ chiếu có thể được xem là Bureaucratic Logic bắt nguồn từ Constructive Logic
- Thay vì chỉ chứng minh đơn giản kiểu "đúng/sai", người nộp đơn phải trực tiếp nộp chứng cứ là tài liệu gốc tương ứng với từng quy tắc
- Vì không chấp nhận nguyên lý bài trung (Excluded Middle), nên không thể chứng minh theo kiểu "một trong các kịch bản chắc chắn đúng"; bắt buộc phải chọn đúng một lộ trình và nộp giấy tờ theo lộ trình đó
- Đặc biệt, "Britishness" phụ thuộc vào quốc tịch của cha mẹ, nên yêu cầu giấy tờ được triển khai đệ quy theo dạng cây gia đình
- Trường hợp cơ sở: sinh tại Anh trước năm 1983, nhập tịch, v.v. là những trường hợp không cần giấy tờ chứng minh của cha mẹ
Mô hình hóa quy tắc bằng mã Haskell
- Với mục tiêu mô-đun hóa các quy tắc và tự động hóa suy luận, tác giả đã tạo nguyên mẫu logic nộp đơn bằng Haskell, đặc biệt tận dụng LogicT monad
- Khai báo các kiểu như Person/Document/Proof để mô hình hóa nhiều lộ trình tài liệu chứng minh khác nhau theo từng điều kiện
- Hàm chứng minh Britishness sẽ, cùng với input (thông tin của từng person), khám phá nhiều lộ trình chứng minh khả thi (Set of Proofs)
- Từ cây Proof, hệ thống suy ra tổ hợp tài liệu tối thiểu cần thiết (Set of Set Document)
- Kết hợp StateT và LogicT IO để đặt câu hỏi tương tác và chia sẻ trạng thái, rẽ nhánh & backtracking tùy theo "thông tin đã biết"
- Logic phân tích cấu trúc quốc tịch Anh:
- Lộ trình đơn cho bằng chứng nhập tịch
- Lộ trình cơ sở có điều kiện nếu sinh tại Anh trước năm 1983
- Chứng minh đệ quy thông qua cha mẹ (kèm các điều kiện bổ sung như hôn nhân hợp pháp)
- Bổ sung lộ trình ngoại lệ tùy theo việc cha mẹ có phải BOTBD (British Otherwise Than By Descent) hay không
- Các quy định ngoại lệ như Crown Service cũng được xử lý trong mã
Ví dụ chạy thử và các lộ trình chứng minh
- Thông qua ghci, hệ thống tự động rút ra tổng cộng 3 lộ trình chứng minh (Proof) dựa trên dữ liệu nhập thực tế (nơi sinh của người nộp đơn, quốc tịch của cha mẹ, v.v.)
- Với mỗi lộ trình chứng minh, hệ thống xuất ra danh sách tài liệu được yêu cầu (tổ hợp các loại giấy chứng nhận, giấy đăng ký kết hôn, v.v.)
- Ở lộ trình phức tạp nhất, có thể thấy cần đến chứng minh đệ quy và xác nhận quan hệ hôn nhân ngược lên đến cả thế hệ tổ tiên
Thảo luận và kết luận
- Trong thực tế, HMPO có vẻ như cố tình yêu cầu lộ trình chứng minh phức tạp nhất trước; còn các mâu thuẫn pháp lý thực tế hay các quy định tinh vi thì được xử lý theo hướng dẫn riêng hoặc nguyên tắc "balance of probabilities"
- Nếu các công cụ tự động hóa được phổ biến, người nộp đơn sẽ có thể hiểu lộ trình chứng minh của mình và các tài liệu cần thiết dễ dàng hơn nhiều
- Tuy vậy, luật pháp quá tinh vi và dễ thay đổi, nên việc tự động hóa đơn giản kiểu "máy tính đưa ra verdict yes/no" là điều tiềm ẩn rủi ro
- Hiện tại tác giả đang thử chứng minh theo lộ trình thứ hai và thứ ba
Tóm tắt mã tham khảo và cấu trúc tài liệu
- Toàn bộ mã Haskell có thể xem trên GitHub
- Có thể xem chi tiết phần triển khai logic Haskell như các kiểu dữ liệu khác nhau, lộ trình chứng minh, cấu trúc module và các hàm truy vấn
1 bình luận
Ý kiến trên Hacker News
SELECTtrên bảng SQL là xong, nên cấu trúc như vậy thật khó tin:và=cũng là điểm dễ gây nhầm lẫn cho người mới, nên tính trực quan là kết quả của sự quen thuộcmultiverse. Việc giao tiếp giữa các tư vấn viên và nhân viên xử lý đóng vai trò “NPC” mang cảm giác như cầu nguyện một chiều, không truyền đạt được mấy. Có suy đoán OP là fan của trò Mornington Crescent, vì quy tắc của nó giống với việc xin hộ chiếu