構造帰納法を使用して定義された関数を 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
それで十分なヒントが得られると思いますか?)