Come derivare gli eliminatori tipicamente dipendenti?


10

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.DEDDED

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.Nun'tLioSt

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.K

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?


Sono sicuro che c'è una descrizione nel calcolo delle costruzioni o nella letteratura di Coq (per tipi strettamente positivi - gli eliminatori di Coq su tipi più complessi non sono del tutto generali).
Gilles 'SO- smetti di essere malvagio' il

@Gilles La mia comprensione era che Coq non utilizzava gli eliminatori, ma invece utilizza operatori di corrispondenza e correzione (separati) separati.
jmite,

3
Il linguaggio principale non usa gli eliminatori, ma quando si definisce un tipo, Coq genera un eliminatore che è definito in termini di fixe 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.
Gilles 'SO-smetti di essere malvagio' il

Per qualsiasi tipo induttivo T, Coq definisce un principio di induzione T_indche è 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).
chi,

Risposte:


8

Il riferimento canonico per questo è Peter Dybjer, Famiglie induttive , che offre un trattamento piuttosto completo delle famiglie induttive basato sugli eliminatori.


6

Potresti trovare alcuni dei nostri articoli recenti su questo utile, poiché deriviamo eliminatori per tipi di dati con codifica lambda. Ad esempio, vedere questo uno per la derivazione generico di separatori, e questo uno per la tecnica di base applicata solo al tipo Nat.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.