मैं एक प्रोग्रामिंग शैली विकसित करने की कोशिश कर रहा हूं जो जल्द से जल्द खराब इनपुट को रोकने पर आधारित है। उदाहरण के लिए, प्राकृतिक संख्या पर पूर्ववर्ती समारोह के लिए निम्नलिखित प्रशंसनीय परिभाषा के बजाय:एक मैच ब्लॉक की एक शाखा के अंदर, मैं इस धारणा का उपयोग कैसे करूं कि मिलान की अभिव्यक्ति शाखा के डेटा कन्स्ट्रक्टर अभिव्यक्ति के बराबर है?
Definition pred1 n :=
match n with
| O => None
| S n => Some n
end.
मैं इस प्रकार के रूप में यह लिखना चाहते हैं:
Theorem nope n (p : n = O) (q : n <> O) : False.
contradict q.
exact p.
Qed.
Definition pred2 n (q : n <> O) :=
match n with
| S n => n
| O =>
let p := _ in
match nope n p q with end
end.
लेकिन मैं पता नहीं है क्या साथ _
को बदलने के लिए । मेरा अंतर्ज्ञान मुझे बताता है कि शाखा में कुछ assumption : n = O
उपलब्ध होना चाहिए। क्या वास्तव में कोक इस तरह की धारणा पेश करता है? यदि हां, तो इसका नाम क्या है?
ऐसा लगता है कि हमने धारणा को शुरू करने की समस्या को स्थानांतरित कर दिया है कि 'n = O'' | O => 'पूरे मैच ब्लॉक के स्तर पर' n = n'' धारणा को शुरू करने की समस्या के लिए शाखा। यह आपके 'pred2' के रिटर्न प्रकार में दिखाता है, जो मेरा जैसा नहीं है। – pyon
ऐसा लगता है कि स्टीफन सबूत में गुजरना भूल गया: आखिरी 'अंत' के ठीक बाद, 'n = n'''' के तर्क में पास करने के लिए '(eq_refl n)' जोड़ें। – Ptival
आह ठीक है! उत्तर पुनः प्राप्त! – pyon