- Catala एक domain-specific language है जो विधायी टेक्स्ट से faithful-by-construction एल्गोरिदम निकालने के लिए बनाई गई है, और सामाजिक व वित्तीय कानूनों की literate programming के लिए तैयार की गई programming language है
- कानून, कार्यान्वयन आदेश, न्यायिक मिसालें आदि—लागू किए जाने वाले सामाजिक व वित्तीय mechanisms से जुड़ी सामग्री—इकट्ठा करने के बाद, हर प्रावधान के अनुसार प्रत्येक पंक्ति के अर्थ को code के रूप में annotate करके implementation लिखा जाता है
- Catala compiler पूरा और test किया गया code लेकर वकीलों द्वारा पढ़ी जा सकने वाली implementation की PDF version बना सकता है; यह भाषा कानूनी विशेषज्ञों के साथ मिलकर design की गई है ताकि वे review कर सकें और correctness certify कर सकें
- इसका मुख्य concept Sarah Lawsky प्रोफेसर के A Logic for Statutes पर आधारित definition-under-conditions और default logic है; कानून की logical structure को भाषा की logical structure mimic करती है
- Development tools के रूप में कई text editors के लिए syntax highlighting, VSCode extension, dedicated LSP server, code navigation, auto-completion, test suite UX, और
catala-formatformatter उपलब्ध हैं - सीखने और reference के लिए Catala book, Catala tutorial, फ्रेंच व अंग्रेज़ी grammar cheat sheet, और नवीनतम
masterversion की compiler documentation उपलब्ध हैं - Compiler और repository के भीतर का code, जब तक subdirectories में अलग license न दिया गया हो, Apache license version 2 के तहत distribute किया जाता है
- Catala Inria का research project है, और compiler अभी unstable है तथा कुछ features की कमी है
1 टिप्पणियां
Hacker News टिप्पणियां
यह प्रोजेक्ट मानो यह बात चुपचाप मान लेता है कि कानूनी धाराओं को औपचारिक रूप से specify करना और ऐसा सिस्टम बनाना अच्छा है जिसमें कानूनों की व्याख्या काफी हद तक मशीनों द्वारा की जा सके
इससे आगे, यह मौजूदा मानवीय व्याख्याकारों की उस व्यवस्था को, जिसमें विवेक और त्रुटि की गुंजाइश होती है, पार पाने योग्य समस्या मानता है; मैं उस धारणा से पूरी तरह असहमत तो नहीं हूं, लेकिन यह भी स्पष्ट नहीं कि वह सही है, और लेखकों ने उसे समर्थन देने वाले तर्क दिए हों ऐसा भी नहीं लगता
कानूनों को code में बदलने की प्रक्रिया जानने वाले के नजरिए से, भले ही इसका मूल्य केवल software developers को स्पष्टता देने तक सीमित हो, फिर भी समझ आता है कि यह प्रोजेक्ट क्या करने की कोशिश कर रहा है
मुझे लगता है कि इसका rule of law से भी गहरा संबंध है। https://www.britannica.com/topic/rule-of-law के अनुसार, कानून सार्वजनिक और स्पष्ट होना चाहिए, उसका सामान्य रूप और सार्वभौमिक लागू-योग्यता होनी चाहिए, उसमें ऐसे निश्चित मानदंड होने चाहिए जिन्हें लोग कार्रवाई से पहले देख सकें, और कानूनी दायित्व पीछे की तारीख से नहीं बनाए जाने चाहिए। अस्पष्ट कानून का लाभ क्या है, यह जानने की उत्सुकता है
कानून की डिग्री पढ़ते समय, एक programmer के रूप में मुझे इस क्षेत्र में काफी रुचि थी, और मैंने फ्रांसीसी-भाषी दुनिया में ऐसे legalistic काम करने वाली एक बड़ी community पाई थी। मेरी university में इस दिशा में रुचि रखने वाले professor भी उसी प्रभाव-क्षेत्र की ओर झुके हुए लगते थे
कई सालों से मैं अपने lawyer दोस्त को समझा रहा था कि काश ठीक ऐसी कोई चीज होती, और पता चला कि शायद यह तो हमेशा से मौजूद रही है
मुझे यह सचमुच शानदार लगता है। सभी कानून इसी तरह की language में लिखे जाने चाहिए, और syntax highlighting व consistent formatting rules के साथ प्रकाशित होने चाहिए। इसके बाद school curriculum में इस कानूनी भाषा को सीखना शामिल होना चाहिए। तब लोगों की कानून पढ़ने और अपनी समझ पर भरोसा रखने की क्षमता बहुत बढ़ेगी, और समाज को भी बड़ा लाभ होगा
वास्तविक कानून पहले से ही अपेक्षाकृत साधारण भाषा में लिखे जाते हैं, और शब्द भी लगभग हमेशा सामान्य English वाले अर्थ में ही होते हैं। समस्या यह है कि वे शब्द जिन कानूनी concepts का वर्णन करते हैं वे खुद जटिल होते हैं, और अक्सर दूसरे कानूनों, regulations, case law आदि के references आपस में उलझे होते हैं
साथ ही Uniform Commercial Code जैसे मामलों में कानून codified भी है। यानी case law को लगातार फिर से लिखकर, patches को merge कर व्यवस्थित किया गया उदाहरण
test cases को भी साथ में “बुन” दिया जाए तो दिलचस्प होगा। logic statements जहां आपस में सटती हैं, वही work surface bugs के घुसने की जगह होती है
खासकर temporal events के आसपास, और यह formal model तक ले जाता है, जिससे bugs भी बढ़ते हैं। आम तौर पर अगर किसी key से जुड़ा rule हो तो कम से कम तीन tests चाहिए¹: बड़ा मामला, बराबर मामला, छोटा मामला। types आदि न हों तो negative numbers, null, maximum/minimum boundary inputs भी चाहिए
उदाहरण के लिए, “जब regulation 3 महीने बाद पास हो, parties B exercise न कर पाई हों, फिर भी ‘17 tons’ कचरा dump किया गया हो…” जैसे timeline-based tests रखे जा सकते हैं। model checker integrate हो जाए तो बहुत मदद मिलेगी। formally verified legislation, या कम से कम भाषा को code में encode करने की प्रक्रिया के लिए DevOps जैसा pipeline भी रखा जा सकता है
¹ https://en.m.wikipedia.org/wiki/Equivalence_partitioning
कई कानूनों में ambiguous expressions बहुत होते हैं। Russian vehicles को allow करना है या नहीं, इस पर हालिया EU regulation अच्छा example है। हालांकि कानून को programming language में “digitalize” करने की कोशिश करते समय संभावित ambiguity या धुंधली definitions सब खोज निकालने के लिए यह अच्छा idea हो सकता है
यह कुछ वैसा है जैसे reviewer को code काम करता है यह मनवाने के लिए unit/integration/end-to-end tests से साबित करना। यानी legal system में भी end-to-end tests रखना
एक कदम आगे जाकर tests का bundle लिखा जा सकता है, और उन tests को satisfy करने वाले संभावित laws की range automatically generate की जा सकती है
कानून की मंशा को स्पष्ट करने वाला मानक टेस्ट सूट फ़ॉर्मैट और देखना चाहूंगा
जिस राज्य में मैं पहले रहता था, वहां अच्छे इरादे से बहुत सरल child pornography प्रतिबंध कानून प्रस्तावित किया गया था, लेकिन वह बहुत ही सरल था। मोटे तौर पर “जो व्यक्ति मोबाइल फोन से किसी नाबालिग की explicit तस्वीर भेजता है, वह child pornography भेजने का अपराधी होगा” जैसा था, और कानूनी भाषा में लिखा था, लेकिन इससे बहुत ज्यादा विस्तार में नहीं था। मैंने बिल पेश करने वाले से फोन पर पूछा कि अगर मेरी काल्पनिक बेटी अपनी nude तस्वीर अपने boyfriend को भेजे, तो क्या नए कानून के तहत वह felony अपराधी बन जाएगी; उनका जवाब था, “अरे, ऐसा मतलब नहीं था!” और आखिरकार बिल को फिर से लिखने के लिए वापस ले लिया गया
कल्पना की जा सकती है कि इसे program code की तरह माना जाए और “यह कानून उस स्थिति में लागू नहीं होता जब कोई नाबालिग अपनी ही तस्वीर भेजता है” जैसे tests जोड़े जाएं। इससे कानून बनाने वालों को अपनी मंशा साफ करनी पड़ेगी, और अगर वे कहते हैं कि “online child safety law का इस्तेमाल pro-trans content पर प्रतिबंध लगाने के लिए नहीं करेंगे,” तो कहा जा सकता है, “ठीक है, इसे test case में डालते हैं।” निर्णायक बाधा यह है कि politicians इस तरह बांध दिए जाने को पसंद नहीं करते
इससे मंशा को दर्शाने वाला कानून लिखना भी आसान होगा, और भविष्य की courts कानून की मंशा का आकलन करने में इसका इस्तेमाल कर सकेंगी। भले ही शब्दशः 15 साल के बच्चे द्वारा selfie भेजने पर कानून लागू होता हो, अगर test यह स्पष्ट करे कि ऐसा इरादा नहीं था, तो बरी किया जा सकता है। सैकड़ों वजहों से यह असंभव होगा, लेकिन सपना तो देखा जा सकता है
यानी ऐसा नहीं होना चाहिए कि कानून जानबूझकर अस्पष्ट बनाया जाए ताकि वह व्यापक रूप से फंसा सके, और लोगों को court में लड़ने दिया जाए
कानून को computer पर executable होना जरूरी नहीं है। यह मंशा और उसकी व्याख्या के बारे में है, इसलिए test suite खुद भी असल में कानून का हिस्सा है, और उसे सीधे कानून में शामिल कर देना चाहिए
व्यक्तिगत रूप से, किसी भी देश में अगर कानून के साथ legislative purpose जोड़ दिया जाए तो मैं संतुष्ट होऊंगा। अगर संभव हो, तो यह देखने के लिए key performance indicators भी जोड़ दिए जाएं कि वह काम कर रहा है या नहीं। बाद में फिर से आकलन किया जा सके कि कानून सच में काम कर रहा है या उल्टा असर डाल रहा है, और क्या उसके मुख्य use cases शुरुआत में लाए जाने के कारणों से अलग हैं
[1] https://www.aclu.org/news/juvenile-justice/minnesota-prosecu...
Greg Bear की किताब Moving Mars(1993) में Legal Logic नाम से कुछ ऐसा ही संक्षेप में आता है। मानव Martians इसे अपने नए स्वतंत्र समाज के कानून बनाते समय AI की मदद से इस्तेमाल करते हैं
Greg Bear एक प्रसिद्ध SF लेखक थे, जिनका एक साल से भी कम समय पहले निधन हुआ था, और उस समय यहां भी उनकी obituary पर चर्चा हुई थी। वे मेरे किशोरावस्था पर बड़ा असर डालने वाले लेखकों में से एक थे, इसलिए मुझे खास तौर पर याद है कि Moving Mars का यह तत्व कल्पना को उकसाने वाला था, और मैं पढ़ना चाहूंगा कि Catala क्या प्रदान करता है
[1] https://en.wikipedia.org/wiki/Greg_Bear
[2] https://en.wikipedia.org/wiki/Moving_Mars
[3] https://news.ycombinator.com/item?id=33679668
[4] https://news.ycombinator.com/item?id=33675708
इस भाषा को समझाने वाला एक paper है: https://hal.inria.fr/hal-03159939। एक छोटा video summary भी है: https://youtu.be/OiaFTFSAa1I
Programmers कानून में “programming language” जैसी चीज इस्तेमाल करने का सुझाव देना पसंद करते हैं
लेकिन यह बात छूट जाती है कि ambiguity कुछ मायनों में कानून का मूल रूप से महत्वपूर्ण हिस्सा है। क्योंकि दुनिया खुद कुछ मायनों में मूल रूप से अस्पष्ट है, और कुछ मायनों में साफ-साफ बंटी हुई है। बेशक, हर तरह की ambiguity वांछनीय नहीं है
लेकिन अगर “code ही law” बन जाए, तो loopholes का फायदा उठाने के तरीके और खराब होंगे, ऐसा मुझे लगता है। यहां तक कि कई कानूनों को detailed implementation की बजाय उन मूल्यों पर ज्यादा ध्यान देना चाहिए जिनका पालन होना है, और यह स्वभावतः कम स्पष्ट और अधिक ambiguous होता है
मैं यह बहस नहीं करूंगा कि यह कानून की समस्या है या enforcement की, लेकिन किसी भी तरह हमारा समाज ambiguity और uneven enforcement पर बना है
value.fair_marketदेखें [0]। Lawyers इसके अर्थ पर बहस कर सकते हैं, लेकिन competing definitions को भी program के रूप में define किया जा सकता हैमैं सहमत हूं कि कानून पर ध्यान implementation details की बजाय outcomes पर होना चाहिए। इसके लिए नए कानून के outcomes को मापने वाली evaluation function बनाने का तरीका चाहिए, और Catala जैसे systems expected outcomes को model करने और competing bills के बीच चुनने में मदद कर सकते हैं। उदाहरण के लिए अगर outcome “pollution घटाना चाहते हैं” है, तो policy “polluting industries पर प्रतिबंध” भी हो सकती है या “pollution externalities पर tax” भी, और दोनों complex outcomes पैदा करते हैं, इसलिए automated analysis और empirical measurement बेहतर होंगे
[0] https://github.com/CatalaLang/catala#concepts
मुझे पूरी तरह नहीं पता कि कंप्यूटरों के लिए कानूनी भाषा पर सचमुच reasoning करने में कोई बड़ा हल करने लायक समस्या है या नहीं। जटिल हिस्सा equity का balancing है, और इसके लिए अब भी इंसानों और वकीलों की ज़रूरत पड़ती है
सोचता हूँ कि legislators, lawyers, judges में से कोई इसकी उम्मीद कर रहा है या सिर्फ programmers ही कर रहे हैं
मुझे हमारी legal system पर ज़्यादा भरोसा नहीं है। पता नहीं आप क्यों पूछ रहे हैं
Catalan बोलने वाले के तौर पर, लेख में जिस language की बात है उसके साथ name collision बहुत दुर्भाग्यपूर्ण लगता है
नाम का चुनाव वाकई दुर्भाग्यपूर्ण है। किसी programming language का नाम “français”, “Deutsch”, या “English” रखने जैसा है
readme के नीचे लिखा है कि “इस language का नाम Pierre Catala के नाम पर रखा गया है।” मेरी सलाह है कि इसे PierreLang कर दें
Catalan native speaker के रूप में नाम देखकर मैं काफी चौंका था, लेकिन अगर यह आम surname है तो बात समझ में आती है