लॉजिक प्रोग्रामिंग: Difference between revisions
No edit summary |
m (Deepak moved page तर्क प्रोग्रामिंग to लॉजिक प्रोग्रामिंग without leaving a redirect) |
||
(5 intermediate revisions by 4 users not shown) | |||
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 9: | Line 9: | ||
:'''<kbd>H if B<sub>1</sub> and … and B<sub>n</sub>''' | :'''<kbd>H if B<sub>1</sub> and … and B<sub>n</sub>''' | ||
'''H''' को नियम का प्रमुख कहा जाता है और '''B1, ..., Bn''' को | '''H''' को नियम का प्रमुख कहा जाता है और '''B1, ..., Bn''' को निकाय कहा जाता है। तथ्य ऐसे नियम हैं जिनका कोई निकाय नहीं है, और सरलीकृत रूप में लिखे गए हैं: | ||
:'''H'''<kbd>.</kbd> | :'''H'''<kbd>.</kbd> | ||
सरलतम स्थिति में जिसमें '''H, B1, ..., Bn''' सभी [[परमाणु सूत्र]] हैं, इन उपवाक्यों को निश्चित उपवाक्य या हॉर्न उपवाक्य कहा जाता है। चूंकि, इस सरल स्थितिे के कई विस्तार हैं, सबसे महत्वपूर्ण स्थिति है जिसमें एक खंड के | सरलतम स्थिति में जिसमें '''H, B1, ..., Bn''' सभी [[परमाणु सूत्र]] हैं, इन उपवाक्यों को निश्चित उपवाक्य या हॉर्न उपवाक्य कहा जाता है। चूंकि, इस सरल स्थितिे के कई विस्तार हैं, सबसे महत्वपूर्ण स्थिति है जिसमें एक खंड के निकाय में स्थितियां भी परमाणु सूत्रों की उपेक्षा हो सकती हैं। तर्क प्रोग्रामिंग भाषा जिसमें यह विस्तार सम्मलित है, में [[नॉन-मोनोटोनिक तर्क]] की ज्ञान प्रतिनिधित्व क्षमताएं हैं। | ||
एएसपी और डेटाअल में, तर्क प्रोग्राम में | एएसपी और डेटाअल में, तर्क प्रोग्राम में मात्र [[घोषणात्मक प्रोग्रामिंग]] पठन होता है और उनका निष्पादन प्रमाण प्रक्रिया या मॉडल जनरेटर के माध्यम से किया जाता है जिसका व्यवहार प्रोग्रामर द्वारा नियंत्रित करने के लिए नहीं होता है। चूंकि, भाषाओं के प्रोलॉग फैमिली में, तर्क प्रोग्रामों में लक्ष्य-घटाने की प्रक्रियाओं के रूप में एक [[प्रक्रियात्मक प्रोग्रामिंग]] व्याख्या भी होती है: | ||
: '''H''' | : '''H''' का समाधान करने के लिए, '''B1''' का समाधान करने के लिए, और ... और '''Bn''' का समाधान करने के लिए, | ||
एक उदाहरण के रूप में निम्नलिखित उपवाक्य पर विचार करें: | एक उदाहरण के रूप में निम्नलिखित उपवाक्य पर विचार करें: | ||
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> यह एलआईएसपी में प्रोग्राम के निष्पादन को | 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 के दशक की | तर्क प्रोग्रामिंग अपने वर्तमान रूप में 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" /> उस समय बहुत सीमित मेमोरी प्रणाली से निपटने के लिए, योजनाकार ने बैकट्रैकिंग नियंत्रण संरचना का उपयोग किया जिससे की एक समय में मात्र एक संभावित गणना पथ को संग्रहित किया जा सके, योजनाकार ने प्रोग्रामिंग भाषाओं क्यूऐ-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. 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. 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|एक्सएसबी]] और λप्रोलॉग, साथ ही साथ [[समवर्ती तर्क प्रोग्रामिंग]] की एक किस्म,<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> | ||
=== तर्क और नियंत्रण === | === तर्क और नियंत्रण === | ||
{{Main|घोषणात्मक प्रोग्रामिंग}} | {{Main|घोषणात्मक प्रोग्रामिंग}} | ||
तर्क प्रोग्रामिंग को नियंत्रित कटौती के रूप में देखा जा सकता है। तर्क प्रोग्रामिंग में एक महत्वपूर्ण अवधारणा प्रोग्राम को उनके तर्क | तर्क प्रोग्रामिंग को नियंत्रित कटौती के रूप में देखा जा सकता है। तर्क प्रोग्रामिंग में एक महत्वपूर्ण अवधारणा प्रोग्राम को उनके तर्क घटक और उनके नियंत्रण घटक में भिन्न करना है। शुद्ध तर्क प्रोग्रामिंग भाषाओं के साथ, तर्क घटक अकेले उत्पादित समाधानों को निर्धारित करता है। तर्क प्रोग्राम को निष्पादित करने के वैकल्पिक विधि प्रदान करने के लिए नियंत्रण घटक को विविध किया जा सकता है। यह धारणा स्लोगन द्वारा पकड़ी गई है | ||
: | : कलन विधि = तर्क + नियंत्रण | ||
जहाँ तर्क एक तर्क प्रोग्राम का प्रतिनिधित्व करता है और नियंत्रण विभिन्न प्रमेय-सिद्ध रणनीतियों का प्रतिनिधित्व करता है।<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 91: | Line 89: | ||
:<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 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>B<sub>i</sub></kbd> परमाणु सूत्र हैं। नकारात्मक शाब्दिक <kbd>में नकारात्मकता B नहीं H<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) :- bird(X), not abnormal(X). | canfly(X) :- bird(X), not abnormal(X). | ||
abnormal(X) :- wounded(X). | abnormal(X) :- wounded(X). | ||
Line 99: | Line 97: | ||
</syntaxhighlight>उड़ने वाली चीज़ खोजने के लक्ष्य को देखते हुए:<syntaxhighlight lang="c"> | </syntaxhighlight>उड़ने वाली चीज़ खोजने के लक्ष्य को देखते हुए:<syntaxhighlight lang="c"> | ||
:- canfly(X). | :- canfly(X). | ||
</syntaxhighlight>दो अपेक्षाकृत समाधान हैं, जो पहले उपलक्ष्य <kbd>पक्षी(X)</kbd> | </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] तक विफलता के रूप में नकारात्मकता की तार्किक स्थिति अनसुलझी थी, यह दिखाया कि, कुछ प्राकृतिक परिस्थितियों में, यह प्रोग्राम के पूरा होने के संबंध में मौलिक निषेध का एक सही (और कभी-कभी पूर्ण) कार्यान्वयन है। पूर्णता की मात्रा | [[कीथ क्लार्क (कंप्यूटर वैज्ञानिक)]] [1978] तक विफलता के रूप में नकारात्मकता की तार्किक स्थिति अनसुलझी थी, यह दिखाया कि, कुछ प्राकृतिक परिस्थितियों में, यह प्रोग्राम के पूरा होने के संबंध में मौलिक निषेध का एक सही (और कभी-कभी पूर्ण) कार्यान्वयन है। पूर्णता की मात्रा सामान्यता बाएं हाथ की ओर एक ही विधेय के साथ सभी प्रोग्राम क्लॉज के समूह के संबंध में है, कहते हैं | ||
:: <kbd>H :- Body<sub>1</sub> | :: <kbd>H :- Body<sub>1</sub> | ||
Line 113: | Line 111: | ||
:<kbd>H iff (Body<sub>1</sub> or … or Body<sub>k</sub>) | :<kbd>H iff (Body<sub>1</sub> or … or Body<sub>k</sub>) | ||
जहाँ iff का अर्थ है यदि और | जहाँ iff का अर्थ है यदि और मात्र यदि, पूर्णता लिखने के लिए समानता विधेय के स्पष्ट उपयोग और समानता के लिए उपयुक्त स्वयंसिद्धों के एक समूह को सम्मलित करने की भी आवश्यकता होती है। चूंकि, विफलता के रूप में नकारात्मकता के कार्यान्वयन को समानता के सिद्धांतों के बिना परिभाषाओं के मात्र आधे भाग की आवश्यकता होती है। | ||
उदाहरण के लिए, उपरोक्त प्रोग्राम का पूरा होना है: | उदाहरण के लिए, उपरोक्त प्रोग्राम का पूरा होना है: | ||
Line 126: | Line 124: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
पूर्णता की धारणा डिफ़ॉल्ट तर्क के लिए मैककार्थी के [[परिधि (तर्क)]] | पूर्णता की धारणा डिफ़ॉल्ट तर्क के लिए मैककार्थी के [[परिधि (तर्क)]] शब्दार्थ और बंद दुनिया की धारणा से निकटता से संबंधित है। | ||
पूर्ण होने वाले शब्दार्थ के विकल्प के रूप में, विफलता के रूप में निषेध को भी ज्ञानात्मक रूप से व्याख्या किया जा सकता है, जैसा कि उत्तर समूह प्रोग्रामिंग के [[स्थिर मॉडल शब्दार्थ]] में है। इस व्याख्या में नहीं(B<sub>i</sub>) का शाब्दिक अर्थ है कि B<sub>i</sub> ज्ञात नहीं है या विश्वास नहीं है। महामारी की व्याख्या का लाभ यह है कि इसे मौलिक निषेध के साथ बहुत सरलता से जोड़ा जा सकता है, जैसा कि विस्तारित तर्क प्रोग्रामिंग में, ऐसे वाक्यांशों को औपचारिक रूप देने के लिए इसके विपरीत नहीं दिखाया जा सकता है, जहां इसके विपरीत मौलिक निषेध है और नहीं दिखाया जा सकता है असफलता के रूप में निषेध होता है। | पूर्ण होने वाले शब्दार्थ के विकल्प के रूप में, विफलता के रूप में निषेध को भी ज्ञानात्मक रूप से व्याख्या किया जा सकता है, जैसा कि उत्तर समूह प्रोग्रामिंग के [[स्थिर मॉडल शब्दार्थ]] में है। इस व्याख्या में नहीं(B<sub>i</sub>) का शाब्दिक अर्थ है कि B<sub>i</sub> ज्ञात नहीं है या विश्वास नहीं है। महामारी की व्याख्या का लाभ यह है कि इसे मौलिक निषेध के साथ बहुत सरलता से जोड़ा जा सकता है, जैसा कि विस्तारित तर्क प्रोग्रामिंग में, ऐसे वाक्यांशों को औपचारिक रूप देने के लिए इसके विपरीत नहीं दिखाया जा सकता है, जहां इसके विपरीत मौलिक निषेध है और नहीं दिखाया जा सकता है असफलता के रूप में निषेध होता है। | ||
Line 133: | Line 131: | ||
तथ्य यह है कि हॉर्न क्लॉज को एक प्रक्रियात्मक व्याख्या दी जा सकती है और इसके विपरीत, लक्ष्य-घटाने की प्रक्रियाओं को हॉर्न क्लॉज + बैकवर्ड रीजनिंग के रूप में समझा जा सकता है, जिसका अर्थ है कि तर्क प्रोग्राम ज्ञान प्रतिनिधित्व के घोषणात्मक और प्रक्रियात्मक प्रतिनिधित्व को जोड़ते हैं। अस्वीकृति को विफलता के रूप में सम्मलित करने का अर्थ है कि तर्क प्रोग्रामिंग एक प्रकार का गैर-मोनोटोनिक तर्क है। | तथ्य यह है कि हॉर्न क्लॉज को एक प्रक्रियात्मक व्याख्या दी जा सकती है और इसके विपरीत, लक्ष्य-घटाने की प्रक्रियाओं को हॉर्न क्लॉज + बैकवर्ड रीजनिंग के रूप में समझा जा सकता है, जिसका अर्थ है कि तर्क प्रोग्राम ज्ञान प्रतिनिधित्व के घोषणात्मक और प्रक्रियात्मक प्रतिनिधित्व को जोड़ते हैं। अस्वीकृति को विफलता के रूप में सम्मलित करने का अर्थ है कि तर्क प्रोग्रामिंग एक प्रकार का गैर-मोनोटोनिक तर्क है। | ||
मौलिक तर्क की तुलना में इसकी सादगी के अतिरिक्त, हार्न क्लॉज और असफलता के रूप में निषेध का यह संयोजन आश्चर्यजनक रूप से अभिव्यंजक सिद्ध हुआ है। उदाहरण के लिए, यह कारण और प्रभाव के सामान्य ज्ञान के नियमों के लिए एक प्राकृतिक प्रतिनिधित्व प्रदान करता है, जैसा कि स्थिति कलन और घटना कलन दोनों द्वारा औपचारिक रूप से किया गया है। यह नियम की अर्ध-औपचारिक भाषा के अधिक स्वाभाविक रूप से अनुरूप होने के लिए भी दिखाया गया है। विशेष रूप से, प्राकेन और सार्टोर<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|प्रोलॉग}} | {{Main|प्रोलॉग}} | ||
प्रोग्रामिंग भाषा प्रोलॉग को 1972 में एलेन कोलमेरॉयर द्वारा विकसित किया गया था। यह एडिनबर्ग में [[मारसैल]] में कोलमेरौयर और रॉबर्ट कोवाल्स्की के बीच एक सहयोग से | प्रोग्रामिंग भाषा प्रोलॉग को 1972 में एलेन कोलमेरॉयर द्वारा विकसित किया गया था। यह एडिनबर्ग में [[मारसैल]] में कोलमेरौयर और रॉबर्ट कोवाल्स्की के बीच एक सहयोग से उभरा एकोलमेरॉयर [[प्राकृतिक भाषा की समझ]] पर कार्य कर रहा था, शब्दार्थ का प्रतिनिधित्व करने के लिए तर्क का उपयोग कर रहा था और प्रश्न-उत्तर के लिए संकल्प का उपयोग कर रहा था। 1971 की गर्मियों के समय, कोलमेरॉयर और कोवालास्की ने पाया कि [[औपचारिक व्याकरण]] का प्रतिनिधित्व करने के लिए तर्क के क्लौसल रूप का उपयोग किया जा सकता है और संकल्प प्रमेय का उपयोग पार्सिंग के लिए किया जा सकता है। उन्होंने देखा कि कुछ प्रमेय सिद्ध करने वाले, जैसे हाइपर-रिज़ॉल्यूशन, बॉटम-अप पार्सर के रूप में व्यवहार करते हैं और अन्य, जैसे एसएलडी रिज़ॉल्यूशन एसएल-रेज़ोल्यूशन (1971), टॉप-डाउन पार्सर के रूप में व्यवहार करते हैं। | ||
यह 1972 की अगली गर्मियों में था, कि कोवाल्स्की ने, फिर से कोलमेरॉयर के साथ | यह 1972 की अगली गर्मियों में था, कि कोवाल्स्की ने, फिर से कोलमेरॉयर के साथ कार्य करते हुए, निहितार्थों की प्रक्रियात्मक व्याख्या विकसित की यह दोहरी घोषणात्मक/प्रक्रियात्मक व्याख्या पश्चात में प्रोलॉग अंकन में औपचारिक हो गई | ||
:<kbd>H :- B<sub>1</sub>, …, B<sub>n</sub> | :<kbd>H :- B<sub>1</sub>, …, B<sub>n</sub> | ||
जिसे घोषणात्मक और प्रक्रियात्मक दोनों प्रकार से पढ़ा (और उपयोग) किया जा सकता है। यह भी स्पष्ट हो गया कि ऐसे खंड निश्चित खंडों या हॉर्न खंडों तक सीमित हो सकते हैं, जहां <kbd>H</kbd>, <kbd>B<sub>1</sub></kbd>, ..., <kbd>B<sub>n</sub></kbd> सभी परमाणु विधेय तर्क सूत्र हैं, और एसएल-रिज़ॉल्यूशन को एलयूएसएच या एसएलडी रिज़ॉल्यूशन तक सीमित (और सामान्यीकृत) किया जा सकता है। एसएलडी- | जिसे घोषणात्मक और प्रक्रियात्मक दोनों प्रकार से पढ़ा (और उपयोग) किया जा सकता है। यह भी स्पष्ट हो गया कि ऐसे खंड निश्चित खंडों या हॉर्न खंडों तक सीमित हो सकते हैं, जहां <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 में एडिनबर्ग में डेविड वारेन द्वारा एक कंपाइलर के विकास से अधिक गति मिली, प्रयोगों ने प्रदर्शित किया कि एडिनबर्ग प्रोलॉग अन्य [[प्रतीकात्मक प्रोग्रामिंग]] भाषाओं जैसे [[लिस्प (प्रोग्रामिंग भाषा)]] की प्रसंस्करण गति के साथ प्रतिस्पर्धा कर सकता है। एडिनबर्ग प्रोलॉग वास्तविक मानक बन गया और मानकीकरण मानक प्रोलॉग के लिए अंतर्राष्ट्रीय संगठन की परिभाषा को दृढ़ता से प्रभावित किया था। | ||
=== अपवर्तक तर्क प्रोग्रामिंग === | === अपवर्तक तर्क प्रोग्रामिंग === | ||
Line 165: | Line 163: | ||
bird(mary). | bird(mary). | ||
wounded(john). | wounded(john). | ||
</syntaxhighlight>जहां विधेय <kbd>सामान्य</kbd> अपचनीय है। | </syntaxhighlight>जहां विधेय <kbd>सामान्य</kbd> अपचनीय है। समस्या का समाधान की जाने वाली समस्याओं के समाधान के रूप में अपवर्तक विधेय के संदर्भ में व्यक्त की गई परिकल्पनाओं को प्राप्त करके प्राप्त किया जाता है। ये समस्याएं या तो अवलोकन हो सकती हैं जिन्हें समझाया जाना चाहिए (जैसा कि मौलिक अपहरण तर्क के रूप में) या समाधान किए जाने वाले लक्ष्य (सामान्य तर्क प्रोग्रामिंग के रूप में) उदाहरण के लिए, परिकल्पना <kbd>सामान्य(मैरी)</kbd> अवलोकन <kbd>कैनफ्लाई(मैरी)</kbd> की व्याख्या करती है। इसके अतिरिक्त, वही परिकल्पना कुछ ऐसा खोजने के लक्ष्य के <kbd>X = मैरी</kbd> एकमात्र समाधान पर जोर देती है जो उड़ सकता है:<syntaxhighlight lang="c"> | ||
समस्या | |||
:- canfly(X). | :- canfly(X). | ||
</syntaxhighlight>अपवर्तक तर्क प्रोग्रामिंग का उपयोग दोष निदान, योजना, प्राकृतिक भाषा प्रसंस्करण और मशीन सीखने के लिए किया गया है। इसका उपयोग अपहरण के तर्क के रूप में विफलता के रूप में नकारात्मकता की व्याख्या करने के लिए भी किया गया है। | </syntaxhighlight>अपवर्तक तर्क प्रोग्रामिंग का उपयोग दोष निदान, योजना, प्राकृतिक भाषा प्रसंस्करण और मशीन सीखने के लिए किया गया है। इसका उपयोग अपहरण के तर्क के रूप में विफलता के रूप में नकारात्मकता की व्याख्या करने के लिए भी किया गया है। | ||
Line 178: | Line 174: | ||
</syntaxhighlight>जहां सत्य एक खाली संयोजन का प्रतिनिधित्व करता है, और खंड (ए, बी) का अर्थ है कि फॉर्म ए का ऑब्जेक्ट-स्तरीय खंड B है। | </syntaxhighlight>जहां सत्य एक खाली संयोजन का प्रतिनिधित्व करता है, और खंड (ए, बी) का अर्थ है कि फॉर्म ए का ऑब्जेक्ट-स्तरीय खंड B है। | ||
मेटतर्क प्रोग्रामिंग ऑब्जेक्ट-लेवल और मेटालेवल प्रस्तुतियों को प्राकृतिक भाषा के रूप में संयोजित करने की अनुमति देता है। इसका उपयोग किसी भी तर्क को लागू करने के लिए भी किया जा सकता है जिसे [[अनुमान नियम]] के रूप में निर्दिष्ट किया गया है। मेटालॉगिक का उपयोग तर्क प्रोग्रामिंग में मेटाप्रोग्राम को लागू करने के लिए किया जाता है, जो डेटा के रूप में अन्य प्रोग्राम, डेटाबेस, | मेटतर्क प्रोग्रामिंग ऑब्जेक्ट-लेवल और मेटालेवल प्रस्तुतियों को प्राकृतिक भाषा के रूप में संयोजित करने की अनुमति देता है। इसका उपयोग किसी भी तर्क को लागू करने के लिए भी किया जा सकता है जिसे [[अनुमान नियम]] के रूप में निर्दिष्ट किया गया है। मेटालॉगिक का उपयोग तर्क प्रोग्रामिंग में मेटाप्रोग्राम को लागू करने के लिए किया जाता है, जो डेटा के रूप में अन्य प्रोग्राम, डेटाबेस, ज्ञान बेस या स्वयंसिद्ध सिद्धांतों में हेरफेर करता है। | ||
=== बाधा तर्क प्रोग्रामिंग === | === बाधा तर्क प्रोग्रामिंग === | ||
{{Main|कंस्ट्रेंट तर्क प्रोग्रामिंग}} | {{Main|कंस्ट्रेंट तर्क प्रोग्रामिंग}} | ||
बाधा तर्क प्रोग्रामिंग [[बाधा समाधान]] के साथ हॉर्न खंड तर्क प्रोग्रामिंग को जोड़ती है। यह कुछ विधेय, बाधा विधेय के रूप में घोषित, खंडों के | बाधा तर्क प्रोग्रामिंग [[बाधा समाधान]] के साथ हॉर्न खंड तर्क प्रोग्रामिंग को जोड़ती है। यह कुछ विधेय, बाधा विधेय के रूप में घोषित, खंडों के निकाय में शाब्दिक के रूप में होने की अनुमति देकर हॉर्न क्लॉज का विस्तार करता है। एक बाधा तर्क प्रोग्राम प्रपत्र के खंड का एक समूह है: | ||
:<kbd>H :- C<sub>1</sub>, …, C<sub>n</sub> ◊ B<sub>1</sub>, …, B<sub>n</sub> | :<kbd>H :- C<sub>1</sub>, …, C<sub>n</sub> ◊ B<sub>1</sub>, …, B<sub>n</sub> | ||
Line 192: | Line 188: | ||
चूंकि, जबकि खंडों के प्रमुखों में विधेय को बाधा तर्क प्रोग्राम द्वारा परिभाषित किया गया है, बाधाओं में विधेय कुछ डोमेन-विशिष्ट मॉडल-सैद्धांतिक संरचना या सिद्धांत द्वारा पूर्वनिर्धारित हैं। | चूंकि, जबकि खंडों के प्रमुखों में विधेय को बाधा तर्क प्रोग्राम द्वारा परिभाषित किया गया है, बाधाओं में विधेय कुछ डोमेन-विशिष्ट मॉडल-सैद्धांतिक संरचना या सिद्धांत द्वारा पूर्वनिर्धारित हैं। | ||
प्रक्रियात्मक रूप से, उप-लक्ष्य जिनके विधेय को प्रोग्राम द्वारा परिभाषित किया गया है, सामान्य तर्क प्रोग्रामिंग के रूप में, लक्ष्य-कमी द्वारा | प्रक्रियात्मक रूप से, उप-लक्ष्य जिनके विधेय को प्रोग्राम द्वारा परिभाषित किया गया है, सामान्य तर्क प्रोग्रामिंग के रूप में, लक्ष्य-कमी द्वारा समाधान किया जाता है, लेकिन एक डोमेन-विशिष्ट बाधा-समाधानकर्ता द्वारा संतुष्टि के लिए बाधाओं की जांच की जाती है, जो बाधा विधेय के शब्दार्थ को लागू करती है। बाधाओं के संतोषजनक संयोजन में इसे कम करके एक प्रारंभिक समस्या समाधान किया जाता है। | ||
निम्नलिखित बाधा तर्क प्रोग्राम एक शिक्षक के रूप में <kbd>जॉन के</kbd> इतिहास के खिलौना अस्थायी डेटाबेस का प्रतिनिधित्व करता है:<syntaxhighlight lang="c"> | निम्नलिखित बाधा तर्क प्रोग्राम एक शिक्षक के रूप में <kbd>जॉन के</kbd> इतिहास के खिलौना अस्थायी डेटाबेस का प्रतिनिधित्व करता है:<syntaxhighlight lang="c"> | ||
Line 200: | Line 196: | ||
rank(john, instructor, T) :- 1990 ≤ T, T < 2010. | rank(john, instructor, T) :- 1990 ≤ T, T < 2010. | ||
rank(john, professor, T) :- 2010 ≤ T, T < 2014. | rank(john, professor, T) :- 2010 ≤ T, T < 2014. | ||
</syntaxhighlight>यहाँ <kbd>≤</kbd> और <kbd><</kbd> कंस्ट्रेंट प्रेडिकेट हैं, उनके सामान्य अर्थ के | </syntaxhighlight>यहाँ <kbd>≤</kbd> और <kbd><</kbd> कंस्ट्रेंट प्रेडिकेट हैं, उनके सामान्य अर्थ के साथ निम्न लक्ष्य खंड डेटाबेस से यह पता लगाने के लिए पूछताछ करता है कि <kbd>जॉन</kbd> दोनों ने कब <kbd>तर्क</kbd> पढ़ाया और <kbd>प्रोफेसर</kbd> थे: | ||
:<kbd>:- teaches(john, logic, T), rank(john, professor, T)</kbd> | :<kbd>:- teaches(john, logic, T), rank(john, professor, T)</kbd> | ||
Line 206: | Line 202: | ||
समाधान <kbd>2010 ≤ T, T ≤ 2012</kbd> है। | समाधान <kbd>2010 ≤ T, T ≤ 2012</kbd> है। | ||
[[असैनिक अभियंत्रण]], [[मैकेनिकल इंजीनियरिंग]], [[डिजिटल सर्किट]] सत्यापन, [[स्वचालित समय सारिणी]], [[हवाई यातायात नियंत्रण]] और वित्त जैसे क्षेत्रों में समस्याओं को | [[असैनिक अभियंत्रण]], [[मैकेनिकल इंजीनियरिंग]], [[डिजिटल सर्किट]] सत्यापन, [[स्वचालित समय सारिणी]], [[हवाई यातायात नियंत्रण]] और वित्त जैसे क्षेत्रों में समस्याओं को समाधान करने के लिए बाधा तर्क प्रोग्रामिंग का उपयोग किया गया है। यह अपहरणात्मक तर्क प्रोग्रामिंग से निकटता से संबंधित है। | ||
=== समवर्ती तर्क प्रोग्रामिंग === | === समवर्ती तर्क प्रोग्रामिंग === | ||
Line 222: | Line 218: | ||
चूंकि, प्रक्रियात्मक रूप से, जब कई खंड होते हैं जिनके सिर <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>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> को शफल करने के लिए किया जा सकता है। उन्हें एक सूची मिलाकर जो दो सूचियों <kbd>बाएं</kbd> और <kbd>दाएं</kbd> के क्रम को सुरक्षित रखता है:<syntaxhighlight lang="c"> | ||
shuffle([], [], []). | shuffle([], [], []). | ||
shuffle(Left, Right, Merge) :- | shuffle(Left, Right, Merge) :- | ||
Line 232: | Line 228: | ||
Merge = [First | ShortMerge], | Merge = [First | ShortMerge], | ||
shuffle(Left, Rest, ShortMerge). | shuffle(Left, Rest, ShortMerge). | ||
</syntaxhighlight>यहाँ, <kbd>[]</kbd> खाली सूची का प्रतिनिधित्व करता है, और <kbd>[हैड | टेल]</kbd> पहले तत्व <kbd>हैड</kbd> के साथ एक सूची का प्रतिनिधित्व करता है, जिसके बाद सूची <kbd>टेल</kbd> होती है, जैसा कि प्रोलॉग में है। (ध्यान दें कि दूसरे और तीसरे क्लॉज में की पहली घटना | </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). | shuffle([ace, queen, king], [1, 4, 2], Merge). | ||
</syntaxhighlight>प्रोग्राम गैर-नियतात्मक रूप से एकल समाधान उत्पन्न करेगा, उदाहरण के लिए <kbd>मर्ज = [इक्का, रानी, 1, राजा, 4, 2]</kbd>। | </syntaxhighlight>प्रोग्राम गैर-नियतात्मक रूप से एकल समाधान उत्पन्न करेगा, उदाहरण के लिए <kbd>मर्ज = [इक्का, रानी, 1, राजा, 4, 2]</kbd>। | ||
Line 239: | Line 235: | ||
=== समवर्ती बाधा तर्क प्रोग्रामिंग === | === समवर्ती बाधा तर्क प्रोग्रामिंग === | ||
{{Main|समवर्ती बाधा तर्क प्रोग्रामिंग}} | {{Main|समवर्ती बाधा तर्क प्रोग्रामिंग}} | ||
[[समवर्ती बाधा तर्क प्रोग्रामिंग]] समवर्ती तर्क प्रोग्रामिंग और बाधा तर्क प्रोग्रामिंग को जोड़ती है, समवर्ती को नियंत्रित करने के लिए बाधाओं का उपयोग करती है। एक क्लॉज में एक गार्ड हो सकता है, जो बाधाओं का एक समूह है जो क्लॉज की प्रयोज्यता को रोक सकता है। जब कई खंडों के गार्ड संतुष्ट होते हैं, समवर्ती बाधा तर्क प्रोग्रामिंग | [[समवर्ती बाधा तर्क प्रोग्रामिंग]] समवर्ती तर्क प्रोग्रामिंग और बाधा तर्क प्रोग्रामिंग को जोड़ती है, समवर्ती को नियंत्रित करने के लिए बाधाओं का उपयोग करती है। एक क्लॉज में एक गार्ड हो सकता है, जो बाधाओं का एक समूह है जो क्लॉज की प्रयोज्यता को रोक सकता है। जब कई खंडों के गार्ड संतुष्ट होते हैं, समवर्ती बाधा तर्क प्रोग्रामिंग मात्र एक का उपयोग करने के लिए प्रतिबद्ध विकल्प बनाती है। | ||
=== आगमनात्मक तर्क प्रोग्रामिंग === | === आगमनात्मक तर्क प्रोग्रामिंग === | ||
{{Main|प्रेरक तर्क प्रोग्रामिंग}} | {{Main|प्रेरक तर्क प्रोग्रामिंग}} | ||
आगमनात्मक तर्क प्रोग्रामिंग पृष्ठभूमि ज्ञान के संदर्भ में सकारात्मक और नकारात्मक उदाहरणों के सामान्यीकरण से संबंधित है: तर्क प्रोग्रामों की मशीन | आगमनात्मक तर्क प्रोग्रामिंग पृष्ठभूमि ज्ञान के संदर्भ में सकारात्मक और नकारात्मक उदाहरणों के सामान्यीकरण से संबंधित है: तर्क प्रोग्रामों की मशीन सीखना, इस क्षेत्र में हाल के कार्य, तर्क प्रोग्रामिंग, सीखने और संभाव्यता के संयोजन ने [[सांख्यिकीय संबंधपरक शिक्षा]] और [[संभाव्य आगमनात्मक तर्क प्रोग्रामिंग]] के नए क्षेत्र को उत्पन्न किया है। | ||
=== उच्च-क्रम [[उच्च क्रम प्रोग्रामिंग]] === | === उच्च-क्रम [[उच्च क्रम प्रोग्रामिंग]] === | ||
कई शोधकर्ताओं ने तर्क प्रोग्रामिंग को उच्च-क्रम तर्क से प्राप्त उच्च-क्रम प्रोग्रामिंग विशेषताओं के साथ विस्तारित किया है, जैसे कि विधेय | कई शोधकर्ताओं ने तर्क प्रोग्रामिंग को उच्च-क्रम तर्क से प्राप्त उच्च-क्रम प्रोग्रामिंग विशेषताओं के साथ विस्तारित किया है, जैसे कि विधेय चर ऐसी भाषाओं में प्रोलॉग विस्तार [[HiLog|हाइलॉग]] और λप्रोलॉग सम्मलित हैं। | ||
=== [[रैखिक तर्क]] प्रोग्रामिंग === | === [[रैखिक तर्क]] प्रोग्रामिंग === | ||
रैखिक तर्क के भीतर तर्क प्रोग्रामिंग को आधार देने के परिणामस्वरूप तर्क प्रोग्रामिंग भाषा का डिज़ाइन तैयार किया गया है जो मौलिक तर्क पर आधारित की तुलना में अधिक अधिक अभिव्यंजक हैं। हॉर्न क्लॉज प्रोग्राम मात्र विधेय के तर्कों में परिवर्तन द्वारा स्टेट परिवर्तन का प्रतिनिधित्व कर सकते हैं। रैखिक तर्क प्रोग्रामिंग में, स्टेट परिवर्तन का समर्थन करने के लिए परिवेश रैखिक तर्क का उपयोग किया जा सकता है। रैखिक तर्क पर आधारित तर्क प्रोग्रामिंग भाषा के कुछ प्रारंभिक डिजाइनों में सम्मलित हैं एलओ,<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> फोरम सभी रेखीय तर्क की लक्ष्य-निर्देशित व्याख्या प्रदान करता है। | |||
=== वस्तु-उन्मुख तर्क प्रोग्रामिंग === | === वस्तु-उन्मुख तर्क प्रोग्रामिंग === | ||
Line 257: | Line 253: | ||
=== [[लेन-देन तर्क]] प्रोग्रामिंग === | === [[लेन-देन तर्क]] प्रोग्रामिंग === | ||
लेन-देन तर्क | लेन-देन तर्क स्टेट-संशोधित अद्यतनों के तार्किक सिद्धांत के साथ तर्क प्रोग्रामिंग का एक विस्तार है। इसमें एक मॉडल-सैद्धांतिक शब्दार्थ और एक प्रक्रियात्मक शब्दार्थ दोनों हैं। [[फ्लोरा-2]] प्रणाली में लेन-देन तर्क के एक उपसमूह का कार्यान्वयन उपलब्ध है। अन्य प्रोटोटाइप भी लेन-देन तर्क हैं। | ||
== यह भी देखें == | == यह भी देखें == | ||
Line 268: | Line 264: | ||
* [[फजी लॉजिक|फजी तर्क]] | * [[फजी लॉजिक|फजी तर्क]] | ||
* [[आगमनात्मक तर्क प्रोग्रामिंग]] | * [[आगमनात्मक तर्क प्रोग्रामिंग]] | ||
* [[कंप्यूटर विज्ञान में तर्क]] ([[औपचारिक तरीके]] सम्मलित हैं) | * [[कंप्यूटर विज्ञान में तर्क]] ([[औपचारिक तरीके|औपचारिक विधि]] सम्मलित हैं) | ||
* :श्रेणी: तर्क प्रोग्रामिंग भाषाएँ | * :श्रेणी: तर्क प्रोग्रामिंग भाषाएँ | ||
* [[निर्देशयोग्य तर्क नियंत्रक]] | * [[निर्देशयोग्य तर्क नियंत्रक]] | ||
Line 322: | Line 318: | ||
{{Authority control}} | {{Authority control}} | ||
[[Category: | [[Category:1972 में कंप्यूटर से संबंधित परिचय]] | ||
[[Category:All articles lacking in-text citations]] | |||
[[Category:All articles with minor POV problems]] | |||
[[Category:All articles with unsourced statements]] | |||
[[Category:Articles lacking in-text citations from February 2012]] | |||
[[Category:Articles with hatnote templates targeting a nonexistent page]] | |||
[[Category:Articles with invalid date parameter in template]] | |||
[[Category:Articles with minor POV problems from August 2014]] | |||
[[Category:Articles with unsourced statements from July 2013]] | |||
[[Category:CS1]] | |||
[[Category:CS1 errors]] | |||
[[Category:Collapse templates]] | |||
[[Category:Commons category link is the pagename]] | |||
[[Category:Created On 17/02/2023]] | [[Category:Created On 17/02/2023]] | ||
[[Category:Lua-based templates]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Short description with empty Wikidata description]] | |||
[[Category:Sidebars with styles needing conversion]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates generating microformats]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that are not mobile friendly]] | |||
[[Category:Templates that generate short descriptions]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:Wikipedia metatemplates]] | |||
[[Category:तर्क]] | |||
[[Category:तर्क प्रोग्रामिंग| तर्क प्रोग्रामिंग]] | |||
[[Category:प्रोग्रामिंग प्रतिमान]] |
Latest revision as of 16:05, 30 August 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 प्रणाली में लेन-देन तर्क के एक उपसमूह का कार्यान्वयन उपलब्ध है। अन्य प्रोटोटाइप भी लेन-देन तर्क हैं।
यह भी देखें
- स्वचालित प्रमेय सिद्ध करना
- बाधा तर्क प्रोग्रामिंग
- नियंत्रण सिद्धांत
- डेटा लॉग
- फ्रिल
- कार्यात्मक प्रोग्रामिंग
- फजी तर्क
- आगमनात्मक तर्क प्रोग्रामिंग
- कंप्यूटर विज्ञान में तर्क (औपचारिक विधि सम्मलित हैं)
- :श्रेणी: तर्क प्रोग्रामिंग भाषाएँ
- निर्देशयोग्य तर्क नियंत्रक
- आर ++
- तर्क प्रणाली
- नियम-आधारित मशीन लर्निंग
- संतुष्टि
- बूलियन संतुष्टि समस्या
- रैखिक तर्क
उद्धरण
This article includes a list of general references, but it lacks sufficient corresponding inline citations. (February 2012) (Learn how and when to remove this template message) |
- ↑ 1.0 1.1 Winograd, Terry (1972). "Understanding natural language". Cognitive Psychology. 3 (1): 1–191. doi:10.1016/0010-0285(72)90002-3.
- ↑ Green, Cordell. Application of Theorem Proving to Problem Solving (PDF). IJCAI 1969.
- ↑ 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.
- ↑ Hewitt, Carl. Planner: A Language for Proving Theorems in Robots (PDF). IJCAI 1969.
- ↑ Hayes, Pat (1973). "Computation and Deduction". Proceedings of the 2nd MFCS Symposium. Czechoslovak Academy of Sciences. pp. 105–118.
- ↑ 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. - ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ R.A.Kowalski (July 1979). "Algorithm=Logic + Control". Communications of the ACM. 22 (7): 424–436. doi:10.1145/359131.359136. S2CID 2509896.
- ↑ 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.
- ↑ 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.
- ↑ Shunichi Uchida and Kazuhiro Fuchi. Proceedings of the FGCS Project Evaluation Workshop. Institute for New Generation Computer Technology (ICOT). 1992.
- ↑ Hewitt, Carl (27 April 2016). "Inconsistency Robustness for Logic Programs". Hal Archives. pp. 21–26. Retrieved 7 November 2016.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
स्रोत
सामान्य परिचय
- Baral, C.; Gelfond, M. (1994). "तर्क प्रोग्रामिंग और ज्ञान प्रतिनिधित्व" (PDF). The Journal of Logic Programming. 19–20: 73–148. doi:10.1016/0743-1066(94)90025-6.
- Kowalski, R. A. (1988). "तर्क प्रोग्रामिंग के प्रारंभिक वर्ष" (PDF). Communications of the ACM. 31: 38–43. doi:10.1145/35043.35046. S2CID 12259230. [एचटीटीपी://ववव.डॉक्.इस.एक.ुक/~rak/पेपर्स/थे%20एअरली%20येअर्स.पीडीऍफ़]
- Lloyd, J. W. (1987). तर्क प्रोग्रामिंग की नींव.
{{cite book}}
:|work=
ignored (help)
अन्य स्रोत
- जॉन मैकार्थी। प्रोग्राम विद कॉमन सेंस । विचार प्रक्रियाओं के मशीनीकरण पर संगोष्ठी। राष्ट्रीय भौतिक प्रयोगशाला। टेडिंगटन, इंग्लैंड। 1958.
- Miller, Dale; Nadathur, Gopalan; Pfenning, Frank; Scedrov, Andre (1991). "लॉजिक प्रोग्रामिंग की नींव के रूप में यूनिफॉर्म प्रूफ". Annals of Pure and Applied Logic. 51 (1–2): 125–157. doi:10.1016/0168-0072(91)90068-W.
- एहुद शापिरो (संपादक)। समवर्ती प्रोलॉग। एमआईटी प्रेस। 1987.
- जेम्स स्लैगल। निगमनात्मक प्रश्न-उत्तर प्रोग्राम के साथ प्रयोग। सीएसीएम। दिसंबर 1965।
- डोव गब्बे|गब्बे, डोव एम.; हॉगर, क्रिस्टोफर जॉन; रॉबिन्सन, जे.ए., एड। (1993-1998)। हैंडबुक ऑफ तर्क इन आर्टिफिशियल इंटेलिजेंस एंड तर्क प्रोग्रामिंग। खंड। 1-5, ऑक्सफोर्ड यूनिवर्सिटी प्रेस।
अग्रिम पठन
- Carl Hewitt. "Procedural Embedding of Knowledge in Planner". IJCAI 1971.
- Carl Hewitt. "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 Eiter, Georg Gottlob, Andrei Voronkov: Complexity and expressive power of logic programming. ACM Comput. Surv. 33(3): 374–425 (2001)
- Ulf Nilsson and Jan Maluszynski, Logic, Programming and प्रोलॉग