प्रोग्रामिंग भाषाओं में अमूर्त व्याख्या के पीछे लक्ष्य क्या है?


9

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

मुझे इस बारे में निश्चित नहीं है कि अमूर्त व्याख्या के उपयोग को क्या प्रेरित करता है? क्या यह सिर्फ कम्प्यूटेशनल कार्यों के लिए निश्चित बिंदुओं की पहचान करना है? क्या अधिकांश प्रोग्रामिंग भाषाओं में पुनरावृत्ति होने से मुख्य प्रेरणा आ रही है?

कुछ उच्च-स्तरीय अवलोकन प्राप्त करने में भी खुशी होगी जो तकनीकी रूप से किसी ऐसे व्यक्ति के लिए पर्याप्त रूप से गहरा हो जाता है जिसके पास कंप्यूटर विज्ञान में डिग्री है। मुझे विकिपीडिया पृष्ठ उलझा हुआ लगता है।


पुस्तक plz का हवाला देते हैं। विकिपीडिया अमूर्त व्याख्या
vzn

क्या आप इस बात का उल्लेख कर सकते हैं कि आप किस पुस्तक अध्याय को पढ़ रहे हैं?
विजय डी।

अधिक तकनीकी विषयों पर ट्यूटोरियल के लिए विकिपीडिया हमेशा सबसे अच्छी जगह नहीं है।
विजय डी।

@Vijay और vzn यह एक चीज है जिसे मैंने देखा: cs.berkeley.edu/~necula/cs263/handouts/AbramskiAI.pdf
newToPL

जवाबों:


16

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

एक प्रेरणा के रूप में कम्प्यूटेशनल कठोरता

आइए निर्णय समस्याओं से शुरू करते हैं, जिनके समाधान की संरचना इस प्रकार है:

निर्णय की समस्या

अक्सर प्रक्रिया पर एक एनपी-हार्ड लोअर बाउंड होता है। कार्यक्रमों के शब्दार्थ गुणों की जाँच करना भी असाध्य है। हम क्या कर सकते है?

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

  1. औपचारिक रूप से कुछ हल करने के लिए इसका क्या मतलब है, लेकिन सभी समस्याएँ नहीं हैं?
  2. निर्णय समस्या का एक अनुमानित समाधान क्या है?

सार व्याख्या आइडिया 1: समस्या कथन को बदलें

मेरे लिए, अमूर्त व्याख्या की एक प्रमुख अंतर्दृष्टि समस्या निर्माण को बदलना है ताकि हम हां / ना का जवाब मांगने के बजाय , हम हां / नहीं / शायद जवाब मांगें ।

हां नहीं शायद

नतीजतन, हर समस्या का एक तुच्छ, निरंतर समय समाधान (आउटपुट शायद ) है। अब हम एक प्रक्रिया है कि हमेशा उत्पादन नहीं करता है पाने के लिए हमारे ध्यान में बदलाव कर सकते हैं हो सकता है कि । उपरोक्त प्रश्नों पर लौटने के लिए, कुछ समस्याओं के समाधान के लिए काम करने वाला समाधान वह है जो रिटर्न करता है शायद समस्याओं पर यह हल नहीं कर सकता है। इसके अलावा, शायद हाँ और नहीं का एक अनुमान है क्योंकि हम निश्चित नहीं हैं कि इसका उत्तर क्या है।

यह विचार निर्णय की समस्याओं तक सीमित नहीं है। कार्यक्रमों से संबंधित इन समस्याओं पर विचार करें।

  1. कार्यक्रम में कोड की कौन सी लाइनें मृत हैं (कभी निष्पादित नहीं होंगी)?
  2. कार्यक्रम में कौन से चर में निरंतर मूल्य हैं?
  3. कार्यक्रम में किन दावों का उल्लंघन किया जाता है?

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

  1. क्या है एक सेट कोड मर चुका है कि की लाइनों की?
  2. कार्यक्रम में चर का एक सेट है जिसमें निरंतर मान हैं?
  3. उस कार्यक्रम में मुखरता का एक सेट क्या है जिसका उल्लंघन नहीं किया जाता है?

उत्पादित सेट सबसे बड़ा नहीं होना चाहिए। यह विचार बेहद सामान्य है और उन समस्याओं पर लागू होता है जिनका कार्यक्रम विश्लेषण से बहुत कम लेना-देना है।

  1. और को जोड़ने के बजाय , हम एक सीमा लिए पूछ सकते हैं जिसमें योग निहित है।mn[a,b]
  2. इसके बजाय गुणा करने का से हम के लिए पूछ सकते हैं परिणाम के टुकड़े (विशिष्ट, सामान्य उदाहरण हस्ताक्षर या समता बिट कर रहे हैं)।mnk
  3. एक सूत्र को संतोषजनक कार्य के लिए पूछने के बजाय, हम एक सेट के लिए पूछ सकते हैं जिसमें संतोषजनक कार्य शामिल हैं।

ध्यान दें कि हमने न केवल समस्या को बदल दिया है, बल्कि इसे सख्ती से सामान्यीकृत किया है क्योंकि मूल समस्या का समाधान अभी भी संशोधित समस्या का समाधान है। अब बड़ा अनुत्तरित प्रश्न है: हम एक अनुमानित समाधान कैसे पा सकते हैं?

सार व्याख्या 2 आइडिया: मूल समाधान की निश्चित बिंदु विशेषता

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

X={s}{w | v is in X and (v,w) is an edge}

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

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

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

सार व्याख्या विचार 3: निश्चित बिंदु अनुमोदन

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

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

