प्रोग्रामिंग में किसी भी प्रकार की पुनरावृत्ति या पुनरावृत्ति वास्तव में एक निश्चित बिंदु है। उदाहरण के लिए, एक while
लूप समीकरण द्वारा विशेषता है
while b do c done ≡ if b then (c ; while b do c done)
जो कहना है कि समीकरण while b do c done
का एक समाधान W
है
W ≡ Φ(W)
जहां Φ(x) ≡ if b then (c ; x)
। लेकिन क्या होगा अगर Φ
है कई निश्चित बिंदु,? कौन सा while
लूप से मेल खाता है ? प्रोग्रामिंग शब्दार्थ की बुनियादी अंतर्दृष्टि में से एक यह है कि यह सबसे कम निश्चित बिंदु है।
एक सरल उदाहरण लेते हैं, इस बार पुनरावृत्ति। हास्केल का उपयोग करूंगा। f
द्वारा परिभाषित पुनरावर्ती कार्य
f :: a -> a
f x = f x
हर जगह अपरिभाषित समारोह है, क्योंकि यह सिर्फ हमेशा के लिए चलता है। हम इस परिभाषा को और अधिक असामान्य तरीके से फिर से लिख सकते हैं (लेकिन यह अभी भी हास्केल में काम करता है)
f :: a -> a
f = f
तो f
पहचान समारोह का एक निश्चित बिंदु है:
f ≡ id f
लेकिन हर फ़ंक्शन एक निश्चित बिंदु है id
। सामान्य डोमेन-सिद्धांत संबंधी आदेश के तहत, "अपरिभाषित" सबसे कम तत्व है। और वास्तव में, हमारा कार्य f
हर जगह अपरिभाषित फ़ंक्शन है।
अनुरोध पर जोड़ा गया: टिप्पणियों में ओपी ने शब्दार्थ while
लूप के लिए आंशिक आदेश के बारे में पूछा (आपने माना कि यह एक जाली थी लेकिन इसकी आवश्यकता नहीं है)। एक अधिक सामान्य प्रश्न यह है कि एक प्रक्रियात्मक भाषा की डोमेन-थ्योरिटिक व्याख्या क्या है जो चर को हेरफेर कर सकती है और इसमें बुनियादी नियंत्रण संरचनाएं (सशर्त और लूप) हैं। ऐसा करने के कई तरीके हैं, इस पर निर्भर करता है कि आप वास्तव में क्या कैप्चर करना चाहते हैं, लेकिन चीजों को सरल रखने के लिए, मान लें कि हमारे पास वैश्विक चर निश्चित संख्या हैnx1,…,xnयह कार्यक्रम पढ़ सकता है और अपडेट कर सकता है, और कुछ नहीं (कोई I / O या अपवाद, या नए चर का आवंटन)। उस स्थिति में एक कार्यक्रम को अंतिम अवस्था में चर की प्रारंभिक स्थिति के परिवर्तन के रूप में देखा जा सकता है, या यदि कार्यक्रम चक्र को अपरिभाषित मूल्य। इसलिए, यदि प्रत्येक चर सेट का एक तत्व रखता है, तो एक प्रोग्राम मैपिंग अनुरूप होगा : प्रत्येक प्रारंभिक कॉन्फ़िगरेशन चरों के में, प्रोग्राम या तो विचलन करेगा और उत्पादन करेगा, या यह अंतिम स्थिति को समाप्त करेगा और उत्पादन करेगा, जो कि का एक तत्व है । सभी मानचित्रों का सेट एक डोमेन है:VVn→Vn∪{⊥}(v1,…,vn)∈Vn⊥VnVn→Vn∪{⊥}
- हम पर फ्लैट ऑर्डरिंग का उपयोग करते हैं, जिसके तल पर होता है और इसके ऊपर "फ्लैट" के सभी तत्व होते हैं , और फिरVn∪{⊥}⊥VnVn→Vn∪{⊥} को बिंदुवार आदेश दिया जाता है,
- ⊥
while true do skip done
- हर बढ़ते क्रम में एक वर्चस्व होता है
बस आपको यह अंदाजा लगाने के लिए कि यह कैसे काम करता है, कार्यक्रम के शब्दार्थ
x_1 := e
(v1,…,vn)∈Vnvee
(v1,…,vn)(ve,v2,…,vn)