लॉजिक प्रोग्रामिंग

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


 * एच :- बी1, …, बीn।

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


 * एच अगर बी1 और … और बीn।

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


 * एच.

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

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


 * H को हल करने के लिए, B को हल करें1, और ... और B हल करेंn।

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


 * गिरावट(X) :- मानव(X).

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


 * मानव (सुकरात)।

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

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

इतिहास
1930 के दशक में अलोंजो चर्च द्वारा विकसित लैम्ब्डा कैलकुलस की एक विशेषता कंप्यूटर प्रोग्राम का प्रतिनिधित्व और निष्पादन करने के लिए गणितीय तर्क का उपयोग भी है। हालांकि, कंप्यूटर प्रोग्रामों का प्रतिनिधित्व करने के लिए तर्क के क्लॉज़ल सामान्य रूप का उपयोग करने का पहला प्रस्ताव कॉर्डेल ग्रीन द्वारा बनाया गया था। यह एलआईएसपी में प्रोग्राम के निष्पादन को सिम्युलेट करके संबंध की गणना करने के लिए, इनपुट-आउटपुट रिलेशन के प्रतिनिधित्व के साथ, एलआईएसपी के एक सबसेट के स्वयंसिद्धीकरण का उपयोग करता है। दूसरी ओर, फोस्टर और एल्कॉक के रसातल ने एक मुखर प्रोग्रामिंग भाषा में समीकरणों और लैम्ब्डा कैलकुलस के संयोजन को नियोजित किया, जो उस क्रम पर कोई बाधा नहीं डालता जिसमें संचालन किया जाता है। लॉजिक प्रोग्रामिंग अपने वर्तमान रूप में 1960 के दशक के अंत और 1970 के दशक की शुरुआत में कृत्रिम बुद्धि में ज्ञान के घोषणात्मक बनाम प्रक्रियात्मक प्रतिनिधित्व के बारे में बहस का पता लगा सकता है। घोषणात्मक अभ्यावेदन के अधिवक्ता विशेष रूप से स्टैनफोर्ड विश्वविद्यालय में काम कर रहे थे, जो जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक), बर्ट्रम राफेल और कॉर्डेल ग्रीन से जुड़े थे, और एडिनबर्ग विश्वविद्यालय में, जॉन एलन रॉबिन्सन (सिराक्यूज विश्वविद्यालय के एक अकादमिक आगंतुक), पैट्रिक जे हेस के साथ काम कर रहे थे। और रॉबर्ट कोवाल्स्की। मार्विन मिंस्की और सीमोर पैपर्ट के नेतृत्व में प्रक्रियात्मक अभ्यावेदन के अधिवक्ता मुख्य रूप से एमआईटी में केंद्रित थे। यद्यपि यह तर्क के सबूत तरीकों पर आधारित था, एमआईटी में विकसित प्लानर (प्रोग्रामिंग भाषा), इस प्रक्रियावादी प्रतिमान के भीतर उभरने वाली पहली भाषा थी। प्लानर ने लक्ष्यों (यानी लक्ष्य-कमी या पिछड़े चेनिंग) और अभिकथन (यानी आगे श्रृंखलन) से प्रक्रियात्मक योजनाओं के पैटर्न-निर्देशित आह्वान को चित्रित किया। प्लानर का सबसे प्रभावशाली कार्यान्वयन प्लानर का सबसेट था, जिसे माइक्रो-प्लानर कहा जाता है, जिसे गेराल्ड जे सुस्मान, यूजीन चार्नियाक और टेरी विनोग्रैड द्वारा कार्यान्वित किया गया था। इसका उपयोग विनोग्रैड के प्राकृतिक-भाषा समझ कार्यक्रम SHRDLU को लागू करने के लिए किया गया था, जो उस समय एक मील का पत्थर था। उस समय बहुत सीमित मेमोरी सिस्टम से निपटने के लिए, प्लानर ने बैकट्रैकिंग कंट्रोल स्ट्रक्चर का इस्तेमाल किया ताकि एक समय में केवल एक संभावित गणना पथ को संग्रहित किया जा सके। प्लानर ने प्रोग्रामिंग भाषाओं QA-4, पॉपलर, कोनिवर, QLISP और समवर्ती भाषा ईथर को जन्म दिया। एडिनबर्ग में हेस और कोवाल्स्की ने प्लानर के प्रक्रियात्मक दृष्टिकोण के साथ ज्ञान प्रतिनिधित्व के लिए तर्क-आधारित घोषणात्मक दृष्टिकोण को समेटने की कोशिश की। हेस (1973) ने एक समतुल्य भाषा, गोलक्स विकसित की, जिसमें प्रमेय समर्थक के व्यवहार को बदलकर विभिन्न प्रक्रियाओं को प्राप्त किया जा सकता है। दूसरी ओर, कोवाल्स्की ने एसएलडी संकल्प विकसित किया, एसएल-रिज़ॉल्यूशन का एक प्रकार, और दिखाया कि कैसे यह लक्ष्यों को कम करने की प्रक्रियाओं के रूप में निहितार्थों का व्यवहार करता है। कोवाल्स्की ने मार्सिले में एलेन कॉलमेरॉयर के साथ सहयोग किया, जिन्होंने प्रोग्रामिंग भाषा प्रोलॉग के डिजाइन और कार्यान्वयन में इन विचारों को विकसित किया।

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

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

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

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


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

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

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

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

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

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


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

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


 * ह :- शरीर1।
 * ह :- शरीरk।
 * ह :- शरीरk।

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


 * H iff (बॉडी1 या … या शरीरk)

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

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


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

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

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

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

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

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

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


 * एच :- बी1, …, बीn।

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