आप निश्चित बिंदु अंतरण के पीछे अंतर्ज्ञान पा सकते हैं। हम एक निश्चित बिंदु को तत्वों की एक (संभवतः ट्रांसफ़ेक्टेन) श्रृंखला की सीमा के रूप में सोच सकते हैं। इस सीमा को अनुमानित करने के लिए अनुमानित समाधान मात्राओं की गणना, जिसे हम श्रृंखला के तत्वों को अंजाम देकर कर सकते हैं।

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

सार व्याख्या विचार 4: फिक्स्ड प्वाइंट अनुमोदन एल्गोरिदम

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

सारांश

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

एक प्राकृतिक मीट्रिक नहीं होने वाली समस्याओं के लिए अनुमान लगाना कम्प्यूटर्स द्वारा लगातार विकसित और परिष्कृत एक कला है। इस कला के पीछे विज्ञान के लिए सार व्याख्या एक गणितीय सिद्धांत है।

सन्दर्भ व्याख्या की व्याख्या पर कई अच्छे ट्यूटोरियल हैं जिन्हें आप पढ़ सकते हैं।

  1. सार व्याख्या , पैट्रिक कूसॉट (राधिया कूसोत के साथ संयुक्त कार्य), सिस्टम बायोलॉजी एंड फॉर्मल्स मैथड्स (SBFM'12) पर एक आकस्मिक परिचय।
  2. अमूर्त व्याख्या , पैट्रिक और राधिया कूसोट, मार्कट्रबॉर्फ समर स्कूल 2010 द्वारा कंप्यूटर सिस्टम के औपचारिक सत्यापन के लिए एक सौम्य परिचय
  3. व्याख्यान 13: अमूर्त भाग I , पैट्रिक कूसॉट, सार व्याख्या, एमआईटी पाठ्यक्रम।
  4. अमूर्त व्याख्या , सैमसन अब्रामस्की और क्रिस हैंकिन का परिचय , घोषणात्मक भाषाओं का सार व्याख्या, 1987।
  5. सार व्याख्या और तर्क कार्यक्रमों के लिए आवेदन , पैट्रिक और राडिया कूसॉट, 1992। पहले दो खंडों में कई उदाहरणों के साथ एक सामान्य, उच्च-स्तरीय अवलोकन है।

7

मैं मानता हूं कि उन सभी विवरणों में से मुख्य बिंदु को निकालना अक्सर कठिन होता है। (वास्तव में, मैंने देखा है अमूर्त व्याख्या के हर उपचार के साथ मेरा बड़ा मुद्दा यह है कि वे इसे प्रेरित किए बिना इतनी मशीनरी पेश करते हैं।)

यहाँ मैं इसके बारे में सोच रहा हूँ:

सार व्याख्या एक बार में सभी इनपुट्स के बड़े सेट पर, लगभग, प्रोग्राम चला रही है।

यह सब कुछ कवर नहीं करता है, लेकिन यह सामान्य रूप से अच्छा है।

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

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

आप सीधे सभी सकारात्मक संख्याओं के सेट का प्रतिनिधित्व नहीं कर सकते। इसके बजाय, आपको उस सेट के अमूर्त की आवश्यकता है । आपको नकारात्मक संख्याओं और शून्य का सार भी चाहिए। आप परिमित सार सेट के एक परिवार के साथ समाप्त होते हैं{neg,zero,pos}, कि ठोस सेट का प्रतिनिधित्व करते हैं{{...,2,1},{0},{1,2,...}}

अब आप नियमों के साथ आ सकते हैं, जैसे "एक सकारात्मक संख्या में दो सकारात्मक संख्याओं को जोड़ना," या add:pos×pospos। अपनी प्रत्येक भाषा की प्राथमिकताओं के लिए नियमों के साथ आओ, और आप एक ही समय में इनपुट के बड़े सेट पर अंकगणितीय अभिव्यक्तियों का मूल्यांकन करने का नाटक कर सकते हैं।

बेशक, "एक सकारात्मक और एक नकारात्मक संख्या को जोड़ना" नियम आपको परेशानी देगा, क्योंकि इस तरह के अतिरिक्त कुछ भी वापस कर सकते हैं। अमूर्त व्याख्या रूपरेखा आपको यहां मदद करती है: यह कहता है कि आपको एक ध्वनि सन्निकटन वापस करना चाहिए जो जितना संभव हो उतना तंग है। यदि आपके नियम ध्वनिपूर्ण हैं, और वे कहते हैं कि अमूर्त सेट में कुछ रिटर्न मिलता है, तो किसी भी ठोस मूल्यांकन को संबंधित कंक्रीट सेट में एक नंबर वापस करना चाहिए। उदाहरण के लिए,add:pos×pospos नियम ध्वनि है अगर add(a,b) हर सकारात्मक के लिए सकारात्मक है a तथा b। इसके अलावा,pos×neg(poszeroneg) ध्वनि है, जहां ""आपका अमूर्त सेट 'यूनियन ऑपरेशन है।

मेरा मानना ​​है कि यहां तक ​​कि सबसे युवा पीएल शोधकर्ता एक दोपहर में इस तरह की व्याख्या कर सकते हैं। यह वास्तव में उतना कठिन नहीं है, और आपको मूल बातें महसूस करने के लिए और अधिक पढ़ने से पहले इसे आज़माना चाहिए। जब आप करते हैं, आपको पता चल जाएगा कि आपके अमूर्त सेट को चौराहे की कुछ धारणा की आवश्यकता है (चिह्नित)") और सबसेट (चिह्नित)")। उन्हें ठोस चौराहे और उपसमुच्चय के साथ मेल खाना चाहिए।

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

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

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

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