Qual è la teoria dei tipi dipendenti più intuitiva che potrei imparare?


46

Sono interessato a ottenere una comprensione davvero solida della digitazione dipendente. Ho letto la maggior parte di TaPL e ho letto (se non completamente assorbito) "Tipi dipendenti" in ATTaPL . Ho anche letto e sfogliato un sacco di articoli sulla digitazione dipendente.

Molte discussioni sulla teoria dei tipi sembrano concentrarsi sull'aggiunta di funzionalità incrementali ai sistemi di tipi precedenti, non "qual è la prossima generalizzazione di grandi dimensioni rispetto al sistema di tipi X?" I tipi dipendenti sembrano essere la prossima generalizzazione di grandi dimensioni dal Sistema F, ma devo ancora trovare il linguaggio intuitivo, canonico tipicamente dipendente. I molti riferimenti a Calculus of (inductive) Constructions mi fanno pensare che CoC sia quel linguaggio, ma le spiegazioni del linguaggio che ho visto non mi sembrano molto chiare o intuitive.

Mi aspetto / suppongo che un tale linguaggio avrebbe caratteristiche come: (e per favore fatemi sapere se qualcosa in particolare salta fuori come confuso o non realistico)

  • Astrazione generalizzata (può avere funzioni da qualsiasi dominio nella gerarchia dei tipi ad altri, kind -> term, term-> type '' 'ecc.)
  • Ha una gerarchia infinita di battitura (termini: tipi: tipi ': tipi' ': ...)
  • Un numero minimo di elementi di base. Immagino che il linguaggio asserisca solo un singolo elemento per ogni livello. Ad esempio, potrebbe affermare che ((): Unità: Tipo: Tipo ': ...). Altri elementi sono costruiti da questi elementi.
  • Somma e tipi di prodotto sono derivabili.

Sto anche cercando una spiegazione di quella lingua che idealmente dovrebbe discutere:

  • La relazione tra astrazione e quantificazione in quella lingua. Se non sono unificati, spiega perché non sono unificati.
  • La gerarchia di tipi infiniti in modo esplicito

Sto ponendo questa domanda perché voglio imparare la teoria dei tipi dipendenti, ma anche perché voglio mettere insieme una guida che, assumendo un po 'di background CS, insegna l'uso e la comprensione degli assistenti di verifica e dei linguaggi tipicamente dipendenti.

(Cross pubblicato su Reddit)

Risposte:


35

Esistono diversi modi per affrontarlo:

  1. Teoria del tipo dipendente . Questo probabilmente non è il modo più semplice di apprendere sui tipi dipendenti, ma potresti guardare i documenti Calculus of Constructions e le loro varianti, Pure Type Systems e l'articolo di Martin Hofmann sulla Sintassi e Semantica dei tipi dipendenti, per esempio.

  2. Teorema dimostrativo . Innanzitutto, dai un'occhiata alla mia risposta a una domanda correlata: come potrei imparare la teoria di base dell'assistente di prova Coq? .

  3. ΠΣ, tra gli altri. E ovviamente c'è il libro di Adam Chlipala, riportato nella risposta di Marc Hamann.

Sarei propenso a iniziare con la programmazione, prima di passare alla dimostrazione del teorema, quindi iniziare a esplorare le questioni più teoriche.


Posso trovare documenti per Epigram, ma non riesco a trovare un download effettivo per Epigram, solo l'Epigram ancora incompiuto 2. Qualche idea?
John Salvatier,

1
Hai trovato: e-pig.org/darcs/Pig09/web ? Epigram è disponibile in fondo alla pagina.
Dave Clarke,

3
Epigram 1 è essenzialmente non mantenuto da un po 'di tempo AFAIK - l'autore usa Agda in questi giorni (mentre lavora su Epigram 2 a lato).
Blaisorblade,

Nel 2019, non penso che Epigram 2 accadrà mai, ma adesso c'è Idris (e Idris 2!).
xrq

14

λπ

Twelf è un buon sistema di dimostrazione di teoremi basato su LF. Esaminando gli appunti avanzati del corso offerti da Frank Pfenning, si può trarre una buona introduzione alla teoria e alla pratica della LF.

Detto questo, forse non è il primo sistema migliore per sapere se il tuo interesse è per la matematica costruttiva piuttosto che gli elementi essenziali della teoria dei tipi: LF significa quadro logico ed è un sistema usato per assiomatizzare le teorie, e non è così spesso lavorato come un sistema di destinazione direttamente. L'uso di un sistema basato sulla teoria dei tipi di Martin-Loef è probabilmente la migliore introduzione -Dave menziona Agda, tra gli altri- è forse un punto di partenza migliore se questo è il tuo obiettivo, dal momento che puoi andare più rapidamente con i tipi aritmetici e induttivi in ​​un tale struttura.


10

Il CoC è probabilmente la strada da percorrere. Basta immergersi in Coq e lavorare attraverso un bel tutorial come Software Foundations (in cui Pierce of TaPL e ATTaPL è coinvolto).

Una volta che avrai un'idea degli aspetti pratici della digitazione dipendente, torna alle fonti teoriche: allora avranno molto più senso.

Il tuo elenco di funzionalità sembra sostanzialmente corretto, ma vedere come si svolgono nella pratica vale mille punti funzionalità.

(Un altro tutorial leggermente più avanzato è la programmazione certificata di Adam Chlipala con tipi dipendenti )


"intuitivo" è forse il punto critico qui: ci sono molte più intuizioni che volano in CoC / CIC rispetto alla semplice digitazione dipendente. È un buon obiettivo finale - a mio avviso la scelta è davvero tra Coq e Twelf - ma forse non è il miglior primo passo verso "ottenere una comprensione davvero solida della digitazione dipendente".
Charles Stewart,

@Charles: il tuo punto è preso. Penso ancora che dal punto di vista pratico sia una buona scommessa. Anche se una piena comprensione di CoC / CIC potrebbe essere un'impresa più complessa, Coq (oltre all'esistenza di buoni tutorial di livello base per esso) rende facile concentrarsi sull'apprendimento solo degli aspetti di programmazione o solo degli aspetti di base per l'assistente di prova (come i tuoi interessi dettano) anche prima di aver colto tutte le complessità. Penso che questo si qualifichi come "intuitivo" per qualcuno che non proviene da un background teorico.
Marc Hamann,


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.