Semantica formale di OCaml in Coq


14

La semantica di un vasto sottoinsieme di OCaml, chiamato OCamllight , è stata formalizzata in HOL da Owens diversi anni fa. Più recentemente, una semantica teorica di tipo di un sottoinsieme più piccolo di OCaml è stata implementata in Nuprl da Kreitz, Hayden e Hickey .

C'è qualche sviluppo simile in Coq?


Potresti essere interessato a CakeML: cakeml.org . Tuttavia, non sono OCaml.
jmite,

Risposte:


12

Hai visto la tesi di dottorato di Arthur Charguéraud, Formule caratteristiche per la verifica meccanizzata del programma ?

Invece di costruire il sistema di tipi e la semantica a piccoli passi come relazioni induttive, egli fornisce una tecnica per convertire i programmi Caml in formule caratteristiche. Questa è fondamentalmente una generalizzazione della semantica del trasformatore predicato per supportare un sottogruppo molto ampio di Ocaml - in particolare, inclusi cast non sicuri come Obj.magic. Per citare dalla sua tesi:

Mi sono concentrato su un sottoinsieme del linguaggio di programmazione OCaml, che è un linguaggio di programmazione sequenziale, di chiamata per valore, di alto livello. L'attuale implementazione del CFML supporta il calcolo λ di base, comprese le funzioni di ordine superiore, la ricorsione, la ricorsione reciproca e la ricorsione polimorfica. Supporta tuple, costruttori di dati, corrispondenza di modelli, celle di riferimento, record e matrici. Fornisco una libreria Caml aggiuntiva che aggiunge il supporto per puntatori null e aggiornamenti forti.

È un approccio molto interessante se vuoi dimostrare che un determinato programma Caml è corretto (meno se sei interessato alla sua metatheory, però).


Quindi, se ho capito bene, le specifiche della semantica di Ocaml sono incorporate nel sistema. È possibile interpretare la formula caratteristica di (alcune funzioni chiave del sistema) come tale specifica? Inoltre, presumo che il sistema sia scritto in OCaml. È possibile specificare e dimostrare la sua correttezza nel sistema stesso?
Andrea Asperti

Per un dato programma OCaml, si può pensare alla sua formula caratteristica di una semantica denotazionale, una specifica "meno generale" che può essere usata per dimostrare qualsiasi proprietà desiderabile del programma. Se parli della "correttezza" del CFML stesso, la domanda è: rispetto a quale semantica formale alternativa?
Gasche

Strano avere un programma che dovrebbe certificare il software e il cui comportamento non può essere specificato :)
Andrea Asperti

@AndreaAsperti Cosa intendi con "incorporato nel sistema"? L'idea alla base delle formule caratteristiche (CF) è piuttosto semplice: mappare i programmi su formule logiche (in genere pre e postcondizione) tali formule descrivono con precisione la semantica dei programmi. In altre parole, due programmi soddisfano gli stessi CF se sono contestualmente indistinguibili. La mappa dal programma ai CF viene effettuata per induzione della struttura del programma e può indirizzare qualsiasi logica sufficientemente espressiva. A. La logica di Coq del bersaglio di Charguéraud, ma questa è una scelta contingente.
Martin Berger,

1
@MartinBerger: il documento Guéneau et al dimostra solo la solidità perché i pre / post derivati non caratterizzano i programmi da cui derivano. I loro CF sono derivati ​​dalla semantica non tipizzata di CakeML, ma il linguaggio tipizzato ha una diversa equivalenza osservativa. (Per una verifica pratica, questo non è tremendamente importante ed è più facile.)
Neel Krishnaswami

8

Potresti essere interessato a A Implementazione certificata di ML di ML con polimorfismo strutturale e tipi ricorsivi , che stabilisce la solidità della semantica statica e dinamica e le proprietà di inferenza di tipo per un linguaggio ML con polimorfismo (ricorsione e) strutturale, formalizzando così uno dei angoli più avanzati di OCaml (varianti polimorfiche e tipi di oggetti).

Detto questo, questo lavoro è più mirato a verificare la solidità di parti più avanzate del sistema di tipi che a coprire il set di funzionalità dei programmi OCaml esistenti. Penso che in termini di provare la correttezza di un programma OCaml esistente, CFML sarebbe una scelta migliore.

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.