कार्यक्रम अपने स्वयं के स्रोत कोड के बारे में तर्क देता है


15

इस प्रश्न की प्रेरणा निम्नलिखित (अस्पष्ट) प्रश्न है: AI होने के लिए प्रोग्रामिंग भाषा / तार्किक आधार क्या हैं जो अपने स्वयं के स्रोत कोड के बारे में तर्क कर सकते हैं और इसे संशोधित कर सकते हैं?

यह बिल्कुल कठोर नहीं है, इसलिए यहां से एक ठोस प्रश्न निकालने का मेरा प्रयास है। मेरी रुचि के दो काम हैं:

(ए) एक प्रोग्रामिंग भाषा पी जो अपने स्वयं के कार्यक्रमों को डेटाटाइप प्रोग्राम (जैसे, एएसटी के रूप में) का प्रतिनिधित्व और हेरफेर कर सकती है। (यदि वांछित है, तो टाइप प्रोग्राम की एक वस्तु को एक स्ट्रिंग में परिवर्तित किया जा सकता है, जो उस भाषा में एक वैध कार्यक्रम का पाठ है। यह एक संकलक के विपरीत होगा।)

(बी) भाषा पी में एक कार्यक्रम के बारे में कारण के लिए एक विधि। यहाँ मैं इसके बारे में सोच रहा हूँ दो स्तर हैं:

  1. एक अन्य भाषा क्यू (प्रमेय साबित करने वाली क्षमताओं के साथ) जो एक पी-प्रोग्राम करती है। यह ऐसे बयानों को व्यक्त करने और साबित करने में सक्षम होना चाहिए जैसे "प्रोग्राम पी चलाने का परिणाम फू है।"
  2. एक प्रोग्राम पी: कार्यक्रम के बारे में तर्क करने का एक तरीका भाषा पी में ही होता है। (इसलिए हम ऊपर पी = क्यू ले रहे हैं।)

किस हद तक ऐसा कुछ लागू किया गया है, या इस दिशा में प्रगति क्या है? व्यावहारिक बाधाएं क्या हैं? प्रश्न के मूल इरादे के प्रकाश में, समस्या को औपचारिक रूप देने का सबसे अच्छा तरीका क्या है?

*

जैसा कि उत्तर दिखाते हैं (धन्यवाद!), दोनों (ए) और (बी 1) अलग-अलग किए जा सकते हैं, हालांकि ऐसा लगता है कि उन्हें एक साथ करना एक शोध प्रश्न से अधिक है।

यहाँ प्रश्न पर मेरे पहले विचार थे (चेतावनी: बल्कि अस्पष्ट)। मार्टिन बर्जर के जवाब पर मेरी टिप्पणियाँ भी देखें।

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

यह एक बड़ी परियोजना की तरह लगता है - भाषा जितनी सरल है, उतना ही मुश्किल यह है कि इसके भीतर सब कुछ व्यक्त किया जाए; भाषा जितनी जटिल होती है, भाषा को मॉडल बनाने के लिए उतना ही अधिक काम करना पड़ता है।

रिकर्सियन प्रमेय की भावना में, एक प्रोग्राम अपने स्वयं के स्रोत कोड को "प्राप्त" कर सकता है और इसे संशोधित कर सकता है (यानी, स्वयं का एक संशोधित संस्करण आउटपुट)। (बी 2) तो हमें बताता है कि कार्यक्रम को संशोधित कार्यक्रम के बारे में एक गारंटी व्यक्त करने में सक्षम होना चाहिए (यह पुनरावृत्ति करने में सक्षम होना चाहिए, अर्थात, यह भविष्य के सभी संशोधनों के बारे में कुछ व्यक्त करने में सक्षम होना चाहिए?)।


1
आपको यह साबित करने के लिए भाषा की आवश्यकता क्यों है कि "प्रोग्राम पी चल रहा है का परिणाम फू" स्थापित करने के लिए एक प्रमेय कहावत के रूप में कार्य करता है? भाषा बस p चला सकती है! वास्तव में, यही हो रहा है।
मार्टिन बर्जर


