मैक्कार्थी 91 फ़ंक्शन: Difference between revisions

From Vigyanwiki
No edit summary
 
(8 intermediate revisions by 2 users not shown)
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।
कार्य  के मूल्यांकन के परिणाम सभी पूर्णांक तर्कों n ≤ 100 के लिए M(n) = 91, और n > 100 के लिए M(n) = n − 10 द्वारा दिए गए हैं। वास्तव में, M(101) का परिणाम भी 91 (101 - 10 = 91) है। n = 101 के बाद M(n) के सभी परिणाम लगातार 1 से बढ़ रहे हैं, उदाहरण के लिए M(102) = 92, M(103) = 93।


==इतिहास==
==इतिहास==
91 फ़ंक्शन को 1970 में [[जोहार मन्ना]], [[अमीर पनुएली]] और जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) द्वारा प्रकाशित पत्रों में प्रस्तुत किया गया था। ये कागजात औपचारिक सत्यापन के लिए औपचारिक विधियों के आवेदन की दिशा में प्रारंभिक विकास का प्रतिनिधित्व करते थे। 91 फ़ंक्शन को नेस्टेड-रिकर्सिव ([[एकल प्रत्यावर्तन]] के विपरीत, जैसे कि परिभाषित करना) के लिए चुना गया था <math>f(n)</math> के माध्यम से <math>f(n-1)</math>). यह उदाहरण मन्ना की पुस्तक, मैथमैटिकल थ्योरी ऑफ कंप्यूटेशन (1974) द्वारा लोकप्रिय हुआ। जैसे-जैसे औपचारिक विधियों का क्षेत्र आगे बढ़ा, यह उदाहरण शोध साहित्य में बार-बार सामने आया।
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 22: Line 23:
\end{cases}
\end{cases}
</math>
</math>
इस तरह के तर्क को प्रदर्शित करने के लिए उपयोग किए गए उदाहरणों में से एक के रूप में, मन्ना की पुस्तक में नेस्टेड-रिकर्सिव 91 फ़ंक्शन के बराबर एक टेल-रिकर्सिव एल्गोरिदम सम्मिलित है। 91 फ़ंक्शन के स्वचालित सत्यापन (या [[समाप्ति प्रमाण]]) की रिपोर्ट करने वाले कई दस्तावेज़ केवल टेल-रिकर्सिव संस्करण को संभालते हैं।
इस तरह के तर्क को प्रदर्शित करने के लिए उपयोग किए गए उदाहरणों में से एक के रूप में, मन्ना की पुस्तक में नेस्टेड-पुनरावर्ती 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 34: 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 के एक लेख में [[मिशेल वैंड]] द्वारा निरंतरता के उपयोग के आधार पर दी गई थी।
नेस्टेड-पुनरावर्ती से पारस्परिक रूप से पूँछ-पुनरावर्ती संस्करण की औपचारिक व्युत्पत्ति 1980 के एक लेख में [[मिशेल वैंड]] द्वारा निरंतरता के उपयोग के आधार पर दी गई थी।


==उदाहरण==
==उदाहरण==
उदाहरण ए:
उदाहरण ए:


  एम(99) = एम(एम(110)) चूँकि 99 ≤ 100
  M(99) = M(M(110)) since 99 ≤ 100
       = एम(100) चूँकि 110 > 100
       = M(100)   since 110 > 100
       = एम(एम(111)) चूँकि 100 ≤ 100
       = M(M(111)) since 100 ≤ 100
       = एम(101) 111 > 100 से
       = M(101)   since 111 > 100
       = 91 चूँकि 101 > 100
       = 91       since 101 > 100


उदाहरण बी:
उदाहरण बी:


  एम(87) = एम(एम(98))
  M(87) = M(M(98))
       = एम(एम(एम(109)))
       = M(M(M(109)))
       = एम(एम(99))
       = M(M(99))
       = एम(एम(एम(110)))
       = M(M(M(110)))
       = एम(एम(100))
       = M(M(100))
       = एम(एम(एम(111)))
       = M(M(M(111)))
       = एम(एम(101))
       = M(M(101))
       = एम(91)
       = M(91)
       = एम(एम(102))
       = M(M(102))
       = एम(92)
       = M(92)
       = एम(एम(103))
       = M(M(103))
       = एम(93)
       = M(93)
     .... पैटर्न एम(99), एम(100) और एम(101) तक बढ़ता रहता है, बिल्कुल वैसा ही जैसा हमने उदाहरण ए में देखा था)
     .... Pattern continues increasing till M(99), M(100) and M(101), exactly as we saw on the example A)
       = एम(101) 111 > 100 से
       = M(101)   since 111 > 100
       = 91 चूँकि 101 > 100
       = 91       since 101 > 100


==कोड==
==कोड==
यहां [[लिस्प (प्रोग्रामिंग भाषा)]] में नेस्टेड-रिकर्सिव एल्गोरिदम का कार्यान्वयन है:
यहां [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प (कार्यक्रम निर्माण लैंग्वेज)]] में नेस्टेड-पुनरावर्तीकलन विधि का कार्यान्वयन है:


<syntaxhighlight lang="lisp">
<syntaxhighlight lang="lisp">
Line 71: Line 72:
         (t (- n 10))))
         (t (- n 10))))
</syntaxhighlight>
</syntaxhighlight>
[[हास्केल (प्रोग्रामिंग भाषा)]] में नेस्टेड-रिकर्सिव एल्गोरिदम का कार्यान्वयन यहां दिया गया है:
[[हास्केल (प्रोग्रामिंग भाषा)|हास्केल (कार्यक्रम निर्माण लैंग्वेज)]] में नेस्टेड-पुनरावर्तीकलन विधि का कार्यान्वयन यहां दिया गया है:


