मैं Coq को कैसे मना सकता हूं कि नीचे दिया गया पुनरावर्ती कार्य समाप्त हो गया है? फ़ंक्शन दो प्रेरक तर्क लेता है। वास्तव में, पुनरावृत्ति समाप्त हो जाती है क्योंकि या तो तर्क विघटित हो जाता है।
विशेष रूप से, फ़ंक्शन इनपुट के रूप में दो पेड़ लेता है।
Inductive Tree :=
| Tip: Tree
| Bin: Tree -> Tree -> Tree.
पेड़ों पर, मैं प्रेरण की निम्नलिखित शैली करना पसंद करता हूं।
Inductive TreePair :=
| TipTip : TreePair
| TipBin : Tree -> Tree -> TreePair
| BinTip : Tree -> Tree -> TreePair
| BinBin : TreePair -> TreePair -> TreePair.
Fixpoint pair (l r: Tree): TreePair :=
match l with
| Tip =>
match r with
| Tip => TipTip
| Bin rl rr => TipBin rl rr
end
| Bin ll lr =>
match r with
| Tip => BinTip ll lr
| Bin rl rr => BinBin (pair l rl) (pair lr r)
end
end.
ट्रीपेयर की परिभाषा स्वीकार की जाती है, लेकिन फ़ंक्शन जोड़ी की परिभाषा त्रुटि संदेश देती है:
Error: Cannot guess decreasing argument of fix.
इसलिए मुझे इस बात में दिलचस्पी है कि कॉक् की समाप्ति कैसे मनाई जाए।
pair
अच्छी तरह से परिभाषित है ताकि यह सुनिश्चित करने के लिए कि डेटा संरचनाओं पर सीमा कम हो । कोक् केवल वाहन है।