कार्यात्मक कोड को सही साबित करने के लिए सामान्य औपचारिक तकनीकें क्या हैं?


10

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

हास्केल ( Google पुस्तकें ) में ग्राहम हटन की परिचयात्मक पुस्तक प्रोग्रामिंग - जो मैंने हास्केल सीखते समय पढ़ी थी - जैसे कार्यक्रमों के बारे में तर्क करने के लिए कुछ तकनीकों पर स्पर्श करता है

  • समतुल्य तर्क
  • गैर-अतिव्यापी पैटर्न का उपयोग करना
  • सूची प्रेरण

अध्याय 13 में लेकिन यह बहुत गहराई में नहीं है।

क्या कोई ऐसी पुस्तक या लेख है जिसकी आप अनुशंसा कर सकते हैं जो हास्केल, या अन्य कार्यात्मक, कोड के लिए औपचारिक साबित तकनीकों का अधिक विस्तृत अवलोकन प्रदान करता है?

जवाबों:


5

कार्यात्मक प्रोग्रामिंग में परिणाम साबित करने के लिए वास्तविक तरीकों में से एक रिचर्ड बर्ड के समूह के माध्यम से है।

विशेष रूप से, आप समसामयिक तर्क और सूची प्रेरण के लिए एक गहन या कम से कम अधिक व्यापक दृष्टिकोण के लिए पूछते हैं और यह रचनात्मक कार्यात्मक प्रोग्रामिंग पर व्याख्यान में प्रदान किया जाता है ।

आमतौर पर, बर्ड और डी मूर द्वारा "प्रोग्रामिंग का बीजगणित", अनुकूलन और गतिशील प्रोग्रामिंग समस्याओं जैसे कार्यात्मक एल्गोरिदम की शुद्धता से संबंधित है।


यदि आप इस समस्या के लिए अन्य उपयोगी संसाधनों पर आते हैं, तो कृपया उनका उल्लेख करें और शायद हम इस पोस्ट को विकि में बदल सकते हैं।


धन्यवाद! निश्चित रूप से, यदि मुझे और अधिक स्रोत मिलते हैं, तो मैं उन्हें अपनी पोस्ट में जोड़ना सुनिश्चित करूँगा।
FK82

6

से शुरू कर सकते हैं

विषयों में लॉजिक, कंप्यूटर-असिस्टेड प्रमेय साबित करने, कोक प्रूफ असिस्टेंट, फंक्शनल प्रोग्रामिंग, ऑपरेशनल सेमेंटिक्स, होरे लॉजिक और स्टैटिक टाइप सिस्टम की बुनियादी अवधारणाएँ शामिल हैं। यह प्रदर्शनी पाठकों की एक विस्तृत श्रृंखला के लिए अभिप्रेत है, जो उन्नत स्नातक से पीएचडी छात्रों और शोधकर्ताओं के लिए है। तर्क या प्रोग्रामिंग भाषाओं में कोई विशिष्ट पृष्ठभूमि ग्रहण नहीं की गई है, हालांकि गणितीय परिपक्वता की एक डिग्री सहायक होगी।

आप प्रोग्रामिंग भाषा सिद्धांत भागों को छोड़ (या स्किम) कर सकते हैं और केवल सीख सकते हैं कि प्रीप्रैस से शुरू होने वाले औपचारिक प्रमाण से कैसे निपटें। पुस्तक वास्तव में अच्छी तरह से लिखित और प्रकाशित है।

तब आप आगे बढ़ना चाह सकते हैं

इस वॉल्यूम में आप सीखेंगे कि एल्गोरिदम, बाइनरी सर्च ट्री, संतुलित बाइनरी सर्च ट्रीज़ और प्राथमिकता कतारों को छांटना और सत्यापित करना (सही साबित करना) कैसे करना है। इस पुस्तक का उपयोग करने से पहले, आपको इन एल्गोरिदम और डेटा संरचनाओं की कुछ समझ होनी चाहिए, जो किसी भी मानक स्नातक एल्गोरिदम की पाठ्यपुस्तक में उपलब्ध हैं। आपको सॉफ़्टवेयर फ़ाउंडेशन वॉल्यूम 1 (लॉजिक फ़ाउंडेशन) में सभी सामग्री को समझना चाहिए

चेतावनी का एक नोट: वीएफए अभी भी जारी है!


(आपका दूसरा लिंक गलत जगह पर निर्देशित है।) इसके अलावा, एजडा में सत्यापित कार्यात्मक कार्यक्रम है ; जो Agda, औपचारिक रूप से एक प्रोग्रामिंग भाषा का उपयोग करता है, लेकिन यूनिकोड का उपयोग करता है और इसलिए गणित संकेतन के करीब है।
मूसा अल-परेशानी

ठीक किया, धन्यवाद। हां, मैंने VFPiA पढ़ा है, लेकिन यह मेरे स्वाद के लिए नहीं है।
एंटोन ट्रुनोव

