गार्डेड कमांड लैंग्वेज: Difference between revisions

From Vigyanwiki
(Created page with "गार्डेड कमांड लैंग्वेज (GCL) EWD472 में विधेय ट्रांसफार्मर शब्दार्थ के...")
 
 
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
गार्डेड कमांड लैंग्वेज (GCL) EWD472 में [[विधेय ट्रांसफार्मर शब्दार्थ]] के लिए [[एडवर्ड डिज्क्स्ट्रा]] द्वारा परिभाषित एक [[प्रोग्रामिंग भाषा]] है।<ref name="EWD472">{{cite web | last=Dijkstra | first=Edsger W | authorlink=E. W. Dijkstra | url=http://www.cs.utexas.edu/users/EWD/ewd04xx/EWD472.PDF | title=EWD472: Guarded commands, non-determinacy and formal. derivation of programs. | accessdate=August 16, 2006 }}</ref> यह प्रोग्रामिंग अवधारणाओं को एक संक्षिप्त तरीके से जोड़ता है। इससे प्रोग्राम और उसके प्रूफ़ को साथ-साथ विकसित करना आसान हो जाता है, प्रूफ़ विचार आगे बढ़ते हैं; इसके अलावा, किसी प्रोग्राम के कुछ हिस्सों की वास्तव में गणना की जा सकती है।
'''गार्डेड कमांड लैंग्वेज (GCL)''' EWD472 में [[विधेय ट्रांसफार्मर शब्दार्थ|प्रीडिकेट ट्रांसफार्मर सेमेटिक्स]] के लिए [[एडवर्ड डिज्क्स्ट्रा]] द्वारा परिभाषित एक [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] है।<ref name="EWD472">{{cite web | last=Dijkstra | first=Edsger W | authorlink=E. W. Dijkstra | url=http://www.cs.utexas.edu/users/EWD/ewd04xx/EWD472.PDF | title=EWD472: Guarded commands, non-determinacy and formal. derivation of programs. | accessdate=August 16, 2006 }}</ref> यह प्रोग्रामिंग अवधारणाओं को एक संक्षिप्त तरीके से जोड़ता है। यह एक प्रोग्राम और इसके प्रूफ हैंड-इन-हैंड को विकसित करना आसान बनाता है, इसके साथ ही इस तरह के प्रमाण विचारों को आगे बढ़ाते हैं, इसके अतिरिक्त, किसी प्रोग्राम के कुछ भागो की वास्तव में गणना की जा सकती है।


'जीसीएल' की एक महत्वपूर्ण संपत्ति [[गैर-नियतात्मक प्रोग्रामिंग]] है। उदाहरण के लिए, if-statement में, कई विकल्प सत्य हो सकते हैं, और किसे चुनना है इसका चुनाव रनटाइम पर किया जाता है, जब if-statement निष्पादित होता है। यह प्रोग्रामर को अनावश्यक विकल्प चुनने से मुक्त करता है और कार्यक्रमों के औपचारिक विकास में सहायता करता है।
''''GCL'''<nowiki/>' की एक महत्वपूर्ण प्रापर्टी [[गैर-नियतात्मक प्रोग्रामिंग|नान-डेटरमिनिस्म प्रोग्रामिंग]] है। उदाहरण के लिए, यदि-विवरण में, कई विकल्प सच हो सकते हैं, और जो चुनने का विकल्प रनटाइम पर किया जाता है, जब if-विवरण निष्पादित किया जाता है। यह प्रोग्रामर को अनावश्यक विकल्प चुनने से मुक्त करता है और कार्यक्रमों के औपचारिक विकास में सहायता करता है।


'जीसीएल' में मल्टीपल असाइनमेंट स्टेटमेंट शामिल है। उदाहरण के लिए, कथन का निष्पादन {{code|1= x, y:= y, x}} पहले दाईं ओर के मानों का मूल्यांकन करके और फिर उन्हें बाईं ओर के चर में संग्रहीत करके किया जाता है। इस प्रकार, यह कथन के मानों की अदला-बदली करता है {{mono|x}} और {{mono|y}}.
''''GCL'''<nowiki/>' में मल्टीपल असाइनमेंट स्टेटमेंट सम्मिलित है। उदाहरण के लिए, स्टेट्मन्ट का निष्पादन {{code|1= x, y:= y, x}} पहले दाईं ओर के मानों का मूल्यांकन करके और फिर उन्हें बाईं ओर के चर में संग्रहीत करके किया जाता है। इस प्रकार, यह स्टेट्मन्ट {{mono|x}} और {{mono|y}} के मानों को बदल देता है।


निम्नलिखित पुस्तकें जीसीएल का उपयोग करके कार्यक्रमों के विकास पर चर्चा करती हैं:
निम्नलिखित पुस्तकें GCL का उपयोग करके कार्यक्रमों के विकास पर चर्चा करती हैं:


*{{cite book|ref=none|first=Edsger W. |last=Dijkstra
*{{cite book|ref=none|first=Edsger W. |last=Dijkstra
|author-link=Edsger W. Dijkstra  
|author-link=Edsger W. Dijkstra  
|title=प्रोग्रामिंग का एक अनुशासन|url=https://archive.org/details/disciplineofprog0000dijk  
|title=अ डिसप्लिन ऑफ प्रोग्रामिंग|url=https://archive.org/details/disciplineofprog0000dijk  
|url-access=registration |publisher=Prentice Hall |year=1976  
|url-access=registration |publisher=Prentice Hall |year=1976  
|isbn=978-0132158718}}
|isbn=978-0132158718}}
Line 58: Line 58:
}}
}}


