Coq'u aşağıda verilen özyinelemeli fonksiyonun sona erdiğine nasıl ikna edebilirim? İşlev iki endüktif argüman alır. Sezgisel olarak, her iki argüman da ayrıştırıldığı için özyineleme sona erer.
Özellikle, fonksiyon girdi olarak iki ağacı alır.
Inductive Tree :=
| Tip: Tree
| Bin: Tree -> Tree -> Tree.
Ağaçlarda, aşağıdaki indüksiyon stilini yapmayı seviyorum.
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'in tanımı kabul edilir, ancak işlev çiftinin tanımı hata iletisini verir:
Error: Cannot guess decreasing argument of fix.
Bu yüzden Coq'u feshin nasıl ikna edeceğiyle ilgileniyorum.
pair
iyi tanımlanmasını sağlamak için veri yapıları üzerinde monoton olarak azalan sınırların belirlenmesi ile ilgilidir. Coq sadece araç.