सवाल बल्कि व्यापक है। एक उचित जगह में इसका जवाब देने के लिए मैं कई ओवरसिंप्लिमेंट्स बनाऊंगा।
हमें शब्दावली पर सहमत होना चाहिए। एक कार्यक्रम सही है जब यह अपने विनिर्देश का अर्थ है। यह अस्पष्ट कथन कई मायनों में सटीक है, जो यह बताता है कि वास्तव में एक कार्यक्रम क्या है और वास्तव में एक विनिर्देश क्या है। उदाहरण के लिए, मॉडल की जाँच में कार्यक्रम एक क्रिप्के संरचना है और विनिर्देश अक्सर एक एलटीएल सूत्र है। या, कार्यक्रम पावरपीसी निर्देशों की एक सूची हो सकती है और विनिर्देश होरे-फ्लोयड के दावे का एक सेट हो सकता है , जो कहते हैं, पहला-ऑर्डर लॉजिक। बहुत संभव विविधताएं हैं। यह निष्कर्ष निकालना आकर्षक है कि एक मामले में (क्रिप्के संरचना) हम एक वास्तविक कार्यक्रम का सत्यापन नहीं करते हैं, जबकि दूसरे मामले में (पावरपीसी निर्देशों की सूची) हम करते हैं। हालांकि, यह महसूस करना महत्वपूर्ण है कि हम वास्तव में दोनों मामलों में गणितीय मॉडल देख रहे हैं, और यह पूरी तरह से ठीक है। (स्थिति भौतिकी के समान है, उदाहरण के लिए, शास्त्रीय यांत्रिकी वास्तविकता का गणितीय मॉडल है।)
अधिकांश औपचारिकताएं एक कार्यक्रम के वाक्यविन्यास और शब्दार्थ के बीच अंतर करती हैं; इसका मतलब यह है कि इसका प्रतिनिधित्व कैसे किया जाता है और इसका क्या मतलब है। एक कार्यक्रम के शब्दार्थ को कार्यक्रम सत्यापन के दृष्टिकोण से गिना जाता है। लेकिन, निश्चित रूप से कार्यक्रमों के अर्थों को (सिंटैक्टिक अभ्यावेदन) निर्दिष्ट करने का एक स्पष्ट तरीका होना महत्वपूर्ण है। दो लोकप्रिय तरीके निम्नलिखित हैं:
- (छोटा कदम) परिचालनात्मक शब्दार्थ : यह एक प्रोग्रामिंग भाषा को परिभाषित करने के लिए एक दुभाषिया लिखकर बहुत पसंद है। इसके लिए आपको यह कहने की आवश्यकता है कि राज्य क्या है , और यह भाषा के प्रत्येक कथन से प्रभावित होता है। (आप आश्चर्यचकित कर सकते हैं कि आप किस भाषा में दुभाषिया लिखते हैं, लेकिन मैं दिखावा करूँगा कि आप नहीं हैं।)
- स्वयंसिद्ध शब्दार्थ : यहाँ प्रत्येक कथन प्रकार एक स्वयंसिद्ध स्कीमा के साथ आता है। तो, मोटे तौर पर, जब भी उस प्रकार के किसी विशेष कथन का उपयोग किया जाता है, तो वह कुछ स्वयंसिद्ध शब्दों का उपयोग करने में सक्षम होने में अनुवाद करता है। उदाहरण के लिए, असाइनमेंट स्कीमा { P [ x / e ] } के साथ आता हैx:=e ; विशेष असाइनमेंट x : = x + 1 स्वयंसिद्ध { x + 1 = 1 } के साथ आता है{P[x/e]}x:=e{P}x:=x+1 यदि हम स्कीमा को P = ( x = 1 ) से त्वरित करते हैं।{x+1=1}x:=x+1{x=1}P=(x=1)
(कुछ अन्य हैं। मैं विशेष रूप से खराब अर्थ-विज्ञान शब्दार्थ को छोड़ने के लिए बुरा महसूस करता हूं, लेकिन यह उत्तर पहले से ही लंबा है।) मशीन कोड प्लस ऑपरेशनल शब्दार्थ बहुत करीब है जो ज्यादातर लोग 'वास्तविक कार्यक्रम' कहते हैं। यहां एक सेमिनल पेपर है, जो डीईसी अल्फा मशीन कोड के सबसेट के लिए परिचालन शब्दार्थ का उपयोग करने के लिए होता है:
आप स्वयंसिद्ध लोगों की तरह कुछ उच्च-स्तरीय शब्दार्थों का उपयोग कभी क्यों करेंगे? जब आप नहीं चाहते हैं कि आप जिस हार्डवेयर पर चलते हैं, उस पर निर्भर होने का आपका प्रमाण सही है। तब दृष्टिकोण कुछ सुविधाजनक उच्च-स्तरीय शब्दार्थों के संबंध में एक एल्गोरिथ्म की शुद्धता साबित करने के लिए है, और फिर यह साबित करता है कि शब्दार्थ निचले स्तर के शब्दार्थों के संबंध में ध्वनि है जो वास्तविक मशीनों के करीब हैं।
सारांश में, मैं आपके प्रश्न के तीन कारणों के बारे में सोच सकता था:
- आपने केवल उच्च-स्तरीय शब्दार्थ देखे हैं, जो किसी प्रोग्राम को कॉल करने के लिए आपके द्वारा उपयोग किए जाने वाले जैसे नहीं दिखते हैं, और आपको आश्चर्य होता है कि क्या निम्न-स्तर वाले हैं। इसका जवाब है हाँ।
- आपको आश्चर्य है कि आप कैसे साबित करते हैं कि एक मॉडल वास्तविकता से मेल खाती है। भौतिकी की तरह, आप नहीं। आप बस बेहतर मॉडल के साथ आते हैं और उन्हें वास्तविकता के खिलाफ जांचते हैं।
- आपने सिंटैक्स और शब्दार्थ के बीच अंतर नहीं देखा है, और कार्यक्रमों को अर्थ प्रदान करने के विभिन्न तरीके हैं। पिछले दो प्रश्न कुछ पुस्तकों को सूचीबद्ध करते हैं।
यह उत्तर केवल तीन अलग-अलग तरीकों की पहचान करने की कोशिश कर रहा है जिसमें मैंने प्रश्न को समझा। इनमें से किसी भी बिंदु पर गहराई में जाने के लिए बहुत अधिक जगह की आवश्यकता होगी।