==संरक्षित आदेश==
==गार्डेड कमांड==
संरक्षित कमांड संरक्षित कमांड भाषा का सबसे महत्वपूर्ण तत्व है। एक संरक्षित कमांड में, जैसा कि नाम से पता चलता है, कमांड की रक्षा की जाती है। गार्ड एक [[प्रस्ताव]] है, जो कथन के [[निष्पादन (कंप्यूटर)]] से पहले सत्य होना चाहिए। उस कथन के निष्पादन की शुरुआत में, कोई यह मान सकता है कि गार्ड सत्य है। साथ ही, यदि गार्ड गलत है, तो कथन निष्पादित नहीं किया जाएगा। संरक्षित आदेशों के उपयोग से यह साबित करना आसान हो जाता है कि [[कंप्यूटर प्रोग्राम]] प्रोग्राम विनिर्देशों को पूरा करता है। कथन अक्सर एक अन्य संरक्षित आदेश होता है।
गार्डेड कमांड गार्डेड कमांड लैंग्वेज का सबसे महत्वपूर्ण तत्व है। एक गार्डेड कमांड में, जैसा कि नाम से पता चलता है, कमांड की रक्षा की जाती है। गार्ड एक [[प्रस्ताव]] है, जो स्टेट्मन्ट के [[निष्पादन (कंप्यूटर)]] से पहले सत्य होना चाहिए। उस स्टेट्मन्ट के निष्पादन की प्रांरम्भ में, कोई यह मान सकता है कि गार्ड सत्य है। साथ ही, यदि गार्ड गलत है, तो स्टेट्मन्ट निष्पादित नहीं किया जाएगा। गार्डेड कमांड के उपयोग से यह साबित करना आसान हो जाता है कि [[कंप्यूटर प्रोग्राम]] विनिर्देशों को पूरा करता है। स्टेट्मन्ट प्रायः एक अन्य गार्डेड कमांड होता है।


===सिंटेक्स (प्रोग्रामिंग भाषाएँ)===
===सिंटेक्स (प्रोग्रामिंग लैंग्वेज)===
एक गार्डेड कमांड फॉर्म जी एस का एक [[ कथन (प्रोग्रामिंग) ]] है, जहां
एक गार्डेड कमांड G S के रूप का एक[[ कथन (प्रोग्रामिंग) | स्टेट्मन्ट (प्रोग्रामिंग)]] है, जहां
* जी एक प्रस्ताव है, जिसे गार्ड कहा जाता है
* G एक प्रापज़िशन है, जिसे गार्ड कहा जाता है।
* S एक कथन है
* S एक स्टेट्मन्ट है।


===शब्दार्थ===
===शब्दार्थ===
जिस समय किसी गणना में G का सामना होता है, उसका मूल्यांकन किया जाता है।
जिस समय किसी गणना में G का सामना होता है, उसका मूल्यांकन किया जाता है।
* यदि G सत्य है, तो S निष्पादित करें
* यदि G सत्य है, तो S निष्पादित करें।
* यदि G गलत है, तो क्या करना है यह तय करने के लिए संदर्भ को देखें (किसी भी स्थिति में, S निष्पादित न करें)
* यदि G गलत है, तो क्या करना है यह तय करने के लिए संदर्भ को देखें (किसी भी स्थिति में, S निष्पादित न करें)


==छोड़ें और निरस्त करें==
==स्किप और एबॉर्ट==
संरक्षित कमांड भाषा में स्किप और एबॉर्ट महत्वपूर्ण कथन हैं। निरस्त करना अपरिभाषित निर्देश है: कुछ भी करो। इसे ख़त्म करने की भी ज़रूरत नहीं है. इसका उपयोग किसी प्रमाण को तैयार करते समय प्रोग्राम का वर्णन करने के लिए किया जाता है, जिस स्थिति में प्रमाण आमतौर पर विफल हो जाता है। स्किप खाली निर्देश है: कुछ न करें। इसका उपयोग प्रोग्राम में ही किया जाता है, जब सिंटैक्स के लिए स्टेटमेंट की आवश्यकता होती है लेकिन [[ राज्य (कंप्यूटर विज्ञान) ]] नहीं बदलना चाहिए।
गार्डेड कमांड लैंग्वेज में '''स्किप''' और '''एबॉर्ट''' महत्वपूर्ण स्टेट्मन्ट हैं। '''एबॉर्ट''' करना अपरिभाषित निर्देश है: कुछ भी करो। इसे ख़त्म करने की भी ज़रूरत नहीं है। इसका उपयोग किसी प्रमाण को तैयार करते समय प्रोग्राम का वर्णन करने के लिए किया जाता है, जिस स्थिति में प्रमाण सामान्यतः विफल हो जाता है। '''स्किप''' खाली निर्देश है: कुछ न करें। इसका उपयोग प्रोग्राम में ही किया जाता है, जब सिंटैक्स के लिए स्टेटमेंट की आवश्यकता होती है लेकिन[[ राज्य (कंप्यूटर विज्ञान) | स्टैट (कंप्यूटर विज्ञान)]] नहीं बदलना चाहिए।


