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

From Vigyanwiki
(Created page with "{{short description|Programming paradigm based on formal logic}} {{Programming paradigms}} तर्क प्रोग्रामिंग एक प्रोग्र...")
 
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>एच :- बी<sub>1</sub>, …, बी<sub>n</sub>।</केबीडी>
:<kbd>'''H :- B<sub>1</sub>, …, B<sub>n</sub>'''


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


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


<kbd>H</kbd> को नियम का प्रमुख कहा जाता है और <kbd>B<sub>1</sub></kbd>, ..., <kbd>बी<sub>n</sub></kbd> को शरीर कहते हैं। तथ्य ऐसे नियम हैं जिनका कोई निकाय नहीं है, और सरलीकृत रूप में लिखे गए हैं:
'''H''' को नियम का प्रमुख कहा जाता है और '''B1, ..., Bn''' को शरीर कहा जाता है। तथ्य ऐसे नियम हैं जिनका कोई निकाय नहीं है, और सरलीकृत रूप में लिखे गए हैं:


:<kbd>एच.</kbd>
:'''H'''<kbd>.</kbd>


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


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


: <kbd>H</kbd> को हल करने के लिए, <kbd>B को हल करें<sub>1</sub></kbd>, और ... और <kbd>B हल करें<sub>n</sub></केबीडी>।
: '''H''' को हल करने के लिए, '''B1''' को हल करने के लिए, और ... और '''Bn''' को हल करने के लिए।


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


:<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> प्रोग्रामिंग लैंग्वेज [[योजनाकार (प्रोग्रामिंग भाषा)]] को समझाने के लिए। एक तर्क कार्यक्रम में एक खंड के रूप में, यह परीक्षण करने के लिए एक प्रक्रिया के रूप में दोनों का उपयोग किया जा सकता है कि <kbd>X</kbd> <kbd>गिरने योग्य</kbd> है या नहीं, यह परीक्षण करके कि <kbd>X</kbd> <kbd> है >मानव</kbd>, और एक <kbd>X</kbd> खोजने की प्रक्रिया के रूप में जो <kbd>गिरावट</kbd> है, एक <kbd>X</kbd> जो कि <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> द्वारा उपयोग किए गए एक उदाहरण के आधार पर एक तर्क प्रोग्राम में एक खंड के रूप में, यह परीक्षण करने के लिए एक प्रक्रिया के रूप में दोनों का उपयोग किया जा सकता है कि क्या एक्स मानव है या नहीं, और एक एक्स को खोजने की प्रक्रिया के रूप में एक्स को खोजने के लिए एक प्रक्रिया के रूप में, जो मानव है। तथ्यों की भी एक प्रक्रियात्मक व्याख्या होती है। उदाहरण के लिए, खंड:


:<kbd>मानव (सुकरात)</kbd>
<kbd>मानव (सुकरात),</kbd>


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


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


