Esistono sistemi di verifica formale con annotazioni per linguaggi di programmazione funzionali puri?


25

ACSL (Ansi C Specification Language), è una specifica per il codice C, annotata con commenti speciali, che consente di verificare formalmente il codice C.

Non ci ho pensato , ma immagino che i metodi formali utilizzati nei verificatori ACSL sarebbero simili a Hoare Logic. Per i linguaggi puramente funzionali, come Haskell, non riesco a immaginare quale tipo di formalismo sarebbe usato per la verifica formale.

Qualcuno ha fatto qualcosa di simile all'ACSL , ma per un linguaggio funzionale puro? In caso contrario, c'è stata qualche ricerca sulla verifica formale di stile con annotazioni specifiche per linguaggi funzionali?

So che esiste la tipizzazione dipendente, supportata da molte lingue (Agda, Idris, ecc ...), ma nella scrittura dipendente da Haskell è difficile senza eseguire una procedura guidata di tipo (illeggibile?). Con questo in mente, e dato che Haskell ha un supporto librario molto migliore di Agda e Idris, credo che un tale sistema per la verifica formale funzionale potrebbe essere utile, ma non so se sono state fatte ricerche su questo o no.

Risposte:


13

Honda e Yoshida

(probabilmente) è stato il pioniere della logica Hoare per linguaggi puramente funzionali. Questo lavoro si basa sulla logica di Hennessy-Milner e sulla codifica delle funzioni di Milner in processi, come descritto qui:

Il lavoro di Régis-Gianas et al. Menzionato in un'altra risposta è simile al primo lavoro sopra di Honda / Yoshida. Questo è stato esteso a linguaggi efficaci in stile ML:

Le logiche menzionate sono quelle che vengono definite complete dal punto di vista dell'osservazione, nel senso che la semantica operativa e quella logica coincidono. Arthur Charguéraud ha usato questi complet per il suo lavoro sulla verifica dei programmi funzionali in stile Hoare in Coq.


15

F*

Sembra che ci sia una stretta corrispondenza tra i tipi di raffinamento e le notazioni ACSL.

Infine, posso solo suggerire di dare un'occhiata più da vicino ad Agda e Idris, in quanto possono essere compilati in Haskell e mirano a fornire all'utente un linguaggio di programmazione utilizzabile (in particolare Idris). Ho il sospetto che sia possibile integrare le librerie Haskell nel codice Idris senza troppi problemi.


senza troppi problemi - non proprio. Idris è severo per impostazione predefinita e Haskell è pigro; questo da solo rappresenta un grave problema. Anche la compatibilità con Haskell non è mai stata una priorità molto alta per il design di Idris.
Bartek Banachewicz,

Giusto. Agda controlla la chiusura di default, quindi cose come la rigidità non sono un problema in teoria . Naturalmente il tempo di esecuzione potrebbe essere notevolmente diverso.
cody


8

C'è un documento nell'ICFP di quest'anno , i tipi di perfezionamento per Haskell . L'articolo tratta del controllo delle terminazioni piuttosto che della piena logica di Hoare, ma si spera che sia un inizio in questa direzione.

La relativa sezione di lavoro in quel documento contiene alcuni suggerimenti, come Xu, Peyton-Jones e il controllo statico del contratto di Claessen per Haskell , e Sonnex, Drossopoulou e Zeno e Vytiniotis di Eisenbach , Peyton-Jones, Claessen e Halo di Rosen .


1

Il nostro lavoro sulla verifica software dei contratti è correlato, a OOPSLA 2012 e ICFP 2014 , ti consente di scrivere contratti che sono molto simili alle specifiche ACSL e quindi verificarli staticamente o usarli per controlli dinamici in fase di esecuzione.

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.