3
ध्यान दें कि सिद्धांत रूप में सभी भाषा जो स्वयं के लिए एक दुभाषिया को लागू कर सकते हैं वे चीजें कर सकती हैं जिनकी आपको आवश्यकता है। एक अधिक गणितीय तरीके से, पुनरावर्तन प्रमेय किसी भी मजबूत पर्याप्त गणना के मॉडल के लिए है। कुछ प्रोग्रामिंग लैंग्वेजेज इसे बिलकुल आसान बना देती हैं। तर्क के लिए समान: आप इन भाषाओं के अंदर किसी भी रीज़निंग सिस्टम को लागू कर सकते हैं। बेशक कोई भी सब कुछ करने की उम्मीद नहीं कर सकता है, जैसे कार्यक्रमों के लिए समस्या।
केव

2
मुझे लगता है कि प्रश्न बहुत स्पष्ट नहीं है। आपको पायथन, जावा जैसी प्रोग्रामिंग भाषाओं पर एक नज़र डालनी चाहिए, और मार्टिन ने उनके उत्तर में उल्लेख किया और प्रश्न को स्पष्ट किया ताकि या तो यह स्पष्ट हो कि वे मिलते हैं कि आप क्या देख रहे हैं या नहीं तो क्यों नहीं।
केवह

1
@HoldenLee "P = Q" के रूप में, स्थापित शब्दावली "सजातीय मेटा-प्रोग्रामिंग" है, जो "विषम मेटा-प्रोग्रामिंग" के विरोध में है, जहां Q.
मार्टिन बर्जर

जवाबों:


14

मुझे लगता है कि आप दो अलग चीजों के बारे में पूछ रहे हैं।

  • एक प्रोग्रामिंग भाषा की क्षमता डेटा के रूप में अपने सभी कार्यक्रमों का प्रतिनिधित्व करने के लिए।
  • डेटा के रूप में कार्यक्रमों के बारे में तर्क देना।

विश्लेषणात्मक उद्देश्यों के लिए उन्हें अलग रखना उपयोगी है। मैं पूर्व पर ध्यान केंद्रित करूंगा।

एक प्रोग्रामिंग लैंग्वेज की क्षमता, डेटा को मेटा-प्रोग्रामिंग या होमोसेक्सुअलिटी जैसे शब्दों के तहत अपने कार्यक्रमों का प्रतिनिधित्व, हेरफेर (और चलाने) करती है

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

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

if[]then7else8+9
। यदि इस कार्यक्रम एम आंकड़ों के मूल्यांकन करताx > 0 , तो अर्ध बोलीमैं []Mx>0 आंकड़ों के मूल्यांकन करतामैं
if[M]then7else8+9
ifx>0then7else8+9.

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

कई प्रोग्रामिंग भाषाएं अर्ध-उद्धरण और मेटा-प्रोग्रामिंग के लिए अन्य सुविधा प्रदान करती हैं। यह अपनी मैक्रोइंग कार्यक्षमता के साथ लिस्प था जिसने प्रोग्राम को डेटा के रूप में व्यवहार करने की इस क्षमता को आगे बढ़ाया। शायद दुर्भाग्य से, लिस्प-आधारित मैक्रो की शक्ति लंबे समय तक लिस्प के न्यूनतर सिंटैक्स पर आराम करने के लिए देखी गई थी; यह मेटाएएमएल (1) तक नहीं था कि एक आधुनिक, वाक्य रचना की समृद्ध भाषा को मेटा-प्रोग्रामिंग करने में सक्षम दिखाया गया था। तब से, MetaOCaml (2) (MetaML का एक वंशज, अभी भी चल रही खोज में अपनी सफलता के लिए महत्वपूर्ण है कि डेटा को प्रोग्राम कैसे टाइप करें), टेम्पलेट हास्केल (3) और कन्वर्ज (4) (पहली भाषा) मेरी राय में सभी प्रमुख मेटा-प्रोग्रामिंग विशेषताओं को प्राप्त करें) ने दिखाया है कि विभिन्न प्रकार की आधुनिक प्रोग्रामिंग भाषाएं मेटा-प्रोग्रामिंग को घर दे सकती हैं। यह महसूस करना महत्वपूर्ण है कि हम क्या कर सकते हैंकिसी भी प्रोग्रामिंग भाषा और इसे मेटा-प्रोग्रामिंग भाषा में बदल देंL देती है, जो L के रूप में डेटा के रूप में अपने स्वयं के कार्यक्रमों का प्रतिनिधित्व (और मूल्यांकन) करने की क्षमता के साथ होता है।LmpL