== इतिहास ==
== इतिहास ==
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}}
यद्यपि यह तर्क के सबूत तरीकों पर आधारित था, एमआईटी में विकसित प्लानर (प्रोग्रामिंग भाषा), इस प्रक्रियावादी प्रतिमान के भीतर उभरने वाली पहली भाषा थी।<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, पॉपलर, कोनिवर, QLISP और समवर्ती भाषा ईथर को जन्म दिया।{{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> और दिखाया कि कैसे यह लक्ष्यों को कम करने की प्रक्रियाओं के रूप में निहितार्थों का व्यवहार करता है। कोवाल्स्की ने मार्सिले में [[एलेन कॉलमेरॉयर]] के साथ सहयोग किया, जिन्होंने प्रोग्रामिंग भाषा प्रोलॉग के डिजाइन और कार्यान्वयन में इन विचारों को विकसित किया।


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


प्रोलॉग ने प्रोग्रामिंग भाषाओं को जन्म [[बीजगणितीय तर्क कार्यात्मक प्रोग्रामिंग भाषा]] लैंग्वेज, [[झालर]], गोडेल (प्रोग्रामिंग लैंग्वेज) | गोडेल, [[बुध प्रोग्रामिंग भाषा]], [[ओज (प्रोग्रामिंग भाषा)]], [[सियाओ (प्रोग्रामिंग भाषा)]], [[विजुअल प्रोलॉग]], [[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  
यद्यपि यह तर्क के सबूत तरीकों पर आधारित था, एमआईटी में विकसित योजनाकार (प्रोग्रामिंग भाषा), इस प्रक्रियावादी प्रतिमान के भीतर उभरने वाली पहली भाषा थी।<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}}
 
एडिनबर्ग में हेस और कोवाल्स्की ने योजनाकार के प्रक्रियात्मक दृष्टिकोण के साथ ज्ञान प्रतिनिधित्व के लिए तर्क-आधारित घोषणात्मक दृष्टिकोण को समेटने की कोशिश की, हेस (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> और दिखाया कि कैसे यह लक्ष्यों को कम करने की प्रक्रियाओं के रूप में निहितार्थों का व्यवहार करता है। कोवाल्स्की ने मार्सिले में [[एलेन कॉलमेरॉयर]] के साथ सहयोग किया, जिन्होंने प्रोग्रामिंग भाषा प्रोलॉग के डिजाइन और कार्यान्वयन में इन विचारों को विकसित किया था।
 
[[तर्क प्रोग्रामिंग के लिए एसोसिएशन]] की स्थापना 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  
| 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 53: Line 56:
| url = http://www.fdi.ucm.es/profesor/fernan/fsp/SCG11a.pdf
| url = http://www.fdi.ucm.es/profesor/fernan/fsp/SCG11a.pdf
}}</ref>
}}</ref>




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


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


जहाँ तर्क एक तर्क कार्यक्रम का प्रतिनिधित्व करता है और नियंत्रण विभिन्न प्रमेय-सिद्ध रणनीतियों का प्रतिनिधित्व करता है।<ref>{{cite journal|author=R.A.Kowalski|title=Algorithm=Logic + Control|journal=[[Communications of the ACM]]|volume=22| issue = 7|date=July 1979|pages=424–436|doi=10.1145/359131.359136|s2cid = 2509896|doi-access=free}}</ref>
जहाँ तर्क एक तर्क प्रोग्राम का प्रतिनिधित्व करता है और नियंत्रण विभिन्न प्रमेय-सिद्ध रणनीतियों का प्रतिनिधित्व करता है।<ref>{{cite journal|author=R.A.Kowalski|title=Algorithm=Logic + Control|journal=[[Communications of the ACM]]|volume=22| issue = 7|date=July 1979|pages=424–436|doi=10.1145/359131.359136|s2cid = 2509896|doi-access=free}}</ref>




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


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


:<kbd>एच :- ए<sub>1</sub>, …, ए<sub>n</sub>, बी नहीं है<sub>1</sub>, …, बी नहीं है<sub>n</sub>. </केबीडी>
:<kbd>एच :- ए<sub>1</sub>, …, ए<sub>n</sub>, बी नहीं है<sub>1</sub>, …, बी नहीं है<sub>n</sub>. </केबीडी>
Line 106: Line 110:
दो उम्मीदवार समाधान हैं, जो पहले उपलक्ष्य <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>पक्षी(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> लक्ष्य का एकमात्र समाधान है।


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


:<kbd>ह :- शरीर<sub>1</sub>।</केबीडी>
:<kbd>ह :- शरीर<sub>1</sub>।</केबीडी>
Line 118: Line 122:
:<kbd>H iff (बॉडी<sub>1</sub> या … या शरीर<sub>k</sub>)</केबीडी>
:<kbd>H iff (बॉडी<sub>1</sub> या … या शरीर<sub>k</sub>)</केबीडी>


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


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


:<kbd>canfly(X) iff पक्षी(X), असामान्य नहीं(X).</kbd>
:<kbd>canfly(X) iff पक्षी(X), असामान्य नहीं(X).</kbd>
Line 131: Line 135:
पूर्णता की धारणा डिफ़ॉल्ट तर्क के लिए मैककार्थी के [[परिधि (तर्क)]]तर्क) शब्दार्थ और बंद दुनिया की धारणा से निकटता से संबंधित है।
पूर्णता की धारणा डिफ़ॉल्ट तर्क के लिए मैककार्थी के [[परिधि (तर्क)]]तर्क) शब्दार्थ और बंद दुनिया की धारणा से निकटता से संबंधित है।


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


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


