- Analiza la experiencia de ver el proceso de solicitud de pasaporte en el Reino Unido como si fuera un juego de rompecabezas y de programar ese complejo proceso en Haskell para convertirlo en reglas
- La solicitud de pasaporte en línea tiene como elementos clave la recolección de documentos, la interpretación de reglas complejas y subquests inesperadas
- Relaciona la lógica del proceso de solicitud con la 'Constructive Logic' y enfatiza que los documentos originales que respaldan cada prueba son indispensables
- Usa el mónada LogicT de Haskell y manejo de estado (State) para rastrear la lista de documentos necesarios y la ruta lógica de prueba de la ciudadanía británica
- HMPO en la práctica tiende a pedir primero la ruta de prueba más compleja, y la adopción de herramientas de automatización sigue siendo lenta por las limitaciones de interpretar legislación compleja
Introducción: la solicitud de pasaporte como un juego
- En un momento en que crece la tendencia de resolver juegos en línea o acertijos mediante programación, la Passport Application del Reino Unido también se aborda con ese enfoque
- La Passport Application es una especie de "juego de aventura y rompecabezas de recolección de documentos" que los británicos disfrutan cada 10 años, con un costo aproximado de £100 y un diseño textual minimalista muy estricto
- El objetivo del juego es reunir varios documentos probatorios (artefacts) a través de distintas oficinas públicas para demostrar, bajo criterios legales complejos, que "esta persona solicitante es británica"
- La recompensa del juego es una libreta de pasaporte y la "fecha en la que se puede volver a jugar"
Estructura y dificultad del juego
- La versión offline basada en papel se realiza mediante correo certificado y procesos de validación, y en cada etapa los documentos que deben reunirse se indican en instrucciones o tablas
- El proceso inicial es relativamente fácil, pero a medida que el juego avanza aparecen diversas "side quests" y obstáculos
- Ejemplo: pedir a una persona conocida con cierta profesión que haga la verificación de identidad, conseguir traducciones certificadas de documentos en idiomas extranjeros, juego cooperativo familiar y explorar los procedimientos administrativos particulares de cada oficina pública
Experiencia: enfrentar la dificultad de 'primer hijo nacido en el extranjero'
- El autor intentó completar en nombre de su hija pequeña la dificultad de 'primer menor nacido en el extranjero' y, por tener ya bastante experiencia, anticipaba un nivel alto de dificultad
- Más tarde se confirmó que la mitad de los documentos pedidos al inicio eran innecesarios, y que los requisitos y explicaciones sobre la documentación están diseñados de forma bastante ambigua o confusa
- No es posible comunicarse directamente con el examinador encargado, y solo se puede recibir ayuda informal mediante un agente intermediario de atención
- Aparecen repetidamente nuevos documentos requeridos, a veces incluso se piden documentos que no existen, y la dificultad aumenta con solicitudes como actas de nacimiento o matrimonio de ancestros familiares poco comunes
La lógica de HMPO: Bureaucratic Logic
- La lógica de la solicitud de pasaporte puede verse como una Bureaucratic Logic derivada de la Constructive Logic
- En lugar de una simple prueba de "verdadero/falso", es necesario presentar directamente documentos originales de respaldo correspondientes a cada regla
- Como no se permite el principio del tercero excluido, no se puede demostrar algo diciendo "uno de estos escenarios debe ser correcto"; necesariamente hay que seguir una sola ruta y presentar la documentación correspondiente
- En particular, la "Britishness" depende de la nacionalidad de los padres, por lo que las solicitudes de documentos avanzan recursivamente en forma de árbol familiar
- Caso base: situaciones como nacimiento en el Reino Unido antes de 1983 o naturalización, donde no se requiere evidencia parental
Modelado de las reglas con código Haskell
- Con el objetivo de modularizar reglas y automatizar inferencias, se creó un prototipo de la lógica de solicitud en Haskell, en particular usando el mónada LogicT
- Se declaran tipos como Person/Document/Proof para modelar distintas rutas de documentación probatoria según cada condición
- La función que prueba la Britishness explora, junto con la entrada (información de cada persona), múltiples rutas posibles de prueba (Set of Proofs)
- A partir del árbol de Proof se obtiene la combinación mínima de documentos necesarios (Set of Set Document)
- Con la combinación de StateT y LogicT IO, se realizan consultas interactivas y se comparte estado, ramificando y haciendo backtracking según la "información conocida"
- Lógica de análisis de la estructura de ciudadanía británica:
- ruta única para evidencia de naturalización
- ruta condicional (base) en caso de nacimiento en el Reino Unido antes de 1983
- prueba recursiva a través de los padres (incluyendo condiciones adicionales como matrimonio legal)
- incorporación de una ruta excepcional según si los padres son BOTBD (British Otherwise Than By Descent)
- manejo en código de disposiciones excepcionales como Crown Service
Ejecución de ejemplo y rutas de prueba
- Mediante ghci, y según entradas reales como el lugar de nacimiento de la persona solicitante y la nacionalidad de los padres, se derivan automáticamente 3 rutas de prueba (Proof) en total
- Para cada ruta de prueba, se genera una lista de documentos requeridos (combinación de certificados, actas de matrimonio, etc.)
- Se confirma que la ruta más compleja requiere prueba recursiva y demostración del vínculo matrimonial remontándose incluso a antepasados
Discusión y conclusión
- En la práctica, HMPO parece pedir a propósito primero la ruta de prueba más compleja, mientras que contradicciones legales reales o reglas finas se resuelven con lineamientos aparte o con el principio de "balance of probabilities"
- Si se difundieran herramientas de automatización, quienes solicitan podrían identificar mucho más fácilmente su ruta de prueba y los documentos necesarios
- Sin embargo, como la legislación es muy sutil y cambiante, existe riesgo en una automatización simple donde "la computadora emita un veredicto yes/no"
- El autor actualmente está intentando demostrarlo mediante la segunda y tercera ruta
Resumen del código de referencia y la estructura documental
- El código completo en Haskell puede consultarse en GitHub
- También se puede revisar la implementación detallada de la lógica en Haskell, incluyendo diversos tipos, rutas de prueba, estructura modular y funciones de consulta
1 comentarios
Comentarios en Hacker News
SELECTen una tabla SQL, así que esta estructura le resulta difícil de creer.:y=, puede confundir a principiantes, así que la intuición sería más bien resultado de la familiaridad.multiverse). La comunicación entre los agentes de atención y el personal operativo, que harían de “NPC”, se siente como una oración unidireccional: el mensaje no llega bien. Sospechan que el autor original es fan de Mornington Crescent, porque las reglas se parecen a las de una solicitud de pasaporte.