समवर्ती बाधा तर्क प्रोग्रामिंग

समवर्ती बाधा तर्क प्रोग्रामिंग का संस्करण है जिसका उद्देश्य मुख्य रूप से बाधा संतुष्टि समस्याओं को समाधान करने के अतिरिक्त समवर्ती प्रक्रियाओं को प्रोग्रामिंग करना है। बाधा तर्क प्रोग्रामिंग में लक्ष्यों का मूल्यांकन समवर्ती रूप से किया जाता है; समवर्ती प्रक्रिया इसलिए दुभाषिया (कंप्यूटिंग) द्वारा लक्ष्य के मूल्यांकन के रूप में क्रमादेशित है।

सांकेतिक रूप से, समवर्ती बाधाएं तर्क कार्यक्रम गैर-समवर्ती कार्यक्रमों के समान हैं, मात्र अपवाद यह है कि खंडों में गार्ड (कंप्यूटिंग) सम्मिलित है, जो ऐसी बाधाएँ हैं कि कुछ नियमों के अंतर्गत खंड की प्रयोज्यता का अवरुद्ध कर सकती हैं। सिमेंटिक रूप से, समवर्ती बाधा तर्क प्रोग्रामिंग अपने गैर-समवर्ती संस्करणों से भिन्न है क्योंकि लक्ष्य मूल्यांकन का उद्देश्य किसी समस्या का समाधान शोध करने के अतिरिक्त समवर्ती प्रक्रिया का अनुभव करना है। विशेष रूप से, यह अंतर इस विचार को प्रभावित करता है एक से अधिक खंड प्रारम्भ होने पर दुभाषिया कैसे व्यवहार करता है: गैर-समवर्ती बाधा तर्क प्रोग्रामिंग पुनरावर्तन सभी खंडों का प्रयास करता है; समवर्ती बाधा तर्क प्रोग्रामिंग केवल एक का चयन करती है। यह दुभाषिया की इच्छित 'दिशात्मकता का सबसे स्पष्ट प्रभाव है, जो पहले से लिए गए विकल्प को कभी भी संशोधित नहीं करता है। इसके अन्य प्रभाव एक लक्ष्य होने की शब्दार्थिक संभावना है जिसे सिद्ध नहीं किया जा सकता है जबकि संपूर्ण मूल्यांकन विफल नहीं होता है, लक्ष्य और खंड शीर्ष के समान होने की विशेष विधि है।

बाधा प्रबंधन नियमों को समवर्ती बाधा तर्क प्रोग्रामिंग के रूप में देखा जा सकता है, किन्तु समवर्ती प्रक्रियाओं के अतिरिक्त बाधा सरलीकरण या सॉल्वर प्रोग्रामिंग के लिए उपयोग किया जाता है।

विवरण
बाधा तर्क प्रोग्रामिंग में, वर्तमान लक्ष्य में लक्ष्यों का क्रमिक रूप से मूल्यांकन किया जाता है, सामान्यतः एलआईएफओ (कंप्यूटिंग) क्रम में आगे बढ़ते हुए नए लक्ष्यों का मूल्यांकन पहले किया जाता है। लॉजिक प्रोग्रामिंग का समवर्ती संस्करण समानांतर कंप्यूटिंग में लक्ष्यों का मूल्यांकन करने की अनुमति देता है: प्रत्येक लक्ष्य का मूल्यांकन प्रक्रिया द्वारा किया जाता है, और प्रक्रियाएं समवर्ती रूप से चलती हैं। ये प्रक्रियाएँ कंस्ट्रेंट स्टोर के माध्यम से इंटरैक्ट करती हैं: प्रक्रिया कंस्ट्रेंट स्टोर में बाधा जोड़ सकती है, जबकि दूसरा यह परीक्षण करता है कि क्या स्टोर द्वारा कोई बाधा उत्पन्न की गई है। स्टोर में बाधा जोड़ना नियमित बाधा तर्क प्रोग्रामिंग के जैसे किया जाता है। बाधा का परीक्षण गार्ड (कंप्यूटिंग) के माध्यम से क्लॉज से की जाती है। गार्ड्स को सिंटैक्टिक एक्सटेंशन की आवश्यकता होती है: समवर्ती बाधा तर्क प्रोग्रामिंग का खंड इस रूप में लिखा जाता है  जहां  बाधा है जिसे क्लॉज का गार्ड कहा जाता है। सामान्यतः, इस खंड का नया संस्करण लक्ष्य में शाब्दिक को परिवर्तित करने के लिए उपयोग किया जा सकता है, यदि शाब्दिक के समीकरण के पश्चात बाधा स्टोर द्वारा गार्ड को सम्मिलित किया जाता है और क्लॉज हेड को इसमें जोड़ा जाता है। इस नियम की त्रुटिहीन परिभाषा अधिक जटिल है, और नीचे दी गई है।