यह 1972 की अगली गर्मियों में था, कि कोवाल्स्की ने, फिर से कोलमेरॉयर के साथ काम करते हुए, निहितार्थों की प्रक्रियात्मक व्याख्या विकसित की। यह दोहरी घोषणात्मक/प्रक्रियात्मक व्याख्या बाद में प्रोलॉग नोटेशन में औपचारिक हो गई
यह 1972 की अगली गर्मियों में था, कि कोवाल्स्की ने, फिर से कोलमेरॉयर के साथ काम करते हुए, निहितार्थों की प्रक्रियात्मक व्याख्या विकसित की। यह दोहरी घोषणात्मक/प्रक्रियात्मक व्याख्या बाद में प्रोलॉग नोटेशन में औपचारिक हो गई
Line 150: Line 154:
जिसे घोषणात्मक और प्रक्रियात्मक दोनों तरह से पढ़ा (और इस्तेमाल) किया जा सकता है। यह भी स्पष्ट हो गया कि ऐसे खंड निश्चित खंडों या हॉर्न खंडों तक सीमित हो सकते हैं, जहां <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>बी<sub>n</sub></kbd> सभी परमाणु विधेय तर्क सूत्र हैं, और SL-रिज़ॉल्यूशन को LUSH या SLD रिज़ॉल्यूशन तक सीमित (और सामान्यीकृत) किया जा सकता है। SLD- रिज़ॉल्यूशन। 1974 में प्रकाशित 1973 मेमो में कोवाल्स्की की प्रक्रियात्मक व्याख्या और LUSH का वर्णन किया गया था।<ref name="Kowalski" />


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


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


:<kbd>एच :- बी<sub>1</sub>, …, बी<sub>n</sub>, ए<sub>1</sub>, …, ए<sub>n</sub>।</केबीडी>
:<kbd>एच :- बी<sub>1</sub>, …, बी<sub>n</sub>, ए<sub>1</sub>, …, ए<sub>n</sub>।</केबीडी>
Line 181: Line 185:
अपवर्तक तर्क प्रोग्रामिंग का उपयोग दोष निदान, योजना, प्राकृतिक भाषा प्रसंस्करण और मशीन सीखने के लिए किया गया है। इसका उपयोग अपहरण के तर्क के रूप में विफलता के रूप में नकारात्मकता की व्याख्या करने के लिए भी किया गया है।
अपवर्तक तर्क प्रोग्रामिंग का उपयोग दोष निदान, योजना, प्राकृतिक भाषा प्रसंस्करण और मशीन सीखने के लिए किया गया है। इसका उपयोग अपहरण के तर्क के रूप में विफलता के रूप में नकारात्मकता की व्याख्या करने के लिए भी किया गया है।


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


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


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


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


:<kbd>एच:-सी<sub>1</sub>, …, सी<sub>n</sub> ◊ बी<sub>1</sub>, …, बी<sub>n</sub>।</केबीडी>
:<kbd>एच:-सी<sub>1</sub>, …, सी<sub>n</sub> ◊ बी<sub>1</sub>, …, बी<sub>n</sub>।</केबीडी>
Line 204: Line 208:
:<kbd>एच अगर सी<sub>1</sub> और … और सी<sub>n</sub> और बी<sub>1</sub> और … और बी<sub>n</sub>।</केबीडी>
:<kbd>एच अगर सी<sub>1</sub> और … और सी<sub>n</sub> और बी<sub>1</sub> और … और बी<sub>n</sub>।</केबीडी>


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


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


