W programowaniu zależnym są dwa główne sposoby dekompozycji danych i wykonania rekurencji:
- Zależne dopasowanie wzorca : definicje funkcji podano w postaci wielu klauzul. Ujednolicenie zapewnia, że wszystkie pominięte przypadki są niemożliwe, a zewnętrzny solver zapewnia, że rekurencja jest uzasadniona.
- Eliminatory : Każda indukcyjnego typu danych posiada powiązaną stałej E D , który działa jako zasady indukcji jak i funkcji rekurencyjnej rozkładającym wartości typu D . Są to bardziej szczegółowe, ale mają tę zaletę, że są całkowite (wszystkie przypadki są objęte E D ) i kończą się budową.
Widziałem eliminatory dla typowych typów danych, takich jak , gdzie eliminator jest w zasadzie indukcją matematyczną, lub L i s t , gdzie eliminator jest po prostu fałdem.
Czytałem kilka artykułów na temat zależnego dopasowywania wzorców, a wiele odnosi się do teorii typów, w których typy danych mogą być definiowane, a teoria zapewnia eliminatory. Na przykład, Wyeliminowanie Dependent Pattern Recognition opisano sposób UTT opiera się eliminator i dopasowywania wzorców może być przekształcany do eliminacji w obecności aksjomatyce . Rozumiem, że po zdefiniowaniu typu danych teoria zapewnia eliminator.
To, czego nie znalazłem (a przynajmniej nie rozpoznałem, jeśli go widziałem), to dobry opis tego, jak można uzyskać eliminatory, zarówno ich typy, jak i ich semantykę.
Czy ktoś może wskazać mi odniesienie, które opisuje, w jaki sposób można uzyskać eliminator z definicji typu danych?
fix
i match
. Nie mam pod ręką referencji, ale wiem, że przeczytałem coś o tym, jak generowany jest ten eliminator. cs.stackexchange.com/questions/104/... może być interesujące.
T
Coq definiuje zasadę indukcji, T_ind
która jest zależnym eliminatorem. Jest to zdefiniowane w kategoriach rekurencji i dopasowywania wzorców, ale można w zasadzie założyć, że jest to nowa stała o tym samym typie (z tą samą semantyką).