===सिंटेक्स===
===सिंटेक्स===
  छोडना
  स्किप


  गर्भपात
  एबॉर्ट


===शब्दार्थ===
===शब्दार्थ===
*छोड़ें: कुछ न करें
*'''स्किप''': कुछ न करें
*निरस्त करना: कुछ भी करो
*'''एबॉर्ट''': कुछ भी करो


==[[असाइनमेंट (कंप्यूटर प्रोग्रामिंग)]]==
==[[असाइनमेंट (कंप्यूटर प्रोग्रामिंग)]]==
[[ चर (प्रोग्रामिंग) ]] को मान निर्दिष्ट करता है।
[[ चर (प्रोग्रामिंग) |वेरिएबल (प्रोग्रामिंग)]] को मान निर्दिष्ट करता है।


===सिंटेक्स===
===सिंटेक्स===
  वी :=
  := E
या
या
वी{{sub|0}}, में{{sub|1}}, ..., में{{sub|n}} := और{{sub|0}}, और{{sub|1}}, ..., और{{sub|n}}
  v<sub>0</sub>, v<sub>1</sub>, ..., v<sub>n</sub> := E<sub>0</sub>, E<sub>1</sub>, ..., E<sub>n</sub>


कहाँ
जहाँ
*v प्रोग्राम वेरिएबल हैं
*v प्रोग्राम वेरिएबल हैं।
* उनके संबंधित चर के समान [[डेटा प्रकार]] की अभिव्यक्ति हैं
* E उनके संबंधित चर के समान [[डेटा प्रकार]] की अभिव्यक्ति हैं।


==श्रृंखला==
==श्रृंखलन==
कथनों को एक अर्धविराम (;) से अलग किया जाता है
स्टेट्मन्टों को एक अर्धविराम (;) से अलग किया जाता है।


==[[सशर्त (प्रोग्रामिंग)]]: यदि==
==[[सशर्त (प्रोग्रामिंग)|संकलन (प्रोग्रामिंग)]]: if==


चयन (अक्सर सशर्त कथन या यदि कथन कहा जाता है) संरक्षित आदेशों की एक सूची है, जिनमें से एक को निष्पादित करने के लिए चुना जाता है। यदि एक से अधिक गार्ड सत्य हैं, तो एक कथन जिसका गार्ड सत्य है, को गैर-निर्धारणात्मक रूप से निष्पादित करने के लिए चुना जाता है। यदि कोई गार्ड सत्य नहीं है, तो परिणाम अपरिभाषित है। क्योंकि कम से कम एक गार्ड सत्य होना चाहिए, खाली स्टेटमेंट स्किप की अक्सर आवश्यकता होती है। कथन यदि fi के पास कोई संरक्षित कमांड नहीं है, तो कोई सच्चा गार्ड कभी नहीं होता है। इसलिए, यदि फाई गर्भपात के बराबर है।
[[सशर्त (प्रोग्रामिंग)|संकलन]] (प्रायः "सशर्त स्टेट्मन्ट" या "if स्टेट्मन्ट" कहा जाता है) गार्डेड कमांड की एक सूची है, जिनमें से एक को निष्पादित करने के लिए चुना जाता है। यदि एक से अधिक गार्ड सत्य हैं, तो एक स्टेट्मन्ट जिसका गार्ड सत्य है, को नान-डेटरमिनिस्म रूप से निष्पादित करने के लिए चुना जाता है। यदि कोई गार्ड सत्य नहीं है, तो परिणाम अपरिभाषित है। क्योंकि कम से कम एक गार्ड सत्य होना चाहिए, खाली स्टेटमेंट '''स्किप''' की प्रायः आवश्यकता होती है। स्टेट्मन्ट '''if fi''' के पास कोई गार्डेड कमांड नहीं है, तो कोई सच्चा गार्ड कभी नहीं होता है। इसलिए, '''if fi एबॉर्ट''' के बराबर है।


===सिंटेक्स===
===सिंटेक्स===
यदि G0 → S0
  '''if''' G0 → S0
 
   □ G1 → S1
   □ G1 → S1
  ...
  ...
   □ जीएन एसएन
   □ Gn Sn
  फाई
  '''fi'''


===शब्दार्थ===
===शब्दार्थ===
चयन के निष्पादन पर सभी गार्डों का मूल्यांकन किया जाता है। यदि कोई भी गार्ड सत्य का मूल्यांकन नहीं करता है तो चयन का निष्पादन निरस्त हो जाता है, अन्यथा जिन गार्डों का मान सत्य है उनमें से एक को गैर-नियतात्मक रूप से चुना जाता है और संबंधित कथन निष्पादित किया जाता है।
चयन के निष्पादन पर सभी गार्डों का मूल्यांकन किया जाता है। यदि कोई भी गार्ड सत्य का मूल्यांकन नहीं करता है तो चयन का निष्पादन एबॉर्ट हो जाता है, अन्यथा जिन गार्डों का मान सत्य है उनमें से एक को नान-डेटरमिनिस्म रूप से चुना जाता है और संबंधित स्टेट्मन्ट निष्पादित किया जाता है।


