Coq / Agda में प्रमाणित संकलक और अनुकूलन


9

मैं मार्टिन-लोफ प्रकार के सिद्धांत, यानी Coq / Agda में औपचारिक रूप से सत्यापित कंपाइलरों में रुचि रखता हूं। फिलहाल मैंने एक छोटा सा खिलौना उदाहरण लिखा है। इसके अलावा मैं साबित कर सकता हूं कि मेरी आशाएं सही हैं। उदाहरण के लिए कि शून्य के साथ परिवर्धन को समाप्त किया जा सकता है, अर्थात "x + 0" जैसे भाव।

क्या ऐसे अनुकूलन हैं जो एक नियमित संकलक के साथ प्रदर्शन करना मुश्किल है, जो एक अच्छा उदाहरण के रूप में काम करेगा? क्या ऐसे कार्यक्रम के कुछ गुणों को साबित करना संभव है जो ऐसे अनुकूलन की अनुमति देता है जो एक नियमित संकलक के साथ प्रदर्शन करना संभव नहीं है? (अर्थात बिना किसी अनुमान के जो एक प्रमेय कहावत के साथ संभव है)

मुझे विचारों या उदाहरणों में दिलचस्पी होगी और विषय पर संदर्भ भी।

एक संबंधित प्रश्न: कंपाइलर शुद्धता प्रमाण

संपादित करें: जैसा कि त्सुकोशी ने अच्छी तरह से टिप्पणियों में रखा है: मैं अनुकूलन तकनीकों की तलाश कर रहा हूं, जो कि एक कंपाइलर (सी) सी में लिखे गए हैं, लेकिन इसे लागू करना मुश्किल है, लेकिन अगर कंपाइलर (कहना) कोक में लिखा गया है तो इसे लागू करना आसान है। चूँकि Agda C (haskell के माध्यम से) को संकलित करता है, इसलिए Agda में भी वह सब कुछ करना संभव है जो C. में भी संभव है। Coq / Agda की तरह प्रमेय का एकमात्र लाभ यह है कि संकलक और अनुकूलन को सत्यापित किया जा सकता है।

edit2: जैसा कि विजय डि ने सुझाया है, मैंने जो पढ़ा है वह अब तक पढ़ा है। मैंने मुख्य रूप से जेवियर लेरॉय और कॉम्पेक्ट प्रोजेक्ट पर INRIA पर ध्यान केंद्रित किया (एक 80 पृष्ठों का पेपर है जो एक अच्छा पढ़ा है, मुझे लगता है)। इंटरेक्टिव कार्यक्रमों पर एंटोन सेज़र के काम में एक दूसरी दिलचस्पी थी। हालांकि, मैं शायद उनके काम का उपयोग IO कार्यक्रमों और IO कार्यक्रमों के बिसिमुलेशन के बारे में गुण साबित करने के लिए कर सकता था। सेवेल का उल्लेख करने के लिए धन्यवाद। मैंने ICFP में उनकी बात "जंगल से किस्से" सुनी है और शायद उनके 2-3 पेपर पढ़े हैं। लेकिन मैंने विशेष रूप से उनके काम और उनके सहकर्मियों पर ध्यान नहीं दिया है।
मुझे अभी तक यह पता नहीं चला है कि संकलक के अनुकूलन के लिए कागजात कहाँ से शुरू करें या देखें; उदाहरण के लिए, सत्यापित कंपाइलर की सेटिंग में कौन से अनुकूलन दिलचस्प होंगे।


1
"क्या ऐसे अनुकूलन हैं जो एक नियमित संकलक के साथ प्रदर्शन करना मुश्किल है": क्या यह असंभव नहीं है? यदि मैं एक सत्यापित संकलक से शुद्धता का प्रमाण हटाता हूं, तो मुझे एक नियमित संकलक मिलेगा। इसलिए, कुछ भी जो एक सत्यापित संकलक कर सकता है, एक नियमित संकलक द्वारा भी किया जा सकता है। सत्यापित कंपाइलर की बात यह है कि यह एक ऑप्टिमाइज़ेशन नहीं कर सकता है जो गलत है। (कंपाइलर और प्रोग्राम वेरिफिकेशन के बारे में मेरा ज्ञान कम से कम है। अगर मुझे बात याद आ रही है तो मुझे माफ करना।)
त्सुकोशी इतो

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

