coq - the decidable equality definitions for mutually defined inductive types -
अब मेरे पास एक परस्पर परिभाषित आगमनात्मक प्रकार ए और टी है:
प्रेरक एक: प्रकार : = | मूल: स्ट्रिंग - & gt; (स्ट्रिंग * स्ट्रिंग) - & gt; एक | जटिल: स्ट्रिंग - & gt; सूची ए - & gt; नेट - & gt; सूची टी - & gt; (स्ट्रिंग * स्ट्रिंग) - & gt; एक | जटिल 2: स्ट्रिंग - & gt; सूची ए - & gt; टी के साथ: प्रकार: = | t_intro: स्ट्रिंग * a * (सेट स्ट्रिंग) * (सेट स्ट्रिंग) - & gt; टी। मेरी समस्या यह है कि कैसे उनमें से प्रत्येक के लिए परिभाषित समरूपता परिभाषा के सबूत हैं?
परिभाषा a_dec: forall (xy: a), {x = y } + {X & lt; & gt; y}। परिभाषा t_dec: forall (x y: t), {x = y} + {x & lt; & gt; y}।
आपके पास यहां दो अलग-अलग समस्याएं हैं:
-
आप परस्पर आगमनात्मक प्रकार हैं, इसलिए आपको एक पारस्परिक निश्चित बिंदु घोषित करने की आवश्यकता है, उदाहरण के लिए
फिक्सपॉइंट ए_ डीसीई (xy: a): {x = y} + {x इस तरह से कॉक एक आपसी फिक्सपॉइंट उत्पन्न करता है जहां आप दोनों प्रेरण अवधारणाओं का उपयोग कर सकते हैं (हालांकि गार्ड की स्थिति से सावधान रहना)।
-
आपके प्रकार कोक की समझ में "संरचनात्मक" पुनरावर्ती नहीं है: a निर्भर करता है list.list प्रकार पर, इसलिए Coq अकेले संरचनात्मक संबंध खोजने में सक्षम नहीं होगा जो उसे प्रेरण को लागू करने की आवश्यकता है। यदि आपको केवल सूची के बारे में और कोई प्रेरण नहीं है, तो आपको समस्या नहीं है। अन्यथा आपको अपनी स्वयं की पुनरावर्ती योजना को परिभाषित करना पड़ सकता है, या आपके पारस्परिक ब्लॉक के भीतर सूची को दोबारा परिभाषित करना है, जिससे कि कॉक समझ सके कि सूचियों का तत्व आपके प्रकार के सबरर्म्स हैं। पूर्व दृष्टिकोण के लिए, मैं आपको सलाह देता हूं कि (नेस्टेड प्रेरक प्रकारों के लिए खोज करें)। बाद के समाधान की तरह दिख सकते हैं:
प्रेरक एक: प्रकार: = | मूल: स्ट्रिंग - & gt; (स्ट्रिंग * स्ट्रिंग) - & gt; एक | जटिल: स्ट्रिंग - & gt; List_a - & gt; नेट - & gt; सूची_टी - & gt; (स्ट्रिंग * स्ट्रिंग) - & gt; एक | जटिल 2: स्ट्रिंग - & gt; List_a - & gt; टी के साथ: प्रकार: = | t_intro: स्ट्रिंग * a * (सेट स्ट्रिंग) * (सेट स्ट्रिंग) - & gt; टी। List_a के साथ: प्रकार | अनिल: सूची_ए | एंटोन: ए - & gt; List_a - & gt; List_a के साथ list_t: प्रकार | tnil: list_t | टकनों: टी - & gt; सूची_टी - & gt; सूची_टी इस एक के साथ, आप List.list लाइब्रेरी का सीधे उपयोग करने में सक्षम नहीं होंगे, लेकिन आप अभी भी के बीच दो तरह से अनुवाद बना सकते हैं आशा करता है कि यह मदद करता है, वी.आई. (पुस्तकालय) का उपयोग करने के लिए list_a और सूची (resp। t )।
Comments
Post a Comment