===उदाहरण===
===उदाहरण===
Line 116: Line 117:
====सरल====
====सरल====
[[छद्मकोड]] में:
[[छद्मकोड]] में:
यदि a < b तो c को सत्य पर सेट करें
अन्यथा c को गलत पर सेट करें


संरक्षित आदेश भाषा में:
if a < b then set c to True
यदि a < b → c := सत्य है
else set c to False
   □ a ≥ b → c := असत्य
गार्डेड कमांड लैंग्वेज में:
  फाई
  '''if''' a < b → := true
 
   □ a ≥ b → := false
  '''fi'''


====स्किप का प्रयोग====
====स्किप का प्रयोग====
छद्मकोड में:
छद्मकोड में:
  यदि त्रुटि सत्य है तो x को 0 पर सेट करें
  if error is True then set x to 0


संरक्षित आदेश भाषा में:
गार्डेड कमांड लैंग्वेज में:
  यदि त्रुटि x := 0
  '''if''' error := 0
  □ {{not}}त्रुटि → छोड़ें
फाई


यदि दूसरा गार्ड हटा दिया गया है और त्रुटि गलत है, तो परिणाम निरस्त हो जाएगा।
  □ error → '''skip'''
'''fi'''
यदि दूसरा गार्ड हटा दिया गया है और त्रुटि गलत है, तो परिणाम एबॉर्ट हो जाएगा।


====अधिक गार्ड सत्य====
====अधिक गार्ड सत्य====
  यदि a ≥ b → अधिकतम := a
  '''if''' a ≥ b → max := a
  □ बी ≥ ए → अधिकतम := बी
फाई


यदि a = b है, तो समान परिणामों के साथ अधिकतम के लिए नए मान के रूप में a या b को चुना जाता है। हालाँकि, [[कार्यान्वयन]] से पता चल सकता है कि एक दूसरे की तुलना में आसान या तेज़ है। चूँकि प्रोग्रामर के लिए कोई अंतर नहीं है, कोई भी कार्यान्वयन करेगा।
  □ b ≥ a → max := b
'''fi'''
यदि a = b है, तो समान परिणामों के साथ अधिकतम के लिए नए मान के रूप में a या b को चुना जाता है। यद्यपि, [[कार्यान्वयन]] से पता चल सकता है कि एक दूसरे की तुलना में आसान या तेज़ है। चूँकि प्रोग्रामर के लिए कोई अंतर नहीं है, कोई भी कार्यान्वयन करेगा।


==प्रवाह को नियंत्रित करें#लूप्स: करें==
==रेपटिशन: ''do''==
इस दोहराव या लूप का निष्पादन नीचे दिखाया गया है।
इस दोहराव या लूप का निष्पादन नीचे दिखाया गया है।


Line 149: Line 151:
   □ G1 → S1
   □ G1 → S1
  ...
  ...
   □ जीएन एसएन
 
  आयुध डिपो
   □ Gn Sn
  '''od'''


===शब्दार्थ===
===शब्दार्थ===
पुनरावृत्ति के निष्पादन में 0 या अधिक पुनरावृत्तियों को निष्पादित करना शामिल है, जहां एक पुनरावृत्ति में (गैर-निर्धारिती रूप से) एक संरक्षित कमांड चुनना शामिल है {{math|Gi → Si}} किसका रक्षक {{math|Gi}} सत्य का मूल्यांकन करता है और कमांड निष्पादित करता है {{math|Si}}. इस प्रकार, यदि सभी गार्ड प्रारंभ में झूठे हैं, तो पुनरावृत्ति निष्पादित किए बिना, पुनरावृत्ति तुरंत समाप्त हो जाती है। दोहराव do od का निष्पादन, जिसमें कोई संरक्षित आदेश नहीं है, 0 पुनरावृत्तियों को निष्पादित करता है, इसलिए do od स्किप के बराबर है।
रेपटिशन के निष्पादन में 0 या अधिक रेपटिशनयों को निष्पादित करना सम्मिलित है, जहां एक रेपटिशन में (गैर-निर्धारिती रूप से) एक गार्डेड कमांड चुनना सम्मिलित है {{math|Gi → Si}} किसका रक्षक {{math|Gi}} सत्य का मूल्यांकन करता है और कमांड निष्पादित करता है {{math|Si}}. इस प्रकार, यदि सभी गार्ड प्रारंभ में झूठे हैं, तो रेपटिशन निष्पादित किए बिना, रेपटिशन तुरंत समाप्त हो जाती है। दोहराव '''do od''' का निष्पादन, जिसमें कोई गार्डेड कमांड नहीं है, 0 रेपटिशनयों को निष्पादित करता है, इसलिए '''do od''' '''स्किप''' के बराबर है।


=== उदाहरण ===
=== उदाहरण ===


====मूल [[यूक्लिडियन एल्गोरिथ्म]]====
====मूल [[यूक्लिडियन एल्गोरिथ्म]]====
  , बी := , बी;
  a, := A, B;
a < b → b := b - a करो
  □ b < a → a := a - b
आयुध डिपो


यह पुनरावृत्ति तब समाप्त होती है जब a = b, इस स्थिति में a और b, A और B का सबसे बड़ा सामान्य भाजक रखते हैं।
'''do''' a < b → b := b - a
  □ b < a → a := a - b
'''od'''
यह रेपटिशन तब समाप्त होती है जब a = b, इस स्थिति में a और b, A और B का सबसे बड़ा सामान्य भाजक रखते हैं।


