我无法让 Agda 的终止检查器接受使用结构归纳定义的函数。
我创建了以下作为我认为最简单的例子来展示这个问题。下面的定义size
被拒绝,即使它总是在严格更小的组件上递归。
module Tree where
open import Data.Nat
open import Data.List
data Tree : Set where
leaf : Tree
branch : (ts : List Tree) → Tree
size : Tree → ℕ
size leaf = 1
size (branch ts) = suc (sum (map size ts))
这个问题有通用的解决方案吗?我需要Recursor
为我的数据类型创建一个吗?如果是,我该怎么做?(我想如果有一个如何定义Recursor
for的例子List A
,那会给我足够的提示吗?)