आपके उत्तर के लिए धन्यवाद! मुझे लगता है कि एक गलत धारणा है। मैं एल्गोरिदम साबित करने के लिए कार्यात्मक तकनीकों की तलाश नहीं कर रहा हूं (जैसे कि एक प्रमाण सहायक के रूप में), लेकिन कार्यात्मक कोड साबित करने के लिए तकनीकों के लिए (उदाहरण के लिए किसी दिए गए एल्गोरिदम के कार्यात्मक कार्यान्वयन को सही साबित करने के लिए) @ मूसा-परेशानी वाला उत्तर मेरे बहुत करीब है वांछित जवाब। यदि मैंने इसे याद किया है और आपके द्वारा उद्धृत पुस्तकें इस पहलू को कवर करती हैं, तो क्या आप संबंधित अध्यायों को जोड़ना चाहेंगे?
FK82

@ FK82 यहाँ सूचियों अध्याय Theorem app_assoc : ∀ l1 l2 l3 : natlist, (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3)से एक है । क्या यह उदाहरण उस चीज़ की तरह दिखता है, जिसमें आप रुचि रखते हैं? वे Coq में कार्यात्मक प्रोग्रामिंग के साथ शुरू करते हैं, लेकिन फिर कार्यात्मक कार्यक्रमों के गुणों के बारे में तर्क करने के लिए आगे बढ़ते हैं। Preface से IndPrinciples तक के अध्याय उन दोनों को कवर करते हैं, और मैं कहूँगा कि प्रोग्रामिंग और तर्क वहाँ परस्पर जुड़े हुए हैं।
एंटोन ट्रुनोव

1
@ FK82 (1) मैं इस टिप्पणी से पूरी तरह सहमत हूं । (२) आप आर। बर्ड की पुस्तक "थिंकिंग फंक्शनल विद हास्केल" (२०१५) देखना चाहेंगे। पुस्तक में हास्केल के बारे में तर्क के उदाहरण हैं। (3) इसके अलावा, एक ही लेखक द्वारा "पर्ल ऑफ़ फंक्शनल एल्गोरिथम डिज़ाइन" (2010) आपकी कुछ मदद कर सकता है।
एंटोन ट्रुनोव

5

यह पता चला है कि प्रूफ तकनीकों का एक उत्कृष्ट स्रोत और शुद्ध कार्यात्मक भाषाओं के बारे में चीजों को साबित करने के लिए उदाहरण है प्रूफ सहायक हैं, जो आमतौर पर उनकी विनिर्देश भाषा के एक शुद्ध कार्यात्मक भाषा के भाग के रूप में शामिल होते हैं, जिस पर समान रूप से तर्क करना संभव है।

एक विशिष्ट प्रमाण सहायक, जैसे कि कोक में इस तरह के तर्क के लिए गहराई से परिचय के लिए , प्रमाणित प्रकारों के साथ प्रमाणित प्रोग्रामिंग जैसी पुस्तक से परामर्श करना चाह सकते हैं ।


धन्यवाद! मैं वास्तव में हस्केल में तकनीकों के लिए देख रहा हूं । मेरी पोस्ट को सभी कार्यात्मक कोड शामिल करने के लिए संपादित किया गया था, लेकिन यह मेरे इरादों से काफी ऊपर है।
FK82

1
मुझे विशेष रूप से हास्केल को सत्यापित करने के लिए डिज़ाइन किए गए सिस्टम के बारे में पता नहीं है, लेकिन मैं यह नोट करूंगा कि 1) Coq (और Agda) के कार्यात्मक कोर अनिवार्य रूप से हास्केल ( कुल कार्यों के लिए प्रतिबंध को छोड़कर ) और 2) कार्यक्रमों से सत्यापित है। Coq और Agda में Haskell को निकाला जा सकता है (हालाँकि मेरा मानना ​​है कि Haskell को निष्कर्षण Agda में बेहतर समर्थन देता है, जहाँ Coq अधिक Ocaml केंद्रित है)
cody

जानकार अच्छा लगा! हालांकि इसका मतलब यह होगा कि मैं Coq या Agda में अपने कार्यक्रम (या संबंधित भागों) को फिर से लिखूंगा। मुझे नहीं लगता कि यह मेरे मामले में उचित है।
FK82

बहुत प्रयोगात्मक "सामने के छोर" के एक जोड़े हैं जो हास्केल को इसाबेल में बदलने की कोशिश करते हैं या सीधे इसाबेल का उपयोग करके तुल्यता साबित करते हैं, लेकिन मैं उनकी परिपक्वता में बहुत अधिक स्टॉक नहीं रखता। मुझे लगता है कि कोड को फिर से लिखना आखिरकार कम काम होगा।
कोड़ी

4

मैं प्रोग्राम लॉजिक्स का उपयोग करने का सुझाव देता हूं। वे टाइपिंग सिस्टम की तुलना में प्रभावों से बहुत बेहतर व्यवहार करते हैं।

कार्यात्मक भाषाओं के लिए कई कार्यक्रम लॉजिक्स हैं। यह प्रभाव के साथ दिलचस्प हो जाता है। स्थानीय राज्य के साथ उच्च-क्रम के कार्यों के लिए तार्किक तर्क देखें

आर्थर चारगुएरेड द्वारा कार्य सबूत सहायकों के साथ कार्यक्रम तर्क दृष्टिकोण को एकीकृत करता है, उदाहरण के लिए यह अवलोकन पृष्ठ देखें

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