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