निम्नलिखित बाधा तर्क कार्यक्रम एक शिक्षक के रूप में <kbd>जॉन के</kbd> इतिहास के खिलौना अस्थायी डेटाबेस का प्रतिनिधित्व करता है:
निम्नलिखित बाधा तर्क प्रोग्राम एक शिक्षक के रूप में <kbd>जॉन के</kbd> इतिहास के खिलौना अस्थायी डेटाबेस का प्रतिनिधित्व करता है:
<वाक्यविन्यास लैंग = प्रोलॉग>
<वाक्यविन्यास लैंग = प्रोलॉग>
सिखाता है (जॉन, हार्डवेयर, टी): - 1990 ≤ टी, टी <1999।
सिखाता है (जॉन, हार्डवेयर, टी): - 1990 ≤ टी, टी <1999।
Line 218: Line 222:
यहाँ <kbd>≤</kbd> और <kbd><</kbd> कंस्ट्रेंट प्रेडिकेट हैं, उनके सामान्य अर्थ के साथ। निम्न लक्ष्य खंड डेटाबेस से यह पता लगाने के लिए पूछताछ करता है कि <kbd>जॉन</kbd> दोनों ने कब <kbd>तर्क</kbd> पढ़ाया और <kbd>प्रोफेसर</kbd> थे:
यहाँ <kbd>≤</kbd> और <kbd><</kbd> कंस्ट्रेंट प्रेडिकेट हैं, उनके सामान्य अर्थ के साथ। निम्न लक्ष्य खंड डेटाबेस से यह पता लगाने के लिए पूछताछ करता है कि <kbd>जॉन</kbd> दोनों ने कब <kbd>तर्क</kbd> पढ़ाया और <kbd>प्रोफेसर</kbd> थे:


:<kbd>:- पढ़ाता है (जॉन, लॉजिक, टी), रैंक (जॉन, प्रोफेसर, टी)।</kbd>
:<kbd>:- पढ़ाता है (जॉन, तर्क, टी), रैंक (जॉन, प्रोफेसर, टी)।</kbd>


समाधान <kbd>2010 ≤ T, T ≤ 2012</kbd> है।
समाधान <kbd>2010 ≤ T, T ≤ 2012</kbd> है।
Line 227: Line 231:
{{Main|Concurrent logic programming}}
{{Main|Concurrent logic programming}}
समवर्ती तर्क प्रोग्रामिंग [[समवर्ती प्रोग्रामिंग]] के साथ तर्क प्रोग्रामिंग की अवधारणाओं को एकीकृत करती है। इसके विकास को 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 के दशक में पाँचवीं पीढ़ी के कंप्यूटर की सिस्टम प्रोग्रामिंग भाषा के लिए अपनी पसंद से एक बड़ी प्रेरणा दी गई थी। जापानी पाँचवीं पीढ़ी परियोजना (FGCS)।<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>ह :- जी<sub>1</sub>, …, जी<sub>n</sub> | बी<sub>1</sub>, …, बी<sub>n</sub>।</केबीडी>
Line 235: Line 239:
::<kbd>एच अगर जी<sub>1</sub> और ... और जी<sub>n</sub> और बी<sub>1</sub> और … और बी<sub>n</sub>।</केबीडी>
::<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> 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> shuffle(Left, Right, Merge) </kbd> को परिभाषित करता है, जिसका उपयोग दो सूचियों <kbd>Left</kbd> और <kbd>Right</kbd> को शफल करने के लिए किया जा सकता है। kbd>, उन्हें एक सूची <kbd>मर्ज</kbd> में मिलाकर जो दो सूचियों <kbd>बाएं</kbd> और <kbd>दाएं</kbd> के क्रम को सुरक्षित रखता है:


<वाक्यविन्यास लैंग = प्रोलॉग>
<वाक्यविन्यास लैंग = प्रोलॉग>
Line 257: Line 261:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


