1 पॉइंट द्वारा GN⁺ 2025-06-29 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • ब्रिटेन की पासपोर्ट आवेदन प्रक्रिया को एक puzzle game की तरह देखते हुए, इस जटिल आवेदन प्रक्रिया को Haskell में प्रोग्राम करके नियमबद्ध करने के अनुभव पर चर्चा
  • ऑनलाइन पासपोर्ट आवेदन में अलग-अलग दस्तावेज़ इकट्ठा करना, जटिल नियमों की व्याख्या, और अप्रत्याशित sub-quests मुख्य मज़ेदार तत्व हैं
  • आवेदन प्रक्रिया के तर्क को 'Constructive Logic' से जोड़ते हुए, इस बात पर ज़ोर कि हर proof के समर्थन में मूल दस्तावेज़ अनिवार्य हैं
  • Haskell के LogicT monad और state management(State) का उपयोग करके, आवश्यक दस्तावेज़ों की सूची और ब्रिटिश नागरिकता के proof के तार्किक path को ट्रैक किया गया
  • HMPO वास्तव में सबसे जटिल proof path पहले मांगने की प्रवृत्ति रखता है, और automation tools को जटिल कानूनी व्याख्याओं की सीमाओं के कारण अपनाया जाना धीमा है

परिचय: पासपोर्ट आवेदन को गेम की तरह

  • हाल के समय में programming की मदद से online games या puzzles हल करने का चलन बढ़ा है, और UK का Passport Application भी इसी तरह की एक कोशिश के रूप में लिया गया है
  • Passport Application लगभग £100 लागत और बेहद मिनिमल text-based design वाला, ब्रिटेन के लोग हर 10 साल में खेलने वाला एक तरह का "adventure puzzle document collection game" है
  • इस game का लक्ष्य कई सरकारी दफ्तरों के माध्यम से विभिन्न प्रमाण दस्तावेज़(artefacts) इकट्ठा करके "यह आवेदक ब्रिटिश है" को जटिल कानूनी मानदंडों के तहत साबित करना है
  • इस game का reward एक पासपोर्ट पुस्तिका और "अगली बार खेलने की तारीख" है

गेम की संरचना और कठिनाई

  • कागज़-आधारित offline version registered post और verification प्रक्रियाओं से चलता है, और हर चरण में इकट्ठा किए जाने वाले दस्तावेज़ manual या table के रूप में बताए जाते हैं
  • शुरुआती प्रक्रिया अपेक्षाकृत आसान होती है, लेकिन game आगे बढ़ने पर तरह-तरह के "side quests" और मुश्किलें सामने आती हैं
    • उदाहरण: किसी विशेष पेशे वाले परिचित से identity confirmation कराना, विदेशी भाषा के दस्तावेज़ों का certified translation लेना, परिवार के साथ co-op play, और हर सरकारी दफ्तर की अपनी administrative प्रक्रिया को समझना

अनुभव: 'विदेश में जन्मे पहले बच्चे' कठिनाई स्तर की चुनौती

  • लेखक ने अपने बजाय अपनी छोटी बेटी के लिए 'विदेश में जन्मे पहले बच्चे' कठिनाई स्तर की चुनौती ली, और पहले के कई अनुभवों के कारण काफी ऊँची कठिनाई की उम्मीद की
  • शुरुआती दस्तावेज़ मांगों में से आधी बाद में अनावश्यक निकलीं, और दस्तावेज़ आवश्यकताएँ व विवरण काफी अस्पष्ट और भ्रमित करने वाले तरीके से डिज़ाइन किए गए थे
  • प्रभारी परीक्षक (examiner) से सीधे संवाद संभव नहीं था, और केवल consultation relay agent के माध्यम से अनौपचारिक मदद मिल सकती थी
  • बार-बार नए दस्तावेज़ मांगे जाते रहे, कभी-कभी ऐसे दस्तावेज़ भी जो अस्तित्व में ही नहीं थे, और दुर्लभ पारिवारिक पूर्वजों के जन्म/विवाह प्रमाणपत्र जमा करने जैसे अनुरोधों से कठिनाई लगातार बढ़ती गई

HMPO का तर्क: Bureaucratic Logic

  • पासपोर्ट आवेदन का तर्क Constructive Logic से निकला हुआ Bureaucratic Logic माना जा सकता है
  • साधारण "सही/गलत" proof की जगह, हर नियम से मेल खाने वाले मूल दस्तावेज़ी प्रमाण सीधे जमा करने होते हैं
  • Excluded Middle की अनुमति नहीं है, इसलिए "किसी भी scenario में एक तो सही होगा" जैसे तरीके से proof नहीं किया जा सकता; एक ही path चुनकर उसी के दस्तावेज़ जमा करने होते हैं
  • खासकर "Britishness" माता-पिता की nationality पर निर्भर करती है, इसलिए दस्तावेज़ों की मांग family tree के रूप में recursive तरीके से आगे बढ़ती है
    • base case: 1983 से पहले UK में जन्म, naturalisation आदि जैसे मामले, जहाँ माता-पिता के proof की ज़रूरत नहीं होती

