ฉันจะโน้มน้าวใจให้ 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.
คำจำกัดความของ TreePair ได้รับการยอมรับ แต่ความหมายของคู่ฟังก์ชั่นทำให้เกิดข้อความแสดงข้อผิดพลาด:
Error: Cannot guess decreasing argument of fix.
ดังนั้นฉันสนใจที่จะโน้มน้าว Coq ของการเลิกจ้าง
pair
นั้นได้รับการกำหนดไว้อย่างดี Coq เป็นเพียงยานพาหนะ