कार्यक्रम गैर-नियतात्मक रूप से एकल समाधान उत्पन्न करेगा, उदाहरण के लिए <kbd> मर्ज = [इक्का, रानी, ​​1, राजा, 4, 2]</kbd>।
प्रोग्राम गैर-नियतात्मक रूप से एकल समाधान उत्पन्न करेगा, उदाहरण के लिए <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}}
यकीनन, समवर्ती तर्क प्रोग्रामिंग संदेश पासिंग पर आधारित है, इसलिए यह अन्य समवर्ती संदेश-पासिंग सिस्टमों के समान अनिश्चितता के अधीन है, जैसे [[अभिनेता मॉडल]] (समवर्ती संगणना में अनिश्चितता देखें)। कार्ल हेविट ने तर्क दिया है कि समवर्ती तर्क प्रोग्रामिंग उनके अर्थ में तर्क पर आधारित नहीं है कि कम्प्यूटेशनल चरणों को तार्किक रूप से नहीं निकाला जा सकता है।<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|Concurrent constraint logic programming}}
[[समवर्ती बाधा तर्क प्रोग्रामिंग]] समवर्ती तर्क प्रोग्रामिंग और बाधा तर्क प्रोग्रामिंग को जोड़ती है, समवर्ती को नियंत्रित करने के लिए बाधाओं का उपयोग करती है। एक क्लॉज में एक गार्ड हो सकता है, जो बाधाओं का एक सेट है जो क्लॉज की प्रयोज्यता को रोक सकता है। जब कई खंडों के गार्ड संतुष्ट होते हैं, समवर्ती बाधा तर्क प्रोग्रामिंग केवल एक का उपयोग करने के लिए प्रतिबद्ध विकल्प बनाती है।
[[समवर्ती बाधा तर्क प्रोग्रामिंग]] समवर्ती तर्क प्रोग्रामिंग और बाधा तर्क प्रोग्रामिंग को जोड़ती है, समवर्ती को नियंत्रित करने के लिए बाधाओं का उपयोग करती है। एक क्लॉज में एक गार्ड हो सकता है, जो बाधाओं का एक समूह है जो क्लॉज की प्रयोज्यता को रोक सकता है। जब कई खंडों के गार्ड संतुष्ट होते हैं, समवर्ती बाधा तर्क प्रोग्रामिंग केवल एक का उपयोग करने के लिए प्रतिबद्ध विकल्प बनाती है।


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


=== उच्च-क्रम [[उच्च क्रम प्रोग्रामिंग]] ===
=== उच्च-क्रम [[उच्च क्रम प्रोग्रामिंग]] ===
Line 274: Line 278:


=== [[रैखिक तर्क]] प्रोग्रामिंग ===
=== [[रैखिक तर्क]] प्रोग्रामिंग ===
लीनियर लॉजिक के भीतर लॉजिक प्रोग्रामिंग को आधार देने के परिणामस्वरूप लॉजिक प्रोग्रामिंग लैंग्वेज का डिज़ाइन तैयार किया गया है जो शास्त्रीय लॉजिक पर आधारित की तुलना में काफी अधिक अभिव्यंजक हैं। हॉर्न क्लॉज प्रोग्राम केवल विधेय के तर्कों में परिवर्तन द्वारा राज्य परिवर्तन का प्रतिनिधित्व कर सकते हैं। रैखिक तर्क प्रोग्रामिंग में, राज्य परिवर्तन का समर्थन करने के लिए परिवेश रैखिक तर्क का उपयोग किया जा सकता है। लीनियर लॉजिक पर आधारित लॉजिक प्रोग्रामिंग लैंग्वेज के कुछ शुरुआती डिजाइनों में शामिल हैं 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> फोरम सभी रेखीय तर्क की लक्ष्य-निर्देशित व्याख्या प्रदान करता है।
लीनियर तर्क के भीतर तर्क प्रोग्रामिंग को आधार देने के परिणामस्वरूप तर्क प्रोग्रामिंग भाषा का डिज़ाइन तैयार किया गया है जो शास्त्रीय तर्क पर आधारित की तुलना में काफी अधिक अभिव्यंजक हैं। हॉर्न क्लॉज प्रोग्राम केवल विधेय के तर्कों में परिवर्तन द्वारा राज्य परिवर्तन का प्रतिनिधित्व कर सकते हैं। रैखिक तर्क प्रोग्रामिंग में, राज्य परिवर्तन का समर्थन करने के लिए परिवेश रैखिक तर्क का उपयोग किया जा सकता है। लीनियर तर्क पर आधारित तर्क प्रोग्रामिंग भाषा के कुछ शुरुआती डिजाइनों में शामिल हैं 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> फोरम सभी रेखीय तर्क की लक्ष्य-निर्देशित व्याख्या प्रदान करता है।


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


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


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


