Nella programmazione tipizzata in modo dipendente, ci sono due modi principali di decomporre i dati ed eseguire la ricorsione:
- Corrispondenza del modello dipendente : le definizioni delle funzioni sono fornite come più clausole. L'unificazione assicura che tutti i casi omessi siano impossibili e un risolutore esterno assicura che la ricorsione sia fondata.
- Separatori : Ogni induttivo tipo di dati ha una costante associata , che agisce come principio di induzione, e in funzione ricorsiva che decompone valori di tipo . Questi sono più dettagliati, ma hanno il vantaggio di essere totali (tutti i casi sono coperti da ) e terminare con la costruzione.
Ho visto eliminatori per tipi di dati comuni, come , in cui l'eliminatore è sostanzialmente un'induzione matematica, o , in cui l'eliminatore è sostanzialmente una piega.
Ho letto diversi articoli sulla corrispondenza dei modelli dipendenti e molti si riferiscono a teorie di tipi in cui i tipi di dati possono essere definiti e gli eliminatori sono forniti dalla teoria. Ad esempio, eliminazione Dependent Pattern Matching descrive come UTT si riferiscono al separatori, e come pattern matching può essere convertito eliminazione in presenza di assioma . La mia comprensione è che, una volta definito un tipo di dati, la teoria fornisce l'eliminazione.
Ciò che non ho trovato (o almeno non ho riconosciuto se l'ho visto) è una buona descrizione di come si possano derivare gli eliminatori, sia i loro tipi che la loro semantica.
Qualcuno può indicarmi un riferimento che descrive come ottenere un eliminatore dalla definizione di un tipo di dati?
fix
e match
. Non ho un riferimento a portata di mano, ma so di aver letto qualcosa su come viene generato questo eliminatore. cs.stackexchange.com/questions/104/… potrebbe essere di interesse.
T
, Coq definisce un principio di induzione T_ind
che è un eliminatore dipendente. Questo è definito in termini di ricorsione e corrispondenza del modello, ma in linea di principio si potrebbe presumere che sia una nuova costante avente lo stesso tipo (con la stessa semantica).