Haskell कोड से नियमों की मॉडलिंग

  • नियमों को modular बनाने और inference को automate करने के उद्देश्य से Haskell में आवेदन logic का prototype बनाया गया, खास तौर पर LogicT monad का उपयोग करके
  • Person/Document/Proof जैसे types घोषित करके, हर शर्त के अनुसार अलग-अलग दस्तावेज़ी proof paths को मॉडल किया गया
  • Britishness proof function input (हर person की जानकारी) के साथ संभव कई proof paths(Set of Proofs) को खोजता है
  • Proof tree का अनुसरण करते हुए, आवश्यक न्यूनतम दस्तावेज़ संयोजन(Set of Set Document) निकाले जाते हैं
  • StateT और LogicT IO के संयोजन से interactive queries और shared state का उपयोग किया गया, जहाँ "ज्ञात जानकारी" के आधार पर branching और backtracking होता है
  • ब्रिटिश नागरिकता संरचना के analysis logic में शामिल हैं:
    • naturalisation proof का single path
    • 1983 से पहले UK में जन्म के लिए conditional (base) path
    • माता-पिता के माध्यम से recursive proof (वैध विवाह जैसी अतिरिक्त शर्तों सहित)
    • जब माता-पिता BOTBD(British Otherwise Than By Descent) हों, तब विशेष path जोड़ना
    • Crown Service जैसी exception rules को भी code में संभालना

उदाहरण रन और proof paths

  • ghci के जरिए वास्तविक inputs (आवेदक का जन्मस्थान, माता-पिता की nationality आदि) के आधार पर कुल 3 proof paths अपने-आप निकाले गए
  • हर proof path के लिए आवश्यक दस्तावेज़ों (certificates, marriage certificates आदि के combination) की सूची तैयार हुई
  • सबसे जटिल path में यह स्पष्ट हुआ कि पूर्वजों तक पीछे जाने वाला recursive proof और वैवाहिक संबंध का प्रमाण आवश्यक है

चर्चा और निष्कर्ष

  • वास्तविकता में HMPO मानो जानबूझकर सबसे जटिल proof path पहले मांगता है, जबकि वास्तविक कानूनी विरोधाभास या सूक्ष्म नियम अलग guidelines या "balance of probabilities" सिद्धांत के अनुसार संभाले जाते हैं
  • अगर automation tools व्यापक रूप से उपलब्ध हों, तो आवेदक अपनी proof path और आवश्यक दस्तावेज़ों को कहीं अधिक आसानी से समझ सकेंगे
  • लेकिन कानून इतना सूक्ष्म और बदलने वाला है कि "computer yes/no verdict" देने वाली सरल automation जोखिम भरी हो सकती है
  • लेखक फिलहाल दूसरे और तीसरे path के ज़रिए proof करने की कोशिश कर रहे हैं

संदर्भ कोड और दस्तावेज़ संरचना का सार

  • पूरा Haskell code GitHub पर देखा जा सकता है
  • अलग-अलग types, proof paths, module structure और query functions सहित Haskell logic के विस्तृत implementation को देखा जा सकता है

