- L’article présente l’idée de considérer la procédure de demande de passeport au Royaume-Uni comme un jeu de puzzle, puis de programmer ce processus complexe en Haskell pour en formaliser les règles.
- La demande de passeport en ligne tire l’essentiel de son intérêt de la collecte de documents variés, de l’interprétation de règles complexes et de quêtes secondaires inattendues.
- En reliant la logique du processus à la logique constructive, l’auteur souligne que des documents originaux sont indispensables pour étayer chaque preuve.
- À l’aide de la monade LogicT de Haskell et de la gestion d’état (State), il suit la liste des documents nécessaires et les chemins logiques permettant de prouver la citoyenneté britannique.
- En pratique, le HMPO semble avoir tendance à exiger d’abord le chemin de preuve le plus complexe, et l’adoption d’outils d’automatisation reste lente en raison des limites de l’interprétation automatique de règles juridiques complexes.
Introduction : la demande de passeport comme un jeu
- Alors que la tendance consistant à résoudre des jeux en ligne ou des puzzles à l’aide de la programmation se développe, la Passport Application britannique est abordée ici sous cet angle.
- La Passport Application est une sorte de « jeu d’aventure-puzzle de collecte de documents » auquel les Britanniques s’adonnent tous les 10 ans, avec un coût d’environ £100 et un design textuel minimaliste très rigoureux.
- L’objectif du jeu est de rassembler, via plusieurs administrations, divers justificatifs (artefacts) afin de prouver, selon des critères juridiques complexes, que « ce demandeur est britannique ».
- La récompense du jeu est un livret de passeport et « la date à laquelle une nouvelle partie devient possible ».
Structure du jeu et difficulté
- La version papier hors ligne repose sur le courrier recommandé et des procédures de certification, avec à chaque étape des documents à réunir décrits sous forme d’instructions ou de tableaux.
- Le début de la procédure est relativement simple, mais à mesure que la partie avance, diverses « quêtes annexes » et difficultés apparaissent.
- Exemple : demander une vérification d’identité à une connaissance exerçant une profession spécifique, obtenir une traduction certifiée de documents en langue étrangère, coopérer en famille, explorer les procédures administratives propres à chaque organisme, etc.
Retour d’expérience : le niveau « premier enfant né à l’étranger »
- L’auteur s’est attaqué, pour sa jeune fille, au niveau « premier enfant né à l’étranger » et s’attendait à une difficulté élevée en raison de ses nombreuses expériences passées.
- Il s’est aperçu par la suite que la moitié des documents demandés au départ étaient inutiles, et que les exigences ainsi que les explications avaient été conçues de manière très ambiguë et confuse.
- Il est impossible de communiquer directement avec l’examinateur chargé du dossier ; on ne peut obtenir qu’une aide officieuse par l’intermédiaire d’un agent de support faisant office de relais.
- De nouvelles demandes de documents surgissent sans cesse, parfois même pour des pièces inexistantes, avec des requêtes allant jusqu’aux actes de naissance ou de mariage d’ancêtres familiaux rares, ce qui fait encore monter la difficulté.
La logique du HMPO : la bureaucratic logic
- La logique de la demande de passeport peut être vue comme une bureaucratic logic dérivée de la logique constructive.
- Au lieu d’une simple preuve « vrai/faux », il faut soumettre directement les pièces justificatives originales correspondant à chaque règle.
- Le tiers exclu n’étant pas admis, on ne peut pas prouver qu’« un des scénarios est forcément vrai » ; il faut impérativement suivre un seul chemin et fournir les documents correspondants.
- En particulier, la « Britishness » dépend de la nationalité des parents, et les demandes de documents progressent récursivement sous forme d’arbre généalogique.
- Cas de base : naissance au Royaume-Uni avant 1983, naturalisation, etc., où aucune preuve parentale n’est nécessaire.
Modéliser les règles en Haskell
- Dans le but de modulariser les règles et d’automatiser l’inférence, l’auteur a prototypé la logique de la demande en Haskell, en utilisant notamment la monade LogicT.
- Il déclare des types tels que Person/Document/Proof afin de modéliser les différents chemins de justification documentaire selon les conditions.
- La fonction de preuve de la Britishness explore, à partir des informations en entrée (sur chaque personne), plusieurs chemins de preuve possibles (Set of Proofs).
- En suivant l’arbre des Proof, elle produit les combinaisons minimales de documents nécessaires (Set of Set Document).
- La combinaison de StateT et LogicT IO permet des requêtes interactives et un partage d’état, avec embranchements et backtracking selon « les informations connues ».
- Logique d’analyse de la citoyenneté britannique :
- chemin unique fondé sur une preuve de naturalisation ;
- chemin conditionnel (de base) en cas de naissance au Royaume-Uni avant 1983 ;
- preuve récursive via les parents, avec conditions supplémentaires comme le mariage légal ;
- ajout d’un chemin spécial selon que les parents sont BOTBD (British Otherwise Than By Descent) ;
- prise en charge dans le code de règles d’exception comme le Crown Service.
Exécution d’exemple et chemins de preuve
- Via
ghci, le programme déduit automatiquement un total de trois chemins de preuve (Proof) selon les entrées réelles (lieu de naissance du demandeur, nationalité des parents, etc.).
- Pour chacun de ces chemins de preuve, il produit la liste des documents requis (combinaison de certificats, actes de mariage, etc.).
- Le chemin le plus complexe montre qu’il faut remonter jusqu’aux ancêtres pour une preuve récursive et la démonstration des liens matrimoniaux.
Discussion et conclusion
- Dans la réalité, le HMPO semble parfois exiger délibérément d’abord le chemin de preuve le plus complexe, tandis que les contradictions juridiques réelles ou les règles de détail relèvent de guides séparés ou du principe de « balance of probabilities ».
- Si des outils d’automatisation se généralisaient, les demandeurs pourraient beaucoup plus facilement identifier leur propre chemin de preuve et les documents nécessaires.
- Mais comme le droit est extrêmement subtil et changeant, une automatisation simple dans laquelle « l’ordinateur rend un verdict yes/no » comporte des risques.
- L’auteur est actuellement en train d’essayer de prouver le dossier par le deuxième et le troisième chemin.
Résumé du code et de la structure documentaire de référence
- L’intégralité du code Haskell est disponible sur GitHub.
- On peut y consulter l’implémentation détaillée de la logique Haskell, notamment les différents types, chemins de preuve, structures de modules et fonctions de requête.
1 commentaires
Commentaires Hacker News
SELECTsur une table SQL, et trouve une telle structure difficile à croire.:ou=, est une source de confusion pour les débutants, donc l’intuitivité serait surtout le produit de l’habitude.