मैक्कार्थी 91 फ़ंक्शन: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{no footnotes|date=अक्टूबर 2015}} | {{no footnotes|date=अक्टूबर 2015}} | ||
मैक्कार्थी 91 | मैक्कार्थी 91 एक पुनरावर्ती कार्य ([[कंप्यूटर विज्ञान|संगणक विज्ञान]]) है, जिसे संगणक वैज्ञानिक [[जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक)|जॉन मैक्कार्थी (संगणक वैज्ञानिक)]]प्रत्यावर्तन [[रिकर्सन (कंप्यूटर विज्ञान)|(संगणक विज्ञान)]] के भीतर [[औपचारिक सत्यापन]] के लिए एक परीक्षण घटना के रूप में परिभाषित किया है। | ||
मैक्कार्थी 91 | मैक्कार्थी 91 कार्य को इस प्रकार परिभाषित किया गया है | ||
:<math>M(n)=\begin{cases} | :<math>M(n)=\begin{cases} | ||
Line 8: | Line 8: | ||
M(M(n+11)), & \mbox{if }n \le 100\mbox{ } | M(M(n+11)), & \mbox{if }n \le 100\mbox{ } | ||
\end{cases}</math> | \end{cases}</math> | ||
कार्य के मूल्यांकन के परिणाम सभी पूर्णांक तर्कों n ≤ 100 के लिए M(n) = 91, और n > 100 के लिए M(n) = n − 10 द्वारा दिए गए हैं। वास्तव में, M(101) का परिणाम भी 91 (101 - 10 = 91) है। n = 101 के बाद M(n) के सभी परिणाम लगातार 1 से बढ़ रहे हैं, उदाहरण के लिए एम(102) = 92, एम(103) = 93। | |||
==इतिहास== | ==इतिहास== | ||
91 | 91 कार्य को 1970 में [[जोहार मन्ना]], [[अमीर पनुएली]] और जॉन मैक्कार्थी (संगणक वैज्ञानिक) द्वारा प्रकाशित पत्रों में प्रस्तुत किया गया था। ये आलेख औपचारिक सत्यापन के लिए औपचारिक विधियों के आवेदन की दिशा में प्रारंभिक विकास का प्रतिनिधित्व करते थे। 91 कार्य को नेस्टेड-पुनरावर्ती ([[एकल प्रत्यावर्तन]] के विपरीत, जैसे कि परिभाषित करना) के लिए चुना गया था <math>f(n)</math> के माध्यम से <math>f(n-1)</math>). यह उदाहरण मन्ना की पुस्तक, संगणना का गणितीय सिद्धांत (1974) द्वारा लोकप्रिय हुआ। जैसे-जैसे औपचारिक विधियों का क्षेत्र आगे बढ़ा, यह उदाहरण शोध साहित्य में बार-बार सामने आया। | ||
विशेष रूप से, इसे स्वचालित प्रोग्राम सत्यापन के लिए एक चुनौती समस्या के रूप में देखा जाता है। | विशेष रूप से, इसे स्वचालित प्रोग्राम सत्यापन के लिए एक चुनौती समस्या के रूप में देखा जाता है। | ||
[[ पूँछ प्रत्यावर्तन | पूँछ प्रत्यावर्तन]] / | [[ पूँछ प्रत्यावर्तन | पूँछ प्रत्यावर्तन]] /पूँछ-पुनरावर्ती नियंत्रण प्रवाह के बारे में तर्क करना आसान है, यह एक समतुल्य (विस्तारकता) परिभाषा है: | ||
:<math>M_t(n)= M_t'(n,1)</math> | :<math>M_t(n)= M_t'(n,1)</math> | ||
:<math>M_t'(n, c)=\begin{cases} | :<math>M_t'(n, c)=\begin{cases} | ||
Line 23: | Line 23: | ||
\end{cases} | \end{cases} | ||
</math> | </math> | ||
इस तरह के तर्क को प्रदर्शित करने के लिए उपयोग किए गए उदाहरणों में से एक के रूप में, मन्ना की पुस्तक में नेस्टेड- | इस तरह के तर्क को प्रदर्शित करने के लिए उपयोग किए गए उदाहरणों में से एक के रूप में, मन्ना की पुस्तक में नेस्टेड-पुनरावर्ती 91 कार्य के बराबर एक पूँछ-पुनरावर्ती एल्गोरिदम सम्मिलित है। 91 कार्य के स्वचालित सत्यापन (या [[समाप्ति प्रमाण]]) की रिपोर्ट करने वाले कई आलेख केवल पूँछ-पुनरावर्ती संस्करण को संभालते हैं। | ||
यह एक समतुल्य पारस्परिक पुनरावर्तन पूँछ-पुनरावर्ती | यह एक समतुल्य पारस्परिक पुनरावर्तन पूँछ-पुनरावर्ती अतिरिक्त लैंग्वेज है: | ||
:<math>M_{mt}(n)= M_{mt}'(n,0)</math> | :<math>M_{mt}(n)= M_{mt}'(n,0)</math> | ||
:<math>M_{mt}'(n,c)=\begin{cases} | :<math>M_{mt}'(n,c)=\begin{cases} | ||
Line 35: | Line 35: | ||
M_{mt}'(n,c-1), & \mbox{if }c \ne 0\mbox{ } | M_{mt}'(n,c-1), & \mbox{if }c \ne 0\mbox{ } | ||
\end{cases}</math> | \end{cases}</math> | ||
नेस्टेड- | नेस्टेड-पुनरावर्ती से पारस्परिक रूप से पूँछ-पुनरावर्ती संस्करण की औपचारिक व्युत्पत्ति 1980 के एक लेख में [[मिशेल वैंड]] द्वारा निरंतरता के उपयोग के आधार पर दी गई थी। | ||
==उदाहरण== | ==उदाहरण== | ||
Line 65: | Line 65: | ||
==कोड== | ==कोड== | ||
यहां [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प (प्रोग्रामिंग लैंग्वेज)]] में नेस्टेड- | यहां [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प (प्रोग्रामिंग लैंग्वेज)]] में नेस्टेड-पुनरावर्ती एल्गोरिदम का कार्यान्वयन है: | ||
<syntaxhighlight lang="lisp"> | <syntaxhighlight lang="lisp"> | ||
Line 72: | Line 72: | ||
(t (- n 10)))) | (t (- n 10)))) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[हास्केल (प्रोग्रामिंग भाषा)|हास्केल (प्रोग्रामिंग लैंग्वेज)]] में नेस्टेड- | [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल (प्रोग्रामिंग लैंग्वेज)]] में नेस्टेड-पुनरावर्ती एल्गोरिदम का कार्यान्वयन यहां दिया गया है: | ||
<syntaxhighlight lang="haskell"> | <syntaxhighlight lang="haskell"> | ||
Line 79: | Line 79: | ||
| otherwise = mc91 $ mc91 $ n + 11 | | otherwise = mc91 $ mc91 $ n + 11 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
यहां [[Index.php?title=ओकैमल (प्रोग्रामिंग भाषा)|ओकैमल (प्रोग्रामिंग लैंग्वेज)]] में नेस्टेड- | यहां [[Index.php?title=ओकैमल (प्रोग्रामिंग भाषा)|ओकैमल (प्रोग्रामिंग लैंग्वेज)]] में नेस्टेड-पुनरावर्ती एल्गोरिदम का कार्यान्वयन है: | ||
<syntaxhighlight lang="ocaml"> | <syntaxhighlight lang="ocaml"> | ||
Line 86: | Line 86: | ||
else mc91 (mc91 (n + 11)) | else mc91 (mc91 (n + 11)) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
यहां ओकैमल (प्रोग्रामिंग लैंग्वेज) में | यहां ओकैमल (प्रोग्रामिंग लैंग्वेज) में पूँछ-पुनरावर्ती एल्गोरिदम का कार्यान्वयन है: | ||
<syntaxhighlight lang="ocaml"> | <syntaxhighlight lang="ocaml"> | ||
Line 97: | Line 97: | ||
aux n 1 | aux n 1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
यहां [[पायथन (प्रोग्रामिंग भाषा)|पायथन (प्रोग्रामिंग लैंग्वेज)]] में नेस्टेड- | यहां [[पायथन (प्रोग्रामिंग भाषा)|पायथन (प्रोग्रामिंग लैंग्वेज)]] में नेस्टेड-पुनरावर्ती एल्गोरिदम का कार्यान्वयन है: | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
Line 107: | Line 107: | ||
return mc91(mc91(n + 11)) | return mc91(mc91(n + 11)) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
यहां सी (प्रोग्रामिंग लैंग्वेज) में नेस्टेड- | यहां सी (प्रोग्रामिंग लैंग्वेज) में नेस्टेड-पुनरावर्ती एल्गोरिदम का कार्यान्वयन है: | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
Line 119: | Line 119: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
यहां सी (प्रोग्रामिंग लैंग्वेज) में | यहां सी (प्रोग्रामिंग लैंग्वेज) में पूँछ-पुनरावर्ती एल्गोरिदम का कार्यान्वयन दिया गया है: | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
Line 146: | Line 146: | ||
91, & \mbox{if }n \le 100\mbox{ } | 91, & \mbox{if }n \le 100\mbox{ } | ||
\end{cases}</math> | \end{cases}</math> | ||
जो <math>M</math> गणना करने के लिए एक समतुल्य गैर-पुनरावर्ती | जो <math>M</math> गणना करने के लिए एक समतुल्य गैर-पुनरावर्ती कलन विधि प्रदान करता है . | ||
n > 100 के लिए, समानता <math>M</math> की परिलैंग्वेज से अनुसरण करती है। n ≤ 100 के लिए, 100 से नीचे की ओर एक [[मजबूत प्रेरण]] का उपयोग किया जा सकता है। | n > 100 के लिए, समानता <math>M</math> की परिलैंग्वेज से अनुसरण करती है। n ≤ 100 के लिए, 100 से नीचे की ओर एक [[मजबूत प्रेरण]] का उपयोग किया जा सकता है। | ||
Line 168: | Line 168: | ||
== नुथ का सामान्यीकरण == | == नुथ का सामान्यीकरण == | ||
[[डोनाल्ड नुथ]] ने अतिरिक्त मापदंडों को सम्मिलित करने के लिए 91 | [[डोनाल्ड नुथ]] ने अतिरिक्त मापदंडों को सम्मिलित करने के लिए 91 कार्य को सामान्यीकृत किया।<ref>{{cite journal |first=Donald E. |last=Knuth | title = पुनरावृत्ति के पाठ्यपुस्तक उदाहरण| year = 1991 | journal = Artificial Intelligence and Mathematical Theory of Computation |pages=207–229 |doi=10.1016/B978-0-12-450010-5.50018-9 | arxiv = cs/9301113| bibcode = 1993cs........1113K |isbn=9780124500105 |s2cid=6411737 }}</ref> [[जॉन काउल्स (गणितज्ञ)]] ने [[Index.php?title=एसीएल2|एसीएल2]] प्रमेय कहावत का उपयोग करते हुए एक औपचारिक प्रमाण विकसित किया कि नुथ का सामान्यीकृत कार्य संपूर्ण था।<ref>{{cite book |first=John |last=Cowles | chapter = Knuth's generalization of McCarthy's 91 function |editor-first=M. |editor-last=Kaufmann |editor2-first=P. |editor2-last=Manolios |editor3-first=J |editor3-last=Strother Moore | title = Computer-Aided reasoning: ACL2 case studies | publisher = Kluwer Academic |isbn=9781475731880 |year=2013 |orig-year = 2000 | pages = 283–299 |chapter-url = http://www.cs.utexas.edu/users/moore/acl2/workshop-1999/Cowles-abstract.html}}</ref> | ||
== संदर्भ == | == संदर्भ == | ||
{{Reflist}} | {{Reflist}} |
Revision as of 10:31, 16 August 2023
This article includes a list of references, related reading or external links, but its sources remain unclear because it lacks inline citations. (अक्टूबर 2015) (Learn how and when to remove this template message) |
मैक्कार्थी 91 एक पुनरावर्ती कार्य (संगणक विज्ञान) है, जिसे संगणक वैज्ञानिक जॉन मैक्कार्थी (संगणक वैज्ञानिक)प्रत्यावर्तन (संगणक विज्ञान) के भीतर औपचारिक सत्यापन के लिए एक परीक्षण घटना के रूप में परिभाषित किया है।
मैक्कार्थी 91 कार्य को इस प्रकार परिभाषित किया गया है
कार्य के मूल्यांकन के परिणाम सभी पूर्णांक तर्कों n ≤ 100 के लिए M(n) = 91, और n > 100 के लिए M(n) = n − 10 द्वारा दिए गए हैं। वास्तव में, M(101) का परिणाम भी 91 (101 - 10 = 91) है। n = 101 के बाद M(n) के सभी परिणाम लगातार 1 से बढ़ रहे हैं, उदाहरण के लिए एम(102) = 92, एम(103) = 93।
इतिहास
91 कार्य को 1970 में जोहार मन्ना, अमीर पनुएली और जॉन मैक्कार्थी (संगणक वैज्ञानिक) द्वारा प्रकाशित पत्रों में प्रस्तुत किया गया था। ये आलेख औपचारिक सत्यापन के लिए औपचारिक विधियों के आवेदन की दिशा में प्रारंभिक विकास का प्रतिनिधित्व करते थे। 91 कार्य को नेस्टेड-पुनरावर्ती (एकल प्रत्यावर्तन के विपरीत, जैसे कि परिभाषित करना) के लिए चुना गया था के माध्यम से ). यह उदाहरण मन्ना की पुस्तक, संगणना का गणितीय सिद्धांत (1974) द्वारा लोकप्रिय हुआ। जैसे-जैसे औपचारिक विधियों का क्षेत्र आगे बढ़ा, यह उदाहरण शोध साहित्य में बार-बार सामने आया।
विशेष रूप से, इसे स्वचालित प्रोग्राम सत्यापन के लिए एक चुनौती समस्या के रूप में देखा जाता है।
पूँछ प्रत्यावर्तन /पूँछ-पुनरावर्ती नियंत्रण प्रवाह के बारे में तर्क करना आसान है, यह एक समतुल्य (विस्तारकता) परिभाषा है:
इस तरह के तर्क को प्रदर्शित करने के लिए उपयोग किए गए उदाहरणों में से एक के रूप में, मन्ना की पुस्तक में नेस्टेड-पुनरावर्ती 91 कार्य के बराबर एक पूँछ-पुनरावर्ती एल्गोरिदम सम्मिलित है। 91 कार्य के स्वचालित सत्यापन (या समाप्ति प्रमाण) की रिपोर्ट करने वाले कई आलेख केवल पूँछ-पुनरावर्ती संस्करण को संभालते हैं।
यह एक समतुल्य पारस्परिक पुनरावर्तन पूँछ-पुनरावर्ती अतिरिक्त लैंग्वेज है:
नेस्टेड-पुनरावर्ती से पारस्परिक रूप से पूँछ-पुनरावर्ती संस्करण की औपचारिक व्युत्पत्ति 1980 के एक लेख में मिशेल वैंड द्वारा निरंतरता के उपयोग के आधार पर दी गई थी।
उदाहरण
उदाहरण ए:
M(99) = M(M(110)) since 99 ≤ 100 = M(100) since 110 > 100 = M(M(111)) since 100 ≤ 100 = M(101) since 111 > 100 = 91 since 101 > 100
उदाहरण बी:
M(87) = M(M(98)) = M(M(M(109))) = M(M(99)) = M(M(M(110))) = M(M(100)) = M(M(M(111))) = M(M(101)) = M(91) = M(M(102)) = M(92) = M(M(103)) = M(93) .... Pattern continues increasing till M(99), M(100) and M(101), exactly as we saw on the example A) = M(101) since 111 > 100 = 91 since 101 > 100
कोड
यहां लिस्प (प्रोग्रामिंग लैंग्वेज) में नेस्टेड-पुनरावर्ती एल्गोरिदम का कार्यान्वयन है:
(defun mc91 (n)
(cond ((<= n 100) (mc91 (mc91 (+ n 11))))
(t (- n 10))))
हास्केल (प्रोग्रामिंग लैंग्वेज) में नेस्टेड-पुनरावर्ती एल्गोरिदम का कार्यान्वयन यहां दिया गया है:
mc91 n
| n > 100 = n - 10
| otherwise = mc91 $ mc91 $ n + 11
यहां ओकैमल (प्रोग्रामिंग लैंग्वेज) में नेस्टेड-पुनरावर्ती एल्गोरिदम का कार्यान्वयन है:
let rec mc91 n =
if n > 100 then n - 10
else mc91 (mc91 (n + 11))
यहां ओकैमल (प्रोग्रामिंग लैंग्वेज) में पूँछ-पुनरावर्ती एल्गोरिदम का कार्यान्वयन है:
let mc91 n =
let rec aux n c =
if c = 0 then n
else if n > 100 then aux (n - 10) (c - 1)
else aux (n + 11) (c + 1)
in
aux n 1
यहां पायथन (प्रोग्रामिंग लैंग्वेज) में नेस्टेड-पुनरावर्ती एल्गोरिदम का कार्यान्वयन है:
def mc91(n: int) -> int:
"""McCarthy 91 function."""
if n > 100:
return n - 10
else:
return mc91(mc91(n + 11))
यहां सी (प्रोग्रामिंग लैंग्वेज) में नेस्टेड-पुनरावर्ती एल्गोरिदम का कार्यान्वयन है:
int mc91(int n)
{
if (n > 100) {
return n - 10;
} else {
return mc91(mc91(n + 11));
}
}
यहां सी (प्रोग्रामिंग लैंग्वेज) में पूँछ-पुनरावर्ती एल्गोरिदम का कार्यान्वयन दिया गया है:
int mc91(int n)
{
return mc91taux(n, 1);
}
int mc91taux(int n, int c)
{
if (c != 0) {
if (n > 100) {
return mc91taux(n - 10, c - 1);
} else {
return mc91taux(n + 11, c + 1);
}
} else {
return n;
}
}
प्रमाण
यहाँ इसका प्रमाण है
जो गणना करने के लिए एक समतुल्य गैर-पुनरावर्ती कलन विधि प्रदान करता है .
n > 100 के लिए, समानता की परिलैंग्वेज से अनुसरण करती है। n ≤ 100 के लिए, 100 से नीचे की ओर एक मजबूत प्रेरण का उपयोग किया जा सकता है।
90 ≤ एन ≤ 100 के लिए,
M(n) = M(M(n + 11)), by definition = M(n + 11 - 10), since n + 11 > 100 = M(n + 1)
तो M(n) = M(101) = 91 90 ≤ n ≤ 100 के लिए।इसे आधार मामले के तौर पर उपयोग किया जा सकता है.
प्रेरण चरण के लिए, मान लीजिए n ≤ 89 और सभी n < i ≤ 100 के लिए M(i) = 91 मान लें, तो
M(n) = M(M(n + 11)), by definition = M(91), by hypothesis, since n < n + 11 ≤ 100 = 91, by the base case.
यह नकारात्मक मानों सहित सभी n ≤ 100 के लिए M(n) = 91 साबित करता है।
नुथ का सामान्यीकरण
डोनाल्ड नुथ ने अतिरिक्त मापदंडों को सम्मिलित करने के लिए 91 कार्य को सामान्यीकृत किया।[1] जॉन काउल्स (गणितज्ञ) ने एसीएल2 प्रमेय कहावत का उपयोग करते हुए एक औपचारिक प्रमाण विकसित किया कि नुथ का सामान्यीकृत कार्य संपूर्ण था।[2]
संदर्भ
- ↑ Knuth, Donald E. (1991). "पुनरावृत्ति के पाठ्यपुस्तक उदाहरण". Artificial Intelligence and Mathematical Theory of Computation: 207–229. arXiv:cs/9301113. Bibcode:1993cs........1113K. doi:10.1016/B978-0-12-450010-5.50018-9. ISBN 9780124500105. S2CID 6411737.
- ↑ Cowles, John (2013) [2000]. "Knuth's generalization of McCarthy's 91 function". In Kaufmann, M.; Manolios, P.; Strother Moore, J (eds.). Computer-Aided reasoning: ACL2 case studies. Kluwer Academic. pp. 283–299. ISBN 9781475731880.
- मन्ना, ज़ोहर; पनुएलि, अमीर (जुलाई 1970). "कार्यात्मक कार्यक्रमों के गुणों का औपचारिकीकरण". एसीएम का जर्नल. 17 (3): 555–569. doi:10.1145/321592.321606. S2CID 5924829.
{{cite journal}}
: Check date values in:|date=
(help) - मन्ना, ज़ोहर; मैकार्थी, जॉन (1970). "प्रोग्राम के गुण और आंशिक फ़ंक्शन तर्क". मशीन इंटेलिजेंस. 5. OCLC 35422131.
- मन्ना, ज़ोहर (1974). संगणना का गणितीय सिद्धांत (4th ed.). मैकग्रा-हिल. ISBN 9780070399105.
- छड़ी, मिशेल (जनवरी 1980). "निरंतरता-आधारित कार्यक्रम परिवर्तन रणनीतियाँ". एसीएम का जर्नल. 27 (1): 164–180. doi:10.1145/322169.322183. S2CID 16015891.
{{cite journal}}
: Check date values in:|date=
(help)