कोलमेरौएर, फिलिप रसेल के साथ, प्रोलॉग के आधार के रूप में खंडों की इस दोहरी व्याख्या का उपयोग किया, जिसे 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)। एक समवर्ती तर्क कार्यक्रम फॉर्म के संरक्षित हॉर्न क्लॉज का एक सेट है:


 * ह :- जी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] ।

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

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

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

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

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

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

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

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

यह भी देखें

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

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

 * [एचटीटीपी://ववव.डॉक्.इस.एक.ुक/~rak/पेपर्स/थे%20एअरली%20येअर्स.पीडीऍफ़]
 * [एचटीटीपी://ववव.डॉक्.इस.एक.ुक/~rak/पेपर्स/थे%20एअरली%20येअर्स.पीडीऍफ़]

अन्य स्रोत

 * जॉन मैकार्थी। प्रोग्राम विद कॉमन सेंस। विचार प्रक्रियाओं के मशीनीकरण पर संगोष्ठी। राष्ट्रीय भौतिक प्रयोगशाला। टेडिंगटन, इंग्लैंड। 1958.
 * एहुद शापिरो (संपादक)। समवर्ती प्रोलॉग। एमआईटी प्रेस। 1987.
 * जेम्स स्लैगल। निगमनात्मक प्रश्न-उत्तर कार्यक्रम के साथ प्रयोग। सीएसीएम। दिसंबर 1965।
 * डोव गब्बे|गब्बे, डोव एम.; हॉगर, क्रिस्टोफर जॉन; रॉबिन्सन, जे.ए., एड। (1993-1998)। हैंडबुक ऑफ लॉजिक इन आर्टिफिशियल इंटेलिजेंस एंड लॉजिक प्रोग्रामिंग। खंड। 1-5, ऑक्सफोर्ड यूनिवर्सिटी प्रेस।
 * डोव गब्बे|गब्बे, डोव एम.; हॉगर, क्रिस्टोफर जॉन; रॉबिन्सन, जे.ए., एड। (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 Prolog

बाहरी संबंध

 * Logic Programming Virtual Library entry
 * Bibliographies on Logic Programming
 * Association for Logic Programming (ALP)
 * Theory and Practice of Logic Programming (journal)
 * Logic programming in C++ with Castor
 * Logic programming in Oz
 * Prolog Development Center
 * Racklog: Logic Programming in Racket