Esiste una buona idea di non terminazione e fermare le prove nella teoria dei tipi?


10

La teoria dei tipi costruttiva con la sua interpretazione di base sotto la corrispondenza del curry howard consiste solo di funzioni totali e calcolabili. In letteratura, alcuni sono stati detti sull'uso della "teoria del tipo computazionale" al fine di rappresentare la non terminazione nei programmi funzionali, ma nei documenti che ho incontrato, questa non sembra essere la principale motivazione per la teoria (ad esempio Benton menziona il non determinismo, le continuazioni e le eccezioni, senza entrare nei dettagli sulla non terminazione), quindi devo ancora trovare un documento che dia una solida interpretazione della non terminazione usando la teoria dei tipi computazionale.

In particolare, quello che sto cercando è un modo in cui dato un tipo che rappresenta un calcolo possibilmente non terminante di tipo , , ci dovrebbe essere una nozione di prove che termina di tipo , in modo tale che dato e , si possono costruire un termine .T ( A ) x :AT(A)x:T(A)x : T ( A ) p : H ( x ) ˜ x : AH(x)x:T(A)p:H(x)x~:A

La mia motivazione per questo è che mi piacerebbe eventualmente riuscire a mettere in relazione formalmente le nozioni della teoria della complessità computazionale con la teoria dei tipi costruttiva. In particolare, sono interessato a quale potere come teoria formale i tipi costruttivi ottengono con l'accesso a un oracolo di arresto, e per farlo, ovviamente ho bisogno di avere effettivamente una nozione formale di possibile non-terminazione e prove di fermarsi a andare avanti con esso all'interno di un quadro di tipo teorico.


3
Hai esaminato Constable-Mendler, Definizioni ricorsive nella teoria dei tipi ? Forniscono un modo per definire per ogni definizione ricorsiva in virgola fissa di una funzione parziale da a un predicato di dominio tale che per , rappresenta il tipo di prove che ferma su . Credo che questo sia implementato in Nuprl. A B d o m ( f ) x A d ofAB dom(f)xAf xdom(f)(x)fx
Ulrik Buchholtz,

3
Stai cercando il ritardo monade ?
Andrej Bauer,

@UlrikBuchholtz Penso che sia abbastanza vicino a quello che sto cercando, anche se ho qualche difficoltà ad analizzare la notazione di Nuprl utilizzata nel documento - con cui non sono simile. Se ho capito bene, in sostanza definiscono una funzione ricorsiva parziale da a (o almeno identificarli con) come una funzione ricorsiva totale da $ \ {x: A | dom (f) (g) \} a B. (Vedi l'osservazione in fondo a pagina 27)BAB
Nathan BeDell,

Risposte:


11

Poiché una delle principali applicazioni della teoria dei tipi nelle formalizzazioni è stata studiare i linguaggi di programmazione e il calcolo in generale, si è pensato molto ai modi di rappresentare programmi eventualmente non terminanti.

Non farò un sondaggio completo qui, ma proverò a fornire indicazioni sulle principali spinte di direzioni diverse.

  • L'approccio "relazionale": puoi definire i tuoi programmi ipotetici come dicono le relazioni, che contiene iff è definito in e . Questo è di solito ciò che viene fatto con il predicato T di Kleene . Funziona altrettanto bene nelle formalizzazioni della teoria dei tipi come nella logica classica, (anche se ovviamente non puoi provare ).f x f ( x ) = y x ( y , F x y ) ( ¬ y , F x y )F x yfxf(x)=yx(y,F x y)(¬y,F x y)

    Un modo più sofisticato per farlo è il metodo "Bove-Capretta" (vedi Ricorsione modellistica nella Teoria dei tipi , che per ciascuna funzione ricorsiva, definisce un "predicato accessibile" che codifica il fatto che un dato calcolo è finito. La definizione della funzione prende un argomento in più che prova che gli input forniti sono accessibili. Per definire la funzione senza questo predicato aggiuntivo, è necessario dimostrare che ogni possibile combinazione di input è accessibile.

  • L'approccio "coinduttivo": questo è forse l'approccio più esplorato, e ciò a cui si riferiscono i commenti di Andrej. Un calcolo di tipo è definito come il tipo induttivo (dal collegamento di Andrej , di Capretta, Altenkirch e Uustalu:A

    codata Delay A =
    | Now : A -> Delay A
    | Later (Delay A)
    

    Questo codifica un flusso forse infinito di Latertoken ("tick" di calcolo) che termina con un risultato Now a. La mancata risoluzione equivale ad essere bisimile con il programma

    loop = Loop e terminazione successivi possono essere definiti da un predicato induttivo su Delay A:

    data Terminates : Data A -> Prop =
    | Term_now : forall x, Terminates (Now x)
    | Term_later : forall d, Terminates d -> Terminates (Later d)
    

    Penso che gli agda-istas abbiano molto da dire su questo che chiamano la monade della parzialità (vedi ad esempio Danielsson ).

  • L'approccio della "teoria dei tipi parziale" : questo è un po 'più sperimentale (la teoria è ancora in fase di elaborazione), ma ci sono alcune teorie dei tipi che vengono sviluppate per far fronte al fatto che ci sono essenzialmente due tipi di funzioni che vogliamo scrivere in teoria dei tipi: i termini di prova e i programmi. Risulta difficile ottenere una teoria ragionevole di queste cose (e mantenere la coerenza della teoria), ma Casinghino et al. Fanno un serio tentativo e uno sforzo simile di Kimmel et al .

Sono sicuro che ci sono altri approcci di cui non sono a conoscenza e sarei felice se qualcuno volesse completare questo elenco.

Dovrei probabilmente notare che aggiungere un oracolo di terminazione a una teoria del tipo (coerente) è molto simile all'aggiunta di un oracolo di verità per le frasi , con conseguenze relativamente ben comprese.Π10

Esistono altre interazioni abbastanza fruttuose tra teoria dei tipi e teoria della complessità, generalmente sotto l'egida della complessità computazionale implicita .


Interessante, grazie per l'informazione! Credo che l'approccio della teoria dei tipi parziale sia probabilmente più vicino nello spirito a ciò che sto cercando - e per lo meno, l'articolo di Kimmel sembra fornire ad un certo livello specificamente quello che sto cercando (vedere le regole di battitura per "tcast" ).
Nathan BeDell,
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.