गैर-समवर्ती और समवर्ती बाधा तर्क प्रोग्रामिंग के मध्य मुख्य अंतर यह है कि प्रथम शोध के उद्देश्य से है, जबकि दूसरा समवर्ती प्रक्रियाओं को प्रारम्भ करने के उद्देश्य से है। यह अंतर इस विचार को प्रभावित करता है कि क्या चयन पूर्ववत किए जा सकते हैं, क्या प्रक्रियाओं को समाप्त करने की अनुमति नहीं है, लक्ष्यों और खंड शीर्षों को कैसे समान किया जाता है।

नियमित और समवर्ती बाधा तर्क प्रोग्रामिंग के मध्य प्रथम शब्दार्थ अंतर उस स्थिति के बारे में है जब लक्ष्य को सिद्ध करने के लिएसे अधिक खंड का उपयोग किया जा सकता है। लक्ष्य को फिर से लिखते समय गैर-समवर्ती तर्क प्रोग्रामिंग सभी संभावित खंडों का प्रयास करती है: यदि किसी खंड के नए संस्करण के शरीर के साथ इसे प्रतिस्थापित करते समय लक्ष्य सिद्ध नहीं किया जा सकता है, तो कोई अन्य खंड सिद्ध होता है, यदि कोई हो। ऐसा इसलिए है क्योंकि उद्देश्य लक्ष्य को सिद्ध करना है: लक्ष्य को सिद्ध करने के सभी संभव विधि का उपयोग किया जाता है। दूसरी ओर, समवर्ती बाधा तर्क प्रोग्रामिंग का उद्देश्य समांतर प्रक्रियाओं को प्रोग्रामिंग करना है। सामान्य समवर्ती प्रोग्रामिंग में, यदि कोई प्रक्रिया विकल्प बनाती है, तो यह विकल्प पूर्ववत नहीं किया जा सकता है। बाधा तर्क प्रोग्रामिंग का समवर्ती संस्करण उन्हें विकल्प लेने की अनुमति देकर प्रक्रियाओं को प्रारम्भ करता है, किन्तु पश्चात में उन्हें प्रतिबद्ध करता है। तकनीकी रूप से, यदि लक्ष्य में शाब्दिक को फिर से लिखने के लिए एक से अधिक खंड का उपयोग किया जा सकता है, तो गैर-समवर्ती संस्करण सभी खंडों को को परिवर्तित करने का प्रयास करता है, जबकि समवर्ती संस्करण चयन करता है खंड: गैर-समवर्ती संस्करण के विपरीत, अन्य खंडों का प्रयास कभी नहीं किया जाएगा। एकाधिक विकल्पों को संभालने के इन दो भिन्न-भिन्न विधियों को प्रायः नॉन डेटर्मिनिज्म नहीं जानते और नॉनडेटर्मिनिज्म की आशंका नहीं करते हैं।

