Я не могу заставить проверку завершения Агды принимать функции, определенные с использованием структурной индукции.
Я создал следующее, как мне кажется, простейший пример, демонстрирующий эту проблему.Следующее определение 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
для List A
, это дало бы мне достаточно подсказок?)