लॉजिक प्रोग्रामिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{short description|Programming paradigm based on formal logic}}
{{short description|Programming paradigm based on formal logic}}
{{Programming paradigms}}
{{Programming paradigms}}
[[तर्क]] प्रोग्रामिंग एक [[प्रोग्रामिंग प्रतिमान]] है जो काफी हद तक औपचारिक तर्क पर आधारित होता है। तर्क प्रोग्रामिंग भाषा में लिखा गया कोई भी प्रोग्राम तार्किक रूप में वाक्यों का एक समूह है, जो किसी समस्या डोमेन के बारे में तथ्यों और नियमों को व्यक्त करता है। प्रमुख तर्क [[प्रोग्रामिंग भाषा]] परिवारों में [[प्रोलॉग]], [[उत्तर सेट प्रोग्रामिंग|उत्तर समूह प्रोग्रामिंग]] (एएसपी) और [[संगणक वैज्ञानिक]] शामिल हैं। इन सभी भाषाओं में नियम ''खण्ड (तर्क)'' के रूप में लिखे गए हैं:
[[तर्क]] प्रोग्रामिंग एक [[प्रोग्रामिंग प्रतिमान]] है जो अधिक हद तक औपचारिक तर्क पर आधारित होता है। तर्क प्रोग्रामिंग भाषा में लिखा गया कोई भी प्रोग्राम तार्किक रूप में वाक्यों का एक समूह है, जो किसी समस्या डोमेन के बारे में तथ्यों और नियमों को व्यक्त करता है। प्रमुख तर्क [[प्रोग्रामिंग भाषा]] परिवारों में [[प्रोलॉग]], [[उत्तर सेट प्रोग्रामिंग|उत्तर समूह प्रोग्रामिंग]] (एएसपी) और [[संगणक वैज्ञानिक]] सम्मलित हैं। इन सभी भाषाओं में नियम ''खण्ड (तर्क)'' के रूप में लिखे गए हैं:


:<kbd>'''H :- B<sub>1</sub>, …, B<sub>n</sub>'''
:<kbd>'''H:- B<sub>1</sub>, …, B<sub>n</sub>'''


और तार्किक प्रभाव के रूप में घोषणात्मक रूप से पढ़ा जाता है:
और तार्किक प्रभाव के रूप में घोषणात्मक रूप से पढ़ा जाता है:
Line 13: Line 13:
:'''H'''<kbd>.</kbd>
:'''H'''<kbd>.</kbd>


सरलतम स्थिति में जिसमें '''H, B1, ..., Bn''' सभी [[परमाणु सूत्र]] हैं, इन उपवाक्यों को निश्चित उपवाक्य या हॉर्न उपवाक्य कहा जाता है। हालांकि, इस सरल मामले के कई विस्तार हैं, सबसे महत्वपूर्ण मामला है जिसमें एक खंड के शरीर में स्थितियां भी परमाणु सूत्रों की उपेक्षा हो सकती हैं। तर्क प्रोग्रामिंग भाषा जिसमें यह एक्सटेंशन शामिल है, में [[नॉन-मोनोटोनिक तर्क]] की नॉलेज रिप्रेजेंटेशन क्षमताएं हैं।
सरलतम स्थिति में जिसमें '''H, B1, ..., Bn''' सभी [[परमाणु सूत्र]] हैं, इन उपवाक्यों को निश्चित उपवाक्य या हॉर्न उपवाक्य कहा जाता है। चूंकि, इस सरल स्थितिे के कई विस्तार हैं, सबसे महत्वपूर्ण स्थिति है जिसमें एक खंड के शरीर में स्थितियां भी परमाणु सूत्रों की उपेक्षा हो सकती हैं। तर्क प्रोग्रामिंग भाषा जिसमें यह एक्सटेंशन सम्मलित है, में [[नॉन-मोनोटोनिक तर्क]] की नॉलेज रिप्रेजेंटेशन क्षमताएं हैं।


एएसपी और डेटाअल में, तर्क प्रोग्राम में केवल [[घोषणात्मक प्रोग्रामिंग]] पठन होता है और उनका निष्पादन प्रूफ प्रक्रिया या मॉडल जनरेटर के माध्यम से किया जाता है जिसका व्यवहार प्रोग्रामर द्वारा नियंत्रित करने के लिए नहीं होता है। हालाँकि, भाषाओं के प्रोलॉग परिवार में, तर्क प्रोग्रामों में लक्ष्य-घटाने की प्रक्रियाओं के रूप में एक [[प्रक्रियात्मक प्रोग्रामिंग]] व्याख्या भी होती है:
एएसपी और डेटाअल में, तर्क प्रोग्राम में केवल [[घोषणात्मक प्रोग्रामिंग]] पठन होता है और उनका निष्पादन प्रूफ प्रक्रिया या मॉडल जनरेटर के माध्यम से किया जाता है जिसका व्यवहार प्रोग्रामर द्वारा नियंत्रित करने के लिए नहीं होता है। चूंकि, भाषाओं के प्रोलॉग परिवार में, तर्क प्रोग्रामों में लक्ष्य-घटाने की प्रक्रियाओं के रूप में एक [[प्रक्रियात्मक प्रोग्रामिंग]] व्याख्या भी होती है:


: '''H''' को हल करने के लिए, '''B1''' को हल करने के लिए, और ... और '''Bn''' को हल करने के लिए।
: '''H''' को हल करने के लिए, '''B1''' को हल करने के लिए, और ... और '''Bn''' को हल करने के लिए।
Line 21: Line 21:
एक उदाहरण के रूप में निम्नलिखित उपवाक्य पर विचार करें:
एक उदाहरण के रूप में निम्नलिखित उपवाक्य पर विचार करें:


:<kbd>पतनशील (X) :- मानव (X),</kbd>
:<kbd>पतनशील (X):- मानव (X),</kbd>


प्रोग्रामिंग भाषा [[योजनाकार (प्रोग्रामिंग भाषा)]] को समझाने के लिए [[टेरी विनोग्रैड]]<ref name="Winograd">{{cite journal|first=Terry|last=Winograd|author-link=Terry Winograd|title=Understanding natural language|journal=[[Cognitive Psychology (journal)|Cognitive Psychology]]|volume=3| issue = 1|date=1972|pages=1–191|doi=10.1016/0010-0285(72)90002-3}}</ref> द्वारा उपयोग किए गए एक उदाहरण के आधार पर एक तर्क प्रोग्राम में एक खंड के रूप में, यह परीक्षण करने के लिए एक प्रक्रिया के रूप में दोनों का उपयोग किया जा सकता है कि क्या एक्स मानव है या नहीं, और एक एक्स को खोजने की प्रक्रिया के रूप में एक्स को खोजने के लिए एक प्रक्रिया के रूप में, जो मानव है। तथ्यों की भी एक प्रक्रियात्मक व्याख्या होती है। उदाहरण के लिए, खंड:
प्रोग्रामिंग भाषा [[योजनाकार (प्रोग्रामिंग भाषा)]] को समझाने के लिए [[टेरी विनोग्रैड]]<ref name="Winograd">{{cite journal|first=Terry|last=Winograd|author-link=Terry Winograd|title=Understanding natural language|journal=[[Cognitive Psychology (journal)|Cognitive Psychology]]|volume=3| issue = 1|date=1972|pages=1–191|doi=10.1016/0010-0285(72)90002-3}}</ref> द्वारा उपयोग किए गए एक उदाहरण के आधार पर एक तर्क प्रोग्राम में एक खंड के रूप में, यह परीक्षण करने के लिए एक प्रक्रिया के रूप में दोनों का उपयोग किया जा सकता है कि क्या एक्स मानव है या नहीं, और एक एक्स को खोजने की प्रक्रिया के रूप में एक्स को खोजने के लिए एक प्रक्रिया के रूप में, जो मानव है। तथ्यों की भी एक प्रक्रियात्मक व्याख्या होती है। उदाहरण के लिए, खंड:
Line 29: Line 29:
यह दिखाने के लिए एक प्रक्रिया के रूप में दोनों का उपयोग किया जा सकता है कि सुकरात मानव है, और एक एक्स को खोजने की प्रक्रिया के रूप में जो कि एक्स को सुकरात को "असाइन" करके मानव है।
यह दिखाने के लिए एक प्रक्रिया के रूप में दोनों का उपयोग किया जा सकता है कि सुकरात मानव है, और एक एक्स को खोजने की प्रक्रिया के रूप में जो कि एक्स को सुकरात को "असाइन" करके मानव है।


तार्किक प्रोग्रामों की घोषणात्मक रीडिंग का उपयोग प्रोग्रामर द्वारा उनकी शुद्धता को सत्यापित करने के लिए किया जा सकता है। इसके अलावा, तर्क-आधारित [[कार्यक्रम परिवर्तन|प्रोग्राम परिवर्तन]] तकनीकों का उपयोग तर्क प्रोग्राम को तार्किक रूप से समतुल्य प्रोग्राम में बदलने के लिए भी किया जा सकता है जो अधिक कुशल हैं। तर्क प्रोग्रामिंग भाषा के प्रोलॉग परिवार में, प्रोग्रामर प्रोग्राम की दक्षता में सुधार के लिए निष्पादन तंत्र के ज्ञात समस्या-समाधान व्यवहार का भी उपयोग कर सकता है।
तार्किक प्रोग्रामों की घोषणात्मक रीडिंग का उपयोग प्रोग्रामर द्वारा उनकी शुद्धता को सत्यापित करने के लिए किया जा सकता है। इसके अतिरिक्त, तर्क-आधारित [[कार्यक्रम परिवर्तन|प्रोग्राम परिवर्तन]] तकनीकों का उपयोग तर्क प्रोग्राम को तार्किक रूप से समतुल्य प्रोग्राम में बदलने के लिए भी किया जा सकता है जो अधिक कुशल हैं। तर्क प्रोग्रामिंग भाषा के प्रोलॉग परिवार में, प्रोग्रामर प्रोग्राम की दक्षता में सुधार के लिए निष्पादन तंत्र के ज्ञात समस्या-समाधान व्यवहार का भी उपयोग कर सकता है।


