Làm thế nào tôi có thể thuyết phục Coq rằng hàm đệ quy được đưa ra dưới đây chấm dứt? Hàm này có hai đối số quy nạp. Theo trực giác, đệ quy chấm dứt vì một trong hai đối số bị phân rã.
Cụ thể, hàm lấy hai cây làm đầu vào.
Inductive Tree :=
| Tip: Tree
| Bin: Tree -> Tree -> Tree.
Trên cây, tôi thích làm theo kiểu cảm ứng sau đây.
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.
Định nghĩa của TreePair được chấp nhận, nhưng định nghĩa của cặp hàm mang lại thông báo lỗi:
Error: Cannot guess decreasing argument of fix.
Vì vậy, tôi quan tâm đến cách thuyết phục Coq về việc chấm dứt.
pair
được xác định rõ. Coq chỉ đơn thuần là phương tiện.