डिज्क्स्ट्रा इस एल्गोरिदम में दो अनंत चक्रों को सिंक्रनाइज़ करने का एक तरीका देखता है <code>a := a - b</code> और <code>b := b - a</code> इस तरह से कि <code>a≥0</code> और <code>b≥0</code> सत्य रहता है.
डिज्क्स्ट्रा इस एल्गोरिदम में दो अनंत चक्रों को सिंक्रनाइज़ करने का एक तरीका देखता है <code>a:= a - b</code> और <code>b:= b - a</code> इस तरह से कि <code>a≥0</code> और <code>b≥0</code> सत्य रहता है।


====[[विस्तारित यूक्लिडियन एल्गोरिथ्म]]====
====[[विस्तारित यूक्लिडियन एल्गोरिथ्म]]====
  , बी, एक्स, वाई, यू, वी := , बी, 1, 0, 0, 1;
  a, b, x, y, u, := A, B, 1, 0, 0, 1;
करो b ≠ 0 →
    क्यू, आर := ए डिव बी, ए मॉड बी;
    ए, बी, एक्स, वाई, यू, वी := बी, आर, यू, वी, एक्स - क्यू*यू, वाई - क्यू*वी
आयुध डिपो


यह पुनरावृत्ति तब समाप्त होती है जब b = 0, इस स्थिति में चर बेज़आउट की पहचान का समाधान रखते हैं: xA + yB = gcd(A,B) ।
'''do''' b ≠ 0 →
    q, r := a '''div''' b, a '''mod''' b;
    a, b, x, y, u, v := b, r, u, v, x - q*u, y - q*v
यह रेपटिशन तब समाप्त होती है जब b = 0, इस स्थिति में चर बेज़आउट की पहचान का समाधान रखते हैं: xA + yB = gcd(A,B) ।


====गैर-नियतात्मक प्रकार====
====नान-डेटरमिनिस्म सॉर्ट====
  a>b → a, b := b, a करें
  '''do''' a>b → a, := b, a
  □ b>c → b, c := c, b
  □ सी>डी → सी, डी := डी, सी
आयुध डिपो


प्रोग्राम तत्वों को क्रमपरिवर्तित करता रहता है जबकि उनमें से एक उसके उत्तराधिकारी से बड़ा होता है। यह गैर-नियतात्मक बुलबुला सॉर्ट अपने नियतात्मक संस्करण की तुलना में अधिक कुशल नहीं है, लेकिन यह साबित करना आसान है: यह तब तक नहीं रुकेगा जब तक कि तत्वों को सॉर्ट नहीं किया जाता है और प्रत्येक चरण में यह कम से कम 2 तत्वों को सॉर्ट करता है।
  □ b>c → b, c := c, b
  □ c>d → c, d := d, c
'''od'''
प्रोग्राम तत्वों को क्रमपरिवर्तित करता रहता है जबकि उनमें से एक उसके आनुक्रमिक से बड़ा होता है। यह नान-डेटरमिनिस्म बबल सॉर्ट अपने नियतात्मक संस्करण की तुलना में अधिक कुशल नहीं है, लेकिन यह साबित करना आसान है: यह तब तक नहीं रुकेगा जब तक कि तत्वों को सॉर्ट नहीं किया जाता है और प्रत्येक चरण में यह कम से कम 2 तत्वों को सॉर्ट करता है।


====Arg अधिकतम====
====Arg मैक्स====
  एक्स, वाई = 1, 1;
  x, y = 1, 1;
x≠n → करो
    यदि f(x) ≤ f(y) → x := x+1
    □ f(x) ≥ f(y) → y := x; एक्स := एक्स+1
    फाई
आयुध डिपो


'''do''' x≠n →
    '''if''' f(x) ≤ f(y) → x := x+1
    □ f(x) ≥ f(y) → y := x; x := x+1
    '''fi'''
'''od'''
यह एल्गोरिदम मान 1 ≤ ''y'' ≤ ''n'' पाता है जिसके लिए दिया गया पूर्णांक फ़ंक्शन ''f'' अधिकतम है। न केवल गणना बल्कि अंतिम स्थिति भी आवश्यक रूप से विशिष्ट रूप से निर्धारित नहीं होती है।
यह एल्गोरिदम मान 1 ≤ ''y'' ≤ ''n'' पाता है जिसके लिए दिया गया पूर्णांक फ़ंक्शन ''f'' अधिकतम है। न केवल गणना बल्कि अंतिम स्थिति भी आवश्यक रूप से विशिष्ट रूप से निर्धारित नहीं होती है।


Line 198: Line 200:
=== निर्माण द्वारा सही प्रोग्राम ===
=== निर्माण द्वारा सही प्रोग्राम ===


