MaudeTypedLog: A Typed Interpreter for Prolog in Maude
यह शोधपत्र MaudeTypedLog प्रस्तुत करता है, जो Maude में कार्यान्वित एक Prolog इंटरप्रेटर है जो प्रोग्राम और क्वेरी दोनों में टाइप एरर (type errors) का गतिशील रूप से पता लगाने के लिए एक टाइप्ड यूनिफिकेशन एल्गोरिदम (typed unification algorithm) और टाइप्ड SLD-रिज़ॉल्यूशन (Typed SLD-resolution) का उपयोग करता है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आप ताश के पत्तों का एक घर बना रहे हैं। कंप्यूटर विज्ञान की दुनिया में, प्रोलॉग (Prolog) नामक एक लोकप्रिय भाषा है जो एक मास्टर बिल्डर की तरह काम करती है, लेकिन इसका नियमकोश बहुत ढीला है: इसे इस बात से कोई फर्क नहीं पड़ता कि आप एक नाजुक कागजी तंबू के ऊपर एक भारी ईंट रखने की कोशिश कर रहे हैं। यह बस उन्हें आपस में फिट करने की कोशिश करता है। यदि ईंट बहुत भारी है, तो पूरी संरचना बाद में ढह सकती है, या बिल्डर बस कह सकता है, "खैर, यह काम नहीं आया," बिना आपको यह बताए कि क्यों यह विफल हुआ। ऐसा इसलिए है क्योंकि प्रोलॉग पारंपरिक रूप से "अनटाइप्ड" (untyped) है, जिसका अर्थ है कि यह निर्माण शुरू करने से पहले यह जाँच नहीं करता कि आप जो टुकड़े जोड़ने की कोशिश कर रहे हैं वे वास्तव में सही आकार या सामग्री के हैं या नहीं।
हालाँकि, कभी-कभी बिल्डर को बेहतर पता होता है। यदि आप उससे संख्याओं की एक सूची को एक विशिष्ट तरीके से एक संख्या के साथ मिलाने के लिए कहते हैं, तो वह अपने हाथ खड़े कर सकता है और कह सकता है, "त्रुटि (Error)!" लेकिन यह केवल तभी होता है जब निर्माण पहले ही डगमगाना शुरू कर चुका हो। वर्षों से, कंप्यूटर वैज्ञानिकों ने प्रोलॉग को एक बेहतर नियमकोश—एक "टाइप सिस्टम"—देने की कोशिश की है—जो निर्माण शुरू होने से पहले सामग्रियों की जाँच करता है। समस्या यह है कि इनमें से अधिकांश प्रयास या तो लोगों के उपयोग के लिए बहुत जटिल हैं या वे इतने अस्पष्ट हैं कि वे स्पष्ट गलतियों को भी छोड़ देते हैं। यह एक ऐसे सुरक्षा निरीक्षक की तरह है जो केवल तभी छत की जाँच करता है जब आप विशेष रूप से उनसे पूछते हैं, या जो कहता है "शायद ईंटें ठीक हैं" जबकि वे स्पष्ट रूप से जेली से बनी होती हैं।
यहीं पर एक नया उपकरण आता है, जिसे एनरिक गैलिफ़ा-ट्रोंच, जोआओ बारबोसा और सैंटियागो एस्कोबार द्वारा बनाया गया है। उन्होंने तय किया कि वे सीधे प्रोलॉग को पैच करने की कोशिश करने के बजाय एक बिल्कुल नया, अत्यंत सख्त इंटरप्रेटर बनाएंगे जिसे MaudeTypedLog कहा जाता है। इसे एक 'माड्यूल' (Maude) नामक जादुई, उच्च-गति सिमुलेशन इंजन के माध्यम से अपने प्रोलॉग के ब्लूप्रिंट को चलाने के रूप में समझें। यह इंजन केवल टुकड़ों को फिट करने की कोशिश नहीं करता है; यह जाँचता है कि क्या टुकड़ों को आपस में छूने की अनुमति भी है। यदि आप एक "संख्या" को "शब्द" से चिपकाने की कोशिश करते हैं, तो मशीन तुरंत रुक जाती है और चिल्लाती है, "टाइप एरर (Type Error)!" इससे पहले कि कोई नुकसान हो।
यह शोध पत्र इस नए इंटरप्रेटर को प्रस्तुत करता है, जो अपने जैसे विशिष्ट, तीन-तरफा तर्क प्रणाली (three-way logic system) का उपयोग करने वाला अपनी तरह का पहला उपकरण है। केवल "हाँ" (यह काम करता है) या "नहीं" (यह काम नहीं करता) कहने के बजाय, यह प्रणाली "गलत" (यह एक टाइप एरर है) भी कह सकती है। लेखकों ने केवल यह अनुमान नहीं लगाया कि यह काम करेगा; उन्होंने कोड लिखा, इंटरप्रेटर बनाया, और कई लॉजिक प्रोग्रामों के साथ इसका परीक्षण किया। उन्होंने दिखाया कि उनका टूल उन गलतियों को सफलतापूर्वक पकड़ सकता है जो अन्य उपकरण मिस कर सकते हैं—चाहे वे निर्देशों (प्रोग्राम) में हों या प्रश्नों (क्वेरीज़) में। उन्होंने यह भी प्रदर्शित किया कि वे ठीक उस विशिष्ट लाइन की ओर इशारा कर सकते हैं जो समस्या पैदा कर रही है, जो एक जासूस की तरह कार्य करता है जो केवल यह नहीं कहता कि "एक अपराध हुआ," बल्कि सटीक संदिग्ध की ओर इशारा करता है। हालाँकि वे स्वीकार करते हैं कि उनका उपकरण अभी भी पूर्ण नहीं है और इसे और अधिक परीक्षण की आवश्यकता है, उनके सिमुलेशन सिद्ध करते हैं कि प्रोलॉग प्रोग्रामों की जाँच करने का यह नया, सख्त तरीका त्रुटियों को जल्दी पकड़ने का एक व्यवहार्य और शक्तिशाली तरीका है।
MaudeTypedLog की कहानी
समस्या: वह "गोंद" जो जाँच नहीं करता
प्रोलॉग पहेलियों और तर्क संबंधी समस्याओं को हल करने के लिए उपयोग की जाने वाली भाषा है। यह तथ्यों और नियमों की एक सूची लेकर और उन्हें एक प्रश्न का उत्तर देने के लिए आपस में जोड़ने का प्रयास करके काम करता है। पारंपरिक रूप से, प्रोलॉग "अनटाइप्ड" है। कल्पना कीजिए कि आप मोजे मिलाने का खेल खेल रहे हैं। प्रोलॉग में, आप एक लाल मोज़े को नीले जूते के साथ मिलाने की कोशिश कर सकते हैं, और खेल तब तक चलता रहता है जब तक कि वह हार न मान ले। यह अंत तक नहीं चिल्लाता कि "हे, ये तो एक ही प्रकार की वस्तु भी नहीं हैं!" और भले ही तब भी, यह केवल "कोई मेल नहीं मिला" कह सकता है बिना यह समझाए कि समस्या जूते के कारण थी।
लेखक तर्क देते हैं कि यह खतरनाक है। कभी-कभी, एक प्रोग्राम "नहीं" कहता है क्योंकि उत्तर वास्तव में "नहीं" है (जैसे 2, [1, 3] की सूची में नहीं है), लेकिन अन्य बार यह "नहीं" कहता है क्योंकि आपने कुछ असंभव करने की कोशिश की है (जैसे शब्दों की सूची में एक संख्या डालना)। प्रोलॉग दोनों को "नहीं" के रूप में समान मानता है, जो भ्रमित करने वाला है।
समाधान: एक तीन-तरफा ट्रैफिक लाइट
शोधकर्ताओं ने MaudeTypedLog बनाया, एक इंटरप्रेटर जो प्रोलॉग प्रोग्राम चलाता है लेकिन हर एक चरण पर एक सख्त "टाइप चेक" जोड़ता है। केवल ग्रीन (जाओ) और रेड (रुको) वाले साधारण ट्रैफिक लाइट के बजाय, इस प्रणाली में एक तीसरी लाइट है: येलो (गलत/Wrong)।
- ग्रीन (सत्य/True): टुकड़े फिट बैठते हैं, प्रकार (types) मेल खाते हैं, और तर्क काम करता है।
- रेड (असत्य/False): टुकड़े प्रकारों के अनुसार फिट बैठते हैं, लेकिन तर्क काम नहीं करता (जैसे 2, सूची में नहीं है)।
- येलो (गलत/Wrong): टुकड़े फिट नहीं बैठ सकते क्योंकि वे गलत प्रकार के हैं (जैसे एक शब्द को संख्या के साथ जोड़ना)।
यह "येलो" लाइट ही मुख्य नवाचार है। यह सिस्टम को तुरंत रोकने की अनुमति देता है जब वह एक टाइप एरर देखता है, बजाय इसके कि प्रोग्राम बाद में क्रैश हो जाए या भ्रमित करने वाला उत्तर दे।
उन्होंने इसे कैसे बनाया
इसे संभव बनाने के लिए, लेखकों ने Maude नामक एक शक्तिशाली उपकरण का उपयोग किया। Maude एक सुपर-चार्ज्ड सिमुलेशन इंजन की तरह है जो बहुत तेज़ी से नियमों को फिर से लिख (rewrite) सकता है। लेखकों ने प्रोलॉग के नियमों को लिया और उन्हें Maude के भीतर फिर से लिखा।
- टाइप्ड यूनिफिकेशन एल्गोरिदम (The Typed Unification Algorithm): यह मुख्य इंजन है। सामान्य प्रोलॉग में, "यूनिफिकेशन" दो चीजों को एक जैसा बनाने की प्रक्रिया है। MaudeTypedLog में, उन्होंने एक "टाइप्ड यूनिफिकेशन" एल्गोरिदम बनाया। दो चीजों को जोड़ने की कोशिश करने से पहले, यह उनके "टाइप्स" की जाँच करता है। यदि प्रकार मेल नहीं खाते, तो यह केवल विफल नहीं होता; यह एक विशिष्ट "Wrong" सिग्नल लौटाता है।
- TSLD-Resolution: यह उस पद्धति का तकनीकी नाम है जिसका उपयोग वे पहेलियों को हल करने के लिए करते हैं (यह मानक SLD-resolution का एक अपग्रेड संस्करण है)। "T" का अर्थ है "Typed"। यह समस्या को हल करने के सभी संभावित तरीकों का एक पेड़ (tree) बनाता है। यदि पेड़ की कोई शाखा "Wrong" सिग्नल से टकराती है, तो वह शाखा तुरंत काट दी जाती है, और सिस्टम जानता है कि किस नियम ने त्रुटि उत्पन्न की।
उन्होंने क्या पाया
लेखकों ने अपने नए इंटरप्रेटर का परीक्षण कई उदाहरणों के साथ किया।
- उदाहरण 1: उन्होंने एक प्रोग्राम बनाया जहाँ एक नियम
rएक ऐसी संख्या खोजने का प्रयास करता है जो संख्याओं की एक सूची और अक्षरों की एक सूची दोनों में हो। सिस्टम ने सही ढंग से पहचाना कि जबकि कुछ पथ काम कर रहे थे (संख्या 1 मिलना), अन्य पथों ने "Wrong" सिग्नल दिया क्योंकि उन्होंने संख्याओं और अक्षरों को मिलाने की कोशिश की। - उदाहरण 2: उन्होंने एक छिपे हुए टाइप एरर के साथ एक प्रोग्राम बनाया। एक नियम ने एक ऐसी जगह पर अक्षर डालने की कोशिश की जो संख्या के लिए निर्धारित थी। जब उन्होंने "चेक" कमांड चलाया, तो MaudeTypedLog ने केवल यह नहीं कहा कि प्रोग्राम विफल हो गया; इसने सीधे उस विशिष्ट नियम (क्लॉज 3) की ओर इशारा किया जो दोषी था।
परिणामों ने दिखाया कि उनका टूल बिल्कुल वैसा ही काम करता है जैसा कि सिद्धांत ने भविष्यवाणी की थी। यह प्रोग्राम के भीतर और प्रोग्राम से पूछे गए प्रश्नों, दोनों में टाइप एरर का पता लगाने में सक्षम है।
वे अभी क्या नहीं कर सकते
लेखक अपने वर्तमान कार्य की सीमाओं के प्रति ईमानदार हैं। उनका उपकरण एक प्रोटोटाइप है। यह अभी भी उन सभी जटिल गणितीय कार्यों को नहीं संभाल सकता है जो प्रोलॉग आमतौर पर करता है (जैसे वर्गमूल की गणना करना या संख्याओं को गतिशील रूप से जोड़ना)। उन्होंने यह भी परीक्षण नहीं किया है कि यह उन विशाल नियमों की लाइब्रेरी पर कैसे काम करता है जिनका पेशेवर प्रोलॉग प्रोग्राम उपयोग करते हैं। वे सुझाव देते हैं कि भविष्य में, उन्हें इस टूल को उन्नत गणितीय सुविधाओं और पेड़ों (trees) जैसे अधिक जटिल डेटा स्ट्रक्चर को संभालने के लिए प्रशिक्षित करने की आवश्यकता होगी।
यह क्यों महत्वपूर्ण है
यह शोध पत्र यह दावा नहीं करता है कि उसने कंप्यूटर विज्ञान की हर समस्या को हल कर दिया है। इसके बजाय, यह तर्क प्रोग्रामिंग को देखने का एक नया, स्पष्ट तरीका प्रदान करता है। Maude का उपयोग करके एक सख्त, टाइप्ड इंटरप्रेटर बनाकर, लेखकों ने दिखाया है कि त्रुटियों को जल्दी पकड़ना और ठीक से पता लगाना संभव है। यह एक बिल्डर को लेजर लेवल देने जैसा है जो न केवल यह बताता है कि दीवार टेढ़ी है, बल्कि यह भी बताता है कि कौन सी ईंट गलत आकार की है, ताकि घर गिरने से पहले उसे ठीक किया जा सके।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।