1 टिप्पणियां

 
GN⁺ 2025-06-29
Hacker News राय
  • पिछले 10 वर्षों में यूके की कई बड़ी सरकारी systems पर काम करने के अनुभव की बात। यूके government software बनाना सैकड़ों वर्षों के parliamentary laws को code में बदलने जैसा है। HMPO passport system जैसी जगहों पर जब कानून बदलता है, तो हर system में उस कानून से प्रभावित हिस्सों को ढूँढकर ठीक करना पड़ता है। सरकार यह काम महंगी consulting companies को outsource करती है, और वे contracts को जितना संभव हो उतना लंबा खींचकर client से अधिकतम profit निकालने के लिए प्रोत्साहित होती हैं। इस प्रक्रिया में system quality और flexibility असंगत रहती है, और कानून फिर बदलने पर यही जटिल प्रक्रिया दोबारा दोहरती है। केंद्रीय स्तर पर निर्णय लेकर इस समस्या का समन्वय करने वाली संस्था की कमी के कारण सरकारी सेवाएं महंगी हो जाती हैं
    • यह जिज्ञासा कि क्या government outsourcing कभी किसी के लिए वास्तव में अच्छी तरह काम की है; सरकार ने कुछ outsource करके सफलता पाई हो, ऐसी कहानी कभी नहीं सुनी
    • यह सवाल कि vendors पर शायद ‘working system’ देने की contractual obligation क्यों नहीं होती। देखने में ठीक लगने वाले लेकिन वास्तव में सही से काम न करने वाले systems के लिए जरूरत से ज्यादा billing होने की घटना पर भी जिज्ञासा
    • हाल में फ्रांस में passport renew कराने का अनुभव साझा। सभी documents के लिए एक नया platform है, online form सिर्फ एक बार भरना पड़ा, offline visit भी सिर्फ एक बार, 10 मिनट में काम पूरा, और passport भी जल्दी deliver हो गया। यूके की स्थिति निराशाजनक ही हो ऐसा नहीं; असली developers को full-time hire करके development in-house करना चाहिए
  • DSL का उपयोग करके Netherlands tax law को automate और codify करने का एक case याद आता है। संबंधित सामग्री के रूप में Jetbrains DSL case presentation की सिफारिश
  • ‘base case’ नागरिकता निर्धारण की संरचना समझाने में, यह उदाहरण दिया गया कि 1983 से पहले यूके में जन्मे लोग माता-पिता की परवाह किए बिना citizenship के पात्र होते हैं। मैं ऐसे देश से हूं जहां citizenship SQL table पर एक SELECT से तय हो जाती है, इसलिए ऐसी संरचना पर विश्वास करना कठिन है
  • Haskell की syntax को intuitive कहने पर राय कि कोई समझा दे तो intuitive लगती है, उससे पहले नहीं। Haskell में operators बहुत ज्यादा हैं, और code देखकर तुरंत उसका अर्थ समझना कठिन हो सकता है; उदाहरण के तौर पर Haskell operator tutorial लिंक साझा किया गया
    • Haskell में वास्तव में इस्तेमाल होने वाले operators की मोटी गिनती की जाए तो JavaScript के लगभग बराबर या करीब दोगुनी है, ऐसा दावा। Haskell में शुरुआती entry barrier है, लेकिन Java, Python जैसी शुरुआती भाषाएं भी अपने तरीके से जटिल हैं; सीखकर आदत हो जाने पर ही आसान लगती हैं। Python की basic syntax : और = भी beginners के लिए confusion point हैं, इसलिए intuitiveness अक्सर familiarity का परिणाम है
    • अगर किसी के समझाने के बाद वह intuitive हो जाए, तो यह आखिरकार intuitive होने के काफी करीब की ही अवधारणा है — इस पर चर्चा
    • Larry Wall ने Perl के बारे में भी कुछ ऐसा ही कहा था। असली बात syntax की नहीं, बल्कि Haskell की अपनी concepts जैसे monad, lens आदि की है; इन्हें जाने बिना, syntax सरल हो तब भी समझना मुश्किल है
    • लिंक में मौजूद ज्यादातर operators programming beginners के लिए सामान्य ही हिस्से हैं, ऐसा इशारा। Java program या math formula भी बिना संदर्भ के देखें तो समझ नहीं आएंगे। असली कसौटी यह होनी चाहिए कि बुनियादी ज्ञान सीखने और कुछ tutorials करने के बाद कितना समझा जा सकता है
  • यह content शुरुआत में parody जैसा लगता है, लेकिन धीरे-धीरे गंभीर और elegant solution में बदल जाता है। अंत तक आते-आते मुझे भी यह “game” सचमुच खेलकर देखने का मन होने लगा
    • वास्तव में खेला भी जा सकता है, लेकिन late-game ending section काफी ज्यादा कठिन है
  • जापान में वास्तव में यूके passport-related documents जमा करने का अनुभव साझा। परिस्थिति के अनुसार जमा किए जाने वाले documents बदल सकते हैं, और मुझे अपने तथा अपने बच्चे के birth certificates, जापानी family register की original copy, उसके translations, birth registration acceptance certificate आदि कई documents तैयार करने पड़े। हर page की color copy, यहां तक कि दूसरे व्यक्ति के passport copy तक मांगी गई। प्रक्रिया बहुत अस्पष्ट थी, और संरचना ऐसी लगती थी कि जब तक उनकी मांग पूरी न हो जाए, तब तक documents जमा करते रहो
    • commenter के पिता यूके में जन्मे थे, लेकिन दादा विदेश में जन्मे थे, इसलिए मामला और जटिल हो गया — ऐसी स्थिति का विवरण
    • जापान में माता-पिता के birth certificates नहीं मांगे गए थे। मैं Hungary और यूके, दोनों की nationality रखता हूं और Hungary में रहता हूं, लेकिन मुझसे दोनों माता-पिता और चारों grandparents के birth certificates मांगे गए। पत्नी और रिश्तेदारों से संबंध कमजोर होने के कारण स्पष्टीकरण पत्र जोड़ना पड़ा और वह स्वीकार भी कर लिया गया। मेरी nationality में मां की nationality/origin लगभग महत्वहीन है, फिर भी online verification के लिए family friend (जो lawyer है) से संपर्क करना पड़ा — यह अनुभव साझा
    • यह जिज्ञासा कि बच्चे के जापानी passport के सभी pages की color copies आखिर क्यों जमा करनी पड़ीं
  • यूके passport application पूरी तरह online की जा सकती है, और नए citizen (adoption, naturalization, descent) के लिए नया आवेदन भी सिर्फ mobile device से, बिना अलग app के, photo लेने तक संभव है। मेरे अनुभव में यह process efficient, fast और intuitive है
    • हाल में online passport renewal system इस्तेमाल किया, और यह कई वर्षों में देखी गई websites में सबसे अच्छी थी। पुराने computer, पुराने browser पर भी perfectly काम करती है, UI बेहद simple और सबके लिए accessible है, step-by-step navigation भी मददगार है। इच्छा है कि business sector में भी ऐसा design ज्यादा फैले; HMPO की प्रशंसा
    • हाल में पहली बार online system इस्तेमाल किया, और अमेरिका के California में रहते हुए भी 2 हफ्तों में passport बहुत जल्दी मिल गया। Canada passport renewal में 4 महीने लगे थे, प्रक्रिया मुश्किल थी और documents भी ज्यादा चाहिए थे। आशा है कि smartphone-based digital renewal pilot का विस्तार होगा
  • जापान में बेटी का passport बनवाते समय birth certificate पर माता-पिता के surname mismatch जैसी समस्या के कारण बहुत परेशानी हुई। आखिरकार यह समझाना पड़ा कि मेरा जन्म यूके में हुआ है और मेरे पास citizenship (passport) है, इसलिए मेरे सीधे वंशज बच्चे को भी यह मिल सकता है। यह standard required documents से मेल नहीं खाता था, लेकिन फिर भी कहा गया कि यह अपेक्षाकृत कम कष्टदायक मामला था
  • ‘passport application’ game को proxy के तौर पर अनुभव करने की कहानी। ‘mutable history’ rule रोचक लगा। कुछ documents में दर्ज तथ्य थोड़े समय में भी बदल सकते हैं, इसलिए पहले से scanned document भी दोबारा submit और scan करना पड़ सकता है। मजाक में कहा गया कि इस प्रक्रिया को देखकर लगता है adjudicators multiverse को चुपचाप मान्यता देते हैं। “NPC” जैसी भूमिका वाले call-center agents और actual staff के बीच communication एकतरफा prayer जैसा लगता है; बात पहुंचती ही नहीं। यह भी अनुमान कि OP शायद Mornington Crescent game का fan है, क्योंकि passport application और उसके rules उससे मिलते-जुलते हैं
    • यूके system में नाम काफी स्वतंत्रता से बदला जा सकता है, इसलिए मेरी मां ने अपनी तीसरी शादी वाले surname से मेरा birth registration तक कराया। birth certificate के भी केवल कुछ fields ही immutable हैं, इसलिए वह पूरी तरह immutable नहीं है। passport office कभी-कभी पुराना history भी भूल जाता है, इसलिए मेरे passport में surname mismatch का मुद्दा पहले समझाने के बाद भी फिर उठा। agents (NPCs) को phone, email, inquiry — हर बार अलग जवाब मिला। GPT की तरह consistency नहीं थी। एक ही documents देने पर भी एक बेटी से अतिरिक्त कागजात मांगे गए, जबकि दूसरी बेटी को बिना समस्या passport मिल गया। अंत में मां ने सांसद से शिकायत की और एक दिन में मामला सुलझ गया
  • कुछ साल पहले passport application ‘game’ खेलने का अनुभव साझा। मेरा जन्म यूके में हुआ था, पिता ब्रिटिश थे, लेकिन माता-पिता की शादी नहीं हुई थी और मेरा जन्म 1983 के बाद लेकिन 2006 नियम संशोधन से पहले हुआ था, इसलिए शुरू में मैं citizen नहीं था। 2010s के आसपास 2006 का कानून retroactively लागू हुआ और मुझे citizenship मान्यता मिली। मुख्य “quest” था पिता के birth certificate की original copy जमा करना, और अंत में ‘queen के प्रति loyalty oath ceremony’ में अनिवार्य उपस्थिति जैसी अजीब बात भी थी
    • कम से कम ending credits तो मिलते हैं — ऐसा मजाक