- Un caso que aborda el proceso de solicitud de pasaporte del Reino Unido como un rompecabezas burocrático de recolección de documentos, calculando con búsqueda lógica en Haskell las combinaciones de documentos necesarias para demostrar la nacionalidad
- Las solicitudes de documentos de HMPO pueden recursear en dirección al árbol familiar según el lugar y fecha de nacimiento del solicitante, sus padres y abuelos, así como la nacionalidad, estatus de asentamiento y estado civil de los padres
- En la primera solicitud de pasaporte de un menor nacido en el extranjero, llegaron a pedir hasta el acta de nacimiento y el acta de matrimonio del bisabuelo paterno, y la recursión solo se detiene al llegar a casos base como haber nacido en el Reino Unido antes de 1983
- La implementación usa LogicT de Haskell y
StateT Claims IOen lugar de Prolog para enumerar losProofposibles de nacionalidad y calcular elSet Documentnecesario para cada ruta - Incluso para una misma solicitud pueden existir varias rutas de prueba; aunque haya una ruta más simple, la solicitud real puede alargarse más, y la automatización puede ayudar a preparar los documentos y entender por qué se piden
Ver la Passport Application como un juego de recolección de documentos
- La Passport Application del Reino Unido es un proceso de solicitud en línea operado por HMPO, y la versión estándar en línea cuesta alrededor de £100 para empezar
- El objetivo es reunir documentos originales dispersos entre varias instituciones burocráticas para demostrar la proposición “el solicitante es British”
- La recompensa final es un pequeño cuadernillo con una fecha a partir de la cual se puede volver a solicitar: es decir, el pasaporte
- La solicitud en papel se parece más a una versión “hardcore” que depende del correo postal
Solicitudes de documentos que surgieron en un caso real
- El caso es una solicitud hecha en línea en nombre de una hija, eligiendo la dificultad de “first child passport born abroad”
- La solicitud la procesa un “examiner”, pero el solicitante solo puede consultar a través de un advice agent por chat o teléfono
- La orientación del advice agent no constituye una decisión oficial
- Si se envía una pregunta al examiner, hay que esperar varios días; en este caso, hasta unos 10 días
- Aproximadamente 50% de las solicitudes iniciales de documentos fueron calificadas como innecesarias por el servicio de chat, pero después siguieron llegando nuevas solicitudes
- Los correos de solicitud incluían un
__APPLICANT_NAME__que parecía una plantilla rota, y tampoco quedaban claras las condiciones para probar la responsabilidad parental - Al final se pidió algo poco común: el acta de nacimiento y el acta de matrimonio del bisabuelo paterno
- “applicant's Paternal great grandfather” puede ser ambiguo entre dos personas
- Aquí se interpretó como
applicant's father's father's father's birth certificate
Interpretar la lógica de HMPO como un problema de prueba recursiva
- La lógica de HMPO puede verse como una lógica burocrática basada en documentos
- Como en la lógica constructiva, no basta con la mera posibilidad lógica
- La prueba requiere “testigos”: documentos originales
- No se puede usar directamente el tercero excluido
P ∨ ¬P- Por ejemplo, no se permite decir “el padre del padre nació en el Reino Unido o no” y entregar los documentos de ambos escenarios
- Hay que elegir una alternativa y presentar los documentos correspondientes
- Según la guía de HMPO, una persona nacida fuera del Reino Unido después del 31 de diciembre de 1982 normalmente es British citizen si, al momento de nacer, uno de sus padres era “British citizen otherwise than by descent”
- Como HMPO no usa sus propios registros de pasaporte para demostrar la condición de British, en algunas solicitudes aparecen pedidos recursivos de documentos hacia padres y abuelos
- La recursión se detiene en un ancestro cuya condición de British no dependa de sus padres
- Por ejemplo: una persona naturalizada
- Por ejemplo: alguien nacido en el Reino Unido antes de 1983, un caso base que es British sin importar a sus padres
Cadena de solicitudes en el caso
- HMPO recibió los documentos iniciales el 7 de junio, incluyendo el acta de nacimiento del solicitante y la del padre del solicitante
- Solicitud del 12 de junio:
- Como el padre del solicitante nació después del 1 de enero de 1983, se indicó que hacía falta evidencia de su British citizenship claim
- Por eso se pidió el acta de nacimiento del padre de ese padre
- Solicitud del 26 de junio:
- Como el abuelo del solicitante nació en el extranjero, se indicó que hacía falta evidencia de su British citizenship claim
- En consecuencia, se pidieron documentos del bisabuelo paterno del solicitante
- Los documentos requeridos eran el acta de nacimiento y el acta de matrimonio
- Esta recursión se fue desarrollando mediante solicitudes por correo electrónico
Estructura de la implementación en Haskell
- El código completo está en GitHub
- Al principio se codificaron las reglas en Prolog, pero luego se cambió al mónada
LogicTde Haskell - El objetivo no es encontrar una sola lista de documentos, sino varios conjuntos posibles
- Hay varias formas de sostener una reclamación de nacionalidad, así que también puede haber varios conjuntos de documentos necesarios
- Conceptualmente, se necesita
Set (Set Document)
- El modelo de documentos representa con tipos al solicitante, sus ancestros y el tipo de certificado
Parent = Mother | FatherPerson = Applicant | Parent Parent PersonDocument = BirthCertificate Person | MarriageCertificate Person Person | NaturalizationCertificate Person | Passport Person
- Una lista simple de documentos no deja claro por qué basta, así que el problema se aborda como una búsqueda de pruebas
- Con
LogicTse enumeran todos losProofde la condición de British del solicitante - Para cada
Proofse calcula el conjunto de documentos necesarios
- Con
Proof y estado de conocimiento
- El tipo de prueba se compone de tres formas
ViaParent Person Proof: derivación de la condición de British a través de un padre o madreAnd Proof Proof: combinación de dos afirmacionesEvidence Predicate: evidencia básica
- Las preguntas necesarias se hacen al usuario durante la ejecución, y las respuestas previas se reutilizan en todas las ramas y retrocesos
- Para ello se combinan
IO,StateyLogicTtype Claims = Map Predicate Knowledgetype M a = LogicT (StateT Claims IO) a
Knowledgese divide enSureYes,SureNo,UnsurePredicaterepresenta las condiciones necesarias para decidir las reglasIsBritish PersonSettled PersonBornBefore Int PersonBornInUK PersonBornAfter Int PersonNaturalized PersonYears3LivingInUK PersonIsBritOtbd PersonMarried Person Person
Núcleo de las reglas para determinar la nacionalidad
- La función
brites la función raíz que decide si una persona es British- Primero verifica
IsBritish p - Luego explora la condición de British por nacimiento y por naturalización
- Primero verifica
- La naturalización es una ruta simple, y el documento clave es un certificado de naturalización
- Para quienes nacieron en el Reino Unido hay dos grandes casos
- Nacido en el Reino Unido antes de 1983: obtiene la condición de British como caso base
- Si nació después, se comprueba si uno de los padres era British o tenía estatus de asentamiento en ese momento
- Para quienes nacieron fuera del Reino Unido, la lógica es más compleja
- Se comprueba si uno de los padres era British otherwise than by descent
- O si uno de los padres era British y existe evidencia de tres años consecutivos de residencia en el Reino Unido
- “British otherwise than by descent” se refiere a alguien que no obtuvo su condición de British solo por sus padres
- Ejemplo: naturalización
- Ejemplo: nacimiento en el Reino Unido
- Ejemplo: nacimiento en el extranjero mientras uno de los padres estaba en “Crown Service”
Transmisión por los padres y la condición de 2006
viaParentrepresenta los casos en que un hijo obtiene la condición de British a través de uno de sus padres- Se exploran tanto la ruta de la madre como la del padre, pero la del padre tiene una condición adicional
- Si el hijo nació después de 2006, la ruta del padre puede usarse tal cual
- Si nació antes de 2006, hay que comprobar si padre y madre estaban casados al momento del nacimiento
- La implementación no incluye rutas alternativas como “registration” ni algunas disposiciones históricas discriminatorias por sexo
- Incluso leyes que hoy ya no aplican pueden seguir siendo relevantes históricamente al determinar la condición de British de los ancestros
Resultado de la ejecución y tres rutas de prueba
- La ejecución de
run (brit Applicant)avanza con preguntas interactivas- Por ejemplo: si el solicitante nació en el Reino Unido
- Por ejemplo: si el padre es British otherwise than by descent
- Por ejemplo: si los abuelos tenían estatus de asentamiento
- En este caso se hicieron 37 preguntas en total
- El usuario puede responder
dkpara indicar que no sabe, y entonces esa rama sigue explorándose - El resultado muestra que el solicitante tiene 3 pruebas de Britishness
- Proof 1:
- El solicitante nació después de 2006
- Obtiene la condición de British a través del padre
- El padre nació en el Reino Unido
- La madre del padre tenía estatus de asentamiento al momento del nacimiento
- Los documentos necesarios son el acta de nacimiento del solicitante, la del padre y documentos del estatus de asentamiento de la madre del padre
- Proof 2:
- Es una ruta en la que la madre del padre del padre nació en el Reino Unido antes de 1983
- Los documentos necesarios incluyen las actas de nacimiento del solicitante, del padre, del abuelo y de la madre del abuelo, además del acta de matrimonio de los abuelos
- Proof 3:
- Es una ruta en la que el padre del padre del padre, es decir, el bisabuelo paterno, nació en el Reino Unido antes de 1983
- Los documentos necesarios incluyen las actas de nacimiento del solicitante, del padre, del abuelo y del bisabuelo paterno, además de las actas de matrimonio de dos generaciones
- La solicitud de HMPO
Birth certificate for Applicant's Father's Father's Fatheraparece en esta ruta
Crown Service y rutas más complejas
- En el caso, la condición de Crown Service del bisabuelo paterno generó confusión, pero según el resultado de la ejecución no era necesaria
- La condición del padre como British otherwise than by descent ya se deduce por haber nacido en el Reino Unido y por la simple condición de British del abuelo
- Aun así, la simple condición de British del abuelo todavía debe demostrarse, así que la recursión baja a la generación del abuelo
- Para demostrar la “legitimacy” del abuelo también hace falta un acta de matrimonio
- La ruta elegida por HMPO es Proof 3, la más larga y compleja de las tres
- Proof 1 es una ruta más simple, ya que solo requiere probar el estatus de asentamiento de un ancestro
- La ciudadanía por medio de un ancestro asentado pero no British puede ser no recursiva y, por tanto, más simple
- Aun así, demostrar el estatus de asentamiento en un momento concreto puede ser difícil
Limitaciones de la implementación y evaluación de la automatización
orElseno explora la segunda rama si la primera tiene éxito, mientras que<|>sí explora ambas- En algunas reglas, usar
<|>produce más rutas posibles para demostrar la ciudadanía, pero hay casos en que parece que HMPO intenta agotar primero una ruta específica - La implementación no sigue con suficiente precisión las condiciones en momentos concretos
- Por ejemplo: que el estado civil o el estatus de asentamiento existieran al momento del nacimiento de cierta persona
- Se considera algo relativamente fácil de agregar
- No se implementa toda la ley de nacionalidad del Reino Unido, sino solo las partes relacionadas con el caso o que resultan interesantes
- Una implementación completa requeriría mucho más código y muchas más excepciones
- Si hubiera existido un software así, podría haber servido para preparar más rápido el conjunto correcto de documentos y entender por qué la solicitud se fue complicando
- La automatización total también tiene riesgos
- Si el programa produce un falso positivo, puede aparecer la queja de “la computadora dijo que sí se podía”
- Sustituir la pericia humana por automatización puede terminar en situaciones donde se niegue una ciudadanía porque “la computadora dijo que no”
- La solicitud actual todavía no termina, y el plan es intentar Proof 1 si Proof 2 y Proof 3, que se están siguiendo en paralelo, fallan
1 comentarios
Opiniones en Hacker News
En los últimos 10 años he trabajado con varios grandes sistemas del gobierno británico, y este artículo muestra bien por qué aparecen resultados extraños al crear servicios/software gubernamentales.
El software gubernamental es, en esencia, el trabajo de trasladar a código cientos de años de leyes parlamentarias. Si se crea el sistema de pasaportes de HMPO y luego cambia o se deroga la ley en la que se basa, alguien tiene que encontrar y corregir en todos los sistemas las partes afectadas por esa ley.
A esto se suma que el gobierno suele tercerizar con consultoras caras, y esas empresas tienen incentivos para ampliar contratos, extraer el máximo valor del cliente y afianzarse. Como terminan construyendo sistemas con calidad y flexibilidad desparejas, el mismo proceso se repite cada vez que cambia la ley.
Antes existía una autoridad central de decisión, como Spend Controls, pero ahora no hay un centro que coordine este problema, y por eso prestar servicios gubernamentales sale tan caro.
En la práctica construyen algo cercano a funcionar y cobran unas 1000 veces de más por un resultado que parecería poder hacer un desarrollador junior en 3 meses, pero aun así parecen cobrar como si el sistema realmente hubiera funcionado.
El formulario era fácil de seguir, luego fui una vez a una oficina para terminar el trámite, tardó solo 10 minutos y el pasaporte llegó por correo. Me pareció un proceso con el menor dolor posible.
Sea cual sea la situación en el Reino Unido, no es desesperada. El gobierno debería dejar de tener miedo de contratar personal real e internalizar todo el desarrollo.
Como se señaló, todo el trabajo técnico está tercerizado, así que parte de la brecha parece ser la falta de capacidad interna en la organización para imaginar y ejecutar un rediseño bastante revolucionario.
Es muy frustrante que el gobierno gaste decenas de millones en contratistas para proyectos de IT y, aun así, no pueda pagar tarifas de mercado a ingenieros internos que podrían salir más baratos a largo plazo.
En vez de esparcir condicionales de excepción por todas partes, estaría bueno tener un sistema al que solo se le puedan aplicar “parches” de manera append-only.
Algunos lenguajes de programación lógica pueden hacerlo hasta cierto punto, pero creo que el verdadero problema es que no hay presupuesto para deuda técnica y que los abogados que tratan con las leyes también pueden beneficiarse de la complejidad. Ojalá hubiera personas dedicadas a mantener la ley lo más simple posible.
La sintaxis de Haskell es interesante. Después de que alguien te la explica, resulta intuitiva; antes de la explicación, no tanto.
No creo que sea solo porque estoy acostumbrado a lenguajes de la familia Algol (C, Python, etc.). El código Haskell que he visto hasta ahora tenía demasiados operadores pensados para hacer el código más conciso, y no quedaba claro a simple vista qué hacían: https://academy.fpblock.com/haskell/tutorial/operators/
Fue hace mucho y no tengo ganas de repetirlo, pero incluso siendo generoso con JavaScript, los operadores necesarios para Haskell en la práctica no son 10 veces los de JavaScript en la práctica, sino aproximadamente el doble.
Haskell tiene cierta complejidad accidental que hay que tolerar al principio, pero no es una diferencia de tipo frente a los lenguajes introductorios populares, sino de grado. Es fácil olvidar cuánto hemos aprendido sobre los lenguajes estilo Algol porque ya lo tenemos demasiado internalizado.
He enseñado Java y Python a estudiantes de secundaria y preparatoria que empezaban a programar, y especialmente en sesiones 1:1 se trababan con cosas que yo ya ni siquiera recordaba que necesitaban explicación. Por ejemplo, equivocarse en la posición de
:en Python o no entender cómo funciona=.Incluso la sintaxis “básica” como
:y=es mucho más compleja de lo que creemos. Es parecido a cómo un hablante nativo de inglés no es consciente de la regla de orden de los adjetivos en “big red ball” frente a “red big ball”, pero para un estudiante puede ser una pared.Si uno toma un programa Java cualquiera sin saber programar, tampoco va a entender casi nada. Del mismo modo, si intenta leer fórmulas sin haber tomado ninguna clase de matemáticas, no va a entender ni los operadores ni nada.
El criterio debería ser cuánto puede entender uno después de aprender lo básico y hacer algunos tutoriales.
Intuitivo se acerca más a algo que puede entenderse o aprenderse fácilmente incluso sin conocimientos previos ni explicación.
Además, lo que se critica en realidad no parece ser la sintaxis. Algunos componentes de Haskell remiten a modelos específicos como mónadas o lentes, y si el lector no tiene ya ese conocimiento, ninguna sintaxis se lo va a inyectar.
Me gustó este artículo. Al principio arrancaba como una parodia y, poco a poco, se transformaba en una solución seria y elegante para ese “juego”.
Para el final, hasta me dieron ganas de probarlo yo mismo.
La solicitud de pasaporte británico puede completarse totalmente en línea, salvo por enviar por correo al HMPO los documentos necesarios.
Incluso si alguien se convirtió en “nuevo” ciudadano por adopción, naturalización o ascendencia, puede solicitar un pasaporte nuevo desde fuera del Reino Unido usando solo un dispositivo móvil, sin descargar una app aparte e incluyendo la toma de la foto.
En broma uno podría jugar el “modo difícil” con papel y pluma, pero mi experiencia fue muy eficiente, rápida y sencilla.
Funcionaba perfectamente incluso en una computadora vieja y un navegador “antiguo”; los colores, textos, botones, campos de entrada y requisitos eran todos simples, accesibles y claros. La navegación paso a paso también era sencilla y de verdad amable.
Es una lástima que más empresas no se preocupen lo suficiente por sus clientes como para invertir en sitios web tan bien diseñados. HMPO lo hizo muy bien.
En comparación, cuando renové un pasaporte canadiense desde California, era un pasaporte dañado con 3 años de antigüedad y tomó 4 meses. Fue completamente en papel y tenía requisitos absurdos, como exigir una foto con sello de un garante y del fotógrafo.
Sé que hay un piloto digital en marcha, pero deberían implementarlo por completo lo antes posible.
Hace falta una entrevista presencial y también la firma de una persona responsable, a la que mucha gente no tiene acceso. Por ejemplo, los médicos no son aceptados.
Para quienes hagan este trámite desde Japón, estos fueron los documentos que tuve que presentar. Variará según la situación, y en particular parece que el autor también nació fuera del Reino Unido, así que quizá haya necesitado otros documentos o más documentos.
Lo que presenté fue una copia certificada del acta de nacimiento pedida al General Register Office del Reino Unido, el original y la traducción del koseki japonés, el original y la traducción del certificado de aceptación del registro de nacimiento, el original y la traducción del acta de matrimonio, copias a color de todas las páginas del pasaporte japonés del niño, y una copia del pasaporte de un ciudadano estadounidense o británico que confirmara que el niño era mi hijo.
El proceso es bastante poco claro y, en general, parece estar estructurado como “seguir enviando documentos hasta que el encargado quede satisfecho”.
applicant's father, es decir yo, había nacido en el Reino Unido, pero elapplicant's father's fatherno había nacido en el Reino Unido, y eso fue lo que añadió complejidad.Yo soy británico, mi esposa es húngara y vivimos en Hungría; nos pidieron las actas de nacimiento de ambos padres y las de los cuatro abuelos.
Como mi esposa no tiene contacto con su padre, tuvimos que presentar una carta de presentación explicando la situación, y la aceptaron. Aun así, no entiendo muy bien por qué la nacionalidad de mi esposa y la de sus padres era relevante, si al final la ciudadanía británica de mi hijo viene de mi ciudadanía británica.
No tuvimos que copiar el pasaporte de otra persona, pero un amigo de la familia tuvo que confirmarlo en línea. Ese amigo es abogado en el Reino Unido, así que estaba en la lista de profesiones aprobadas.
Tuve que hacer una solicitud MN1 por mi hija nacida en Estados Unidos, porque tanto mi cónyuge como yo nacimos en el extranjero.
Como sugiere el texto original, esto es una especie de misión secundaria llamada “registro”, y si no la haces antes de que el niño cumpla 18 años, se vence el plazo. Claro que entiendo que incluso en esa situación todavía existen vías para obtener la ciudadanía.
La parte más difícil del proceso fue encontrar a alguien que certificara mis documentos probatorios, algo que esta versión de Passport Application no cubría pero que bien podría aparecer en un futuro paquete DLC. Dicen que se deben presentar los originales, pero como retienen los documentos, incluido el pasaporte, entre 3 y 6 meses, no es realista para quienes viven en el extranjero.
No recuerdo las reglas exactas, pero no se podía usar un notario estadounidense ni el procedimiento habitual de certificación por abogado, y al final tuve que ir a una oficina municipal.
Llamé a unas cinco municipalidades y todas dijeron que no conocían el procedimiento ni los requisitos; al final encontré a una persona muy amable en Islington Council. Aun así, fue de las interacciones más frustrantes que he tenido con el gobierno británico.
Yo también disfruté el juego Passport Application como representante.
Una de las reglas interesantes que el texto original no menciona es la regla de historia variable. Los hechos contenidos en un documento pueden cambiar incluso en un período corto, así que quizá haya que devolver un documento ya escaneado en el sistema de registro de hechos del examinador para que lo escaneen de nuevo más adelante.
Dicen que verificar que los hechos de un documento no hayan cambiado implica que la raza de los examinadores reconoce implícitamente la existencia del multiverso.
El canal de comunicación entre los operadores telefónicos “NPC” y los examinadores parece similar a la oración, y lo único que se puede obtener en la práctica son inferencias vagas.
Además, quizá el autor del texto original sea aficionado a Mornington Crescent, un juego cuya topología de reglas se parece a la de Passport Application antes mencionada.
El acta de nacimiento también es inmutable en cierto sentido, pero no todo lo que aparece en ella es completamente inmutable.
Además, la oficina de pasaportes olvidó la decisión sobre mi pasaporte anterior, en la que ya habían explicado y pasado por alto esa discrepancia de apellido. Incluso en un pasaporte yo aparecía en una página del pasaporte de mi madre.
Los NPC de verdad sacan de quicio. Cada vez que llamaba o mandaba un correo, la respuesta era distinta. Parecían un modelo de lenguaje grande pésimo.
Después de la solicitud, tuve que explicarle a mi madre que, dentro del mismo paquete de solicitudes, una hija necesitaba documentos británicos adicionales pero otra no y ya había recibido su pasaporte, simplemente porque una nació en el Reino Unido y la otra no.
Como era de esperarse, mi madre explotó, llevó el problema a su parlamentario y se resolvió en un día.
Acabo de pasar por este trámite infernal por una de mis hijas. Nació en Japón, y tuve problemas para hacer coincidir el apellido de mi madre con el que aparece en mi acta de nacimiento.
En pocas palabras, como demostré que nací en Inglaterra y tengo ciudadanía, es decir, pasaporte, parecía que bajo cualquier posibilidad ese debía ser un estatus que podía transmitirse a mi hija. No coincide con las pautas de documentos requeridos, pero me parece una forma mucho menos dolorosa.
La parte que dice: “¿Cuál es el caso base? El caso base es un ancestro cuya condición de británico no depende de sus padres, por ejemplo alguien que se naturalizó o nació en el Reino Unido antes de 1983. Cuanto más nos alejamos de 1983 hacia el futuro, más profunda se vuelve esta pila de llamadas”, desde la perspectiva de alguien que viene de un país donde existe una base de datos central de ciudadanos y residentes extranjeros, y donde verificar la ciudadanía sería algo como un solo
SELECTen una tabla SQL, parece una locura.Muchas personas nacidas en el extranjero también son ciudadanas, y el Reino Unido ha pasado por una cantidad absurda de cambios territoriales que afectan la ciudadanía.
Algunos ciudadanos actuales tienen ciudadanía porque nacieron en Bombay, es decir, Mumbai, y otros porque nacieron en Hong Kong.
Para mantener una lista confiable de ciudadanos haría falta un registro periódico y, si no te registras, tendrías que perder la ciudadanía.
SELECTen una tabla SQL. Estaría dispuesto a apostar incluso con probabilidades extremadamente desfavorables para mí.Jugué ese juego hace unos años.
Aunque nací en el Reino Unido de padre británico, mi personaje antes no era británico. Mis padres no estaban casados y nací después de 1983, pero antes del cambio de reglas de 2006.
No estoy seguro del momento exacto, pero parece que en algún punto de la década de 2010 la actualización de 2006 se aplicó retroactivamente, y mi personaje también pudo volverse jugable. No hice muchas misiones secundarias; la principal fue encontrar el certificado de nacimiento de mi padre.
Mi personaje también tuvo que asistir a la ceremonia de final de juego y jurar lealtad a la Reina, lo cual se sintió raro para alguien que nació en este país y vivió aquí toda su vida.