== यह भी देखें ==
== यह भी देखें ==
Line 291: Line 295:
* फ्रिल
* फ्रिल
* [[कार्यात्मक प्रोग्रामिंग]]
* [[कार्यात्मक प्रोग्रामिंग]]
* [[फजी लॉजिक]]
* [[फजी लॉजिक|फजी तर्क]]
* [[आगमनात्मक तर्क प्रोग्रामिंग]]
* [[आगमनात्मक तर्क प्रोग्रामिंग]]
* [[कंप्यूटर विज्ञान में तर्क]] ([[औपचारिक तरीके]] शामिल हैं)
* [[कंप्यूटर विज्ञान में तर्क]] ([[औपचारिक तरीके]] शामिल हैं)
Line 322: Line 326:
* {{cite journal|title= लॉजिक प्रोग्रामिंग की नींव के रूप में यूनिफॉर्म प्रूफ|journal= Annals of Pure and Applied Logic|volume= 51|issue= 1–2|pages= 125–157|doi= 10.1016/0168-0072(91)90068-W|year= 1991|last1= Miller|first1= Dale|last2= Nadathur|first2= Gopalan|last3= Pfenning|first3= Frank|last4= Scedrov|first4= Andre|url= https://repository.upenn.edu/cis_reports/711|doi-access= free}}
* {{cite journal|title= लॉजिक प्रोग्रामिंग की नींव के रूप में यूनिफॉर्म प्रूफ|journal= Annals of Pure and Applied Logic|volume= 51|issue= 1–2|pages= 125–157|doi= 10.1016/0168-0072(91)90068-W|year= 1991|last1= Miller|first1= Dale|last2= Nadathur|first2= Gopalan|last3= Pfenning|first3= Frank|last4= Scedrov|first4= Andre|url= https://repository.upenn.edu/cis_reports/711|doi-access= free}}
* एहुद शापिरो (संपादक)। समवर्ती प्रोलॉग। एमआईटी प्रेस। 1987.
* एहुद शापिरो (संपादक)। समवर्ती प्रोलॉग। एमआईटी प्रेस। 1987.
* जेम्स स्लैगल। [https://dl.acm.org/doi/abs/10.1145/365691.365960 निगमनात्मक प्रश्न-उत्तर कार्यक्रम के साथ प्रयोग]। सीएसीएम। दिसंबर 1965।
* जेम्स स्लैगल। [https://dl.acm.org/doi/abs/10.1145/365691.365960 निगमनात्मक प्रश्न-उत्तर प्रोग्राम के साथ प्रयोग]। सीएसीएम। दिसंबर 1965।
* डोव गब्बे|गब्बे, डोव एम.; हॉगर, क्रिस्टोफर जॉन; रॉबिन्सन, जे.ए., एड। (1993-1998)। [https://www.worldcat.org/title/handbook-of-logic-in-artificial-intelligence-and-logic-programming/oclc/26300491 हैंडबुक ऑफ लॉजिक इन आर्टिफिशियल इंटेलिजेंस एंड लॉजिक प्रोग्रामिंग]। खंड। 1-5, ऑक्सफोर्ड यूनिवर्सिटी प्रेस।
* डोव गब्बे|गब्बे, डोव एम.; हॉगर, क्रिस्टोफर जॉन; रॉबिन्सन, जे.ए., एड। (1993-1998)। [https://www.worldcat.org/title/handbook-of-logic-in-artificial-intelligence-and-logic-programming/oclc/26300491 हैंडबुक ऑफ तर्क इन आर्टिफिशियल इंटेलिजेंस एंड तर्क प्रोग्रामिंग]। खंड। 1-5, ऑक्सफोर्ड यूनिवर्सिटी प्रेस।


==अग्रिम पठन==
==अग्रिम पठन==

Revision as of 22:29, 16 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] उस समय बहुत सीमित मेमोरी सिस्टम से निपटने के लिए, योजनाकार ने बैकट्रैकिंग कंट्रोल स्ट्रक्चर का इस्तेमाल किया ताकि एक समय में केवल एक संभावित गणना पथ को संग्रहित किया जा सके, योजनाकार ने प्रोग्रामिंग भाषाओं QA-4, पॉपलर, कोनिवर, क्यूएलआईएसपी और समवर्ती भाषा ईथर को उत्पन्न किया था।[citation needed]

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

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

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


अवधारणाएं

शब्दार्थ

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


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

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

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

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


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

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

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

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

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

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

एच :- ए1, …, एn, बी नहीं है1, …, बी नहीं हैn. </केबीडी>

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

एच अगर ए1 और ... और एn और बी नहीं1 और … और बी नहींn।</केबीडी>

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

<वाक्यविन्यास लैंग = प्रोलॉग> canfly(X) :- पक्षी(X), असामान्य नहीं(X). असामान्य(एक्स):-घायल(एक्स). पक्षी (जॉन)। पक्षी (मैरी)। घायल (जॉन)। </वाक्यविन्यास हाइलाइट>

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

<वाक्यविन्यास लैंग = प्रोलॉग>

- कैनफ्लाई (एक्स)।

</वाक्यविन्यास हाइलाइट>

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

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

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

ह :- शरीर1।</केबीडी>
ह :- शरीरk।</केबीडी>

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

H iff (बॉडी1 या … या शरीरk)</केबीडी>

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

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

canfly(X) iff पक्षी(X), असामान्य नहीं(X).
असामान्य(X) यदि घायल हो(X).
पक्षी (एक्स) iff एक्स = जॉन या एक्स = मैरी।
एक्स = एक्स।
नहीं जॉन = मैरी।
नॉट मैरी = जॉन।

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

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

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

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

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

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

प्रोलॉग

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

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

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

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

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

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

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

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

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

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

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

<वाक्यविन्यास लैंग = प्रोलॉग> canfly(X) :- पक्षी(X), सामान्य(X). मिथ्या :- सामान्य (एक्स), घायल (एक्स)। पक्षी (जॉन)। पक्षी (मैरी)। घायल (जॉन)। </वाक्यविन्यास हाइलाइट>

जहां विधेय सामान्य अपचनीय है।

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

<वाक्यविन्यास लैंग = प्रोलॉग>

- कैनफ्लाई (एक्स)।

</वाक्यविन्यास हाइलाइट>

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

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

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

<वाक्यविन्यास लैंग = प्रोलॉग>

   हल (सच)।
   हल ((ए, बी)): - हल (ए), हल (बी)।
   हल (ए): - खंड (ए, बी), हल (बी)।

</वाक्यविन्यास हाइलाइट>

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

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

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

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

एच:-सी1, …, सीn ◊ बी1, …, बीn।</केबीडी>

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

एच अगर सी1 और … और सीn और बी1 और … और बीn।</केबीडी>

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

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

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

:- पढ़ाता है (जॉन, तर्क, टी), रैंक (जॉन, प्रोफेसर, टी)।

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

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

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

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

ह :- जी1, …, जीn | बी1, …, बीn।</केबीडी>

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

एच अगर जी1 और ... और जीn और बी1 और … और बीn।</केबीडी>

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

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

<वाक्यविन्यास लैंग = प्रोलॉग> फेरबदल ([], [], [])। शफल (बाएं, दाएं, मर्ज) :-

   वाम = [पहला | आराम] |
   मर्ज = [प्रथम | शॉर्टमर्ज],
   शफल (रेस्ट, राइट, शॉर्टमर्ज)।

शफल (बाएं, दाएं, मर्ज) :-

   दाहिना = [पहला | आराम] |
   मर्ज = [प्रथम | शॉर्टमर्ज],
   शफल (बाएं, आराम, शॉर्टमर्ज)।

</वाक्यविन्यास हाइलाइट>

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

<वाक्यविन्यास लैंग = प्रोलॉग> फेरबदल ([इक्का, रानी, ​​​​राजा], [1, 4, 2], मर्ज)। </वाक्यविन्यास हाइलाइट>

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

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


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

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

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

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

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

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

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

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

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

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

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

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

लेन-देन तर्क राज्य-संशोधित अद्यतनों के तार्किक सिद्धांत के साथ तर्क प्रोग्रामिंग का एक विस्तार है। इसमें एक मॉडल-सैद्धांतिक शब्दार्थ और एक प्रक्रियात्मक शब्दार्थ दोनों हैं। फ्लोरा-2 -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.


स्रोत

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


अन्य स्रोत

अग्रिम पठन


बाहरी संबंध