eval()PPPPeval(P)PP

दूसरे आयाम के रूप में, डेटा के रूप में दिए गए कार्यक्रमों के बारे में तर्क। जैसे ही आप कार्यक्रमों को डेटा में बदल सकते हैं, वे 'सामान्य' डेटा हैं और डेटा के बारे में तर्क दिया जा सकता है। जोवरुआ ने बताया है कि आप सभी प्रकार की प्रोवर तकनीक का उपयोग कर सकते हैं, जैसे कि आश्रित प्रकार या अनुबंध या इंटरैक्टिव प्रमेय सिद्ध या स्वचालित उपकरण। हालाँकि आपको तर्क प्रक्रिया में अपनी भाषा के शब्दार्थ का प्रतिनिधित्व करना होगा। यदि वह भाषा, जैसा कि आप की आवश्यकता है, मेटा-प्रोग्रामिंग क्षमता है, चीजें थोड़ी मुश्किल हो सकती हैं और इस दिशा में बहुत काम नहीं किया गया है, (5) इस उद्देश्य के लिए एकमात्र कार्यक्रम तर्क है। मेटा-प्रोग्रामिंग (6, 7, 8) के बारे में तर्क के आधार पर करी-हावर्ड भी है। ध्यान दें कि ये तर्क-आधारित दृष्टिकोण, और प्रकार-आधारित दृष्टिकोण (2) वास्तव में उन गुणों को व्यक्त कर सकता है जो भविष्य के सभी मेटा-प्रोग्रामिंग चरणों के लिए हैं। (2) के अलावा उन पत्रों में से कोई भी लागू नहीं किया गया है।

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


  1. डब्ल्यू। ताहा। मल्टी-स्टेज प्रोग्रामिंग: इसके सिद्धांत और अनुप्रयोग

  2. डब्ल्यू। ताहा और एमएफ नीलसन। पर्यावरण के वर्गीकरण

  3. टी। शियरड और एस। पीटन जोन्स। हास्केल के लिए टेम्प्लेट मेटा-प्रोग्रामिंग

  4. ल टट। एक गतिशील टाइप ओ ओ भाषा में संकलन-समय मेटा-प्रोग्रामिंग

  5. एम। बर्जर, एल। ट्राट, सजातीय मेटा-प्रोग्रामिंग के लिए कार्यक्रम लॉजिक्स

  6. आर। डेविस, एफ। फ़ेनिंग, मंचन अभिकलन का एक विश्लेषण

  7. आर। डेविस, ए टेम्पोरल-लॉजिक अप्रोच टू बाइंडिंग-टाइम एनालिसिस

  8. टी। त्सुकदा, ए। इगारशी। पर्यावरण वर्गीकरण के लिए एक तार्किक नींव


आप सही हैं - प्रोग्रामिंग भाषा P, उस भाषा Q से भिन्न हो सकती है जो उस भाषा के कार्यक्रमों के बारे में प्रमेय / प्रमाण व्यक्त करती है (जो उदाहरण के लिए Coq में हो सकती है)। जिस तरह की प्रमेय के बारे में मैं सोच रहा हूं, वह इस प्रकार है: मान लीजिए कि हमारे पास सावधानीपूर्वक तैयार किया गया प्रोग्राम A_1 है। Thm: प्रत्येक n के लिए निम्नलिखित होल्ड करता है: प्रोग्राम A_n आउटपुट (m_n, A_ {n + 1}) होगा, जहां m_n एक पूर्णांक है, A_ {n + 1} एक अन्य प्रोग्राम है (उदाहरण के लिए, किसी तरह a_n को संशोधित करके प्राप्त किया जाता है) , और सभी n के लिए, हमारे पास वह m_n> 0 है।
होल्डन

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

