(ध्यान दें कि यह आपके अन्य प्रश्न से भी संबंधित है।) हमने Leon verifier प्रोजेक्ट के हिस्से के रूप में ऐसे मामलों को देखा। हम वहां क्या कर रहे हैं क्वांटिफायर के उपयोग से बचने और रिकर्सिव फ़ंक्शन परिभाषाओं के बजाय "अनलॉकिंग": यदि हम सूत्र में शब्द लंबाई (एलएसटी) देखते हैं, तो हम इसे एक नई समानता पेश करके लंबाई की परिभाषा का उपयोग करके विस्तारित करते हैं: लंबाई (lst) = अगर (isnil (lst)) 0 और 1 + लंबाई (पूंछ (lst))। आप इसे मैन्युअल क्वांटिफायर तत्काल प्रक्रिया के रूप में देख सकते हैं।
आप सबसे अधिक दो पर लंबाई की सूची में रुचि रखते हैं, सभी नियमों के लिए मैनुअल इन्स्टेन्शियशन कर तो यह एक बार नई सूची शब्दों के लिए और अधिक करने के लिए पर्याप्त होना चाहिए, तो जब तक आप अवधि जोड़ने के रूप में:
isCons (lst) => ((iscon (पूंछ (lst)) => isnil (पूंछ (पूंछ (lst)))
प्रत्येक सूची के लिए। अभ्यास में आप निश्चित रूप से इन समानताओं को उत्पन्न नहीं करना चाहते हैं और मैन्युअल रूप से निहितार्थ; हमारे मामले में, हमने एक प्रोग्राम लिखा है जो आवश्यक रूप से ज़ेड 3 के आसपास एक लूप जोड़ रहा है जब आवश्यक हो तो ऐसे अधिकxixi जोड़ना।
एक बहुत ही रोचक संपत्ति (बहुत संबंधित टी ओ आपका प्रश्न) यह है कि यह पता चला है कि कुछ कार्यों (जैसे लंबाई) के लिए, लगातार अनोलिंग का उपयोग करके आपको एक पूर्ण निर्णय प्रक्रिया मिल जाएगी। अर्थात। भले ही आप डेटास्ट्रक्चर के आकार को बाधित न करें, फिर भी आप अंततः एसएटी या यूएनएसएटी (क्वांटिफायर-फ्री केस के लिए) निष्कर्ष निकालने में सक्षम होंगे।
आप हमारे पेपर Satisfiability Modulo Recursive Programs में अधिक जानकारी प्राप्त कर सकते हैं, या मुझे यहां और अधिक देने में खुशी है।
(मुझे यह जोड़ना चाहिए कि आपका 'अंतिम' फ़ंक्शन भी उस श्रेणी के कार्यों में पड़ता है जिसके लिए हमारी तकनीक पूरी निर्णय प्रक्रिया उत्पन्न करती है।) – Philippe
मैं फिलिप से सहमत हूं। बीटीडब्लू, आपकी स्क्रिप्ट में, आप 'define-fun' मैक्रो सुविधा का उपयोग करके 'अंतिम' को परिभाषित कर सकते हैं। मैक्रोज़ Z3 द्वारा स्वचालित रूप से अनलॉक कर रहे हैं। निम्न लिंक में यह कैसे किया जाए इस पर एक उदाहरण है: http://rise4fun.com/Z3/9xVs –
@ फिलिपइप, वह प्रोग्राम है जिसे आपने पुन: उपयोग के लिए उपलब्ध रिकर्सिव फ़ंक्शन परिभाषाओं को अनलॉक करने के लिए लिखा है? क्या आपका प्रोग्राम इनपुट के रूप में एसएमटी-एलआईबी कार्यक्रम लेता है? – reprogrammer