1 puntos por GN⁺ 2025-06-29 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2025-06-29
Comentarios en Hacker News
  • Relato de alguien que trabajó durante la última década en varios grandes sistemas del gobierno británico: desarrollar software para el gobierno del Reino Unido es, en esencia, codificar siglos de legislación parlamentaria. La dificultad es que, cuando cambia una ley, como en el sistema de pasaportes de HMPO, hay que localizar y corregir todas las partes de cada sistema afectadas por ese cambio. El gobierno subcontrata este trabajo a costosas consultoras, que están incentivadas a alargar al máximo los contratos y extraer la mayor ganancia posible del cliente. En el proceso, la calidad y flexibilidad de los sistemas varían mucho, y cuando la ley vuelve a cambiar, se repite otra vez este procedimiento complejo. Los servicios gubernamentales se encarecen porque falta una entidad central que coordine este problema mediante decisiones centralizadas.
    • Se preguntan si alguna vez la subcontratación gubernamental realmente le ha funcionado bien a alguien; dicen que nunca han oído una historia de éxito en la que el gobierno tercerizara algo y saliera bien.
    • Hay preguntas sobre por qué parece que los contratistas no tienen una obligación contractual de entregar un “sistema que funcione”, y curiosidad por el fenómeno de cobrar de más por sistemas que parecen funcionar pero en la práctica no operan correctamente.
    • Comparten una experiencia reciente renovando el pasaporte en Francia: existe una nueva plataforma para todos los documentos, se llena un solo formulario en línea y basta con una sola visita presencial; todo terminó en 10 minutos y el pasaporte llegó rápido. Piensan que el Reino Unido no está en una situación desesperada y que debería contratar desarrolladores de planta para hacer el trabajo internamente.
  • Esto les recuerda un caso en el que se automatizó y codificó la legislación fiscal neerlandesa usando un DSL; recomiendan como material relacionado la presentación del caso de DSL de Jetbrains.
  • Sobre el “base case” usado para explicar la estructura de determinación de ciudadanía, ponen el ejemplo de que quienes nacieron en el Reino Unido antes de 1983 tienen derecho a la ciudadanía sin importar sus padres. Dice que viene de un país donde la ciudadanía se resuelve con un simple SELECT en una tabla SQL, así que esta estructura le resulta difícil de creer.
  • Respecto a la idea de que la sintaxis de Haskell es intuitiva, alguien opina que se vuelve intuitiva después de que te la explican, pero no antes. Haskell tiene demasiados operadores, y comparten el enlace de un tutorial de operadores de Haskell como ejemplo de que no siempre es fácil captar de inmediato el significado del código.
    • Al hacer una cuenta aproximada de cuántos operadores se usan realmente en Haskell, alguien sostiene que el número es casi parecido al de JavaScript o, como mucho, el doble. Haskell tiene una barrera de entrada inicial, pero los primeros lenguajes que uno aprende, como Java o Python, también tienen su propia complejidad; solo parecen fáciles después de estudiarlos y acostumbrarse. Incluso la sintaxis básica de Python, como : y =, puede confundir a principiantes, así que la intuición sería más bien resultado de la familiaridad.
    • Discuten que si algo se vuelve intuitivo una vez que alguien te lo explica, entonces eso ya está bastante cerca de lo que significa “intuitivo”.
    • Mencionan que Larry Wall dijo algo parecido sobre Perl, y que en realidad el problema no es tanto la sintaxis como los conceptos propios de Haskell: si no conoces cosas como mónadas o lenses, por simple que sea la sintaxis, entenderlo sigue siendo difícil.
    • Señalan que la mayoría de los operadores del enlace son una parte normal para cualquier principiante en programación; del mismo modo, si ves un programa en Java o una fórmula matemática sin contexto, tampoco la entenderás. El criterio debería ser cuánto puedes comprender después de aprender lo básico y seguir algunos tutoriales.
  • Este contenido empieza casi como una parodia, pero poco a poco evoluciona hacia una solución seria y elegante; al final, hasta dan ganas de jugar realmente este “juego”.
    • Comentario de que sí se puede jugar de verdad, aunque la parte final es mucho más difícil.
  • Comparten la experiencia real de haber presentado documentos relacionados con un pasaporte británico en Japón. Según la situación, los documentos requeridos pueden cambiar, y esa persona tuvo que preparar numerosos papeles, incluidos su certificado de nacimiento y el de su hijo, el registro familiar japonés original, traducciones y un certificado de aceptación del registro de nacimiento. También pedían copias a color de cada página e incluso una copia del pasaporte de otra persona. El procedimiento es muy poco claro y, al final, la dinámica parece ser seguir entregando documentos hasta que queden satisfechos.
    • Explican que el padre de quien comenta nació en el Reino Unido, pero su abuelo nació en el extranjero, lo que complicó aún más la situación.
    • Otro comenta que en Japón no le pidieron el certificado de nacimiento de sus padres. Vive en Hungría y tiene nacionalidad húngara y británica, pero le solicitaron los certificados de nacimiento de ambos padres y de los cuatro abuelos. Como su esposa tenía una relación distante con su familia, adjuntó una carta explicativa y se la aceptaron. Aunque en su nacionalidad el origen o nacionalidad materna en realidad casi no importa, aun así terminó pidiéndole a un amigo de la familia, que es abogado, que verificara cosas en línea.
    • Se preguntan por qué tuvieron que presentar copias a color de todas las páginas del pasaporte japonés del hijo.
  • La solicitud de pasaporte británico puede hacerse completamente en línea, e incluso una primera solicitud para nuevos ciudadanos (por adopción, naturalización o ascendencia) se puede completar solo con un dispositivo móvil, incluyendo la toma de la foto sin una app aparte. En la experiencia de esta persona, el proceso es eficiente, rápido e intuitivo.
    • Alguien dice que usó recientemente el sistema de renovación de pasaporte en línea y que es de los mejores sitios web que ha usado en años: funciona perfectamente incluso en computadoras viejas y navegadores antiguos, tiene una interfaz muy simple y accesible para cualquiera, y una navegación paso a paso muy amable. Ojalá hubiera más diseños así también en el ámbito empresarial; elogios para HMPO.
    • Otra persona cuenta que usó por primera vez el sistema en línea recientemente y recibió su pasaporte en solo dos semanas, incluso estando en California, Estados Unidos. En comparación, renovar el pasaporte canadiense le tomó cuatro meses y requirió un proceso engorroso y mucha documentación. Espera que el piloto de renovación digital basado en smartphone se amplíe.
  • Al preparar el pasaporte de su hija en Japón, alguien pasó por muchas dificultades por problemas como que los apellidos de los padres no coincidían en el certificado de nacimiento. Al final logró convencerlos de que, como él había nacido en el Reino Unido y tenía ciudadanía británica (pasaporte), su hija directa también podía heredarla. Dice que, aunque no coincidía con la lista estándar de documentos requeridos, aun así fue de los casos menos complicados.
  • Relato de haber vivido indirectamente el “juego” de la passport application. La regla de “mutable history” les parece interesante: los hechos de cierto documento pueden cambiar incluso en un lapso corto, así que a veces hay que volver a presentar y escanear documentos ya escaneados. Bromean con que este proceso sugiere que los árbitros aceptan implícitamente la existencia de universos paralelos (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.
    • En el sistema británico puedes cambiarte el nombre libremente, así que hasta su madre pudo registrar su nacimiento con el apellido de su tercer matrimonio. El certificado de nacimiento tampoco es totalmente inmutable, porque solo algunos campos lo son. La oficina de pasaportes a veces incluso olvida el historial previo, así que una inconsistencia en su apellido volvió a ser problema en su pasaporte aun después de haberla explicado antes. Cada vez que llamaba, escribía o preguntaba a los agentes (“NPC”), recibía una respuesta distinta. No tenían consistencia, como GPT. Incluso presentando los mismos documentos, a una hija le pidieron más cosas y a la otra le emitieron el pasaporte sin problema. Su madre se quejó con un parlamentario y todo se resolvió en un día.
  • Alguien comparte que jugó el “juego” de la passport application hace algunos años. Había nacido en el Reino Unido y su padre era británico, pero como sus padres no estaban casados y nació después de 1983 pero antes del cambio normativo de 2006, al principio no era ciudadano. Hacia la década de 2010 se aplicó retroactivamente la ley de 2006 y se le reconoció la ciudadanía. La principal “quest” fue presentar el certificado de nacimiento original de su padre y, al final, lo extraño fue que incluso tuvo que asistir obligatoriamente a una “ceremonia de juramento de lealtad a la Reina”.
    • Bromean con que al menos sí te dan créditos al final.