लक्ष्य में शाब्दिक पुनर्लेखन करते समय, केवल उन खंडों पर विचार किया जाता है जिनके गार्ड बाधा स्टोर के संघ और खंड के सिर के साथ शाब्दिक के समीकरण से जुड़े होते हैं। गार्ड यह बताने की विधि प्रदान करते हैं कि किन खंडों पर विचार नहीं किया जाना चाहिए। समवर्ती बाधा तर्क प्रोग्रामिंग के एकल खंड के प्रति प्रतिबद्धता को देखते हुए यह विशेष रूप से महत्वपूर्ण है: खंड चयन के पश्चात, इस विकल्प पर कभी भी पुनर्विचार नहीं किया जाएगा। गार्ड के बिना, दुभाषिया शाब्दिक को फिर से लिखने के लिए त्रुटिपूर्ण खंड का चयन कर सकता है, जबकि अन्य उत्तम खंड उपस्तिथ हैं। गैर-समवर्ती प्रोग्रामिंग में, यह कम महत्वपूर्ण है, क्योंकि दुभाषिया सदैव सभी संभावनाओं का प्रयास करते है। समवर्ती प्रोग्रामिंग में, दुभाषिया दूसरे के प्रयास किए बिना ही संभावना के लिए प्रतिबद्ध होता है।

गैर-समवर्ती और समवर्ती संस्करण के मध्य अंतर का दूसरा प्रभाव यह है कि समवर्ती बाधा तर्क प्रोग्रामिंग विशेष रूप से प्रक्रियाओं को समाप्त किए बिना चलाने की अनुमति देने के लिए डिज़ाइन की गई है। समवर्ती प्रसंस्करण में सामान्य रूप से गैर-समाप्ति प्रक्रियाएं साधारण हैं; बाधा तर्क प्रोग्रामिंग का समवर्ती संस्करण विफलता की स्थिति का उपयोग न करके उन्हें प्रारम्भ करता है: यदि किसी लक्ष्य को फिर से लिखने के लिए कोई खंड प्रारम्भ नहीं होता है, तो गैर-समवर्ती बाधा तर्क प्रोग्रामिंग के जैसे पूर्ण मूल्यांकन को विफल करने के अतिरिक्त इस लक्ष्य का मूल्यांकन करने की प्रक्रिया रुक जाती है। परिणाम स्वरुप, लक्ष्य का मूल्यांकन करने वाली प्रक्रिया को रोका जा सकता है क्योंकि आगे बढ़ने के लिए कोई खंड उपलब्ध नहीं है, किन्तु साथ ही अन्य प्रक्रियाएं चलती रहती हैं। गार्ड के उपयोग के माध्यम से विभिन्न लक्ष्यों को समाधान करने वाली प्रक्रियाओं के मध्य सिंक्रनाइज़ेशन प्राप्त किया जाता है। यदि किसी लक्ष्य को फिर से नहीं लिखा जा सकता है क्योंकि उपयोग किए जा सकने वाले सभी खंडों में गार्ड होता है जो कि बाधा स्टोर से नहीं जुड़ा होता है, तो इस लक्ष्य को समाधान करने की प्रक्रिया तब तक अवरुद्ध हो जाती है जब तक कि अन्य प्रक्रियाएं उन बाधाओं को नहीं जोड़ देती हैं जो कम से कम के गार्ड को सम्मिलित करने के लिए आवश्यक हैं। यह तुल्यकालन गतिरोध के अधीन है: यदि सभी लक्ष्यों को अवरुद्ध कर दिया जाता है, तो कोई नई बाधा नहीं जोड़ी जाएगी और इसलिए कोई लक्ष्य कभी भी अनवरोधित नहीं होगा।

समवर्ती और गैर-समवर्ती तर्क प्रोग्रामिंग के मध्य अंतर का तृतीय प्रभाव यह है कि लक्ष्य को खंड के नए संस्करण के शीर्ष के समान किया जाता है। क्रियात्मक रूप से, इसे यह अन्वेषण करके किया जाता है कि क्या शीर्ष में चर को इस प्रकार से समान किया जा सकता है कि शीर्ष लक्ष्य के समान है। यह नियम कंस्ट्रेंट लॉजिक प्रोग्रामिंग के संगत नियम से भिन्न होता है जिसमें यह केवल वेरिएबल = टर्म के रूप में कंस्ट्रेंट जोड़ने की अनुमति प्रदान करता है, जहां वेरिएबल प्रमुख होते है। इस सीमा को दिशात्मकता के रूप में अवलोकित किया जा सकता है, जिसमें लक्ष्य और खंड शीर्ष के साथ भिन्न-भिन्न व्यवहार किया जाता है।