यही कारण है कि मैं प्रोग्राम को चलाने के बीच एक अंतर बनाना चाहता था, और इस पर तर्क दिया कि प्रोग्राम क्या आउटपुट देगा - हम इसे चलाने से पहले इसे चलाने के बिना क्या करेंगे, इसके गुणों को जानना चाहते हैं। ध्यान दें कि यदि हम चाहते हैं कि A_n अपने स्रोत कोड को "A_ {n + 1" बनाने में सक्षम हो, तो P के पास जरूरी रूप से मेट्रोपोग्रामिंग क्षमताएं होंगी (जो हमें (5) की स्थिति में लाती हैं)।
होल्डन

यह अभी भी मुझे लगता है कि यह पी = क्यू के लिए दिलचस्प होगा। Hypothetically, A एक AI प्रोग्राम है और जिस तरह से खुद को संशोधित करेगा वह अपने स्वयं के कोड के बारे में तर्क करके है - उदाहरण के लिए, कोड के बिट्स के बारे में प्रमेय लिखिए, उन्हें साबित करना और उसके बाद ही अपने कोड को संशोधित करना। तब ऐसा लगता है कि पी को क्यू की क्षमताओं की आवश्यकता होगी।
होल्डन ली

@HoldenLee A_n जैसे कार्यक्रमों को लिखना संभव है। यदि आप स्ट्रिंग्स का उपयोग कार्यक्रमों के प्रतिनिधि के रूप में करते हैं, तो यह किसी भी भाषा में तुच्छ रूप से किया जा सकता है, यदि आप अर्ध-उद्धरण या समान चाहते हैं, तो उदाहरण के लिए यह संभव है। मैं निर्माण में m_n की भूमिका को नहीं समझता।
मार्टिन बर्गर

6

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

यदि आप ऐसा करना चाहते हैं तो पहला कदम है कि लिस्प की तरह एक होमोसेक्सुअल भाषा या कुछ रूपरेखा जहां आप एक चल रहे कार्यक्रम के बारे में तर्क कर सकते हैं। लिस्प का उपयोग इस कारण से किया जाता है कि आप भाषा में एक मेटाकार्युलर दुभाषिया परिभाषित कर सकते हैं या आप अपने कोड को डेटा के रूप में मान सकते हैं। कोड को डेटा के रूप में मानना ​​सबसे महत्वपूर्ण बात है। सी 2 विकी पर होमियोसोनिक का क्या अर्थ है, इसके बारे में चर्चा है।

लिस्प में उदाहरण के लिए आपका "प्रोग्राम" डेटाटाइप मान्य लिस्प प्रोग्राम है। आप एक दुभाषिया के लिए लिस्प प्रोग्राम पास करते हैं और यह कुछ गणना करता है। यदि आप एक मान्य "प्रोग्राम" नहीं करते हैं तो यह दुभाषिया द्वारा अस्वीकार कर दिया जाता है।

इसलिए एक होमोसेक्सुअल भाषा आपकी तीन आवश्यकताओं को पूरा करती है। तुम भी लिस्प में एक औपचारिक कार्यक्रम के विचार को परिभाषित कर सकते हैं।

आप लिस्प के अंदर लिस्प कर सकते हैं? हां यह अक्सर मुख्य रूप से आपकी क्षमताओं का परीक्षण करने के लिए एक लिस्प प्रोग्रामिंग किताब के अंत में एक अभ्यास के रूप में किया जाता है। SICP

