- ब्रिटेन की पासपोर्ट आवेदन प्रक्रिया को एक 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 टिप्पणियां
Hacker News राय
SELECTसे तय हो जाती है, इसलिए ऐसी संरचना पर विश्वास करना कठिन है:और=भी beginners के लिए confusion point हैं, इसलिए intuitiveness अक्सर familiarity का परिणाम है