<syntaxhighlight lang="haskell">
<syntaxhighlight lang="haskell">
Line 78: 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 85: Line 86:
   else mc91 (mc91 (n + 11))
   else mc91 (mc91 (n + 11))
</syntaxhighlight>
</syntaxhighlight>
यहां ओकैमल (प्रोग्रामिंग भाषा) में टेल-रिकर्सिव एल्गोरिदम का कार्यान्वयन है:
यहां ओकैमल (कार्यक्रम निर्माण लैंग्वेज) में पूँछ-पुनरावर्तीकलन विधि का कार्यान्वयन है:


<syntaxhighlight lang="ocaml">
<syntaxhighlight lang="ocaml">
Line 96: Line 97:
   aux n 1
   aux n 1
</syntaxhighlight>
</syntaxhighlight>
यहां [[पायथन (प्रोग्रामिंग भाषा)]] में नेस्टेड-रिकर्सिव एल्गोरिदम का कार्यान्वयन है:
यहां [[पायथन (प्रोग्रामिंग भाषा)|पायथन (कार्यक्रम निर्माण लैंग्वेज)]] में नेस्टेड-पुनरावर्तीकलन विधि का कार्यान्वयन है:


<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
Line 106: Line 107:
         return mc91(mc91(n + 11))
         return mc91(mc91(n + 11))
</syntaxhighlight>
</syntaxhighlight>
यहां सी (प्रोग्रामिंग भाषा) में नेस्टेड-रिकर्सिव एल्गोरिदम का कार्यान्वयन है:
यहां सी (कार्यक्रम निर्माण लैंग्वेज) में नेस्टेड-पुनरावर्तीकलन विधि का कार्यान्वयन है:


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Line 118: Line 119:
}
}
</syntaxhighlight>
</syntaxhighlight>
यहां सी (प्रोग्रामिंग भाषा) में टेल-रिकर्सिव एल्गोरिदम का कार्यान्वयन दिया गया है:
यहां सी (कार्यक्रम निर्माण लैंग्वेज) में पूँछ-पुनरावर्तीकलन विधि का कार्यान्वयन दिया गया है:


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Line 145: 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 से नीचे की ओर एक [[मजबूत प्रेरण]] का उपयोग किया जा सकता है।


90 ≤ एन ≤ 100 के लिए,
90 ≤ एन ≤ 100 के लिए,


  एम(एन) = एम(एम(एन + 11)), परिभाषा के अनुसार
  M(n) = M(M(n + 11)), by definition
       = एम(एन + 11 - 10), चूँकि एन + 11 > 100
       = M(n + 11 - 10), since n + 11 > 100
       = एम(एन + 1)
       = M(n + 1)


तो M(n) = M(101) = 91 90 ≤ n ≤ 100 के लिए।इसे आधार मामले के तौर पर उपयोग किया जा सकता है.
तो M(n) = M(101) = 91 90 ≤ n ≤ 100 के लिए।इसे आधार घटना के आधार पर उपयोग किया जा सकता है.


प्रेरण चरण के लिए, मान लीजिए n ≤ 89 और सभी n < i ≤ 100 के लिए M(i) = 91 मान लें, तो
प्रेरण चरण के लिए, मान लीजिए n ≤ 89 और सभी n < i ≤ 100 के लिए M(i) = 91 मान लें, तो


  एम(एन) = एम(एम(एन + 11)), परिभाषा के अनुसार
  M(n) = M(M(n + 11)), by definition
       = एम(91), परिकल्पना के अनुसार, चूँकि n < n + 11 ≤ 100
       = M(91), by hypothesis, since n < n + 11 ≤ 100
       = 91, आधार स्थिति के अनुसार।
       = 91, by the base case.


यह नकारात्मक मानों सहित सभी n ≤ 100 के लिए M(n) = 91 साबित करता है।
यह नकारात्मक मानों सहित सभी n ≤ 100 के लिए M(n) = 91 साबित करता है।
Line 167: Line 168:
== नुथ का सामान्यीकरण ==
== नुथ का सामान्यीकरण ==


[[डोनाल्ड नुथ]] ने अतिरिक्त मापदंडों को सम्मिलित करने के लिए 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>
[[डोनाल्ड नुथ]] ने अतिरिक्त मापदंडों को सम्मिलित करने के लिए 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}}
Line 182: Line 183:
[[Category: Machine Translated Page]]
[[Category: Machine Translated Page]]
[[Category:Created On 26/07/2023]]
[[Category:Created On 26/07/2023]]
[[Category:Vigyan Ready]]

Latest revision as of 22:46, 10 October 2023

मैक्कार्थी 91 एक पुनरावर्ती कार्य (संगणक विज्ञान) है, जिसे संगणक वैज्ञानिक जॉन मैक्कार्थी (संगणक वैज्ञानिक)प्रत्यावर्तन (संगणक विज्ञान) के भीतर औपचारिक सत्यापन के लिए एक परीक्षण घटना के रूप में परिभाषित किया है।

मैक्कार्थी 91 कार्य को इस प्रकार परिभाषित किया गया है

कार्य के मूल्यांकन के परिणाम सभी पूर्णांक तर्कों n ≤ 100 के लिए M(n) = 91, और n > 100 के लिए M(n) = n − 10 द्वारा दिए गए हैं। वास्तव में, M(101) का परिणाम भी 91 (101 - 10 = 91) है। n = 101 के बाद M(n) के सभी परिणाम लगातार 1 से बढ़ रहे हैं, उदाहरण के लिए M(102) = 92, M(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]

संदर्भ

  1. 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.
  2. 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)