वर्तमान समय के मुद्दे पर चार एक शोध प्रश्न है और नीचे मैंने वही पाया है जो इस प्रश्न का उत्तर देने का प्रयास करता है।

मैं कहूंगा कि कई प्रकार के कार्यक्रम हैं जो ऐसा करने का प्रयास करते हैं। नीचे उन सभी कार्यक्रमों के बारे में बताया गया है जिनके बारे में मुझे पता है।

  • JSLint एक स्थिर विश्लेषक का उदाहरण है जो मशीन कोड या किसी अन्य भाषा को लेते हैं और बग को स्पष्ट रूप से देखते हैं। फिर यह एक प्रोग्रामर से उसे ठीक करने के लिए कहता है।

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

  • दूसरी ओर ACL2 एक स्वचालित प्रमेय कहावत है। यह सिस्टम आपके द्वारा प्रोग्राम की गई चीज़ के आधार पर स्टेटमेंट साबित करेगा।

  • ACL2 और Coq में एक सॉफ्टवेयर प्लगइन है जो एक मशीन लर्निंग सिस्टम के साथ अपने सिस्टम को इंटरफ़ेस करता है । इन प्रणालियों को प्रशिक्षित करने के लिए क्या उपयोग किया जाता है, पहले लिखे गए कार्यक्रम हैं। मेरी समझ से ये प्रणालियाँ एक और विशेषता जोड़ती हैं जहाँ आपके पास न केवल अपनी रणनीति है बल्कि ऐसे प्रमेय सुझाए गए हैं जो प्रमाण विकास में सहायता करते हैं।

नीचे इस बात की अधिक जानकारी है कि आपके प्रश्न का क्या अर्थ है।

  • gcc एक आशावादी कंपाइलर का एक उदाहरण है जो इनपुट के रूप में खुद को ले सकता है और फिर स्वयं का एक अनुकूलित संस्करण आउटपुट कर सकता है। एक कंपाइलर का विचार जो एक प्रतिनिधित्व से दूसरे में कार्यक्रमों का अनुवाद करता है और कुछ अनुकूलन ध्वज के कारण गति में सुधार करता है, बहुत अच्छी तरह से समझा जाता है। एक बार जब आप संकलक को बूटस्ट्रैप करते हैं और यह वैध मशीन कोड उत्पन्न करता है तो आप एक अनुकूलन जोड़ सकते हैं और संकलक को फिर से जोड़ सकते हैं और यह स्वयं का अधिक कुशल संस्करण बनाता है।

1
भाषा को यथासंभव न्यूनतम बनाने की आवश्यकता नहीं है। आप प्रासंगिक मेटा-प्रोग्रामिंग सुविधाओं को किसी भी भाषा में जोड़ सकते हैं। ताहा के मेटाएमएल कार्य ने यह दिखाया है। वास्तव में मेटा-प्रोग्रामिंग क्षमताओं का जोड़ यांत्रिक है।
मार्टिन बर्जर

1
मैं यह भी असहमत हूं कि "कोई भी मौजूदा प्रणाली जो सभी चार चरणों को नहीं करती है"। प्रश्न 4 केवल कोड के रूप में दिए गए प्रोग्राम चलाने की बात करता है। यह पूरी तरह से संभव है, वास्तव में यहां तक ​​कि जावास्क्रिप्ट का विकास भी करता है।
मार्टिन बर्जर

@MartinBerger मेरा मतलब है कि आप कोर कर्नेल को यथासंभव कम से कम कर सकते हैं। यदि आप यह भी आशा करना शुरू करते हैं कि आपका सिस्टम # 4 करेगा, तो आप एक ऐसी प्रणाली चाहते हैं, जिसे आप न केवल मनुष्यों बल्कि कंप्यूटरों को प्रशिक्षित कर सकें, इसलिए इसका उपयोग करने से आपको कम से कम व्यवस्था करने में लाभ होगा और उनके पास पुस्तकालय हैं जिन्हें कोडित किया गया है। मेटा प्रोग्रामिंग टेम्प्लेट
जोशुआ हरमन

