मैक्कार्थी 91 फ़ंक्शन

From Vigyanwiki
Revision as of 10:31, 16 August 2023 by alpha>Reena

मैक्कार्थी 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]

संदर्भ

  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)