संरक्षित कमांडों के अवलोकन संबंधी अनुरूपता संबंध को एक [[जाली (आदेश)]] में सामान्यीकृत करने से [[शोधन कैलकुलस]] का मार्ग प्रशस्त हुआ है।<ref>{{cite web | title=कार्यक्रम विकास में शोधन चरणों की शुद्धता पर (पीएचडी-थीसिस)| last=Back | first=Ralph J | authorlink=Ralph-Johan_Back | url=http://crest.abo.fi/publications/public/1978/OnTheCorrectnessOfRefinementStepsInProgramDevelpmentTR.pdf | year=1978 | url-status=dead | archiveurl=https://web.archive.org/web/20110720175255/http://crest.abo.fi/publications/public/1978/OnTheCorrectnessOfRefinementStepsInProgramDevelpmentTR.pdf | archivedate=2011-07-20 }}</ref> इसे [[ बी-विधि ]] जैसी औपचारिक विधियों में यंत्रीकृत किया गया है जो किसी को उनके विनिर्देशों से औपचारिक रूप से प्रोग्राम प्राप्त करने की अनुमति देता है।
गार्डेड कमांडों के अवलोकन संबंधी अनुरूपता संबंध को एक [[जाली (आदेश)|जाली (कमांड)]] में सामान्यीकृत करने से [[शोधन कैलकुलस]] का मार्ग प्रशस्त हुआ है।<ref>{{cite web | title=कार्यक्रम विकास में शोधन चरणों की शुद्धता पर (पीएचडी-थीसिस)| last=Back | first=Ralph J | authorlink=Ralph-Johan_Back | url=http://crest.abo.fi/publications/public/1978/OnTheCorrectnessOfRefinementStepsInProgramDevelpmentTR.pdf | year=1978 | url-status=dead | archiveurl=https://web.archive.org/web/20110720175255/http://crest.abo.fi/publications/public/1978/OnTheCorrectnessOfRefinementStepsInProgramDevelpmentTR.pdf | archivedate=2011-07-20 }}</ref> इसे [[ बी-विधि | B-मेथड]] जैसी औपचारिक विधियों में यंत्रीकृत किया गया है जो किसी को उनके विनिर्देशों से औपचारिक रूप से प्रोग्राम प्राप्त करने की अनुमति देता है।


=== अतुल्यकालिक सर्किट ===
=== अतुल्यकालिक सर्किट ===


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


  पुलडाउनगार्ड y := 0
  PullDownGuard := 0
पुलअपगार्ड → y := 1


पुलडाउनगार्ड और पुलअपगार्ड यहां लॉजिक गेट के इनपुट के कार्य हैं,
PullUpGuard → y := 1
जो बताता है कि गेट कब आउटपुट को क्रमशः नीचे या ऊपर खींचता है। शास्त्रीय के विपरीत
पुलडाउनगार्ड और पुलअपगार्ड यहां लॉजिक गेट के इनपुट के कार्य हैं, जो बताता है कि गेट कब आउटपुट को क्रमशः नीचे या ऊपर खींचता है। चिरसम्मत के विपरीत सर्किट मूल्यांकन मॉडल, गार्डेड कमांड के एक सेट (एक अतुल्यकालिक सर्किट के अनुरूप) की रेपटिशन उस सर्किट के सभी संभावित गतिशील व्यवहारों का सटीक वर्णन कर सकती है। विद्युत सर्किट तत्वों के लिए कोई व्यक्ति किस मॉडल के साथ रहना चाहता है, उसके आधार पर, गार्डेड-कमांड विवरण पूर्णतया संतोषजनक होने के लिए गार्डेड कमांड पर अतिरिक्त प्रतिबंध आवश्यक हो सकते। सामान्य प्रतिबंधों में स्थिरता, गैर-हस्तक्षेप और स्व-अमान्य कमांडों की अनुपस्थिति सम्मिलित हैं।<ref name="synthesis_tr">{{cite web | title=अतुल्यकालिक वीएलएसआई सर्किट का संश्लेषण|last=Martin | first=Alain J | url=http://resolver.caltech.edu/CaltechCSTR:1991.cs-tr-93-28 }}</ref>
सर्किट मूल्यांकन मॉडल, संरक्षित आदेशों के एक सेट (एक अतुल्यकालिक सर्किट के अनुरूप) की पुनरावृत्ति उस सर्किट के सभी संभावित गतिशील व्यवहारों का सटीक वर्णन कर सकती है।
विद्युत सर्किट तत्वों के लिए कोई व्यक्ति किस मॉडल के साथ रहना चाहता है, उसके आधार पर,
गार्डेड-कमांड विवरण के लिए गार्डेड कमांड पर अतिरिक्त प्रतिबंध आवश्यक हो सकते हैं
पूर्णतया संतोषजनक होना। सामान्य प्रतिबंधों में स्थिरता, गैर-हस्तक्षेप और अनुपस्थिति शामिल हैं
स्व-अमान्य आदेशों का।<ref name="synthesis_tr">{{cite web | title=अतुल्यकालिक वीएलएसआई सर्किट का संश्लेषण|last=Martin | first=Alain J | url=http://resolver.caltech.edu/CaltechCSTR:1991.cs-tr-93-28 }}</ref>


=== मॉडल जांच ===
=== मॉडल जांच ===
गार्डेड कमांड का उपयोग [[प्रोमेला]] प्रोग्रामिंग भाषा में किया जाता है, जिसका उपयोग SPIN मॉडल चेकर द्वारा किया जाता है। SPIN समवर्ती सॉफ़्टवेयर अनुप्रयोगों के सही संचालन की पुष्टि करता है।
गार्डेड कमांड का उपयोग [[प्रोमेला]] प्रोग्रामिंग लैंग्वेज में किया जाता है, जिसका उपयोग SPIN मॉडल चेकर द्वारा किया जाता है। SPIN समवर्ती सॉफ़्टवेयर अनुप्रयोगों के सही संचालन की पुष्टि करता है।


=== अन्य ===
=== अन्य ===
पर्ल मॉड्यूल [https://metacpan.org/module/Commands::Guarded Commands::Guarded] डिज्कस्ट्रा के संरक्षित कमांड पर एक नियतात्मक, सुधारात्मक संस्करण लागू करता है।
पर्ल मॉड्यूल [https://metacpan.org/module/Commands::Guarded Commands::Guarded] डिज्कस्ट्रा के गार्डेड कमांड पर एक नियतात्मक, सुधारात्मक संस्करण लागू करता है।


== संदर्भ ==
== संदर्भ ==


<references />
<references />
{{Edsger Dijkstra}}
[[Category: तर्क प्रोग्रामिंग]] [[Category: एड्सगर डब्ल्यू डिज्क्स्ट्रा]]  
[[Category: तर्क प्रोग्रामिंग]] [[Category: एड्सगर डब्ल्यू डिज्क्स्ट्रा]]  


Line 234: Line 226:
[[Category: Machine Translated Page]]
[[Category: Machine Translated Page]]
[[Category:Created On 09/08/2023]]
[[Category:Created On 09/08/2023]]
[[Category:Vigyan Ready]]

Latest revision as of 07:08, 23 September 2023

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

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

'GCL' में मल्टीपल असाइनमेंट स्टेटमेंट सम्मिलित है। उदाहरण के लिए, स्टेट्मन्ट का निष्पादन x, y:= y, x पहले दाईं ओर के मानों का मूल्यांकन करके और फिर उन्हें बाईं ओर के चर में संग्रहीत करके किया जाता है। इस प्रकार, यह स्टेट्मन्ट x और y के मानों को बदल देता है।

निम्नलिखित पुस्तकें GCL का उपयोग करके कार्यक्रमों के विकास पर चर्चा करती हैं:

गार्डेड कमांड

गार्डेड कमांड गार्डेड कमांड लैंग्वेज का सबसे महत्वपूर्ण तत्व है। एक गार्डेड कमांड में, जैसा कि नाम से पता चलता है, कमांड की रक्षा की जाती है। गार्ड एक प्रस्ताव है, जो स्टेट्मन्ट के निष्पादन (कंप्यूटर) से पहले सत्य होना चाहिए। उस स्टेट्मन्ट के निष्पादन की प्रांरम्भ में, कोई यह मान सकता है कि गार्ड सत्य है। साथ ही, यदि गार्ड गलत है, तो स्टेट्मन्ट निष्पादित नहीं किया जाएगा। गार्डेड कमांड के उपयोग से यह साबित करना आसान हो जाता है कि कंप्यूटर प्रोग्राम विनिर्देशों को पूरा करता है। स्टेट्मन्ट प्रायः एक अन्य गार्डेड कमांड होता है।

सिंटेक्स (प्रोग्रामिंग लैंग्वेज)

एक गार्डेड कमांड G → S के रूप का एक स्टेट्मन्ट (प्रोग्रामिंग) है, जहां

  • G एक प्रापज़िशन है, जिसे गार्ड कहा जाता है।
  • S एक स्टेट्मन्ट है।

शब्दार्थ

जिस समय किसी गणना में G का सामना होता है, उसका मूल्यांकन किया जाता है।

  • यदि G सत्य है, तो S निष्पादित करें।
  • यदि G गलत है, तो क्या करना है यह तय करने के लिए संदर्भ को देखें (किसी भी स्थिति में, S निष्पादित न करें)।

स्किप और एबॉर्ट

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

सिंटेक्स

स्किप
एबॉर्ट

शब्दार्थ

  • स्किप: कुछ न करें
  • एबॉर्ट: कुछ भी करो

असाइनमेंट (कंप्यूटर प्रोग्रामिंग)

वेरिएबल (प्रोग्रामिंग) को मान निर्दिष्ट करता है।

सिंटेक्स

v := E

या

 v0, v1, ..., vn := E0, E1, ..., En

जहाँ

  • v प्रोग्राम वेरिएबल हैं।
  • E उनके संबंधित चर के समान डेटा प्रकार की अभिव्यक्ति हैं।

श्रृंखलन

स्टेट्मन्टों को एक अर्धविराम (;) से अलग किया जाता है।

संकलन (प्रोग्रामिंग): if

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

सिंटेक्स

 if G0 → S0
 □ G1 → S1
...
 □ Gn → Sn
fi

शब्दार्थ

चयन के निष्पादन पर सभी गार्डों का मूल्यांकन किया जाता है। यदि कोई भी गार्ड सत्य का मूल्यांकन नहीं करता है तो चयन का निष्पादन एबॉर्ट हो जाता है, अन्यथा जिन गार्डों का मान सत्य है उनमें से एक को नान-डेटरमिनिस्म रूप से चुना जाता है और संबंधित स्टेट्मन्ट निष्पादित किया जाता है।

उदाहरण

सरल

छद्मकोड में:

if a < b then set c to True

else set c to False

गार्डेड कमांड लैंग्वेज में:

 if a < b → c := true
 □ a ≥ b → c := false
fi

स्किप का प्रयोग

छद्मकोड में:

if error is True then set x to 0

गार्डेड कमांड लैंग्वेज में:

if error → x := 0
 □ error → skip
fi

यदि दूसरा गार्ड हटा दिया गया है और त्रुटि गलत है, तो परिणाम एबॉर्ट हो जाएगा।

अधिक गार्ड सत्य

if a ≥ b → max := a
 □ b ≥ a → max := b
fi

यदि a = b है, तो समान परिणामों के साथ अधिकतम के लिए नए मान के रूप में a या b को चुना जाता है। यद्यपि, कार्यान्वयन से पता चल सकता है कि एक दूसरे की तुलना में आसान या तेज़ है। चूँकि प्रोग्रामर के लिए कोई अंतर नहीं है, कोई भी कार्यान्वयन करेगा।

रेपटिशन: do

इस दोहराव या लूप का निष्पादन नीचे दिखाया गया है।

सिंटेक्स

G0 → S0 करें
 □ G1 → S1
...
 □ Gn → Sn
od

शब्दार्थ

रेपटिशन के निष्पादन में 0 या अधिक रेपटिशनयों को निष्पादित करना सम्मिलित है, जहां एक रेपटिशन में (गैर-निर्धारिती रूप से) एक गार्डेड कमांड चुनना सम्मिलित है Gi → Si किसका रक्षक Gi सत्य का मूल्यांकन करता है और कमांड निष्पादित करता है Si. इस प्रकार, यदि सभी गार्ड प्रारंभ में झूठे हैं, तो रेपटिशन निष्पादित किए बिना, रेपटिशन तुरंत समाप्त हो जाती है। दोहराव do od का निष्पादन, जिसमें कोई गार्डेड कमांड नहीं है, 0 रेपटिशनयों को निष्पादित करता है, इसलिए do od स्किप के बराबर है।

उदाहरण

मूल यूक्लिडियन एल्गोरिथ्म

a, b := A, B;
do a < b → b := b - a
 □ b < a → a := a - b
od

यह रेपटिशन तब समाप्त होती है जब a = b, इस स्थिति में a और b, A और B का सबसे बड़ा सामान्य भाजक रखते हैं।

डिज्क्स्ट्रा इस एल्गोरिदम में दो अनंत चक्रों को सिंक्रनाइज़ करने का एक तरीका देखता है a:= a - b और b:= b - a इस तरह से कि a≥0 और b≥0 सत्य रहता है।

विस्तारित यूक्लिडियन एल्गोरिथ्म

a, b, x, y, u, v := A, B, 1, 0, 0, 1;
do b ≠ 0 →
   q, r := a div b, a mod b;
   a, b, x, y, u, v := b, r, u, v, x - q*u, y - q*v

यह रेपटिशन तब समाप्त होती है जब b = 0, इस स्थिति में चर बेज़आउट की पहचान का समाधान रखते हैं: xA + yB = gcd(A,B) ।

नान-डेटरमिनिस्म सॉर्ट

do a>b → a, b := b, a
 □ b>c → b, c := c, b
 □ c>d → c, d := d, c
od

प्रोग्राम तत्वों को क्रमपरिवर्तित करता रहता है जबकि उनमें से एक उसके आनुक्रमिक से बड़ा होता है। यह नान-डेटरमिनिस्म बबल सॉर्ट अपने नियतात्मक संस्करण की तुलना में अधिक कुशल नहीं है, लेकिन यह साबित करना आसान है: यह तब तक नहीं रुकेगा जब तक कि तत्वों को सॉर्ट नहीं किया जाता है और प्रत्येक चरण में यह कम से कम 2 तत्वों को सॉर्ट करता है।

Arg मैक्स

x, y = 1, 1;
do x≠n →
   if f(x) ≤ f(y) → x := x+1
    □ f(x) ≥ f(y) → y := x; x := x+1
   fi
od

यह एल्गोरिदम मान 1 ≤ yn पाता है जिसके लिए दिया गया पूर्णांक फ़ंक्शन f अधिकतम है। न केवल गणना बल्कि अंतिम स्थिति भी आवश्यक रूप से विशिष्ट रूप से निर्धारित नहीं होती है।

अनुप्रयोग

निर्माण द्वारा सही प्रोग्राम

गार्डेड कमांडों के अवलोकन संबंधी अनुरूपता संबंध को एक जाली (कमांड) में सामान्यीकृत करने से शोधन कैलकुलस का मार्ग प्रशस्त हुआ है।[2] इसे B-मेथड जैसी औपचारिक विधियों में यंत्रीकृत किया गया है जो किसी को उनके विनिर्देशों से औपचारिक रूप से प्रोग्राम प्राप्त करने की अनुमति देता है।

अतुल्यकालिक सर्किट

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

PullDownGuard → y := 0
PullUpGuard → y := 1

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

मॉडल जांच

गार्डेड कमांड का उपयोग प्रोमेला प्रोग्रामिंग लैंग्वेज में किया जाता है, जिसका उपयोग SPIN मॉडल चेकर द्वारा किया जाता है। SPIN समवर्ती सॉफ़्टवेयर अनुप्रयोगों के सही संचालन की पुष्टि करता है।

अन्य

पर्ल मॉड्यूल Commands::Guarded डिज्कस्ट्रा के गार्डेड कमांड पर एक नियतात्मक, सुधारात्मक संस्करण लागू करता है।

संदर्भ