Coq के पास प्रॉप क्यों है?


35

Coq में प्रूफ अप्रासंगिक प्रस्तावों का एक प्रकार है जो निष्कर्षण के दौरान खारिज कर दिया जाता है। यदि हम केवल प्रमाणों के लिए Coq का उपयोग करते हैं तो इसके होने के क्या कारण हैं। Prop, impredicative है, इसलिए Prop: Prop, हालाँकि, Coq स्वचालित रूप से ब्रह्मांड अनुक्रमणिका को संक्रमित करता है और हम इसके बजाय हर जगह टाइप (i) का उपयोग कर सकते हैं। ऐसा लगता है कि प्रोप सब कुछ बहुत जटिल करता है।

मैंने पढ़ा कि लुओ की किताब में सेट और प्रोप को अलग करने के दार्शनिक कारण हैं, हालांकि, मैंने उन्हें किताब में नहीं पाया। वे क्या हैं?


6
"अगर हम केवल सबूत के लिए Coq का उपयोग करते हैं": मुझे लगता है कि आपने यहां एक महत्वपूर्ण बिंदु की पहचान की है। Coq का उपयोग केवल प्रमाण के लिए नहीं किया जाता है।
— गिल्स एसओ- बुराई को रोकना '

जवाबों:


34

कार्यक्रम निष्कर्षण के लिए बहुत उपयोगी है क्योंकि यह हमें कोड के कुछ हिस्सों को हटाने की अनुमति देता है जो बेकार हैं। उदाहरण के लिए, एक छँटाई एल्गोरिथ्म हम बयान साबित हो सकता है "हर सूची के लिए निकालने के लिए ℓ वहाँ एक सूची है कश्मीर ऐसी है कि कश्मीर का आदेश दिया जाता है और कश्मीर के एक permutatiom है ℓ "। यदि हम इसे Coq में लिखते हैं और P r o p का उपयोग किए बिना निकालते हैं, तो हमें मिलेगा:PropℓkkkℓProp

  1. "सभी के लिए है कश्मीर " हमें एक नक्शे दे देंगे जो सूची में सूचियों लेता है,ℓksort
  2. "ऐसा है कि का आदेश दिया गया है" एक कवक देगा जो k के माध्यम से चलता है और जांचता है कि यह क्रमबद्ध है, औरkverifyk
  3. " का क्रमपरिवर्तन है ℓ क्रमपरिवर्तन दे देंगे" जो लेता ℓ को कश्मीर । ध्यान दें कि केवल मैपिंग नहीं है, बल्कि उलटा मैपिंग भी कार्यक्रमों के साथ मिलकर सत्यापित करता है कि दो नक्शे वास्तव में व्युत्क्रम हैं।kℓpiℓkpi

जबकि अतिरिक्त सामान पूरी तरह से बेकार नहीं है, कई अनुप्रयोगों में हम इसे से छुटकारा चाहते हैं और बस रखना चाहते हैं sort। यदि हम उपयोग करते हैं तो यह पूरा किया जा सकता है राज्य के लिए " कश्मीर का आदेश दिया है" और " कश्मीर का क्रमपरिवर्तन है ℓ ", लेकिननहीं"सभी के लिए ℓ है कश्मीर "।Propkkℓℓk

सामान्य तौर पर, कोड निकालने का एक सामान्य तरीका फॉर्म ∀ x : A के विवरण पर विचार करना है जहां एक्स इनपुट, है y उत्पादन, और है φ ( एक्स , वाई ) बताते हैं कि इसका क्या मतलब के लिए y एक सही उत्पादन किया जाना है। (ऊपर के उदाहरण में एक और बी सूचियों और के प्रकार हैं φ ( ℓ , कश्मीर ) है " कश्मीर का आदेश दिया जाता है और कश्मीर का क्रमपरिवर्तन है ℓ हैं।") Φ में है पी आर ओ पी तो निष्कर्षण एक नक्शा देता है च :∀x:A.∃y:B.ϕ(x,y)xyϕ(x,y)yABϕ(ℓ,k)kkℓϕProp ऐसी है कि φ ( एक्स , च ( एक्स ) ) सभी के लिए रखती है एक्स ∈ ए । यदिf:A→Bϕ(x,f(x))x∈A में है एस ई टी तो हम भी एक समारोह मिल जी ऐसा है किϕSetg सबूत है कि φ ( एक्स , च ( एक्स ) ) रखती है, सभी के लिए एक्स ∈ एg(x)ϕ(x,f(x))x∈A। अक्सर प्रमाण कम्प्यूटेशनल रूप से बेकार होता है और हम इससे छुटकारा पाना पसंद करते हैं, खासकर तब जब इसे किसी अन्य कथन के अंदर गहराई से घोंसला दिया जाता है। हमें ऐसा करने की संभावना देता है।Prop