== इतिहास ==
== इतिहास ==
1930 के दशक में [[अलोंजो चर्च]] द्वारा विकसित [[लैम्ब्डा कैलकुलस]] की एक विशेषता [[कंप्यूटर प्रोग्राम]] का प्रतिनिधित्व और निष्पादन करने के लिए गणितीय तर्क का उपयोग भी सम्मिलित है। हालांकि, कंप्यूटर प्रोग्रामों का प्रतिनिधित्व करने के लिए तर्क के क्लॉज़ल सामान्य रूप का उपयोग करने का पहला प्रस्ताव [[कॉर्डेल ग्रीन]] द्वारा बनाया गया था।<ref>{{cite conference|first=Cordell|last=Green|url=https://www.ijcai.org/Proceedings/69/Papers/023.pdf|title=Application of Theorem Proving to Problem Solving|conference=IJCAI 1969}}</ref> यह एलआईएसपी में प्रोग्राम के निष्पादन को सिम्युलेट करके संबंध की गणना करने के लिए, इनपुट-आउटपुट रिलेशन के प्रतिनिधित्व के साथ, एलआईएसपी के एक उपसमूह के स्वयंसिद्धीकरण का उपयोग करता है। दूसरी ओर, फोस्टर और एल्कॉक के [[रसातल]] ने एक मुखर प्रोग्रामिंग भाषा में समीकरणों और लैम्ब्डा कैलकुलस के संयोजन को नियोजित किया, जो उस क्रम पर कोई बाधा नहीं डालता जिसमें संचालन किया जाता है।<ref>{{cite conference|first1=J.M.|last1=Foster|first2=E.W.|last2=Elcock|title=ABSYS 1: An Incremental Compiler for Assertions: an Introduction|conference=Fourth Annual Machine Intelligence Workshop|series=Machine Intelligence|volume=4|place=Edinburgh, UK|publisher=[[Edinburgh University Press]]|date=1969|pages=423–429}}</ref>
1930 के दशक में [[अलोंजो चर्च]] द्वारा विकसित [[लैम्ब्डा कैलकुलस]] की एक विशेषता [[कंप्यूटर प्रोग्राम]] का प्रतिनिधित्व और निष्पादन करने के लिए गणितीय तर्क का उपयोग भी सम्मिलित है। चूंकि, कंप्यूटर प्रोग्रामों का प्रतिनिधित्व करने के लिए तर्क के क्लॉज़ल सामान्य रूप का उपयोग करने का पहला प्रस्ताव [[कॉर्डेल ग्रीन]] द्वारा बनाया गया था।<ref>{{cite conference|first=Cordell|last=Green|url=https://www.ijcai.org/Proceedings/69/Papers/023.pdf|title=Application of Theorem Proving to Problem Solving|conference=IJCAI 1969}}</ref> यह एलआईएसपी में प्रोग्राम के निष्पादन को सिम्युलेट करके संबंध की गणना करने के लिए, इनपुट-आउटपुट रिलेशन के प्रतिनिधित्व के साथ, एलआईएसपी के एक उपसमूह के स्वयंसिद्धीकरण का उपयोग करता है। दूसरी ओर, फोस्टर और एल्कॉक के [[रसातल]] ने एक मुखर प्रोग्रामिंग भाषा में समीकरणों और लैम्ब्डा कैलकुलस के संयोजन को नियोजित किया, जो उस क्रम पर कोई बाधा नहीं डालता जिसमें संचालन किया जाता है।<ref>{{cite conference|first1=J.M.|last1=Foster|first2=E.W.|last2=Elcock|title=ABSYS 1: An Incremental Compiler for Assertions: an Introduction|conference=Fourth Annual Machine Intelligence Workshop|series=Machine Intelligence|volume=4|place=Edinburgh, UK|publisher=[[Edinburgh University Press]]|date=1969|pages=423–429}}</ref>


तर्क प्रोग्रामिंग अपने वर्तमान रूप में 1960 के दशक के अंत और 1970 के दशक की शुरुआत में कृत्रिम बुद्धि में ज्ञान के घोषणात्मक बनाम प्रक्रियात्मक प्रतिनिधित्व के बारे में बहस का पता लगा सकता है। घोषणात्मक अभ्यावेदन के अधिवक्ता विशेष रूप से [[स्टैनफोर्ड विश्वविद्यालय]] में काम कर रहे थे, जो जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक), [[बर्ट्रम राफेल]] और कॉर्डेल ग्रीन से जुड़े थे, और [[एडिनबर्ग विश्वविद्यालय]] में, [[जॉन एलन रॉबिन्सन]] (सिराक्यूज विश्वविद्यालय के एक अकादमिक आगंतुक), पैट्रिक जे हेस के [[साथ]] काम कर रहे थे, और [[रॉबर्ट कोवाल्स्की]] [[मार्विन मिंस्की]] और [[सीमोर पैपर्ट]] के नेतृत्व में प्रक्रियात्मक अभ्यावेदन के अधिवक्ता मुख्य रूप से एमआईटी में केंद्रित थे।{{citation needed|date=July 2013}}
तर्क प्रोग्रामिंग अपने वर्तमान रूप में 1960 के दशक के अंत और 1970 के दशक की शुरुआत में कृत्रिम बुद्धि में ज्ञान के घोषणात्मक बनाम प्रक्रियात्मक प्रतिनिधित्व के बारे में बहस का पता लगा सकता है। घोषणात्मक अभ्यावेदन के अधिवक्ता विशेष रूप से [[स्टैनफोर्ड विश्वविद्यालय]] में काम कर रहे थे, जो जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक), [[बर्ट्रम राफेल]] और कॉर्डेल ग्रीन से जुड़े थे, और [[एडिनबर्ग विश्वविद्यालय]] में, [[जॉन एलन रॉबिन्सन]] (सिराक्यूज विश्वविद्यालय के एक अकादमिक आगंतुक), पैट्रिक जे हेस के [[साथ]] काम कर रहे थे, और [[रॉबर्ट कोवाल्स्की]] [[मार्विन मिंस्की]] और [[सीमोर पैपर्ट]] के नेतृत्व में प्रक्रियात्मक अभ्यावेदन के अधिवक्ता मुख्य रूप से एमआईटी में केंद्रित थे।{{citation needed|date=July 2013}}


यद्यपि यह तर्क के सबूत तरीकों पर आधारित था, एमआईटी में विकसित योजनाकार (प्रोग्रामिंग भाषा), इस प्रक्रियावादी प्रतिमान के भीतर उभरने वाली पहली भाषा थी।<ref>{{cite conference|first=Carl|last=Hewitt|author-link=Carl Hewitt|title=Planner: A Language for Proving Theorems in Robots|url=https://www.ijcai.org/Proceedings/69/Papers/030.pdf|conference=IJCAI 1969}}</ref> योजनाकार ने लक्ष्यों (यानी लक्ष्य-कमी या पिछड़े चेनिंग) और अभिकथन (यानी [[आगे श्रृंखलन]]) से प्रक्रियात्मक योजनाओं के पैटर्न-निर्देशित आह्वान को चित्रित किया था, योजनाकार का सबसे प्रभावशाली कार्यान्वयन योजनाकार का उपसमूह था, जिसे माइक्रो-योजनाकार कहा जाता है, जिसे [[गेराल्ड जे सुस्मान]], [[यूजीन चार्नियाक]] और टेरी विनोग्रैड द्वारा कार्यान्वित किया गया था। इसका उपयोग विनोग्रैड के प्राकृतिक-भाषा समझ प्रोग्राम [[SHRDLU|एसएचआरडीएलयू]] को लागू करने के लिए किया गया था, जो उस समय एक मील का पत्थर था।<ref name="Winograd" /> उस समय बहुत सीमित मेमोरी सिस्टम से निपटने के लिए, योजनाकार ने बैकट्रैकिंग कंट्रोल स्ट्रक्चर का इस्तेमाल किया ताकि एक समय में केवल एक संभावित गणना पथ को संग्रहित किया जा सके, योजनाकार ने प्रोग्रामिंग भाषाओं QA-4, पॉपलर, कोनिवर, क्यूएलआईएसपी और समवर्ती भाषा ईथर को उत्पन्न किया था।{{citation needed|date=July 2013}}
यद्यपि यह तर्क के प्रमाण तरीकों पर आधारित था, एमआईटी में विकसित योजनाकार (प्रोग्रामिंग भाषा), इस प्रक्रियावादी प्रतिमान के भीतर उभरने वाली पहली भाषा थी।<ref>{{cite conference|first=Carl|last=Hewitt|author-link=Carl Hewitt|title=Planner: A Language for Proving Theorems in Robots|url=https://www.ijcai.org/Proceedings/69/Papers/030.pdf|conference=IJCAI 1969}}</ref> योजनाकार ने लक्ष्यों (अर्थात लक्ष्य-कमी या पिछड़े चेनिंग) और अभिकथन (अर्थात [[आगे श्रृंखलन]]) से प्रक्रियात्मक योजनाओं के पैटर्न-निर्देशित आह्वान को चित्रित किया था, योजनाकार का सबसे प्रभावशाली कार्यान्वयन योजनाकार का उपसमूह था, जिसे माइक्रो-योजनाकार कहा जाता है, जिसे [[गेराल्ड जे सुस्मान]], [[यूजीन चार्नियाक]] और टेरी विनोग्रैड द्वारा कार्यान्वित किया गया था। इसका उपयोग विनोग्रैड के प्राकृतिक-भाषा समझ प्रोग्राम [[SHRDLU|एसएचआरडीएलयू]] को लागू करने के लिए किया गया था, जो उस समय एक मील का पत्थर था।<ref name="Winograd" /> उस समय बहुत सीमित मेमोरी प्रणाली से निपटने के लिए, योजनाकार ने बैकट्रैकिंग कंट्रोल स्ट्रक्चर का उपयोग किया जिससे की एक समय में केवल एक संभावित गणना पथ को संग्रहित किया जा सके, योजनाकार ने प्रोग्रामिंग भाषाओं क्यूऐ-4, पॉपलर, कोनिवर, क्यूएलआईएसपी और समवर्ती भाषा ईथर को उत्पन्न किया था।{{citation needed|date=July 2013}}


एडिनबर्ग में हेस और कोवाल्स्की ने योजनाकार के प्रक्रियात्मक दृष्टिकोण के साथ ज्ञान प्रतिनिधित्व के लिए तर्क-आधारित घोषणात्मक दृष्टिकोण को समेटने की कोशिश की, हेस (1973) ने एक समतुल्य भाषा, गोलक्स विकसित की, जिसमें प्रमेय समर्थक के व्यवहार को बदलकर विभिन्न प्रक्रियाओं को प्राप्त किया जा सकता है।<ref>{{cite conference|first=Pat|last=Hayes|title=Computation and Deduction|book-title=Proceedings of the 2nd MFCS Symposium|publisher=[[Czechoslovak Academy of Sciences]]|date=1973|pages=105–118}}</ref> दूसरी ओर, कोवाल्स्की ने [[एसएलडी संकल्प]] विकसित किया,<ref name="Kowalski">{{cite document|first=Robert|last=Kowalski|url=http://www.doc.ic.ac.uk/~rak/papers/IFIP%2074.pdf|title=Predicate Logic as a Programming Language|id=Memo 70|publisher=Department of Artificial Intelligence, [[Edinburgh University]]|date=1973}} Also in Proceedings IFIP Congress, Stockholm, North Holland Publishing Co., 1974, pp.&nbsp;569–574.</ref> एसएल-रिज़ॉल्यूशन का एक प्रकार,<ref>{{cite journal|first1=Robert|last1=Kowalski|first2=Donald|last2=Kuehner|url=http://www.doc.ic.ac.uk/~rak/papers/sl.pdf|title=Linear Resolution with Selection Function|journal=[[Artificial Intelligence (journal)|Artificial Intelligence]]|volume=2|issue=3–4|date=Winter 1971|pages=227–260|doi=10.1016/0004-3702(71)90012-9}}</ref> और दिखाया कि कैसे यह लक्ष्यों को कम करने की प्रक्रियाओं के रूप में निहितार्थों का व्यवहार करता है। कोवाल्स्की ने मार्सिले में [[एलेन कॉलमेरॉयर]] के साथ सहयोग किया, जिन्होंने प्रोग्रामिंग भाषा प्रोलॉग के डिजाइन और कार्यान्वयन में इन विचारों को विकसित किया था।
एडिनबर्ग में हेस और कोवाल्स्की ने योजनाकार के प्रक्रियात्मक दृष्टिकोण के साथ ज्ञान प्रतिनिधित्व के लिए तर्क-आधारित घोषणात्मक दृष्टिकोण को समेटने की कोशिश की, हेस (1973) ने एक समतुल्य भाषा, गोलक्स विकसित की, जिसमें प्रमेय समर्थक के व्यवहार को बदलकर विभिन्न प्रक्रियाओं को प्राप्त किया जा सकता है।<ref>{{cite conference|first=Pat|last=Hayes|title=Computation and Deduction|book-title=Proceedings of the 2nd MFCS Symposium|publisher=[[Czechoslovak Academy of Sciences]]|date=1973|pages=105–118}}</ref> दूसरी ओर, कोवाल्स्की ने [[एसएलडी संकल्प]] विकसित किया,<ref name="Kowalski">{{cite document|first=Robert|last=Kowalski|url=http://www.doc.ic.ac.uk/~rak/papers/IFIP%2074.pdf|title=Predicate Logic as a Programming Language|id=Memo 70|publisher=Department of Artificial Intelligence, [[Edinburgh University]]|date=1973}} Also in Proceedings IFIP Congress, Stockholm, North Holland Publishing Co., 1974, pp.&nbsp;569–574.</ref> एसएल-रिज़ॉल्यूशन का एक प्रकार,<ref>{{cite journal|first1=Robert|last1=Kowalski|first2=Donald|last2=Kuehner|url=http://www.doc.ic.ac.uk/~rak/papers/sl.pdf|title=Linear Resolution with Selection Function|journal=[[Artificial Intelligence (journal)|Artificial Intelligence]]|volume=2|issue=3–4|date=Winter 1971|pages=227–260|doi=10.1016/0004-3702(71)90012-9}}</ref> और दिखाया कि कैसे यह लक्ष्यों को कम करने की प्रक्रियाओं के रूप में निहितार्थों का व्यवहार करता है। कोवाल्स्की ने मार्सिले में [[एलेन कॉलमेरॉयर]] के साथ सहयोग किया, जिन्होंने प्रोग्रामिंग भाषा प्रोलॉग के डिजाइन और कार्यान्वयन में इन विचारों को विकसित किया था।
Line 42: Line 42:
[[तर्क प्रोग्रामिंग के लिए एसोसिएशन]] की स्थापना 1986 में तर्क प्रोग्रामिंग को बढ़ावा देने के लिए की गई थी।
[[तर्क प्रोग्रामिंग के लिए एसोसिएशन]] की स्थापना 1986 में तर्क प्रोग्रामिंग को बढ़ावा देने के लिए की गई थी।


प्रोलॉग ने प्रोग्रामिंग भाषाओं को उत्पन्न [[बीजगणितीय तर्क कार्यात्मक प्रोग्रामिंग भाषा]] भाषा, [[झालर]], गोडेल (प्रोग्रामिंग भाषा) | गोडेल, [[बुध प्रोग्रामिंग भाषा]], [[ओज (प्रोग्रामिंग भाषा)]], [[सियाओ (प्रोग्रामिंग भाषा)]], [[विजुअल प्रोलॉग]], [[XSB]] और λProlog, साथ ही साथ [[समवर्ती तर्क प्रोग्रामिंग]] की एक किस्म,<ref>{{cite conference |first=Ehud |last=Shapiro |title=The family of concurrent logic programming languages |conference=International Summer School on Logic, Algebra and Computation |year=1989 |url=https://apps.dtic.mil/sti/pdfs/ADA213958.pdf |archive-url=https://web.archive.org/web/20170223233755/http://www.dtic.mil/dtic/tr/fulltext/u2/a213958.pdf |archive-date=February 23, 2017 |url-status=live}} Also appeared in {{Cite journal | doi = 10.1145/72551.72555| title = The family of concurrent logic programming languages| journal = ACM Computing Surveys| volume = 21| issue = 3| pages = 413–510| year = 1989| last1 = Shapiro | first1 = E.| s2cid = 2497630| citeseerx = 10.1.1.73.8108| url = https://dl.acm.org/doi/pdf/10.1145/72551.72555}}</ref> [[बाधा तर्क प्रोग्रामिंग]] भाषाएं और Datalog।<ref>{{cite conference  
प्रोलॉग ने प्रोग्रामिंग भाषाओं को उत्पन्न [[बीजगणितीय तर्क कार्यात्मक प्रोग्रामिंग भाषा]] भाषा, [[झालर]], गोडेल (प्रोग्रामिंग भाषा) गोडेल, [[बुध प्रोग्रामिंग भाषा]], [[ओज (प्रोग्रामिंग भाषा)]], [[सियाओ (प्रोग्रामिंग भाषा)]], [[विजुअल प्रोलॉग]], [[XSB|एक्सएसबी]] और λप्रोलॉग, साथ ही साथ [[समवर्ती तर्क प्रोग्रामिंग]] की एक किस्म,<ref>{{cite conference |first=Ehud |last=Shapiro |title=The family of concurrent logic programming languages |conference=International Summer School on Logic, Algebra and Computation |year=1989 |url=https://apps.dtic.mil/sti/pdfs/ADA213958.pdf |archive-url=https://web.archive.org/web/20170223233755/http://www.dtic.mil/dtic/tr/fulltext/u2/a213958.pdf |archive-date=February 23, 2017 |url-status=live}} Also appeared in {{Cite journal | doi = 10.1145/72551.72555| title = The family of concurrent logic programming languages| journal = ACM Computing Surveys| volume = 21| issue = 3| pages = 413–510| year = 1989| last1 = Shapiro | first1 = E.| s2cid = 2497630| citeseerx = 10.1.1.73.8108| url = https://dl.acm.org/doi/pdf/10.1145/72551.72555}}</ref> [[बाधा तर्क प्रोग्रामिंग]] भाषाएं और डेटालॉग।<ref>{{cite conference  
| title = A Deductive Database with Datalog and SQL Query Language
| title = A Deductive Database with Datalog and SQL Query Language
| last1 = Sáenz-Perez
| last1 = Sáenz-Perez
Line 63: Line 63:
=== शब्दार्थ ===
=== शब्दार्थ ===


मार्टेन वैन एम्डेन और रॉबर्ट कोवाल्स्की ने हॉर्न क्लॉज तर्क प्रोग्राम्स, [[मॉडल सिद्धांत]] | मॉडल-सैद्धांतिक, फिक्स्ड पॉइंट (गणित) | फिक्स्ड-पॉइंट, और प्रूफ-सैद्धांतिक शब्दार्थ | प्रूफ-सैद्धांतिक के लिए तीन शब्दार्थों को परिभाषित किया और दिखाया कि वे समकक्ष हैं।<ref>{{cite journal|last1=Van Emden|first1=M.H.|last2=Kowalski|first2=R.A.|date=October 1976|title=The semantics of predicate logic as a programming language|journal=[[Journal of the ACM]]|volume=23|issue=4|pages=733–742|doi=10.1145/321978.321991 |s2cid=11048276 }}</ref>
मार्टेन वैन एम्डेन और रॉबर्ट कोवाल्स्की ने हॉर्न क्लॉज तर्क प्रोग्राम्स, [[मॉडल सिद्धांत]] मॉडल-सैद्धांतिक, फिक्स्ड पॉइंट (गणित) | फिक्स्ड-पॉइंट, और प्रूफ-सैद्धांतिक शब्दार्थ प्रूफ-सैद्धांतिक के लिए तीन शब्दार्थों को परिभाषित किया और दिखाया कि वे समकक्ष हैं।<ref>{{cite journal|last1=Van Emden|first1=M.H.|last2=Kowalski|first2=R.A.|date=October 1976|title=The semantics of predicate logic as a programming language|journal=[[Journal of the ACM]]|volume=23|issue=4|pages=733–742|doi=10.1145/321978.321991 |s2cid=11048276 }}</ref>
=== तर्क और नियंत्रण ===
{{Main|घोषणात्मक प्रोग्रामिंग}}


 
तर्क प्रोग्रामिंग को नियंत्रित कटौती के रूप में देखा जा सकता है। तर्क प्रोग्रामिंग में एक महत्वपूर्ण अवधारणा प्रोग्राम को उनके तर्क कंपोनेंट और उनके कंट्रोल कंपोनेंट में भिन्न करना है। शुद्ध तर्क प्रोग्रामिंग भाषाओं के साथ, तर्क घटक अकेले उत्पादित समाधानों को निर्धारित करता है। तर्क प्रोग्राम को निष्पादित करने के वैकल्पिक तरीके प्रदान करने के लिए नियंत्रण घटक को विविध किया जा सकता है। यह धारणा स्लोगन द्वारा पकड़ी गई है
=== तर्क और नियंत्रण ===
{{Main|Declarative programming}}
तर्क प्रोग्रामिंग को नियंत्रित कटौती के रूप में देखा जा सकता है। तर्क प्रोग्रामिंग में एक महत्वपूर्ण अवधारणा प्रोग्राम को उनके तर्क कंपोनेंट और उनके कंट्रोल कंपोनेंट में अलग करना है। शुद्ध तर्क प्रोग्रामिंग भाषाओं के साथ, तर्क घटक अकेले उत्पादित समाधानों को निर्धारित करता है। तर्क प्रोग्राम को निष्पादित करने के वैकल्पिक तरीके प्रदान करने के लिए नियंत्रण घटक को विविध किया जा सकता है। यह धारणा स्लोगन द्वारा पकड़ी गई है


: एल्गोरिदम = तर्क + नियंत्रण
: एल्गोरिदम = तर्क + नियंत्रण
Line 76: Line 75:


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


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


अधिक सामान्य मामले में, जहां उप-लक्ष्य चर साझा करते हैं, अन्य रणनीतियों का उपयोग किया जा सकता है, जैसे कि उप-लक्ष्य को चुनना जो सबसे अधिक तात्कालिक है या जो पर्याप्त रूप से तत्काल है ताकि केवल एक प्रक्रिया लागू हो। ऐसी रणनीतियों का उपयोग, उदाहरण के लिए, समवर्ती तर्क प्रोग्रामिंग में किया जाता है।
अधिक सामान्य स्थितिे में, जहां उप-लक्ष्य चर साझा करते हैं, अन्य रणनीतियों का उपयोग किया जा सकता है, जैसे कि उप-लक्ष्य को चुनना जो सबसे अधिक तात्कालिक है या जो पर्याप्त रूप से तत्काल है जिससे की केवल एक प्रक्रिया लागू हो। ऐसी रणनीतियों का उपयोग, उदाहरण के लिए, समवर्ती तर्क प्रोग्रामिंग में किया जाता है।


=== असफलता के रूप में नकारात्मकता ===
=== असफलता के रूप में नकारात्मकता ===
{{Main|Negation as failure}}
{{Main|असफलता के रूप में निषेध}}
अधिकांश व्यावहारिक अनुप्रयोगों के साथ-साथ उन अनुप्रयोगों के लिए जिन्हें कृत्रिम बुद्धि में गैर-मोनोटोनिक तर्क की आवश्यकता होती है, हॉर्न क्लॉज तर्क प्रोग्राम को नकारात्मक स्थितियों के साथ सामान्य तर्क प्रोग्राम तक विस्तारित करने की आवश्यकता होती है। एक सामान्य तर्क प्रोग्राम में एक खंड का रूप होता है:
अधिकांश व्यावहारिक अनुप्रयोगों के साथ-साथ उन अनुप्रयोगों के लिए जिन्हें कृत्रिम बुद्धि में गैर-मोनोटोनिक तर्क की आवश्यकता होती है, हॉर्न क्लॉज तर्क प्रोग्राम को नकारात्मक स्थितियों के साथ सामान्य तर्क प्रोग्राम तक विस्तारित करने की आवश्यकता होती है। एक सामान्य तर्क प्रोग्राम में एक खंड का रूप होता है:


:<kbd>एच :- <sub>1</sub>, …, <sub>n</sub>, बी नहीं है<sub>1</sub>, …, बी नहीं है<sub>n</sub>. </केबीडी>
:<kbd>H :- A<sub>1</sub>, …, A<sub>n</sub>, not B<sub>1</sub>, …, not B<sub>n</sub>


और तार्किक निहितार्थ के रूप में घोषणात्मक रूप से पढ़ा जाता है:
और तार्किक निहितार्थ के रूप में घोषणात्मक रूप से पढ़ा जाता है:


:<kbd>एच अगर ए<sub>1</sub> और ... और ए<sub>n</sub> और बी नहीं<sub>1</sub> और और बी नहीं<sub>n</sub>।</केबीडी>
:<kbd>H if A<sub>1</sub> and … and A<sub>n</sub> and not B<sub>1</sub> and and not B<sub>n</sub>
 
जहां <kbd>H</kbd> और सभी <kbd>A<sub>i</sub></kbd> और <kbd>बी<sub>i</sub></kbd> परमाणु सूत्र हैं। नकारात्मक शाब्दिक <kbd> में नकारात्मकता B नहीं है<sub>i</sub></kbd> को आमतौर पर अस्वीकृति के रूप में विफलता के रूप में संदर्भित किया जाता है, क्योंकि अधिकांश कार्यान्वयन में, एक नकारात्मक स्थिति <kbd> नहीं B<sub>i</sub></kbd> को पॉज़िटिव स्थिति <kbd> B दिखा कर होल्ड करने के लिए दिखाया गया है<sub>i</sub></kbd> धारण करने में विफल रहता है। उदाहरण के लिए:


<वाक्यविन्यास लैंग = प्रोलॉग>
जहां <kbd>H</kbd> और सभी <kbd>A<sub>i</sub></kbd> और <kbd>B<sub>i</sub></kbd> परमाणु सूत्र हैं। नकारात्मक शाब्दिक <kbd>में नकारात्मकता B नहीं H<sub>i</sub></kbd> को सामान्यतः अस्वीकृति के रूप में विफलता के रूप में संदर्भित किया जाता है, क्योंकि अधिकांश कार्यान्वयन में, एक नकारात्मक स्थिति <kbd>नहीं B<sub>i</sub></kbd> को पॉज़िटिव स्थिति <kbd>B दिखा कर होल्ड करने के लिए दिखाया गया H<sub>i</sub></kbd> धारण करने में विफल रहता है। उदाहरण के लिए:<syntaxhighlight lang="c">
canfly(X) :- पक्षी(X), असामान्य नहीं(X).
canfly(X) :- bird(X), not abnormal(X).
असामान्य(एक्स):-घायल(एक्स).
abnormal(X) :- wounded(X).
पक्षी (जॉन)
bird(john).
पक्षी (मैरी)
bird(mary).
घायल (जॉन)
wounded(john).
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>उड़ने वाली चीज़ खोजने के लक्ष्य को देखते हुए:<syntaxhighlight lang="c">
:- canfly(X).
</syntaxhighlight>दो अपेक्षाकृत समाधान हैं, जो पहले उपलक्ष्य <kbd>पक्षी(X)</kbd> को हल करते हैं, अर्थात् <kbd>X = जॉन</kbd> और <kbd>X = मैरी</kbd> पहले अपेक्षाकृत समाधान का दूसरा उपलक्ष्य <kbd>असामान्य(जॉन) नहीं</kbd> विफल हो जाता है, क्योंकि <kbd>घायल(जॉन)</kbd> सफल होता है और इसलिए <kbd>असामान्य(जॉन)</kbd> सफल होता है। चूंकि, दूसरे अपेक्षाकृत समाधान का दूसरा उपलक्ष्य <kbd>असामान्य(मैरी) नहीं</kbd> सफल होता है, क्योंकि <kbd>घायल(मैरी)</kbd> विफल हो जाता है और इसलिए <kbd>असामान्य(मैरी)</kbd> विफल रहता है, इसलिए <kbd>X = मैरी</kbd> लक्ष्य का एकमात्र समाधान है।


उड़ने वाली चीज़ खोजने के लक्ष्य को देखते हुए:
[[माइक्रो-प्लानर (प्रोग्रामिंग भाषा)|माइक्रो-योजनाकार (प्रोग्रामिंग भाषा)]] | माइक्रो-योजनाकार का एक निर्माण था, जिसे thnot कहा जाता है, जो एक अभिव्यक्ति पर लागू होने पर मान को सही लौटाता है (और केवल यदि) अभिव्यक्ति का मूल्यांकन विफल हो जाता है। एक समकक्ष ऑपरेटर सामान्यतः आधुनिक प्रोलॉग के कार्यान्वयन में उपलब्ध होता है। यह सामान्यतः के रूप में लिखा जाता है <code>not(''Goal'')</code> या <code>\+ ''Goal''</code>, जहाँ <code>''Goal''</code> प्रोग्राम द्वारा सिद्ध किया जाने वाला कुछ लक्ष्य (प्रस्ताव) है। यह संचालिका प्रथम-क्रम तर्क में निषेध से भिन्न है: एक निषेध जैसे <code>\+ X == 1</code> विफल रहता है जब चर <code>X</code> परमाणु से बंधा हुआ है <code>1</code>, लेकिन यह कब सहित अन्य सभी स्थितिों में सफल होता है <code>X</code> अबाधित है। यह प्रोलॉग के तर्क को गैर-मोनोटोनिक तर्क बनाता है, गैर-मोनोटोनिक: <code>X = 1, \+ X == 1</code> निरंतर विफल रहता है, जबकि <code>\+ X == 1, X = 1</code> सफल हो सकता है, बाध्यकारी <code>X</code> को <code>1</code>, इस पर निर्भर <code>X</code> प्रारंभ में बाध्य था (ध्यान दें कि मानक प्रोलॉग बाएं से दाएं क्रम में लक्ष्यों को निष्पादित करता है)।


<वाक्यविन्यास लैंग = प्रोलॉग>
[[कीथ क्लार्क (कंप्यूटर वैज्ञानिक)]] [1978] तक विफलता के रूप में नकारात्मकता की तार्किक स्थिति अनसुलझी थी, यह दिखाया कि, कुछ प्राकृतिक परिस्थितियों में, यह प्रोग्राम के पूरा होने के संबंध में मौलिक निषेध का एक सही (और कभी-कभी पूर्ण) कार्यान्वयन है। पूर्णता की मात्रा मोटे तौर पर बाएं हाथ की ओर एक ही विधेय के साथ सभी प्रोग्राम क्लॉज के समूह के संबंध में है, कहते हैं
:- कैनफ्लाई (एक्स)
</वाक्यविन्यास हाइलाइट>


दो उम्मीदवार समाधान हैं, जो पहले उपलक्ष्य <kbd>पक्षी(X)</kbd> को हल करते हैं, अर्थात् <kbd>X = जॉन</kbd> और <kbd>X = मैरी</kbd>। पहले उम्मीदवार समाधान का दूसरा उपलक्ष्य <kbd>असामान्य(जॉन) नहीं</kbd> विफल हो जाता है, क्योंकि <kbd>घायल(जॉन)</kbd> सफल होता है और इसलिए <kbd>abnormal(john)</kbd> सफल होता है। हालांकि, दूसरे उम्मीदवार समाधान का दूसरा उपलक्ष्य <kbd>असामान्य(मैरी) नहीं</kbd> सफल होता है, क्योंकि <kbd>घायल(मैरी)</kbd> विफल हो जाता है और इसलिए <kbd>abnormal(mary)</kbd> विफल रहता है। इसलिए, <kbd>X = mary</kbd> लक्ष्य का एकमात्र समाधान है।
:: <kbd>H :- Body<sub>1</sub>
 
:: <kbd>…
[[माइक्रो-प्लानर (प्रोग्रामिंग भाषा)|माइक्रो-योजनाकार (प्रोग्रामिंग भाषा)]] | माइक्रो-योजनाकार का एक निर्माण था, जिसे thnot कहा जाता है, जो एक अभिव्यक्ति पर लागू होने पर मान को सही लौटाता है (और केवल अगर) अभिव्यक्ति का मूल्यांकन विफल हो जाता है। एक समकक्ष ऑपरेटर आमतौर पर आधुनिक प्रोलॉग के कार्यान्वयन में मौजूद होता है। यह आमतौर पर के रूप में लिखा जाता है <code>not(''Goal'')</code> या <code>\+ ''Goal''</code>, कहाँ <code>''Goal''</code> प्रोग्राम द्वारा सिद्ध किया जाने वाला कुछ लक्ष्य (प्रस्ताव) है। यह संचालिका प्रथम-क्रम तर्क में निषेध से भिन्न है: एक निषेध जैसे <code>\+ X == 1</code> विफल रहता है जब चर <code>X</code> परमाणु से बंधा हुआ है <code>1</code>, लेकिन यह कब सहित अन्य सभी मामलों में सफल होता है <code>X</code> अबाधित है। यह प्रोलॉग के तर्क को गैर-मोनोटोनिक तर्क बनाता है | गैर-मोनोटोनिक: <code>X = 1, \+ X == 1</code> हमेशा विफल रहता है, जबकि <code>\+ X == 1, X = 1</code> सफल हो सकता है, बाध्यकारी <code>X</code> को <code>1</code>, इस पर निर्भर <code>X</code> प्रारंभ में बाध्य था (ध्यान दें कि मानक प्रोलॉग बाएं से दाएं क्रम में लक्ष्यों को निष्पादित करता है)।
:: <kbd>H :- Body<sub>k</sub>
 
[[कीथ क्लार्क (कंप्यूटर वैज्ञानिक)]] [1978] तक विफलता के रूप में नकारात्मकता की तार्किक स्थिति अनसुलझी थी, यह दिखाया कि, कुछ प्राकृतिक परिस्थितियों में, यह प्रोग्राम के पूरा होने के संबंध में शास्त्रीय निषेध का एक सही (और कभी-कभी पूर्ण) कार्यान्वयन है। पूर्णता की मात्रा मोटे तौर पर बाएं हाथ की ओर एक ही विधेय के साथ सभी प्रोग्राम क्लॉज के समूह के संबंध में है, कहते हैं
 
:<kbd>:- शरीर<sub>1</sub>।</केबीडी>
:<kbd> …</kbd>
:<kbd>:- शरीर<sub>k</sub>।</केबीडी>


विधेय की परिभाषा के रूप में
विधेय की परिभाषा के रूप में


:<kbd>H iff (बॉडी<sub>1</sub> या या शरीर<sub>k</sub>)</केबीडी>
:<kbd>H iff (Body<sub>1</sub> or or Body<sub>k</sub>)


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


उदाहरण के लिए, उपरोक्त प्रोग्राम का पूरा होना है:
उदाहरण के लिए, उपरोक्त प्रोग्राम का पूरा होना है:


:<kbd>canfly(X) iff पक्षी(X), असामान्य नहीं(X).</kbd>
:<syntaxhighlight lang="c">
:<kbd>असामान्य(X) यदि घायल हो(X).</kbd>
canfly(X) iff bird(X), not abnormal(X).
:<kbd> पक्षी (एक्स) iff एक्स = जॉन या एक्स = मैरी।</kbd>
abnormal(X) iff wounded(X).
:<kbd> एक्स = एक्स। </kbd>
bird(X) iff X = john or X = mary.
:<kbd> नहीं जॉन = मैरी।</kbd>
X = X.
:<kbd> नॉट मैरी = जॉन।</kbd>
not john = mary.
not mary = john.
</syntaxhighlight>


पूर्णता की धारणा डिफ़ॉल्ट तर्क के लिए मैककार्थी के [[परिधि (तर्क)]]तर्क) शब्दार्थ और बंद दुनिया की धारणा से निकटता से संबंधित है।
पूर्णता की धारणा डिफ़ॉल्ट तर्क के लिए मैककार्थी के [[परिधि (तर्क)]]तर्क) शब्दार्थ और बंद दुनिया की धारणा से निकटता से संबंधित है।


पूर्ण होने वाले शब्दार्थ के विकल्प के रूप में, विफलता के रूप में निषेध को भी ज्ञानात्मक रूप से व्याख्या किया जा सकता है, जैसा कि उत्तर समूह प्रोग्रामिंग के [[स्थिर मॉडल शब्दार्थ]] में है। इस व्याख्या में नहीं(बी<sub>i</sub>) का शाब्दिक अर्थ है कि बी<sub>i</sub> ज्ञात नहीं है या विश्वास नहीं है। महामारी की व्याख्या का लाभ यह है कि इसे शास्त्रीय निषेध के साथ बहुत सरलता से जोड़ा जा सकता है, जैसा कि विस्तारित तर्क प्रोग्रामिंग में, ऐसे वाक्यांशों को औपचारिक रूप देने के लिए इसके विपरीत नहीं दिखाया जा सकता है, जहां इसके विपरीत शास्त्रीय निषेध है और नहीं दिखाया जा सकता है असफलता के रूप में निषेध।
पूर्ण होने वाले शब्दार्थ के विकल्प के रूप में, विफलता के रूप में निषेध को भी ज्ञानात्मक रूप से व्याख्या किया जा सकता है, जैसा कि उत्तर समूह प्रोग्रामिंग के [[स्थिर मॉडल शब्दार्थ]] में है। इस व्याख्या में नहीं(B<sub>i</sub>) का शाब्दिक अर्थ है कि B<sub>i</sub> ज्ञात नहीं है या विश्वास नहीं है। महामारी की व्याख्या का लाभ यह है कि इसे मौलिक निषेध के साथ बहुत सरलता से जोड़ा जा सकता है, जैसा कि विस्तारित तर्क प्रोग्रामिंग में, ऐसे वाक्यांशों को औपचारिक रूप देने के लिए इसके विपरीत नहीं दिखाया जा सकता है, जहां इसके विपरीत मौलिक निषेध है और नहीं दिखाया जा सकता है असफलता के रूप में निषेध होता है।


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


शास्त्रीय तर्क की तुलना में इसकी सादगी के बावजूद, हार्न क्लॉज और असफलता के रूप में निषेध का यह संयोजन आश्चर्यजनक रूप से अभिव्यंजक साबित हुआ है। उदाहरण के लिए, यह कारण और प्रभाव के सामान्य ज्ञान के कानूनों के लिए एक प्राकृतिक प्रतिनिधित्व प्रदान करता है, जैसा कि स्थिति कलन और घटना कलन दोनों द्वारा औपचारिक रूप से किया गया है। यह कानून की अर्ध-औपचारिक भाषा के काफी स्वाभाविक रूप से अनुरूप होने के लिए भी दिखाया गया है। विशेष रूप से, प्राकेन और सार्टोर<ref>{{cite journal|last1=Prakken|first1=H.|last2=Sartor|first2=G.|date=October 2015|url=http://www.cs.uu.nl/groups/IS/archive/henry/ReviewLogicAndLawRevised.pdf|title=Law and logic: a review from an argumentation perspective|journal=[[Artificial Intelligence (journal)|Artificial Intelligence]]|volume=227|pages=214–245|doi=10.1016/j.artint.2015.06.005|s2cid=4261497 }}</ref> तर्क प्रोग्राम के रूप में ब्रिटिश राष्ट्रीयता अधिनियम के प्रतिनिधित्व का श्रेय<ref>{{cite journal|last1=Sergot|first1=M.J.|last2=Sadri|first2=F.|last3=Kowalski|first3=R.A.|last4=Kriwaczek|first4=F.|last5=Hammond|first5=P|last6=Cory|first6=H.T.|date=1986|url=http://www.doc.ic.ac.uk/~rak/papers/British%20Nationality%20Act.pdf|title=The British Nationality Act as a logic program|journal=[[Communications of the ACM]]|volume=29|issue=5|pages=370–386|doi=10.1145/5689.5920 |s2cid=5665107 }}</ref> कानून के कम्प्यूटेशनल अभ्यावेदन के विकास के लिए बेहद प्रभावशाली होने के साथ, यह दर्शाता है कि कैसे तर्क प्रोग्रामिंग सहज रूप से आकर्षक अभ्यावेदन को सक्षम बनाता है जिसे सीधे स्वचालित संदर्भ उत्पन्न करने के लिए तैनात किया जा सकता है।
मौलिक तर्क की तुलना में इसकी सादगी के बावजूद, हार्न क्लॉज और असफलता के रूप में निषेध का यह संयोजन आश्चर्यजनक रूप से अभिव्यंजक सिद्ध हुआ है। उदाहरण के लिए, यह कारण और प्रभाव के सामान्य ज्ञान के नियमों के लिए एक प्राकृतिक प्रतिनिधित्व प्रदान करता है, जैसा कि स्थिति कलन और घटना कलन दोनों द्वारा औपचारिक रूप से किया गया है। यह नियम की अर्ध-औपचारिक भाषा के अधिक स्वाभाविक रूप से अनुरूप होने के लिए भी दिखाया गया है। विशेष रूप से, प्राकेन और सार्टोर<ref>{{cite journal|last1=Prakken|first1=H.|last2=Sartor|first2=G.|date=October 2015|url=http://www.cs.uu.nl/groups/IS/archive/henry/ReviewLogicAndLawRevised.pdf|title=Law and logic: a review from an argumentation perspective|journal=[[Artificial Intelligence (journal)|Artificial Intelligence]]|volume=227|pages=214–245|doi=10.1016/j.artint.2015.06.005|s2cid=4261497 }}</ref> तर्क प्रोग्राम के रूप में ब्रिटिश राष्ट्रीयता अधिनियम के प्रतिनिधित्व का श्रेय<ref>{{cite journal|last1=Sergot|first1=M.J.|last2=Sadri|first2=F.|last3=Kowalski|first3=R.A.|last4=Kriwaczek|first4=F.|last5=Hammond|first5=P|last6=Cory|first6=H.T.|date=1986|url=http://www.doc.ic.ac.uk/~rak/papers/British%20Nationality%20Act.pdf|title=The British Nationality Act as a logic program|journal=[[Communications of the ACM]]|volume=29|issue=5|pages=370–386|doi=10.1145/5689.5920 |s2cid=5665107 }}</ref> नियम के कम्प्यूटेशनल अभ्यावेदन के विकास के लिए बेहद प्रभावशाली होने के साथ, यह दर्शाता है कि कैसे तर्क प्रोग्रामिंग सहज रूप से आकर्षक अभ्यावेदन को सक्षम बनाता है जिसे सीधे स्वचालित संदर्भ उत्पन्न करने के लिए नियत किया जा सकता है।


== वेरिएंट और एक्सटेंशन ==
== वेरिएंट और एक्सटेंशन ==


=== प्रोलॉग ===
=== प्रोलॉग ===
{{Main|Prolog}}
{{Main|प्रोलॉग}}
प्रोग्रामिंग भाषा प्रोलॉग को 1972 में Alain Colmerauer द्वारा विकसित किया गया था। यह एडिनबर्ग में [[मारसैल]] में कोलमेरौयर और रॉबर्ट कोवाल्स्की के बीच एक सहयोग से उभरा। Colmerauer [[प्राकृतिक भाषा की समझ]] पर काम कर रहा था, शब्दार्थ का प्रतिनिधित्व करने के लिए तर्क का उपयोग कर रहा था और प्रश्न-उत्तर के लिए संकल्प का उपयोग कर रहा था। 1971 की गर्मियों के दौरान, Colmerauer और Kowalski ने पाया कि [[औपचारिक व्याकरण]] का प्रतिनिधित्व करने के लिए तर्क के क्लौसल रूप का उपयोग किया जा सकता है और संकल्प प्रमेय का उपयोग पार्सिंग के लिए किया जा सकता है। उन्होंने देखा कि कुछ प्रमेय सिद्ध करने वाले, जैसे हाइपर-रिज़ॉल्यूशन, बॉटम-अप पार्सर के रूप में व्यवहार करते हैं और अन्य, जैसे SLD रिज़ॉल्यूशन | SL-रेज़ोल्यूशन (1971), टॉप-डाउन पार्सर के रूप में व्यवहार करते हैं।
 
प्रोग्रामिंग भाषा प्रोलॉग को 1972 में एलेन कोलमेरॉयर द्वारा विकसित किया गया था। यह एडिनबर्ग में [[मारसैल]] में कोलमेरौयर और रॉबर्ट कोवाल्स्की के बीच एक सहयोग से उभरा। एकोलमेरॉयर [[प्राकृतिक भाषा की समझ]] पर काम कर रहा था, शब्दार्थ का प्रतिनिधित्व करने के लिए तर्क का उपयोग कर रहा था और प्रश्न-उत्तर के लिए संकल्प का उपयोग कर रहा था। 1971 की गर्मियों के समय, कोलमेरॉयर और कोवालास्की ने पाया कि [[औपचारिक व्याकरण]] का प्रतिनिधित्व करने के लिए तर्क के क्लौसल रूप का उपयोग किया जा सकता है और संकल्प प्रमेय का उपयोग पार्सिंग के लिए किया जा सकता है। उन्होंने देखा कि कुछ प्रमेय सिद्ध करने वाले, जैसे हाइपर-रिज़ॉल्यूशन, बॉटम-अप पार्सर के रूप में व्यवहार करते हैं और अन्य, जैसे एसएलडी रिज़ॉल्यूशन एसएल-रेज़ोल्यूशन (1971), टॉप-डाउन पार्सर के रूप में व्यवहार करते हैं।


यह 1972 की अगली गर्मियों में था, कि कोवाल्स्की ने, फिर से कोलमेरॉयर के साथ काम करते हुए, निहितार्थों की प्रक्रियात्मक व्याख्या विकसित की। यह दोहरी घोषणात्मक/प्रक्रियात्मक व्याख्या बाद में प्रोलॉग नोटेशन में औपचारिक हो गई
यह 1972 की अगली गर्मियों में था, कि कोवाल्स्की ने, फिर से कोलमेरॉयर के साथ काम करते हुए, निहितार्थों की प्रक्रियात्मक व्याख्या विकसित की। यह दोहरी घोषणात्मक/प्रक्रियात्मक व्याख्या बाद में प्रोलॉग नोटेशन में औपचारिक हो गई


:<kbd>एच :- बी<sub>1</sub>, …, बी<sub>n</sub>।</केबीडी>
:<kbd>H :- B<sub>1</sub>, …, B<sub>n</sub>


जिसे घोषणात्मक और प्रक्रियात्मक दोनों तरह से पढ़ा (और इस्तेमाल) किया जा सकता है। यह भी स्पष्ट हो गया कि ऐसे खंड निश्चित खंडों या हॉर्न खंडों तक सीमित हो सकते हैं, जहां <kbd>H</kbd>, <kbd>B<sub>1</sub></kbd>, ..., <kbd>बी<sub>n</sub></kbd> सभी परमाणु विधेय तर्क सूत्र हैं, और SL-रिज़ॉल्यूशन को LUSH या SLD रिज़ॉल्यूशन तक सीमित (और सामान्यीकृत) किया जा सकता है। SLD- रिज़ॉल्यूशन। 1974 में प्रकाशित 1973 मेमो में कोवाल्स्की की प्रक्रियात्मक व्याख्या और LUSH का वर्णन किया गया था।<ref name="Kowalski" />
जिसे घोषणात्मक और प्रक्रियात्मक दोनों तरह से पढ़ा (और उपयोग) किया जा सकता है। यह भी स्पष्ट हो गया कि ऐसे खंड निश्चित खंडों या हॉर्न खंडों तक सीमित हो सकते हैं, जहां <kbd>H</kbd>, <kbd>B<sub>1</sub></kbd>, ..., <kbd>B<sub>n</sub></kbd> सभी परमाणु विधेय तर्क सूत्र हैं, और एसएल-रिज़ॉल्यूशन को एलयूएसएच या एसएलडी रिज़ॉल्यूशन तक सीमित (और सामान्यीकृत) किया जा सकता है। एसएलडी- रिज़ॉल्यूशन। 1974 में प्रकाशित 1973 मेमो में कोवाल्स्की की प्रक्रियात्मक व्याख्या और एलयूएसएच का वर्णन किया गया था।<ref name="Kowalski" />


कोलमेरौएर, फिलिप रसेल के साथ, प्रोलॉग के आधार के रूप में खंडों की इस दोहरी व्याख्या का उपयोग किया, जिसे 1972 की गर्मियों और शरद ऋतु में लागू किया गया था। पहला प्रोलॉग प्रोग्राम, जिसे 1972 में भी लिखा गया था और मार्सिले में लागू किया गया था, एक फ्रांसीसी प्रश्न-उत्तर प्रणाली थी। . एक व्यावहारिक प्रोग्रामिंग भाषा के रूप में प्रोलॉग के उपयोग को 1977 में एडिनबर्ग में डेविड वारेन द्वारा एक कंपाइलर के विकास से काफी गति मिली। प्रयोगों ने प्रदर्शित किया कि एडिनबर्ग प्रोलॉग अन्य [[प्रतीकात्मक प्रोग्रामिंग]] भाषाओं जैसे [[लिस्प (प्रोग्रामिंग भाषा)]] की प्रसंस्करण गति के साथ प्रतिस्पर्धा कर सकता है। . एडिनबर्ग प्रोलॉग वास्तविक मानक बन गया और मानकीकरण मानक प्रोलॉग के लिए अंतर्राष्ट्रीय संगठन की परिभाषा को दृढ़ता से प्रभावित किया।
कोलमेरौएर, फिलिप रसेल के साथ, प्रोलॉग के आधार के रूप में खंडों की इस दोहरी व्याख्या का उपयोग किया, जिसे 1972 की गर्मियों और शरद ऋतु में लागू किया गया था। पहला प्रोलॉग प्रोग्राम, जिसे 1972 में भी लिखा गया था और मार्सिले में लागू किया गया था, एक फ्रांसीसी प्रश्न-उत्तर प्रणाली थी। एक व्यावहारिक प्रोग्रामिंग भाषा के रूप में प्रोलॉग के उपयोग को 1977 में एडिनबर्ग में डेविड वारेन द्वारा एक कंपाइलर के विकास से अधिक गति मिली। प्रयोगों ने प्रदर्शित किया कि एडिनबर्ग प्रोलॉग अन्य [[प्रतीकात्मक प्रोग्रामिंग]] भाषाओं जैसे [[लिस्प (प्रोग्रामिंग भाषा)]] की प्रसंस्करण गति के साथ प्रतिस्पर्धा कर सकता है। एडिनबर्ग प्रोलॉग वास्तविक मानक बन गया और मानकीकरण मानक प्रोलॉग के लिए अंतर्राष्ट्रीय संगठन की परिभाषा को दृढ़ता से प्रभावित किया था।


=== अपवर्तक तर्क प्रोग्रामिंग ===
=== अपवर्तक तर्क प्रोग्रामिंग ===
[[अपहरण तर्क प्रोग्रामिंग]] सामान्य तर्क प्रोग्रामिंग का एक विस्तार है जो कुछ विधेय की अनुमति देता है, जिसे अपवर्तक विधेय के रूप में घोषित किया जाता है, खुले या अपरिभाषित होने के लिए। अपहरणात्मक तर्क प्रोग्राम में एक खंड का रूप है:
[[अपहरण तर्क प्रोग्रामिंग]] सामान्य तर्क प्रोग्रामिंग का एक विस्तार है जो कुछ विधेय की अनुमति देता है, जिसे अपवर्तक विधेय के रूप में घोषित किया जाता है, खुले या अपरिभाषित होने के लिए, अपहरणात्मक तर्क प्रोग्राम में एक खंड का रूप है:


:<kbd>एच :- बी<sub>1</sub>, …, बी<sub>n</sub>, <sub>1</sub>, …, <sub>n</sub>।</केबीडी>
:<kbd>H :- B<sub>1</sub>, …, B<sub>n</sub>, A<sub>1</sub>, …, A<sub>n</sub>


जहाँ <kbd>H</kbd> एक परमाणु सूत्र है जो अपचनीय नहीं है, सभी <kbd>B<sub>i</sub></kbd> शाब्दिक हैं जिनके विधेय अपवर्त्य नहीं हैं, और <kbd>A<sub>i</sub></kbd> परमाणु सूत्र हैं जिनके विधेय अपचनीय हैं। अपवर्तक विधेय को अखंडता की कमी से विवश किया जा सकता है, जिसका रूप हो सकता है:
जहाँ <kbd>H</kbd> एक परमाणु सूत्र है जो अपचनीय नहीं है, सभी <kbd>B<sub>i</sub></kbd> शाब्दिक हैं जिनके विधेय अपवर्त्य नहीं हैं, और <kbd>A<sub>i</sub></kbd> परमाणु सूत्र हैं जिनके विधेय अपचनीय हैं। अपवर्तक विधेय को अखंडता की कमी से विवश किया जा सकता है, जिसका रूप हो सकता है:


:<kbd>false :- एल<sub>1</sub>, …, एल<sub>n</sub>।</केबीडी>
:<kbd>false :- L<sub>1</sub>, …, L<sub>n</sub>


जहां <kbd>L<sub>i</sub></kbd> मनमाने शाब्दिक (परिभाषित या अपवर्तक, और परमाणु या अस्वीकृत) हैं। उदाहरण के लिए:
जहां <kbd>L<sub>i</sub></kbd> मनमाने शाब्दिक (परिभाषित या अपवर्तक, और परमाणु या अस्वीकृत) हैं। उदाहरण के लिए:<syntaxhighlight lang="c">
canfly(X) :- bird(X), normal(X).
false :- normal(X), wounded(X).
bird(john).
bird(mary).
wounded(john).
</syntaxhighlight>जहां विधेय <kbd>सामान्य</kbd> अपचनीय है।


<वाक्यविन्यास लैंग = प्रोलॉग>
समस्या-समाधान को हल की जाने वाली समस्याओं के समाधान के रूप में अपवर्तक विधेय के संदर्भ में व्यक्त की गई परिकल्पनाओं को प्राप्त करके प्राप्त किया जाता है। ये समस्याएं या तो अवलोकन हो सकती हैं जिन्हें समझाया जाना चाहिए (जैसा कि मौलिक अपहरण तर्क के रूप में) या हल किए जाने वाले लक्ष्य (सामान्य तर्क प्रोग्रामिंग के रूप में) उदाहरण के लिए, परिकल्पना <kbd>सामान्य(मैरी)</kbd> अवलोकन <kbd>कैनफ्लाई(मैरी)</kbd> की व्याख्या करती है। इसके अतिरिक्त, वही परिकल्पना कुछ ऐसा खोजने के लक्ष्य के <kbd>X = मैरी</kbd> एकमात्र समाधान पर जोर देती है जो उड़ सकता है:<syntaxhighlight lang="c">
canfly(X) :- पक्षी(X), सामान्य(X).
:- canfly(X).
मिथ्या :- सामान्य (एक्स), घायल (एक्स)।
</syntaxhighlight>अपवर्तक तर्क प्रोग्रामिंग का उपयोग दोष निदान, योजना, प्राकृतिक भाषा प्रसंस्करण और मशीन सीखने के लिए किया गया है। इसका उपयोग अपहरण के तर्क के रूप में विफलता के रूप में नकारात्मकता की व्याख्या करने के लिए भी किया गया है।
पक्षी (जॉन)।
पक्षी (मैरी)।
घायल (जॉन)।
</वाक्यविन्यास हाइलाइट>
 
जहां विधेय <kbd>सामान्य</kbd> अपचनीय है।
 
समस्या-समाधान को हल की जाने वाली समस्याओं के समाधान के रूप में अपवर्तक विधेय के संदर्भ में व्यक्त की गई परिकल्पनाओं को प्राप्त करके प्राप्त किया जाता है। ये समस्याएं या तो अवलोकन हो सकती हैं जिन्हें समझाया जाना चाहिए (जैसा कि शास्त्रीय अपहरण तर्क के रूप में) या हल किए जाने वाले लक्ष्य (सामान्य तर्क प्रोग्रामिंग के रूप में)उदाहरण के लिए, परिकल्पना <kbd>सामान्य(मैरी)</kbd> अवलोकन <kbd>canfly(mary)</kbd> की व्याख्या करती है। इसके अलावा, वही परिकल्पना कुछ ऐसा खोजने के लक्ष्य के <kbd>X = mary</kbd> एकमात्र समाधान पर जोर देती है जो उड़ सकता है:
 
<वाक्यविन्यास लैंग = प्रोलॉग>
:- कैनफ्लाई (एक्स)
</वाक्यविन्यास हाइलाइट>
 
अपवर्तक तर्क प्रोग्रामिंग का उपयोग दोष निदान, योजना, प्राकृतिक भाषा प्रसंस्करण और मशीन सीखने के लिए किया गया है। इसका उपयोग अपहरण के तर्क के रूप में विफलता के रूप में नकारात्मकता की व्याख्या करने के लिए भी किया गया है।


=== मेटातर्क प्रोग्रामिंग ===
=== मेटातर्क प्रोग्रामिंग ===
क्योंकि गणितीय तर्क में वस्तु भाषा और [[धातु भाषा]] के बीच अंतर करने की एक लंबी परंपरा है, तर्क प्रोग्रामिंग भी विक्षनरी: मेटालेवल प्रोग्रामिंग की अनुमति देता है। सबसे सरल मेटालोगिक प्रोग्राम तथाकथित वैनिला (कंप्यूटिंग) मेटा-इंटरप्रेटर है:
क्योंकि गणितीय तर्क में वस्तु भाषा और [[धातु भाषा]] के बीच अंतर करने की एक लंबी परंपरा है, तर्क प्रोग्रामिंग भी विक्षनरी: मेटालेवल प्रोग्रामिंग की अनुमति देता है। सबसे सरल मेटालोगिक प्रोग्राम तथाकथित वैनिला (कंप्यूटिंग) मेटा-इंटरप्रेटर है:<syntaxhighlight lang="c">
solve(true).
    solve((A,B)):- solve(A),solve(B).
    solve(A):- clause(A,B),solve(B).
</syntaxhighlight>जहां सत्य एक खाली संयोजन का प्रतिनिधित्व करता है, और खंड (ए, बी) का अर्थ है कि फॉर्म ए का ऑब्जेक्ट-स्तरीय खंड B है।


<वाक्यविन्यास लैंग = प्रोलॉग>
मेटतर्क प्रोग्रामिंग ऑब्जेक्ट-लेवल और मेटालेवल प्रस्तुतियों को प्राकृतिक भाषा के रूप में संयोजित करने की अनुमति देता है। इसका उपयोग किसी भी तर्क को लागू करने के लिए भी किया जा सकता है जिसे [[अनुमान नियम]] के रूप में निर्दिष्ट किया गया है। मेटालॉगिक का उपयोग तर्क प्रोग्रामिंग में मेटाप्रोग्राम को लागू करने के लिए किया जाता है, जो डेटा के रूप में अन्य प्रोग्राम, डेटाबेस, नॉलेज बेस या स्वयंसिद्ध सिद्धांतों में हेरफेर करता है।
    हल (सच)।
    हल ((ए, बी)): - हल (ए), हल (बी)।
    हल (ए): - खंड (ए, बी), हल (बी)।
</वाक्यविन्यास हाइलाइट>
 
जहां सत्य एक खाली संयोजन का प्रतिनिधित्व करता है, और खंड (ए, बी) का अर्थ है कि फॉर्म ए का ऑब्जेक्ट-स्तरीय खंड है: - बी।
 
मेटतर्क प्रोग्रामिंग ऑब्जेक्ट-लेवल और मेटालेवल प्रस्तुतियों को प्राकृतिक भाषा के रूप में संयोजित करने की अनुमति देता है। इसका उपयोग किसी भी तर्क को लागू करने के लिए भी किया जा सकता है जिसे [[अनुमान नियम]]ों के रूप में निर्दिष्ट किया गया है। मेटालॉगिक का उपयोग तर्क प्रोग्रामिंग में मेटाप्रोग्राम को लागू करने के लिए किया जाता है, जो डेटा के रूप में अन्य प्रोग्राम, डेटाबेस, नॉलेज बेस या स्वयंसिद्ध सिद्धांतों में हेरफेर करता है।


=== बाधा तर्क प्रोग्रामिंग ===
=== बाधा तर्क प्रोग्रामिंग ===
{{Main|Constraint logic programming}}
{{Main|कंस्ट्रेंट तर्क प्रोग्रामिंग}}
बाधा तर्क प्रोग्रामिंग [[बाधा समाधान]] के साथ हॉर्न खंड तर्क प्रोग्रामिंग को जोड़ती है। यह कुछ विधेय, बाधा विधेय के रूप में घोषित, खंडों के शरीर में शाब्दिक के रूप में होने की अनुमति देकर हॉर्न क्लॉज का विस्तार करता है। एक बाधा तर्क प्रोग्राम प्रपत्र के खंड का एक समूह है:
बाधा तर्क प्रोग्रामिंग [[बाधा समाधान]] के साथ हॉर्न खंड तर्क प्रोग्रामिंग को जोड़ती है। यह कुछ विधेय, बाधा विधेय के रूप में घोषित, खंडों के शरीर में शाब्दिक के रूप में होने की अनुमति देकर हॉर्न क्लॉज का विस्तार करता है। एक बाधा तर्क प्रोग्राम प्रपत्र के खंड का एक समूह है:


:<kbd>एच:-सी<sub>1</sub>, …, सी<sub>n</sub> ◊ बी<sub>1</sub>, …, बी<sub>n</sub>।</केबीडी>
:<kbd>H :- C<sub>1</sub>, …, C<sub>n</sub> ◊ B<sub>1</sub>, …, B<sub>n</sub>


जहां <kbd>H</kbd> और सभी <kbd>B<sub>i</sub></kbd> परमाणु सूत्र हैं, और <kbd>C<sub>i</sub></kbd> बाधाएँ हैं। घोषणात्मक रूप से, ऐसे खंड सामान्य तार्किक प्रभाव के रूप में पढ़े जाते हैं:
जहां <kbd>H</kbd> और सभी <kbd>B<sub>i</sub></kbd> परमाणु सूत्र हैं, और <kbd>C<sub>i</sub></kbd> बाधाएँ हैं। घोषणात्मक रूप से, ऐसे खंड सामान्य तार्किक प्रभाव के रूप में पढ़े जाते हैं:


:<kbd>एच अगर सी<sub>1</sub> और और सी<sub>n</sub> और बी<sub>1</sub> और और बी<sub>n</sub>।</केबीडी>
:<kbd>H if C<sub>1</sub> and and C<sub>n</sub> and B<sub>1</sub> and and B<sub>n</sub>


हालांकि, जबकि खंडों के प्रमुखों में विधेय को बाधा तर्क प्रोग्राम द्वारा परिभाषित किया गया है, बाधाओं में विधेय कुछ डोमेन-विशिष्ट मॉडल-सैद्धांतिक संरचना या सिद्धांत द्वारा पूर्वनिर्धारित हैं।
चूंकि, जबकि खंडों के प्रमुखों में विधेय को बाधा तर्क प्रोग्राम द्वारा परिभाषित किया गया है, बाधाओं में विधेय कुछ डोमेन-विशिष्ट मॉडल-सैद्धांतिक संरचना या सिद्धांत द्वारा पूर्वनिर्धारित हैं।


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


निम्नलिखित बाधा तर्क प्रोग्राम एक शिक्षक के रूप में <kbd>जॉन के</kbd> इतिहास के खिलौना अस्थायी डेटाबेस का प्रतिनिधित्व करता है:
निम्नलिखित बाधा तर्क प्रोग्राम एक शिक्षक के रूप में <kbd>जॉन के</kbd> इतिहास के खिलौना अस्थायी डेटाबेस का प्रतिनिधित्व करता है:<syntaxhighlight lang="c">
<वाक्यविन्यास लैंग = प्रोलॉग>
teaches(john, hardware, T) :- 1990 ≤ T, T < 1999.
सिखाता है (जॉन, हार्डवेयर, टी): - 1990 ≤ टी, टी <1999।
teaches(john, software, T) :- 1999 ≤ T, T < 2005.
सिखाता है (जॉन, सॉफ्टवेयर, टी): - 1999 ≤ टी, टी <2005।
teaches(john, logic, T) :- 2005 ≤ T, T 2012.
सिखाता है (जॉन, तर्क, टी): - 2005 ≤ टी, टी 2012।
rank(john, instructor, T) :- 1990 ≤ T, T < 2010.
रैंक (जॉन, इंस्ट्रक्टर, टी): - 1990 ≤ टी, टी <2010।
rank(john, professor, T) :- 2010 ≤ T, T < 2014.
रैंक (जॉन, प्रोफेसर, टी): - 2010 ≤ टी, टी <2014।
</syntaxhighlight>यहाँ <kbd>≤</kbd> और <kbd><</kbd> कंस्ट्रेंट प्रेडिकेट हैं, उनके सामान्य अर्थ के साथ। निम्न लक्ष्य खंड डेटाबेस से यह पता लगाने के लिए पूछताछ करता है कि <kbd>जॉन</kbd> दोनों ने कब <kbd>तर्क</kbd> पढ़ाया और <kbd>प्रोफेसर</kbd> थे:
</वाक्यविन्यास हाइलाइट>
यहाँ <kbd>≤</kbd> और <kbd><</kbd> कंस्ट्रेंट प्रेडिकेट हैं, उनके सामान्य अर्थ के साथ। निम्न लक्ष्य खंड डेटाबेस से यह पता लगाने के लिए पूछताछ करता है कि <kbd>जॉन</kbd> दोनों ने कब <kbd>तर्क</kbd> पढ़ाया और <kbd>प्रोफेसर</kbd> थे:


:<kbd>:- पढ़ाता है (जॉन, तर्क, टी), रैंक (जॉन, प्रोफेसर, टी)</kbd>
:<kbd>:- teaches(john, logic, T), rank(john, professor, T)</kbd>


समाधान <kbd>2010 ≤ T, T ≤ 2012</kbd> है।
समाधान <kbd>2010 ≤ T, T ≤ 2012</kbd> है।
Line 229: Line 209:


=== समवर्ती तर्क प्रोग्रामिंग ===
=== समवर्ती तर्क प्रोग्रामिंग ===
{{Main|Concurrent logic programming}}
{{Main|समवर्ती तर्क प्रोग्रामिंग}}
समवर्ती तर्क प्रोग्रामिंग [[समवर्ती प्रोग्रामिंग]] के साथ तर्क प्रोग्रामिंग की अवधारणाओं को एकीकृत करती है। इसके विकास को 1980 के दशक में पाँचवीं पीढ़ी के कंप्यूटर की सिस्टम प्रोग्रामिंग भाषा के लिए अपनी पसंद से एक बड़ी प्रेरणा दी गई थी। जापानी पाँचवीं पीढ़ी परियोजना (FGCS)।<ref>Shunichi Uchida and Kazuhiro Fuchi. ''Proceedings of the FGCS Project Evaluation Workshop''. Institute for New Generation Computer Technology (ICOT). 1992.</ref>
समवर्ती तर्क प्रोग्रामिंग [[समवर्ती प्रोग्रामिंग]] के साथ तर्क प्रोग्रामिंग की अवधारणाओं को एकीकृत करती है। इसके विकास को 1980 के दशक में पाँचवीं पीढ़ी के कंप्यूटर की प्रणाली प्रोग्रामिंग भाषा के लिए अपनी पसंद से एक बड़ी प्रेरणा दी गई थी। जापानी पाँचवीं पीढ़ी परियोजना (एफजीसीएस)।<ref>Shunichi Uchida and Kazuhiro Fuchi. ''Proceedings of the FGCS Project Evaluation Workshop''. Institute for New Generation Computer Technology (ICOT). 1992.</ref>
 
एक समवर्ती तर्क प्रोग्राम फॉर्म के संरक्षित [[हॉर्न क्लॉज]] का एक समूह है:
एक समवर्ती तर्क प्रोग्राम फॉर्म के संरक्षित [[हॉर्न क्लॉज]] का एक समूह है:


::<kbd>:- जी<sub>1</sub>, …, जी<sub>n</sub> | बी<sub>1</sub>, …, बी<sub>n</sub>।</केबीडी>
::<kbd>H :- G<sub>1</sub>, …, G<sub>n</sub> | B<sub>1</sub>, …, B<sub>n</sub>
 
संयोजन <kbd>G<sub>1</sub>, ... , जी<sub>n</sub></kbd> को क्लॉज का [[गार्ड (कंप्यूटिंग)]] कहा जाता है, और <kbd> | </kbd> कमिटमेंट ऑपरेटर है। घोषणात्मक रूप से, संरक्षित हॉर्न क्लॉज को सामान्य तार्किक प्रभाव के रूप में पढ़ा जाता है:
 
::<kbd>एच अगर जी<sub>1</sub> और ... और जी<sub>n</sub> और बी<sub>1</sub> और … और बी<sub>n</sub>।</केबीडी>
 
हालाँकि, प्रक्रियात्मक रूप से, जब कई खंड होते हैं जिनके सिर <kbd> H </kbd> दिए गए लक्ष्य से मेल खाते हैं, तो सभी खंडों को समानांतर में निष्पादित किया जाता है, यह जाँचते हुए कि क्या उनके गार्ड <kbd>G हैं<sub>1</sub>, ... , जी<sub>n</sub></kbd> होल्ड करें। यदि एक से अधिक क्लॉज के गार्ड होल्ड करते हैं, तो क्लॉज में से एक के लिए एक प्रतिबद्ध विकल्प बनाया जाता है, और सबगोल्स <kbd> B के साथ निष्पादन आगे बढ़ता है<sub>1</sub>, ..., बी<sub>n</sub>चुने गए खंड का </kbd>। इन उप-लक्ष्यों को समानांतर में भी क्रियान्वित किया जा सकता है। इस प्रकार समवर्ती तर्क प्रोग्रामिंग नॉनडेटर्मिनिज्म को न जानने के बजाय नॉन-डेटर्मिनिज्म के एक रूप को लागू करता है।
 
उदाहरण के लिए, निम्नलिखित समवर्ती तर्क प्रोग्राम एक विधेय <kbd> shuffle(Left, Right, Merge) </kbd> को परिभाषित करता है, जिसका उपयोग दो सूचियों <kbd>Left</kbd> और <kbd>Right</kbd> को शफल करने के लिए किया जा सकता है। kbd>, उन्हें एक सूची <kbd>मर्ज</kbd> में मिलाकर जो दो सूचियों <kbd>बाएं</kbd> और <kbd>दाएं</kbd> के क्रम को सुरक्षित रखता है:
 
<वाक्यविन्यास लैंग = प्रोलॉग>
फेरबदल ([], [], [])।
शफल (बाएं, दाएं, मर्ज) :-
    वाम = [पहला | आराम] |
    मर्ज = [प्रथम | शॉर्टमर्ज],
    शफल (रेस्ट, राइट, शॉर्टमर्ज)।
शफल (बाएं, दाएं, मर्ज) :-
    दाहिना = [पहला | आराम] |
    मर्ज = [प्रथम | शॉर्टमर्ज],
    शफल (बाएं, आराम, शॉर्टमर्ज)।
</वाक्यविन्यास हाइलाइट>
 
यहाँ, <kbd>[]</kbd> खाली सूची का प्रतिनिधित्व करता है, और <kbd>[Head | टेल] </kbd> पहले तत्व <kbd>Head</kbd> के साथ एक सूची का प्रतिनिधित्व करता है, जिसके बाद सूची <kbd>Tail</kbd> होती है, जैसा कि प्रोलॉग में है। (ध्यान दें कि दूसरे और तीसरे क्लॉज में <kbd> | </kbd> की पहली घटना लिस्ट कंस्ट्रक्टर है, जबकि <kbd> | </kbd> की दूसरी घटना कमिटमेंट ऑपरेटर है।) प्रोग्राम का उपयोग किया जा सकता है , उदाहरण के लिए, <kbd>[ऐस, रानी, ​​​​राजा]</kbd> और <kbd>[1, 4, 2]</kbd> लक्ष्य खंड का आह्वान करके सूचियों में फेरबदल करने के लिए:


<वाक्यविन्यास लैंग = प्रोलॉग>
संयोजन <kbd>G<sub>1</sub>, ... , G<sub>n</sub></kbd> को क्लॉज का [[गार्ड (कंप्यूटिंग)]] कहा जाता है, और कमिटमेंट ऑपरेटर है। घोषणात्मक रूप से, संरक्षित हॉर्न क्लॉज को सामान्य तार्किक प्रभाव के रूप में पढ़ा जाता है:
फेरबदल ([इक्का, रानी, ​​​​राजा], [1, 4, 2], मर्ज)।
</वाक्यविन्यास हाइलाइट>


प्रोग्राम गैर-नियतात्मक रूप से एकल समाधान उत्पन्न करेगा, उदाहरण के लिए <kbd> मर्ज = [इक्का, रानी, ​​1, राजा, 4, 2]</kbd>
::<kbd>H if G<sub>1</sub> and … and G<sub>n</sub> and B<sub>1</sub> and … and B<sub>n</sub>


यकीनन, समवर्ती तर्क प्रोग्रामिंग संदेश पासिंग पर आधारित है, इसलिए यह अन्य समवर्ती संदेश-पासिंग सिस्टमों के समान अनिश्चितता के अधीन है, जैसे [[अभिनेता मॉडल]] (समवर्ती संगणना में अनिश्चितता देखें)। कार्ल हेविट ने तर्क दिया है कि समवर्ती तर्क प्रोग्रामिंग उनके अर्थ में तर्क पर आधारित नहीं है कि कम्प्यूटेशनल चरणों को तार्किक रूप से नहीं निकाला जा सकता है।<ref name="Hewitt">{{cite web | url=https://hal.archives-ouvertes.fr/hal-01148496v6/document | title=Inconsistency Robustness for Logic Programs | publisher=Hal Archives | date=27 April 2016 | access-date=7 November 2016 | author=Hewitt, Carl | pages=21–26}}</ref> हालांकि, समवर्ती तर्क प्रोग्रामिंग में, समापन संगणना का कोई भी परिणाम प्रोग्राम का एक तार्किक परिणाम है, और आंशिक संगणना का कोई भी आंशिक परिणाम प्रोग्राम और अवशिष्ट लक्ष्य (प्रक्रिया नेटवर्क) का एक तार्किक परिणाम है। इस प्रकार संगणनाओं की अनिश्चितता का अर्थ है कि प्रोग्राम के सभी तार्किक परिणाम नहीं निकाले जा सकते हैं।{{POV statement|Hewitt|date=August 2014}}
चूंकि, प्रक्रियात्मक रूप से, जब कई खंड होते हैं जिनके सिर <kbd>H</kbd> दिए गए लक्ष्य से मेल खाते हैं, तो सभी खंडों को समानांतर में निष्पादित किया जाता है, यह जाँचते हुए कि क्या उनके गार्ड <kbd>G हैं<sub>1</sub>, ... , G<sub>n</sub></kbd> होल्ड करें यदि एक से अधिक क्लॉज के गार्ड होल्ड करते हैं, तो क्लॉज में से एक के लिए एक प्रतिबद्ध विकल्प बनाया जाता है, और सबगोल्स <kbd>B के साथ निष्पादन आगे बढ़ता H<sub>1</sub>, ..., B<sub>n</sub>चुने गए खंड का </kbd>इन उप-लक्ष्यों को समानांतर में भी क्रियान्वित किया जा सकता है। इस प्रकार समवर्ती तर्क प्रोग्रामिंग नॉनडेटर्मिनिज्म को न जानने के अतिरिक्त नॉन-डेटर्मिनिज्म के एक रूप को लागू करता है।


उदाहरण के लिए, निम्नलिखित समवर्ती तर्क प्रोग्राम एक विधेय <kbd>फेरबदल (बाएं, दाएं, मर्ज)</kbd> को परिभाषित करता है, जिसका उपयोग दो सूचियों <kbd>बाएं</kbd> और <kbd>दाएं</kbd> को शफल करने के लिए किया जा सकता है। उन्हें एक सूची <kbd>मर्ज</kbd> में मिलाकर जो दो सूचियों <kbd>बाएं</kbd> और <kbd>दाएं</kbd> के क्रम को सुरक्षित रखता है:<syntaxhighlight lang="c">
shuffle([], [], []).
shuffle(Left, Right, Merge) :-
    Left = [First | Rest] |
    Merge = [First | ShortMerge],
    shuffle(Rest, Right, ShortMerge).
shuffle(Left, Right, Merge) :-
    Right = [First | Rest] |
    Merge = [First | ShortMerge],
    shuffle(Left, Rest, ShortMerge).
</syntaxhighlight>यहाँ, <kbd>[]</kbd> खाली सूची का प्रतिनिधित्व करता है, और <kbd>[हैड | टेल]</kbd> पहले तत्व <kbd>हैड</kbd> के साथ एक सूची का प्रतिनिधित्व करता है, जिसके बाद सूची <kbd>टेल</kbd> होती है, जैसा कि प्रोलॉग में है। (ध्यान दें कि दूसरे और तीसरे क्लॉज में की पहली घटना लिस्ट कंस्ट्रक्टर है, जबकि की दूसरी घटना कमिटमेंट ऑपरेटर है।) प्रोग्राम का उपयोग किया जा सकता है , उदाहरण के लिए, <kbd>[ऐस, रानी, ​​​​राजा]</kbd> और <kbd>[1, 4, 2]</kbd> लक्ष्य खंड का आह्वान करके सूचियों में फेरबदल करने के लिए:<syntaxhighlight lang="c">
shuffle([ace, queen, king], [1, 4, 2], Merge).
</syntaxhighlight>प्रोग्राम गैर-नियतात्मक रूप से एकल समाधान उत्पन्न करेगा, उदाहरण के लिए <kbd>मर्ज = [इक्का, रानी, ​​1, राजा, 4, 2]</kbd>।


यकीनन, समवर्ती तर्क प्रोग्रामिंग संदेश पासिंग पर आधारित है, इसलिए यह अन्य समवर्ती संदेश-पासिंग प्रणालीयों के समान अनिश्चितता के अधीन है, जैसे [[अभिनेता मॉडल]] (समवर्ती संगणना में अनिश्चितता देखें)। कार्ल हेविट ने तर्क दिया है कि समवर्ती तर्क प्रोग्रामिंग उनके अर्थ में तर्क पर आधारित नहीं है कि कम्प्यूटेशनल चरणों को तार्किक रूप से नहीं निकाला जा सकता है।<ref name="Hewitt">{{cite web | url=https://hal.archives-ouvertes.fr/hal-01148496v6/document | title=Inconsistency Robustness for Logic Programs | publisher=Hal Archives | date=27 April 2016 | access-date=7 November 2016 | author=Hewitt, Carl | pages=21–26}}</ref> चूंकि, समवर्ती तर्क प्रोग्रामिंग में, समापन संगणना का कोई भी परिणाम प्रोग्राम का एक तार्किक परिणाम है, और आंशिक संगणना का कोई भी आंशिक परिणाम प्रोग्राम और अवशिष्ट लक्ष्य (प्रक्रिया नेटवर्क) का एक तार्किक परिणाम है। इस प्रकार संगणनाओं की अनिश्चितता का अर्थ है कि प्रोग्राम के सभी तार्किक परिणाम नहीं निकाले जा सकते हैं।{{POV statement|Hewitt|date=August 2014}}
=== समवर्ती बाधा तर्क प्रोग्रामिंग ===
=== समवर्ती बाधा तर्क प्रोग्रामिंग ===
{{Main|Concurrent constraint logic programming}}
{{Main|समवर्ती बाधा तर्क प्रोग्रामिंग}}
[[समवर्ती बाधा तर्क प्रोग्रामिंग]] समवर्ती तर्क प्रोग्रामिंग और बाधा तर्क प्रोग्रामिंग को जोड़ती है, समवर्ती को नियंत्रित करने के लिए बाधाओं का उपयोग करती है। एक क्लॉज में एक गार्ड हो सकता है, जो बाधाओं का एक समूह है जो क्लॉज की प्रयोज्यता को रोक सकता है। जब कई खंडों के गार्ड संतुष्ट होते हैं, समवर्ती बाधा तर्क प्रोग्रामिंग केवल एक का उपयोग करने के लिए प्रतिबद्ध विकल्प बनाती है।
[[समवर्ती बाधा तर्क प्रोग्रामिंग]] समवर्ती तर्क प्रोग्रामिंग और बाधा तर्क प्रोग्रामिंग को जोड़ती है, समवर्ती को नियंत्रित करने के लिए बाधाओं का उपयोग करती है। एक क्लॉज में एक गार्ड हो सकता है, जो बाधाओं का एक समूह है जो क्लॉज की प्रयोज्यता को रोक सकता है। जब कई खंडों के गार्ड संतुष्ट होते हैं, समवर्ती बाधा तर्क प्रोग्रामिंग केवल एक का उपयोग करने के लिए प्रतिबद्ध विकल्प बनाती है।


=== आगमनात्मक तर्क प्रोग्रामिंग ===
=== आगमनात्मक तर्क प्रोग्रामिंग ===
{{Main|Inductive logic programming}}
{{Main|प्रेरक तर्क प्रोग्रामिंग}}
आगमनात्मक तर्क प्रोग्रामिंग पृष्ठभूमि ज्ञान के संदर्भ में सकारात्मक और नकारात्मक उदाहरणों के सामान्यीकरण से संबंधित है: तर्क प्रोग्रामों की मशीन सीखना। इस क्षेत्र में हाल के काम, तर्क प्रोग्रामिंग, सीखने और संभाव्यता के संयोजन ने [[सांख्यिकीय संबंधपरक शिक्षा]] और [[संभाव्य आगमनात्मक तर्क प्रोग्रामिंग]] के नए क्षेत्र को उत्पन्न किया है।
आगमनात्मक तर्क प्रोग्रामिंग पृष्ठभूमि ज्ञान के संदर्भ में सकारात्मक और नकारात्मक उदाहरणों के सामान्यीकरण से संबंधित है: तर्क प्रोग्रामों की मशीन सीखना। इस क्षेत्र में हाल के काम, तर्क प्रोग्रामिंग, सीखने और संभाव्यता के संयोजन ने [[सांख्यिकीय संबंधपरक शिक्षा]] और [[संभाव्य आगमनात्मक तर्क प्रोग्रामिंग]] के नए क्षेत्र को उत्पन्न किया है।


=== उच्च-क्रम [[उच्च क्रम प्रोग्रामिंग]] ===
=== उच्च-क्रम [[उच्च क्रम प्रोग्रामिंग]] ===
कई शोधकर्ताओं ने तर्क प्रोग्रामिंग को उच्च-क्रम तर्क से प्राप्त उच्च-क्रम प्रोग्रामिंग विशेषताओं के साथ विस्तारित किया है, जैसे कि विधेय चर। ऐसी भाषाओं में प्रोलॉग एक्सटेंशन [[HiLog]] और λProlog शामिल हैं।
कई शोधकर्ताओं ने तर्क प्रोग्रामिंग को उच्च-क्रम तर्क से प्राप्त उच्च-क्रम प्रोग्रामिंग विशेषताओं के साथ विस्तारित किया है, जैसे कि विधेय चर। ऐसी भाषाओं में प्रोलॉग एक्सटेंशन [[HiLog|हाइलॉग]] और λप्रोलॉग सम्मलित हैं।


=== [[रैखिक तर्क]] प्रोग्रामिंग ===
=== [[रैखिक तर्क]] प्रोग्रामिंग ===
लीनियर तर्क के भीतर तर्क प्रोग्रामिंग को आधार देने के परिणामस्वरूप तर्क प्रोग्रामिंग भाषा का डिज़ाइन तैयार किया गया है जो शास्त्रीय तर्क पर आधारित की तुलना में काफी अधिक अभिव्यंजक हैं। हॉर्न क्लॉज प्रोग्राम केवल विधेय के तर्कों में परिवर्तन द्वारा राज्य परिवर्तन का प्रतिनिधित्व कर सकते हैं। रैखिक तर्क प्रोग्रामिंग में, राज्य परिवर्तन का समर्थन करने के लिए परिवेश रैखिक तर्क का उपयोग किया जा सकता है। लीनियर तर्क पर आधारित तर्क प्रोग्रामिंग भाषा के कुछ शुरुआती डिजाइनों में शामिल हैं LO,<ref>{{cite journal|first=Jean-Marc|last=Andreoli|doi=10.1093/logcom/2.3.297|title=Logic Programming with Focusing Proofs in Linear Logic|journal=[[Journal of Logic and Computation]]|date=1 June 1992|volume=2|issue=3|pages=297–347}}</ref> बेवकूफ,<ref>{{cite journal|first1=Joshua|last1=Hodas|first2=Dale|last2=Miller|url=http://repository.upenn.edu/cgi/viewcontent.cgi?article=1540&context=cis_reports|title=Logic Programming in a Fragment of Intuitionistic Linear Logic|journal=[[Information and Computation]]|date=1994|volume=110|issue=2|pages=327–365|doi=10.1006/inco.1994.1036 |doi-access=free}}</ref> एसीएल,<ref>{{cite conference|first1=Naoki|last1=Kobayashi|first2= Akinori|last2=Yonezawa|author-link2=Akinori Yonezawa|title=Asynchronous communication model based on linear logic|conference=US/Japan Workshop on Parallel Symbolic Computing|date=1994|pages=279–294|citeseerx=10.1.1.42.8749 }}</ref> और फोरम।<ref>{{cite journal|first=Dale|last=Miller|title=Forum: A Multiple-Conclusion Specification Logic|journal=[[Theoretical Computer Science (journal)|Theoretical Computer Science]]|date=30 September 1996|volume=165|issue=1|pages=201–232|doi=10.1016/0304-3975(96)00045-X|doi-access=free}}</ref> फोरम सभी रेखीय तर्क की लक्ष्य-निर्देशित व्याख्या प्रदान करता है।
लीनियर तर्क के भीतर तर्क प्रोग्रामिंग को आधार देने के परिणामस्वरूप तर्क प्रोग्रामिंग भाषा का डिज़ाइन तैयार किया गया है जो मौलिक तर्क पर आधारित की तुलना में अधिक अधिक अभिव्यंजक हैं। हॉर्न क्लॉज प्रोग्राम केवल विधेय के तर्कों में परिवर्तन द्वारा राज्य परिवर्तन का प्रतिनिधित्व कर सकते हैं। रैखिक तर्क प्रोग्रामिंग में, राज्य परिवर्तन का समर्थन करने के लिए परिवेश रैखिक तर्क का उपयोग किया जा सकता है। लीनियर तर्क पर आधारित तर्क प्रोग्रामिंग भाषा के कुछ प्रारंभिक डिजाइनों में सम्मलित हैं एलओ,<ref>{{cite journal|first=Jean-Marc|last=Andreoli|doi=10.1093/logcom/2.3.297|title=Logic Programming with Focusing Proofs in Linear Logic|journal=[[Journal of Logic and Computation]]|date=1 June 1992|volume=2|issue=3|pages=297–347}}</ref> बेवकूफ,<ref>{{cite journal|first1=Joshua|last1=Hodas|first2=Dale|last2=Miller|url=http://repository.upenn.edu/cgi/viewcontent.cgi?article=1540&context=cis_reports|title=Logic Programming in a Fragment of Intuitionistic Linear Logic|journal=[[Information and Computation]]|date=1994|volume=110|issue=2|pages=327–365|doi=10.1006/inco.1994.1036 |doi-access=free}}</ref> एसीएल,<ref>{{cite conference|first1=Naoki|last1=Kobayashi|first2= Akinori|last2=Yonezawa|author-link2=Akinori Yonezawa|title=Asynchronous communication model based on linear logic|conference=US/Japan Workshop on Parallel Symbolic Computing|date=1994|pages=279–294|citeseerx=10.1.1.42.8749 }}</ref> और फोरम।<ref>{{cite journal|first=Dale|last=Miller|title=Forum: A Multiple-Conclusion Specification Logic|journal=[[Theoretical Computer Science (journal)|Theoretical Computer Science]]|date=30 September 1996|volume=165|issue=1|pages=201–232|doi=10.1016/0304-3975(96)00045-X|doi-access=free}}</ref> फोरम सभी रेखीय तर्क की लक्ष्य-निर्देशित व्याख्या प्रदान करता है।


=== वस्तु-उन्मुख तर्क प्रोग्रामिंग ===
=== वस्तु-उन्मुख तर्क प्रोग्रामिंग ===
[[एफ तर्क]] ऑब्जेक्ट्स और फ्रेम सिंटैक्स के साथ तर्क प्रोग्रामिंग का विस्तार करता है।
[[एफ तर्क]] ऑब्जेक्ट्स और फ्रेम सिंटैक्स के साथ तर्क प्रोग्रामिंग का विस्तार करता है।


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


=== [[लेन-देन तर्क]] प्रोग्रामिंग ===
=== [[लेन-देन तर्क]] प्रोग्रामिंग ===
लेन-देन तर्क राज्य-संशोधित अद्यतनों के तार्किक सिद्धांत के साथ तर्क प्रोग्रामिंग का एक विस्तार है। इसमें एक मॉडल-सैद्धांतिक शब्दार्थ और एक प्रक्रियात्मक शब्दार्थ दोनों हैं। [[फ्लोरा-2]] -2 प्रणाली में लेन-देन तर्क के एक उपसमूह का कार्यान्वयन उपलब्ध है। अन्य प्रोटोटाइप भी लेन-देन तर्क हैं।
लेन-देन तर्क राज्य-संशोधित अद्यतनों के तार्किक सिद्धांत के साथ तर्क प्रोग्रामिंग का एक विस्तार है। इसमें एक मॉडल-सैद्धांतिक शब्दार्थ और एक प्रक्रियात्मक शब्दार्थ दोनों हैं। [[फ्लोरा-2]] प्रणाली में लेन-देन तर्क के एक उपसमूह का कार्यान्वयन उपलब्ध है। अन्य प्रोटोटाइप भी लेन-देन तर्क हैं।


== यह भी देखें ==
== यह भी देखें ==
* [[स्वचालित प्रमेय साबित करना]]
* [[स्वचालित प्रमेय साबित करना|स्वचालित प्रमेय सिद्ध करना]]
* बाधा तर्क प्रोग्रामिंग
* बाधा तर्क प्रोग्रामिंग
* [[नियंत्रण सिद्धांत]]
* [[नियंत्रण सिद्धांत]]
Line 297: Line 268:
* [[फजी लॉजिक|फजी तर्क]]
* [[फजी लॉजिक|फजी तर्क]]
* [[आगमनात्मक तर्क प्रोग्रामिंग]]
* [[आगमनात्मक तर्क प्रोग्रामिंग]]
* [[कंप्यूटर विज्ञान में तर्क]] ([[औपचारिक तरीके]] शामिल हैं)
* [[कंप्यूटर विज्ञान में तर्क]] ([[औपचारिक तरीके]] सम्मलित हैं)
* : श्रेणी: तर्क प्रोग्रामिंग भाषाएँ
* :श्रेणी: तर्क प्रोग्रामिंग भाषाएँ
* [[निर्देशयोग्य तर्क नियंत्रक]]
* [[निर्देशयोग्य तर्क नियंत्रक]]
* आर ++
* आर ++
Line 304: Line 275:
* [[नियम-आधारित मशीन लर्निंग]]
* [[नियम-आधारित मशीन लर्निंग]]
* [[संतुष्टि]]
* [[संतुष्टि]]
** [[बूलियन संतुष्टि समस्या]]
*[[बूलियन संतुष्टि समस्या]]
* रैखिक तर्क
* रैखिक तर्क


Line 334: Line 305:
* Carl Hewitt. "[https://web.archive.org/web/20170102172145/https://pdfs.semanticscholar.org/9993/ec68770faaab132da6945492b0e4ad07eb7b.pdf The Repeated Demise of Logic Programming and Why It Will Be Reincarnated]". ''AAAI Spring Symposium: What Went Wrong and Why: Lessons from AI Research and Applications'' 2006: 2–9.
* Carl Hewitt. "[https://web.archive.org/web/20170102172145/https://pdfs.semanticscholar.org/9993/ec68770faaab132da6945492b0e4ad07eb7b.pdf The Repeated Demise of Logic Programming and Why It Will Be Reincarnated]". ''AAAI Spring Symposium: What Went Wrong and Why: Lessons from AI Research and Applications'' 2006: 2–9.
* Evgeny Dantsin, Thomas {{Not a typo|Eiter}}, Georg Gottlob, Andrei Voronkov: [http://cmpe.emu.edu.tr/bayram/courses/531/forpresentation/p374-dantsin.pdf Complexity and expressive power of logic programming]. ACM Comput. Surv. 33(3): 374–425 (2001)
* Evgeny Dantsin, Thomas {{Not a typo|Eiter}}, Georg Gottlob, Andrei Voronkov: [http://cmpe.emu.edu.tr/bayram/courses/531/forpresentation/p374-dantsin.pdf Complexity and expressive power of logic programming]. ACM Comput. Surv. 33(3): 374–425 (2001)
* Ulf Nilsson and Jan Maluszynski, [http://www.ida.liu.se/~ulfni/lpp/ Logic, Programming and Prolog]
* Ulf Nilsson and Jan Maluszynski, [http://www.ida.liu.se/~ulfni/lpp/ Logic, Programming and प्रोलॉग]




Line 345: Line 316:
*[https://web.archive.org/web/20090108012954/http://www.mpprogramming.com/Cpp/ Logic programming in C++ with Castor]
*[https://web.archive.org/web/20090108012954/http://www.mpprogramming.com/Cpp/ Logic programming in C++ with Castor]
*[http://www.mozart-oz.org/documentation/tutorial/node12.html Logic programming] in [[Oz programming language|Oz]]
*[http://www.mozart-oz.org/documentation/tutorial/node12.html Logic programming] in [[Oz programming language|Oz]]
*[http://www.pdc.dk/ Prolog Development Center ]
*[http://www.pdc.dk/ प्रोलॉग Development Center]
*[http://docs.racket-lang.org/racklog/ Racklog: Logic Programming in Racket]
*[http://docs.racket-lang.org/racklog/ Racklog: Logic Programming in Racket]



Revision as of 09:42, 17 March 2023

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

H:- B1, …, Bn

और तार्किक प्रभाव के रूप में घोषणात्मक रूप से पढ़ा जाता है:

H if B1 and … and Bn

H को नियम का प्रमुख कहा जाता है और B1, ..., Bn को शरीर कहा जाता है। तथ्य ऐसे नियम हैं जिनका कोई निकाय नहीं है, और सरलीकृत रूप में लिखे गए हैं:

H.

सरलतम स्थिति में जिसमें H, B1, ..., Bn सभी परमाणु सूत्र हैं, इन उपवाक्यों को निश्चित उपवाक्य या हॉर्न उपवाक्य कहा जाता है। चूंकि, इस सरल स्थितिे के कई विस्तार हैं, सबसे महत्वपूर्ण स्थिति है जिसमें एक खंड के शरीर में स्थितियां भी परमाणु सूत्रों की उपेक्षा हो सकती हैं। तर्क प्रोग्रामिंग भाषा जिसमें यह एक्सटेंशन सम्मलित है, में नॉन-मोनोटोनिक तर्क की नॉलेज रिप्रेजेंटेशन क्षमताएं हैं।

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

H को हल करने के लिए, B1 को हल करने के लिए, और ... और Bn को हल करने के लिए।

एक उदाहरण के रूप में निम्नलिखित उपवाक्य पर विचार करें:

पतनशील (X):- मानव (X),

प्रोग्रामिंग भाषा योजनाकार (प्रोग्रामिंग भाषा) को समझाने के लिए टेरी विनोग्रैड[1] द्वारा उपयोग किए गए एक उदाहरण के आधार पर एक तर्क प्रोग्राम में एक खंड के रूप में, यह परीक्षण करने के लिए एक प्रक्रिया के रूप में दोनों का उपयोग किया जा सकता है कि क्या एक्स मानव है या नहीं, और एक एक्स को खोजने की प्रक्रिया के रूप में एक्स को खोजने के लिए एक प्रक्रिया के रूप में, जो मानव है। तथ्यों की भी एक प्रक्रियात्मक व्याख्या होती है। उदाहरण के लिए, खंड:

मानव (सुकरात),

यह दिखाने के लिए एक प्रक्रिया के रूप में दोनों का उपयोग किया जा सकता है कि सुकरात मानव है, और एक एक्स को खोजने की प्रक्रिया के रूप में जो कि एक्स को सुकरात को "असाइन" करके मानव है।

तार्किक प्रोग्रामों की घोषणात्मक रीडिंग का उपयोग प्रोग्रामर द्वारा उनकी शुद्धता को सत्यापित करने के लिए किया जा सकता है। इसके अतिरिक्त, तर्क-आधारित प्रोग्राम परिवर्तन तकनीकों का उपयोग तर्क प्रोग्राम को तार्किक रूप से समतुल्य प्रोग्राम में बदलने के लिए भी किया जा सकता है जो अधिक कुशल हैं। तर्क प्रोग्रामिंग भाषा के प्रोलॉग परिवार में, प्रोग्रामर प्रोग्राम की दक्षता में सुधार के लिए निष्पादन तंत्र के ज्ञात समस्या-समाधान व्यवहार का भी उपयोग कर सकता है।

इतिहास

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

तर्क प्रोग्रामिंग अपने वर्तमान रूप में 1960 के दशक के अंत और 1970 के दशक की शुरुआत में कृत्रिम बुद्धि में ज्ञान के घोषणात्मक बनाम प्रक्रियात्मक प्रतिनिधित्व के बारे में बहस का पता लगा सकता है। घोषणात्मक अभ्यावेदन के अधिवक्ता विशेष रूप से स्टैनफोर्ड विश्वविद्यालय में काम कर रहे थे, जो जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक), बर्ट्रम राफेल और कॉर्डेल ग्रीन से जुड़े थे, और एडिनबर्ग विश्वविद्यालय में, जॉन एलन रॉबिन्सन (सिराक्यूज विश्वविद्यालय के एक अकादमिक आगंतुक), पैट्रिक जे हेस के साथ काम कर रहे थे, और रॉबर्ट कोवाल्स्की मार्विन मिंस्की और सीमोर पैपर्ट के नेतृत्व में प्रक्रियात्मक अभ्यावेदन के अधिवक्ता मुख्य रूप से एमआईटी में केंद्रित थे।[citation needed]

यद्यपि यह तर्क के प्रमाण तरीकों पर आधारित था, एमआईटी में विकसित योजनाकार (प्रोग्रामिंग भाषा), इस प्रक्रियावादी प्रतिमान के भीतर उभरने वाली पहली भाषा थी।[4] योजनाकार ने लक्ष्यों (अर्थात लक्ष्य-कमी या पिछड़े चेनिंग) और अभिकथन (अर्थात आगे श्रृंखलन) से प्रक्रियात्मक योजनाओं के पैटर्न-निर्देशित आह्वान को चित्रित किया था, योजनाकार का सबसे प्रभावशाली कार्यान्वयन योजनाकार का उपसमूह था, जिसे माइक्रो-योजनाकार कहा जाता है, जिसे गेराल्ड जे सुस्मान, यूजीन चार्नियाक और टेरी विनोग्रैड द्वारा कार्यान्वित किया गया था। इसका उपयोग विनोग्रैड के प्राकृतिक-भाषा समझ प्रोग्राम एसएचआरडीएलयू को लागू करने के लिए किया गया था, जो उस समय एक मील का पत्थर था।[1] उस समय बहुत सीमित मेमोरी प्रणाली से निपटने के लिए, योजनाकार ने बैकट्रैकिंग कंट्रोल स्ट्रक्चर का उपयोग किया जिससे की एक समय में केवल एक संभावित गणना पथ को संग्रहित किया जा सके, योजनाकार ने प्रोग्रामिंग भाषाओं क्यूऐ-4, पॉपलर, कोनिवर, क्यूएलआईएसपी और समवर्ती भाषा ईथर को उत्पन्न किया था।[citation needed]

एडिनबर्ग में हेस और कोवाल्स्की ने योजनाकार के प्रक्रियात्मक दृष्टिकोण के साथ ज्ञान प्रतिनिधित्व के लिए तर्क-आधारित घोषणात्मक दृष्टिकोण को समेटने की कोशिश की, हेस (1973) ने एक समतुल्य भाषा, गोलक्स विकसित की, जिसमें प्रमेय समर्थक के व्यवहार को बदलकर विभिन्न प्रक्रियाओं को प्राप्त किया जा सकता है।[5] दूसरी ओर, कोवाल्स्की ने एसएलडी संकल्प विकसित किया,[6] एसएल-रिज़ॉल्यूशन का एक प्रकार,[7] और दिखाया कि कैसे यह लक्ष्यों को कम करने की प्रक्रियाओं के रूप में निहितार्थों का व्यवहार करता है। कोवाल्स्की ने मार्सिले में एलेन कॉलमेरॉयर के साथ सहयोग किया, जिन्होंने प्रोग्रामिंग भाषा प्रोलॉग के डिजाइन और कार्यान्वयन में इन विचारों को विकसित किया था।

तर्क प्रोग्रामिंग के लिए एसोसिएशन की स्थापना 1986 में तर्क प्रोग्रामिंग को बढ़ावा देने के लिए की गई थी।

प्रोलॉग ने प्रोग्रामिंग भाषाओं को उत्पन्न बीजगणितीय तर्क कार्यात्मक प्रोग्रामिंग भाषा भाषा, झालर, गोडेल (प्रोग्रामिंग भाषा) गोडेल, बुध प्रोग्रामिंग भाषा, ओज (प्रोग्रामिंग भाषा), सियाओ (प्रोग्रामिंग भाषा), विजुअल प्रोलॉग, एक्सएसबी और λप्रोलॉग, साथ ही साथ समवर्ती तर्क प्रोग्रामिंग की एक किस्म,[8] बाधा तर्क प्रोग्रामिंग भाषाएं और डेटालॉग।[9]


अवधारणाएं

शब्दार्थ

मार्टेन वैन एम्डेन और रॉबर्ट कोवाल्स्की ने हॉर्न क्लॉज तर्क प्रोग्राम्स, मॉडल सिद्धांत मॉडल-सैद्धांतिक, फिक्स्ड पॉइंट (गणित) | फिक्स्ड-पॉइंट, और प्रूफ-सैद्धांतिक शब्दार्थ प्रूफ-सैद्धांतिक के लिए तीन शब्दार्थों को परिभाषित किया और दिखाया कि वे समकक्ष हैं।[10]

तर्क और नियंत्रण

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

एल्गोरिदम = तर्क + नियंत्रण

जहाँ तर्क एक तर्क प्रोग्राम का प्रतिनिधित्व करता है और नियंत्रण विभिन्न प्रमेय-सिद्ध रणनीतियों का प्रतिनिधित्व करता है।[11]


समस्या का समाधान

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

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

अधिक सामान्य स्थितिे में, जहां उप-लक्ष्य चर साझा करते हैं, अन्य रणनीतियों का उपयोग किया जा सकता है, जैसे कि उप-लक्ष्य को चुनना जो सबसे अधिक तात्कालिक है या जो पर्याप्त रूप से तत्काल है जिससे की केवल एक प्रक्रिया लागू हो। ऐसी रणनीतियों का उपयोग, उदाहरण के लिए, समवर्ती तर्क प्रोग्रामिंग में किया जाता है।

असफलता के रूप में नकारात्मकता

अधिकांश व्यावहारिक अनुप्रयोगों के साथ-साथ उन अनुप्रयोगों के लिए जिन्हें कृत्रिम बुद्धि में गैर-मोनोटोनिक तर्क की आवश्यकता होती है, हॉर्न क्लॉज तर्क प्रोग्राम को नकारात्मक स्थितियों के साथ सामान्य तर्क प्रोग्राम तक विस्तारित करने की आवश्यकता होती है। एक सामान्य तर्क प्रोग्राम में एक खंड का रूप होता है:

H :- A1, …, An, not B1, …, not Bn

और तार्किक निहितार्थ के रूप में घोषणात्मक रूप से पढ़ा जाता है:

H if A1 and … and An and not B1 and … and not Bn

जहां H और सभी Ai और Bi परमाणु सूत्र हैं। नकारात्मक शाब्दिक में नकारात्मकता B नहीं Hi को सामान्यतः अस्वीकृति के रूप में विफलता के रूप में संदर्भित किया जाता है, क्योंकि अधिकांश कार्यान्वयन में, एक नकारात्मक स्थिति नहीं Bi को पॉज़िटिव स्थिति B दिखा कर होल्ड करने के लिए दिखाया गया Hi धारण करने में विफल रहता है। उदाहरण के लिए:

canfly(X) :- bird(X), not abnormal(X).
abnormal(X) :- wounded(X).
bird(john).
bird(mary).
wounded(john).

उड़ने वाली चीज़ खोजने के लक्ष्य को देखते हुए:

:- canfly(X).

दो अपेक्षाकृत समाधान हैं, जो पहले उपलक्ष्य पक्षी(X) को हल करते हैं, अर्थात् X = जॉन और X = मैरी पहले अपेक्षाकृत समाधान का दूसरा उपलक्ष्य असामान्य(जॉन) नहीं विफल हो जाता है, क्योंकि घायल(जॉन) सफल होता है और इसलिए असामान्य(जॉन) सफल होता है। चूंकि, दूसरे अपेक्षाकृत समाधान का दूसरा उपलक्ष्य असामान्य(मैरी) नहीं सफल होता है, क्योंकि घायल(मैरी) विफल हो जाता है और इसलिए असामान्य(मैरी) विफल रहता है, इसलिए X = मैरी लक्ष्य का एकमात्र समाधान है।

माइक्रो-योजनाकार (प्रोग्रामिंग भाषा) | माइक्रो-योजनाकार का एक निर्माण था, जिसे thnot कहा जाता है, जो एक अभिव्यक्ति पर लागू होने पर मान को सही लौटाता है (और केवल यदि) अभिव्यक्ति का मूल्यांकन विफल हो जाता है। एक समकक्ष ऑपरेटर सामान्यतः आधुनिक प्रोलॉग के कार्यान्वयन में उपलब्ध होता है। यह सामान्यतः के रूप में लिखा जाता है not(Goal) या \+ Goal, जहाँ Goal प्रोग्राम द्वारा सिद्ध किया जाने वाला कुछ लक्ष्य (प्रस्ताव) है। यह संचालिका प्रथम-क्रम तर्क में निषेध से भिन्न है: एक निषेध जैसे \+ X == 1 विफल रहता है जब चर X परमाणु से बंधा हुआ है 1, लेकिन यह कब सहित अन्य सभी स्थितिों में सफल होता है X अबाधित है। यह प्रोलॉग के तर्क को गैर-मोनोटोनिक तर्क बनाता है, गैर-मोनोटोनिक: X = 1, \+ X == 1 निरंतर विफल रहता है, जबकि \+ X == 1, X = 1 सफल हो सकता है, बाध्यकारी X को 1, इस पर निर्भर X प्रारंभ में बाध्य था (ध्यान दें कि मानक प्रोलॉग बाएं से दाएं क्रम में लक्ष्यों को निष्पादित करता है)।

कीथ क्लार्क (कंप्यूटर वैज्ञानिक) [1978] तक विफलता के रूप में नकारात्मकता की तार्किक स्थिति अनसुलझी थी, यह दिखाया कि, कुछ प्राकृतिक परिस्थितियों में, यह प्रोग्राम के पूरा होने के संबंध में मौलिक निषेध का एक सही (और कभी-कभी पूर्ण) कार्यान्वयन है। पूर्णता की मात्रा मोटे तौर पर बाएं हाथ की ओर एक ही विधेय के साथ सभी प्रोग्राम क्लॉज के समूह के संबंध में है, कहते हैं

H :- Body1
H :- Bodyk

विधेय की परिभाषा के रूप में

H iff (Body1 or … or Bodyk)

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

उदाहरण के लिए, उपरोक्त प्रोग्राम का पूरा होना है:

canfly(X) iff bird(X), not abnormal(X).
abnormal(X) iff wounded(X).
bird(X) iff X = john or X = mary.
X = X.
not john = mary.
not mary = john.

पूर्णता की धारणा डिफ़ॉल्ट तर्क के लिए मैककार्थी के परिधि (तर्क)तर्क) शब्दार्थ और बंद दुनिया की धारणा से निकटता से संबंधित है।

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

ज्ञान प्रतिनिधित्व

तथ्य यह है कि हॉर्न क्लॉज को एक प्रक्रियात्मक व्याख्या दी जा सकती है और इसके विपरीत, लक्ष्य-घटाने की प्रक्रियाओं को हॉर्न क्लॉज + बैकवर्ड रीजनिंग के रूप में समझा जा सकता है, जिसका अर्थ है कि तर्क प्रोग्राम ज्ञान प्रतिनिधित्व के घोषणात्मक और प्रक्रियात्मक प्रतिनिधित्व को जोड़ते हैं। अस्वीकृति को विफलता के रूप में सम्मलित करने का अर्थ है कि तर्क प्रोग्रामिंग एक प्रकार का गैर-मोनोटोनिक तर्क है।

मौलिक तर्क की तुलना में इसकी सादगी के बावजूद, हार्न क्लॉज और असफलता के रूप में निषेध का यह संयोजन आश्चर्यजनक रूप से अभिव्यंजक सिद्ध हुआ है। उदाहरण के लिए, यह कारण और प्रभाव के सामान्य ज्ञान के नियमों के लिए एक प्राकृतिक प्रतिनिधित्व प्रदान करता है, जैसा कि स्थिति कलन और घटना कलन दोनों द्वारा औपचारिक रूप से किया गया है। यह नियम की अर्ध-औपचारिक भाषा के अधिक स्वाभाविक रूप से अनुरूप होने के लिए भी दिखाया गया है। विशेष रूप से, प्राकेन और सार्टोर[12] तर्क प्रोग्राम के रूप में ब्रिटिश राष्ट्रीयता अधिनियम के प्रतिनिधित्व का श्रेय[13] नियम के कम्प्यूटेशनल अभ्यावेदन के विकास के लिए बेहद प्रभावशाली होने के साथ, यह दर्शाता है कि कैसे तर्क प्रोग्रामिंग सहज रूप से आकर्षक अभ्यावेदन को सक्षम बनाता है जिसे सीधे स्वचालित संदर्भ उत्पन्न करने के लिए नियत किया जा सकता है।

वेरिएंट और एक्सटेंशन

प्रोलॉग

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

यह 1972 की अगली गर्मियों में था, कि कोवाल्स्की ने, फिर से कोलमेरॉयर के साथ काम करते हुए, निहितार्थों की प्रक्रियात्मक व्याख्या विकसित की। यह दोहरी घोषणात्मक/प्रक्रियात्मक व्याख्या बाद में प्रोलॉग नोटेशन में औपचारिक हो गई

H :- B1, …, Bn

जिसे घोषणात्मक और प्रक्रियात्मक दोनों तरह से पढ़ा (और उपयोग) किया जा सकता है। यह भी स्पष्ट हो गया कि ऐसे खंड निश्चित खंडों या हॉर्न खंडों तक सीमित हो सकते हैं, जहां H, B1, ..., Bn सभी परमाणु विधेय तर्क सूत्र हैं, और एसएल-रिज़ॉल्यूशन को एलयूएसएच या एसएलडी रिज़ॉल्यूशन तक सीमित (और सामान्यीकृत) किया जा सकता है। एसएलडी- रिज़ॉल्यूशन। 1974 में प्रकाशित 1973 मेमो में कोवाल्स्की की प्रक्रियात्मक व्याख्या और एलयूएसएच का वर्णन किया गया था।[6]

कोलमेरौएर, फिलिप रसेल के साथ, प्रोलॉग के आधार के रूप में खंडों की इस दोहरी व्याख्या का उपयोग किया, जिसे 1972 की गर्मियों और शरद ऋतु में लागू किया गया था। पहला प्रोलॉग प्रोग्राम, जिसे 1972 में भी लिखा गया था और मार्सिले में लागू किया गया था, एक फ्रांसीसी प्रश्न-उत्तर प्रणाली थी। एक व्यावहारिक प्रोग्रामिंग भाषा के रूप में प्रोलॉग के उपयोग को 1977 में एडिनबर्ग में डेविड वारेन द्वारा एक कंपाइलर के विकास से अधिक गति मिली। प्रयोगों ने प्रदर्शित किया कि एडिनबर्ग प्रोलॉग अन्य प्रतीकात्मक प्रोग्रामिंग भाषाओं जैसे लिस्प (प्रोग्रामिंग भाषा) की प्रसंस्करण गति के साथ प्रतिस्पर्धा कर सकता है। एडिनबर्ग प्रोलॉग वास्तविक मानक बन गया और मानकीकरण मानक प्रोलॉग के लिए अंतर्राष्ट्रीय संगठन की परिभाषा को दृढ़ता से प्रभावित किया था।

अपवर्तक तर्क प्रोग्रामिंग

अपहरण तर्क प्रोग्रामिंग सामान्य तर्क प्रोग्रामिंग का एक विस्तार है जो कुछ विधेय की अनुमति देता है, जिसे अपवर्तक विधेय के रूप में घोषित किया जाता है, खुले या अपरिभाषित होने के लिए, अपहरणात्मक तर्क प्रोग्राम में एक खंड का रूप है:

H :- B1, …, Bn, A1, …, An

जहाँ H एक परमाणु सूत्र है जो अपचनीय नहीं है, सभी Bi शाब्दिक हैं जिनके विधेय अपवर्त्य नहीं हैं, और Ai परमाणु सूत्र हैं जिनके विधेय अपचनीय हैं। अपवर्तक विधेय को अखंडता की कमी से विवश किया जा सकता है, जिसका रूप हो सकता है:

false :- L1, …, Ln

जहां Li मनमाने शाब्दिक (परिभाषित या अपवर्तक, और परमाणु या अस्वीकृत) हैं। उदाहरण के लिए:

canfly(X) :- bird(X), normal(X).
false :- normal(X), wounded(X).
bird(john).
bird(mary).
wounded(john).

जहां विधेय सामान्य अपचनीय है। समस्या-समाधान को हल की जाने वाली समस्याओं के समाधान के रूप में अपवर्तक विधेय के संदर्भ में व्यक्त की गई परिकल्पनाओं को प्राप्त करके प्राप्त किया जाता है। ये समस्याएं या तो अवलोकन हो सकती हैं जिन्हें समझाया जाना चाहिए (जैसा कि मौलिक अपहरण तर्क के रूप में) या हल किए जाने वाले लक्ष्य (सामान्य तर्क प्रोग्रामिंग के रूप में) उदाहरण के लिए, परिकल्पना सामान्य(मैरी) अवलोकन कैनफ्लाई(मैरी) की व्याख्या करती है। इसके अतिरिक्त, वही परिकल्पना कुछ ऐसा खोजने के लक्ष्य के X = मैरी एकमात्र समाधान पर जोर देती है जो उड़ सकता है:

:- canfly(X).

अपवर्तक तर्क प्रोग्रामिंग का उपयोग दोष निदान, योजना, प्राकृतिक भाषा प्रसंस्करण और मशीन सीखने के लिए किया गया है। इसका उपयोग अपहरण के तर्क के रूप में विफलता के रूप में नकारात्मकता की व्याख्या करने के लिए भी किया गया है।

मेटातर्क प्रोग्रामिंग

क्योंकि गणितीय तर्क में वस्तु भाषा और धातु भाषा के बीच अंतर करने की एक लंबी परंपरा है, तर्क प्रोग्रामिंग भी विक्षनरी: मेटालेवल प्रोग्रामिंग की अनुमति देता है। सबसे सरल मेटालोगिक प्रोग्राम तथाकथित वैनिला (कंप्यूटिंग) मेटा-इंटरप्रेटर है:

 solve(true).
    solve((A,B)):- solve(A),solve(B).
    solve(A):- clause(A,B),solve(B).

जहां सत्य एक खाली संयोजन का प्रतिनिधित्व करता है, और खंड (ए, बी) का अर्थ है कि फॉर्म ए का ऑब्जेक्ट-स्तरीय खंड B है।

मेटतर्क प्रोग्रामिंग ऑब्जेक्ट-लेवल और मेटालेवल प्रस्तुतियों को प्राकृतिक भाषा के रूप में संयोजित करने की अनुमति देता है। इसका उपयोग किसी भी तर्क को लागू करने के लिए भी किया जा सकता है जिसे अनुमान नियम के रूप में निर्दिष्ट किया गया है। मेटालॉगिक का उपयोग तर्क प्रोग्रामिंग में मेटाप्रोग्राम को लागू करने के लिए किया जाता है, जो डेटा के रूप में अन्य प्रोग्राम, डेटाबेस, नॉलेज बेस या स्वयंसिद्ध सिद्धांतों में हेरफेर करता है।

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

बाधा तर्क प्रोग्रामिंग बाधा समाधान के साथ हॉर्न खंड तर्क प्रोग्रामिंग को जोड़ती है। यह कुछ विधेय, बाधा विधेय के रूप में घोषित, खंडों के शरीर में शाब्दिक के रूप में होने की अनुमति देकर हॉर्न क्लॉज का विस्तार करता है। एक बाधा तर्क प्रोग्राम प्रपत्र के खंड का एक समूह है:

H :- C1, …, Cn ◊ B1, …, Bn

जहां H और सभी Bi परमाणु सूत्र हैं, और Ci बाधाएँ हैं। घोषणात्मक रूप से, ऐसे खंड सामान्य तार्किक प्रभाव के रूप में पढ़े जाते हैं:

H if C1 and … and Cn and B1 and … and Bn

चूंकि, जबकि खंडों के प्रमुखों में विधेय को बाधा तर्क प्रोग्राम द्वारा परिभाषित किया गया है, बाधाओं में विधेय कुछ डोमेन-विशिष्ट मॉडल-सैद्धांतिक संरचना या सिद्धांत द्वारा पूर्वनिर्धारित हैं।

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

निम्नलिखित बाधा तर्क प्रोग्राम एक शिक्षक के रूप में जॉन के इतिहास के खिलौना अस्थायी डेटाबेस का प्रतिनिधित्व करता है:

teaches(john, hardware, T) :- 1990  T, T < 1999.
teaches(john, software, T) :- 1999  T, T < 2005.
teaches(john, logic, T) :- 2005  T, T  2012.
rank(john, instructor, T) :- 1990  T, T < 2010.
rank(john, professor, T) :- 2010  T, T < 2014.

यहाँ और < कंस्ट्रेंट प्रेडिकेट हैं, उनके सामान्य अर्थ के साथ। निम्न लक्ष्य खंड डेटाबेस से यह पता लगाने के लिए पूछताछ करता है कि जॉन दोनों ने कब तर्क पढ़ाया और प्रोफेसर थे:

:- teaches(john, logic, T), rank(john, professor, T)

समाधान 2010 ≤ T, T ≤ 2012 है।

असैनिक अभियंत्रण, मैकेनिकल इंजीनियरिंग, डिजिटल सर्किट सत्यापन, स्वचालित समय सारिणी, हवाई यातायात नियंत्रण और वित्त जैसे क्षेत्रों में समस्याओं को हल करने के लिए बाधा तर्क प्रोग्रामिंग का उपयोग किया गया है। यह अपहरणात्मक तर्क प्रोग्रामिंग से निकटता से संबंधित है।

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

समवर्ती तर्क प्रोग्रामिंग समवर्ती प्रोग्रामिंग के साथ तर्क प्रोग्रामिंग की अवधारणाओं को एकीकृत करती है। इसके विकास को 1980 के दशक में पाँचवीं पीढ़ी के कंप्यूटर की प्रणाली प्रोग्रामिंग भाषा के लिए अपनी पसंद से एक बड़ी प्रेरणा दी गई थी। जापानी पाँचवीं पीढ़ी परियोजना (एफजीसीएस)।[14]

एक समवर्ती तर्क प्रोग्राम फॉर्म के संरक्षित हॉर्न क्लॉज का एक समूह है:

H :- G1, …, Gn | B1, …, Bn

संयोजन G1, ... , Gn को क्लॉज का गार्ड (कंप्यूटिंग) कहा जाता है, और कमिटमेंट ऑपरेटर है। घोषणात्मक रूप से, संरक्षित हॉर्न क्लॉज को सामान्य तार्किक प्रभाव के रूप में पढ़ा जाता है:

H if G1 and … and Gn and B1 and … and Bn

चूंकि, प्रक्रियात्मक रूप से, जब कई खंड होते हैं जिनके सिर H दिए गए लक्ष्य से मेल खाते हैं, तो सभी खंडों को समानांतर में निष्पादित किया जाता है, यह जाँचते हुए कि क्या उनके गार्ड G हैं1, ... , Gn होल्ड करें यदि एक से अधिक क्लॉज के गार्ड होल्ड करते हैं, तो क्लॉज में से एक के लिए एक प्रतिबद्ध विकल्प बनाया जाता है, और सबगोल्स B के साथ निष्पादन आगे बढ़ता H1, ..., Bnचुने गए खंड का इन उप-लक्ष्यों को समानांतर में भी क्रियान्वित किया जा सकता है। इस प्रकार समवर्ती तर्क प्रोग्रामिंग नॉनडेटर्मिनिज्म को न जानने के अतिरिक्त नॉन-डेटर्मिनिज्म के एक रूप को लागू करता है।

उदाहरण के लिए, निम्नलिखित समवर्ती तर्क प्रोग्राम एक विधेय फेरबदल (बाएं, दाएं, मर्ज) को परिभाषित करता है, जिसका उपयोग दो सूचियों बाएं और दाएं को शफल करने के लिए किया जा सकता है। उन्हें एक सूची मर्ज में मिलाकर जो दो सूचियों बाएं और दाएं के क्रम को सुरक्षित रखता है:

shuffle([], [], []).
shuffle(Left, Right, Merge) :-
    Left = [First | Rest] |
    Merge = [First | ShortMerge],
    shuffle(Rest, Right, ShortMerge).
shuffle(Left, Right, Merge) :-
    Right = [First | Rest] |
    Merge = [First | ShortMerge],
    shuffle(Left, Rest, ShortMerge).

यहाँ, [] खाली सूची का प्रतिनिधित्व करता है, और [हैड | टेल] पहले तत्व हैड के साथ एक सूची का प्रतिनिधित्व करता है, जिसके बाद सूची टेल होती है, जैसा कि प्रोलॉग में है। (ध्यान दें कि दूसरे और तीसरे क्लॉज में की पहली घटना लिस्ट कंस्ट्रक्टर है, जबकि की दूसरी घटना कमिटमेंट ऑपरेटर है।) प्रोग्राम का उपयोग किया जा सकता है , उदाहरण के लिए, [ऐस, रानी, ​​​​राजा] और [1, 4, 2] लक्ष्य खंड का आह्वान करके सूचियों में फेरबदल करने के लिए:

shuffle([ace, queen, king], [1, 4, 2], Merge).

प्रोग्राम गैर-नियतात्मक रूप से एकल समाधान उत्पन्न करेगा, उदाहरण के लिए मर्ज = [इक्का, रानी, ​​1, राजा, 4, 2]

यकीनन, समवर्ती तर्क प्रोग्रामिंग संदेश पासिंग पर आधारित है, इसलिए यह अन्य समवर्ती संदेश-पासिंग प्रणालीयों के समान अनिश्चितता के अधीन है, जैसे अभिनेता मॉडल (समवर्ती संगणना में अनिश्चितता देखें)। कार्ल हेविट ने तर्क दिया है कि समवर्ती तर्क प्रोग्रामिंग उनके अर्थ में तर्क पर आधारित नहीं है कि कम्प्यूटेशनल चरणों को तार्किक रूप से नहीं निकाला जा सकता है।[15] चूंकि, समवर्ती तर्क प्रोग्रामिंग में, समापन संगणना का कोई भी परिणाम प्रोग्राम का एक तार्किक परिणाम है, और आंशिक संगणना का कोई भी आंशिक परिणाम प्रोग्राम और अवशिष्ट लक्ष्य (प्रक्रिया नेटवर्क) का एक तार्किक परिणाम है। इस प्रकार संगणनाओं की अनिश्चितता का अर्थ है कि प्रोग्राम के सभी तार्किक परिणाम नहीं निकाले जा सकते हैं।[neutrality is disputed]

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

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

आगमनात्मक तर्क प्रोग्रामिंग

आगमनात्मक तर्क प्रोग्रामिंग पृष्ठभूमि ज्ञान के संदर्भ में सकारात्मक और नकारात्मक उदाहरणों के सामान्यीकरण से संबंधित है: तर्क प्रोग्रामों की मशीन सीखना। इस क्षेत्र में हाल के काम, तर्क प्रोग्रामिंग, सीखने और संभाव्यता के संयोजन ने सांख्यिकीय संबंधपरक शिक्षा और संभाव्य आगमनात्मक तर्क प्रोग्रामिंग के नए क्षेत्र को उत्पन्न किया है।

उच्च-क्रम उच्च क्रम प्रोग्रामिंग

कई शोधकर्ताओं ने तर्क प्रोग्रामिंग को उच्च-क्रम तर्क से प्राप्त उच्च-क्रम प्रोग्रामिंग विशेषताओं के साथ विस्तारित किया है, जैसे कि विधेय चर। ऐसी भाषाओं में प्रोलॉग एक्सटेंशन हाइलॉग और λप्रोलॉग सम्मलित हैं।

रैखिक तर्क प्रोग्रामिंग

लीनियर तर्क के भीतर तर्क प्रोग्रामिंग को आधार देने के परिणामस्वरूप तर्क प्रोग्रामिंग भाषा का डिज़ाइन तैयार किया गया है जो मौलिक तर्क पर आधारित की तुलना में अधिक अधिक अभिव्यंजक हैं। हॉर्न क्लॉज प्रोग्राम केवल विधेय के तर्कों में परिवर्तन द्वारा राज्य परिवर्तन का प्रतिनिधित्व कर सकते हैं। रैखिक तर्क प्रोग्रामिंग में, राज्य परिवर्तन का समर्थन करने के लिए परिवेश रैखिक तर्क का उपयोग किया जा सकता है। लीनियर तर्क पर आधारित तर्क प्रोग्रामिंग भाषा के कुछ प्रारंभिक डिजाइनों में सम्मलित हैं एलओ,[16] बेवकूफ,[17] एसीएल,[18] और फोरम।[19] फोरम सभी रेखीय तर्क की लक्ष्य-निर्देशित व्याख्या प्रदान करता है।

वस्तु-उन्मुख तर्क प्रोग्रामिंग

एफ तर्क ऑब्जेक्ट्स और फ्रेम सिंटैक्स के साथ तर्क प्रोग्रामिंग का विस्तार करता है।

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

लेन-देन तर्क प्रोग्रामिंग

लेन-देन तर्क राज्य-संशोधित अद्यतनों के तार्किक सिद्धांत के साथ तर्क प्रोग्रामिंग का एक विस्तार है। इसमें एक मॉडल-सैद्धांतिक शब्दार्थ और एक प्रक्रियात्मक शब्दार्थ दोनों हैं। फ्लोरा-2 प्रणाली में लेन-देन तर्क के एक उपसमूह का कार्यान्वयन उपलब्ध है। अन्य प्रोटोटाइप भी लेन-देन तर्क हैं।

यह भी देखें

उद्धरण

  1. 1.0 1.1 Winograd, Terry (1972). "Understanding natural language". Cognitive Psychology. 3 (1): 1–191. doi:10.1016/0010-0285(72)90002-3.
  2. Green, Cordell. Application of Theorem Proving to Problem Solving (PDF). IJCAI 1969.
  3. Foster, J.M.; Elcock, E.W. (1969). ABSYS 1: An Incremental Compiler for Assertions: an Introduction. Fourth Annual Machine Intelligence Workshop. Machine Intelligence. Vol. 4. Edinburgh, UK: Edinburgh University Press. pp. 423–429.
  4. Hewitt, Carl. Planner: A Language for Proving Theorems in Robots (PDF). IJCAI 1969.
  5. Hayes, Pat (1973). "Computation and Deduction". Proceedings of the 2nd MFCS Symposium. Czechoslovak Academy of Sciences. pp. 105–118.
  6. 6.0 6.1 Kowalski, Robert (1973). "Predicate Logic as a Programming Language" (PDF). Department of Artificial Intelligence, Edinburgh University. Memo 70. {{cite journal}}: Cite journal requires |journal= (help) Also in Proceedings IFIP Congress, Stockholm, North Holland Publishing Co., 1974, pp. 569–574.
  7. Kowalski, Robert; Kuehner, Donald (Winter 1971). "Linear Resolution with Selection Function" (PDF). Artificial Intelligence. 2 (3–4): 227–260. doi:10.1016/0004-3702(71)90012-9.
  8. Shapiro, Ehud (1989). The family of concurrent logic programming languages (PDF). International Summer School on Logic, Algebra and Computation. Archived (PDF) from the original on February 23, 2017. Also appeared in Shapiro, E. (1989). "The family of concurrent logic programming languages". ACM Computing Surveys. 21 (3): 413–510. CiteSeerX 10.1.1.73.8108. doi:10.1145/72551.72555. S2CID 2497630.
  9. Sáenz-Perez, Fernando; Caballero, Rafael; García-Ruiz, Yolanda (December 2011). A Deductive Database with Datalog and SQL Query Language (PDF). Asian Symposium on Programming Languages and Systems. Springer. pp. 66–73.
  10. Van Emden, M.H.; Kowalski, R.A. (October 1976). "The semantics of predicate logic as a programming language". Journal of the ACM. 23 (4): 733–742. doi:10.1145/321978.321991. S2CID 11048276.
  11. R.A.Kowalski (July 1979). "Algorithm=Logic + Control". Communications of the ACM. 22 (7): 424–436. doi:10.1145/359131.359136. S2CID 2509896.
  12. Prakken, H.; Sartor, G. (October 2015). "Law and logic: a review from an argumentation perspective" (PDF). Artificial Intelligence. 227: 214–245. doi:10.1016/j.artint.2015.06.005. S2CID 4261497.
  13. Sergot, M.J.; Sadri, F.; Kowalski, R.A.; Kriwaczek, F.; Hammond, P; Cory, H.T. (1986). "The British Nationality Act as a logic program" (PDF). Communications of the ACM. 29 (5): 370–386. doi:10.1145/5689.5920. S2CID 5665107.
  14. Shunichi Uchida and Kazuhiro Fuchi. Proceedings of the FGCS Project Evaluation Workshop. Institute for New Generation Computer Technology (ICOT). 1992.
  15. Hewitt, Carl (27 April 2016). "Inconsistency Robustness for Logic Programs". Hal Archives. pp. 21–26. Retrieved 7 November 2016.
  16. Andreoli, Jean-Marc (1 June 1992). "Logic Programming with Focusing Proofs in Linear Logic". Journal of Logic and Computation. 2 (3): 297–347. doi:10.1093/logcom/2.3.297.
  17. Hodas, Joshua; Miller, Dale (1994). "Logic Programming in a Fragment of Intuitionistic Linear Logic". Information and Computation. 110 (2): 327–365. doi:10.1006/inco.1994.1036.
  18. Kobayashi, Naoki; Yonezawa, Akinori (1994). Asynchronous communication model based on linear logic. US/Japan Workshop on Parallel Symbolic Computing. pp. 279–294. CiteSeerX 10.1.1.42.8749.
  19. Miller, Dale (30 September 1996). "Forum: A Multiple-Conclusion Specification Logic". Theoretical Computer Science. 165 (1): 201–232. doi:10.1016/0304-3975(96)00045-X.


स्रोत

सामान्य परिचय


अन्य स्रोत

अग्रिम पठन


बाहरी संबंध