Nie mogę uzyskać funkcji sprawdzania zakończenia Agdy, aby zaakceptować funkcje zdefiniowane za pomocą indukcji strukturalnej.Zakończenie indukcji strukturalnej
Stworzyłem następujące, jak sądzę, najprostszy przykład wykazujący ten problem. Następująca definicja size
została odrzucona, mimo że zawsze powtarza się na ściśle mniejszych składnikach.
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))
Czy istnieje ogólne rozwiązanie tego problemu? Czy muszę utworzyć Recursor
dla mojego typu danych? Jeśli tak, w jaki sposób mogę to zrobić? (Przypuszczam, że istnieje przykład tego, jak zdefiniować Recursor
dla List A
, co dałoby mi wystarczającą liczbę wskazówek?)
Tak, tak też robię, gdy używam 'map'. Naprawdę niefortunne jest to, że kontroler zakończenia nie może wejść w definicję 'mapy' i zobaczyć, że wszystko jest w porządku. – danr