यह निर्भर करता है कि हम किस (4) के बारे में बात कर रहे हैं। मूल प्रश्न में उन के दो विस्तार हैं। पहला तुच्छ है, आप सिर्फ कार्यक्रम चलाते हैं। दूसरे को टाइपिंग सिस्टम (2) के मेरे उत्तर में दिए गए तर्क (5) के रूप में देखा जा सकता है। बाद में मेटाओक्लेम में लागू किया गया। लेकिन अधिक शोध के लिए गुंजाइश है: न तो (2) और न ही (5) मेटा-प्रोग्रामिंग के मनमाने रूपों से निपट सकते हैं, और (2) द्वारा गारंटीकृत संपत्तियां थोड़ी कमजोर हैं (आखिरकार, यह एक टाइपिंग सिस्टम है जिसमें टाइप इंट्रेंस है) ।
मार्टिन बर्जर

1
जैसा कि "आप कोर कर्नेल को यथासंभव कम से कम बनाते हैं": यह आवश्यक नहीं है। आप किसी भी भाषा में पूर्ण मेटा-प्रोग्रामिंग जोड़ सकते हैं।
मार्टिन बर्जर

5

जैसा कि @ user217281728 के उत्तर में उल्लेख किया गया है कि एक प्रकार की मशीनें संबंधित हैं जो अनुमान से अधिक और एआई, गोड्डा मशीन कहलाती हैं

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

"गोएडेल मशीन्स: सेल्फ-रेफ़रेंशियल यूनिवर्सल प्रॉब्लम सॉल्वर्स प्रोवाइडली ऑप्टिमल सेल्फ-इम्प्रूवमेंट्स" पर जुरगेन श्मिटर का संदर्भित प्रकाशन , (2006) arXiv: cs / 0309048v5

मेटा-लर्निंग को लागू करने के लिए मशीन के काम करने के तरीके के दो चरण हैं:

  1. डेटा से सीखना (स्तर 1, सीखना)
  2. अपने स्रोत कोड / एल्गोरिदम (स्तर 2, जानने के लिए सीखना) को संशोधित / अनुकूलित करने के लिए सीखा डेटा का उपयोग करना

चूंकि मशीन अपने स्वयं के स्रोत को संशोधित करती है, इसलिए यह स्व-संदर्भ योग्य है, अर्थात इसमें स्व-संशोधन संपत्ति है ( यहां भी देखें )।

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

.. एक असीमित कम्प्यूटेशनल संसाधनों के साथ Gödel मशीन उन आत्म-सुधारों को अनदेखा करना चाहिए जिनकी प्रभावशीलता यह साबित नहीं कर सकती है

अन्य भाषाएं (और उनकी संबद्ध दुभाषिया मशीन) जिनके पास स्व-संशोधन संपत्ति है, उदाहरण के लिए LISP

LISP कोड में और डेटा अंतर-परिवर्तनीय हैं, या स्रोत कोड AST LISP प्रोग्राम में डेटा के रूप में उपलब्ध है, और इसे डेटा के रूप में संशोधित किया जा सकता है। दूसरी ओर, डेटा को कुछ स्रोत कोड के लिए एएसटी के रूप में देखा जा सकता है।

अपडेट करें

कर रहे हैं और साथ ही अन्य मशीनों की तरह, आत्म प्रोग्रामिंग मशीनों (दूसरों के बीच) जो गठबंधन आत्म संदर्भ , आत्म प्रजनन और आत्म प्रोग्रामिंग

उपरोक्त का एक दिलचस्प पहलू यह है कि आत्म-संदर्भ समस्यात्मक नहीं है , बल्कि यह स्व-प्रजनन / स्व-प्रोग्रामिंग ऑटोमेटा में एक आवश्यक तत्व है

अधिक जानकारी के लिए (और अधिक प्रकाशन) जेपी मौलिन, सीआर जीव विज्ञान 329 (2006) देखें

सार

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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.