जोड़ा गया 2015-07-29: एक सवाल है कि क्या हम "बेकार निकाले गए कोड" को स्वचालित रूप से अनुकूलित करके पूरी तरह से बच सकते हैं । कुछ हद तक हम ऐसा कर सकते हैं, उदाहरण के लिए, तर्क के नकारात्मक टुकड़े से निकाले गए सभी कोड (खाली प्रकार, इकाई प्रकार, उत्पाद से निर्मित सामान) बेकार है क्योंकि यह इकाई के चारों ओर केवल फेरबदल करता है। लेकिन वास्तविक डिजाइन निर्णय हैं जिन्हें पी आर ओ पी का उपयोग करते समय करना है । यहाँ एक उदाहरण उदाहरण है, जहां Π एनPropProp अर्थ है कि हम T y p e में हैं और sim का अर्थ है कि हम P r o p में हैं । यदि हम इससे निकालते हैं ΣType∃Prop हम एक प्रोग्राम है जो विघटित हो जाता है मिल जाएगा n अपने न्यूनतम बिट में ख और शेष बिट कश्मीर , यानी, यह सब कुछ गणना करता है। हम से निकाल तो Π n

Πn:NΣb:{0,1}Σk:Nn=2⋅k+b
nbk तो कार्यक्रम केवल गणना होगी सबसे कम बिट ख । मशीन यह नहीं बता सकती कि कौन सा सही है, उपयोगकर्ता को यह बताना होगा कि वह क्या चाहता है।
Πn:NΣb:{0,1}∃k:Nn=2⋅k+b
b

1
मैं थोड़ा उलझन में हूँ। आप कह रहे हैं कि बिना यह निकाले कार्यक्रम में पहचान करने के लिए असंभव हो जाएगा कि जी (Prop आउटपुट में योगदान नहीं करता (अर्थात यह केवल इसे सत्यापित करता है)? क्या ऐसे परिदृश्य हैं जहाँ कोई ऐसे कोड को ऑप्टिमाइज़र के लिए उपलब्ध सामान्य साधनों के माध्यम से बाहर निकालने में सक्षम नहीं होगा? g(x)
— उपयोगकर्ता

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

1
आपको "I want " की जानकारी नहीं है । यह एक अतिरिक्त धारणा है, और स्पष्ट रूप से एक बार वे आपको बताते हैं कि वे कौन से विशेष परिणाम चाहते हैं, आप बस मृत कोड को दूर कर सकते हैं। वास्तव में, मैंने एक बेहतर उत्तर के बारे में सोचा: यह एक डिजाइन प्रश्न है जिसे P r o p में रखना है । आपको यह जानना होगा कि उपयोगकर्ता क्या चाहता है, और वह आपको बताता है कि वह P r o p का उपयोग करके क्या चाहता है । ऐसे उदाहरणों के साथ आना आसान है जहां कई विकल्प हैं। मैं अपने उत्तर में एक जोड़ दूंगा। kPropProp
— बाउर

2
जहाँ तक मुझे पता है कि कोई भी वास्तव में यह नहीं बता सकता है कि से कुछ भी कैसे निकाला जाए । यह स्पष्ट है कि उनमें कुछ शामिल हैं(−1) कम्प्यूटेशनल सामग्री है, लेकिन ऐसा नहीं हो सकता है।
— बाउर

3
आह ठीक है। डिजाइन निर्णयों को निर्दिष्ट करने के तरीके के रूप में का उपयोग करना बेकार कोड को हटाने के तरीके की तुलना में मेरे लिए बहुत अधिक समझ में आता है। Prop
— उपयोगकर्ता

19

,impredicative है, जो एक बहुत ही अर्थपूर्ण प्रूफ सिस्टम बनाते हैं। हालांकि यह निम्नलिखित अर्थों में "बहुत" अभिव्यंजक है:Prop

impredicative Prop+large elimination+excluded middle

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

कोक ने दोनों किया! उन्होंने प्रेडिकटिव प्रोप टू सेट का नाम दिया और प्रोप में बड़े एलिमिनेशन को निष्क्रिय कर दिया।

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


8
ओह और मैं उल्लेख करना भूल गया: यह ऐसा नहीं है कि Prop : Prop, यह असंगत होगा। बल्कि quantifications सभी प्रस्ताव फिर से एक प्रस्ताव है।
— कोड़ी

क्या आप मुझे इसके बारे में किसी और संसाधन की ओर इशारा कर सकते हैं? मुझे जो कुछ भी मिलता है वह बहुत बिखरा हुआ लगता है।
— user833970

1
@ user833970 आप किसी भी विशिष्ट चीजों को इंगित करना चाहते हैं? मुझे डर है कि वास्तव में आश्रित प्रकार के मेटा सिद्धांत के लिए एक सभी शामिल संदर्भ नहीं है। यह चर्चा (जो यहाँ वापस इंगित करती है!) उपयोगी हो सकती है: github.com/FStarLang/FStar/issues/360
— cody

धन्यवाद, मैं अब बरारडी विरोधाभास पेपर के माध्यम से काम कर रहा हूं, मुझे लगता है कि इससे मेरा भ्रम दूर हो जाएगा।
— user833970

14

यहां तक ​​कि अगर आप कार्यक्रमों को निकालने में रुचि नहीं रखते हैं, तो यह तथ्य यह Propहै कि जो प्रतिगामी है वह आपको कुछ मॉडल बनाने की अनुमति देता है, जो आप ब्रह्मांडों के एक विधेय टॉवर का उपयोग करके नहीं बना सकते हैं। IIRC थोरस्टेन एलेनटेरिच में Coq की प्रतिरूपकता का उपयोग करते हुए System F का एक मॉडल है।

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