1
आप एक संकलक के बारे में बात कर रहे हैं में लिखा Coq / AGDA या एक संकलक के लिए Coq / AGDA? मैंने सोचा था कि आपका प्रश्न Coq / Agda में लिखे गए एक संकलक के बारे में था, लेकिन तब मुझे नहीं लगता कि Coq / Agda में लिखा गया कोई संकलक C.- लिखे गए संकलक की तुलना में लक्ष्य कार्यक्रमों के बारे में कोई और गुण साबित कर सकता है
Tsuyoshi Itch

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

1
जब तक आप अपने प्रश्न को और सीमित नहीं करते हैं, ऐसी कोई अनुकूलन नहीं है। चरम मामले में सी कंपाइलर अपने आंत्र में चुपके से एक प्रमेय नीति को लागू कर सकता है (और वास्तव में इसे सीमित तरीके से करता है)। मुझे लगता है कि यह स्पष्ट नहीं है कि आप "नियमित संकलक" से क्या मतलब है।
फफूंद बाउर

जवाबों:


5

यवेस बर्टोट, बेंजामिन ग्रेजायर, और जेवियर लेरॉय का यह पत्र एक सी-लाइक भाषा के लिए एक शुद्ध रूप से कॉइक विनिर्देश पर आधारित एक अनुकूलन संकलन बनाता है। इस प्रौद्योगिकी के कुछ जाहिरा तौर पर CompCert C संकलक में उपयोग किया जाता है ।

डेटाफ़्लो विश्लेषण के आधार पर संकलक अनुकूलन साबित करने के लिए एक संरचित दृष्टिकोण

यह दो अनुकूलन, निरंतर प्रसार (CP) और सामान्य सबप्रेसेशन उन्मूलन (CSE), खंड 4 की शुद्धता पर विचार करता है। ये अनुकूलन उन लोगों की तुलना में अधिक उन्नत होते हैं जो एक ही भाषा के लिए गैर Coq- आधारित संकलक (ओं) से जुड़े होते हैं। जीसीसी की तुलना में इस बेंचमार्क चार्ट को देखें। (Coq- आधारित संकलक संभवतः संकलित करने के लिए धीमा है, हालांकि यह शायद ही कभी उल्लेख किया गया है!)

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

हालाँकि, कागज के अंत में वे ध्यान देते हैं कि वास्तविक संकलक में कुछ संकलक अनुकूलन हैं जो कि उनके ढांचे में नहीं लगाए जा सकते।

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


3

क्या मैं किसी प्रोग्राम के लिए कुछ गुण (जो कि होल्ड करने की गारंटी है) साबित कर सकता हूं (जैसे, एक सबरूटीन गैर-प्रवेश-योग्य है और कभी भी खुद को कॉल नहीं कर सकता) जो कि अनुकूलन करने की अनुमति देता है जो आमतौर पर संभव नहीं होते हैं।

यह प्रोग्रामर के कुछ गुणों को ऑप्टिमाइज़र को प्रदान करने के लिए टाइप-टेकर को विस्तारित करने के बराबर है। मेरा मानना ​​है कि Tsuyoshi Ito सही है और आप Coq के बारे में थोड़ा गुमराह हो सकते हैं। बग-कम संकलक प्रदान करने के लिए यह एक महान उपकरण है, लेकिन आपके द्वारा वर्णित मामले में, यह स्थैतिक विश्लेषणों को अधिक शक्ति प्रदान नहीं करता है।

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

हालाँकि, जहाँ तक मैं देख सकता हूँ, यह सबटाइपिंग को मजबूत करने के लिए उपयोगी होगा। - यह जानने के लिए एक प्रोग्रामर बनाना कठिन है कि किस स्थान पर कौन सी संपत्ति ऑप्टिमाइज़र के लिए सहायक होगी।

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