संक्षेप में, यह नियम बताता है कि लक्ष्य  को पुनः अंकित करने के लिए क्लॉज के नए संस्करण   का उपयोग किया जा सकता है। सर्वप्रथम यह अन्वेषण किया जाता है की क्या   और   समान विधेय है। द्वितीय अन्वेषण यह किया जाता है कि क्या उपस्थित बाधा स्टोर को देखते हुए $$A$$ को $$H$$ के समान करने की कोई विधि उपस्थित है; नियमित लॉजिक प्रोग्रामिंग के विपरीत यह एकपक्षीय एकीकरण के अंतर्गत किया जाता है, जो केवल शीर्ष के चर को शब्द के समान होने की अनुमति प्रदान करता है। कंस्ट्रेंट स्टोर से प्रवेश और द्वितीय चरण में उत्पन्न समीकरणों के लिए गार्ड का अन्वेषण किया जाता है; गार्ड में ऐसे वेरिएबल्स हो सकते हैं जिनका क्लॉज हेड में उल्लेख नहीं किया गया है: इन वेरिएबल्स की व्याख्या अस्तित्वगत रूप से की जाती है। लक्ष्य को परिवर्तित करने के लिए, खंड के नए संस्करण की प्रयोज्यता को निर्धारित करने के लिए इस पद्धति को संक्षेप में निम्नानुसार व्यक्त किया जा सकता है- बाधा स्टोर में यह सम्मिलित है कि शीर्ष और गार्ड के चर का मूल्यांकन उपस्तिथ है जैसे कि शीर्ष लक्ष्य के समान है और गार्ड को सम्मिलित किया गया है। अपूर्ण विधि के द्वारा इंटैलमेंट का अन्वेषण किया जा सकता है।

समवर्ती तर्क प्रोग्रामिंग के सिंटैक्स और सिमेंटिक्स का विस्तार एटॉमिक टेल है। जब इंटरप्रेटर खंड का उपयोग करता है, तो उसके गार्ड को बाधा स्टोर में जोड़ा जाता है। चूँकि, बॉडी के कंस्ट्रेंट्स को भी जोड़ा गया है। इस क्लॉज के प्रति प्रतिबद्धता के कारण, इंटरप्रेटर बैकट्रैक नहीं करता है यदि बॉडी के कंस्ट्रेंट्स स्टोर के साथ असंगत हैं। एटॉमिक टेल के उपयोग से इस स्थिति से बचा जा सकता है, जिसमें क्लॉज में अन्य प्रकार का द्वितीय गार्ड होता है जिसका अन्वेषण स्थिरता के लिए किया जाता है। इस प्रकार के क्लॉज को  के रूप में अंकित किया जाता है। इस क्लॉज का प्रयोग केवल शाब्दिक पुनर्लेखन के लिए किया जाता है, जिसमें   को बाधा स्टोर से जोड़ा जाता है और   इसके अनुरूप होता है। इस स्तिथि में दोनों   और   बाधा स्टोर में जोड़े जाते हैं।

इतिहास
समवर्ती बाधा तर्क प्रोग्रामिंग का अध्ययन 1980 के अंत में प्रारंभ हुआ, जब समवर्ती तर्क प्रोग्रामिंग के कुछ सिद्धांतों को माइकल जे माहेर द्वारा बाधा तर्क प्रोग्रामिंग में एकीकृत किया गया था। समवर्ती बाधा तर्क प्रोग्रामिंग के सैद्धांतिक गुणों का अध्ययन मार्टिन रिनार्ड और विजय ए सारस्वत सहित विभिन्न लेखकों के द्वारा किया गया था।

यह भी देखें

 * करी (प्रोग्रामिंग भाषा) ,लॉजिक फंक्शनल प्रोग्रामिंग भाषा, जो प्रोग्रामिंग समवर्ती प्रणाली की अनुमति प्रदान करती है।
 * टूनटॉक
 * जानूस (समवर्ती बाधा प्रोग्रामिंग भाषा)
 * ऐलिस (प्रोग्रामिंग भाषा)

संदर्भ

 * ISBN 0-262-13341-5
 * ISBN 3-540-67623-6


 * Specific