ACSL (Ansi C Specification Language), é uma especificação para código C, anotada com comentários especiais, que permite que o código C seja formalmente verificado.
Ainda não examinei, mas imagino que os métodos formais usados nos verificadores ACSL seriam semelhantes ao Hoare Logic. Porém, para linguagens funcionais puras, como Haskell, não consigo imaginar que tipo de formalismo seria usado para verificação formal.
Alguém já fez algo semelhante ao ACSL , mas para uma linguagem funcional pura? Caso contrário, houve alguma pesquisa sobre a verificação formal de estilo anotado por especificação para linguagens funcionais?
Eu sei que há digitação dependente, suportada por muitos idiomas (Agda, Idris, etc ...), mas na digitação dependente de Haskell é difícil sem fazer alguma tipo de magia (ilegível?). Com isso em mente, e como Haskell tem um suporte de biblioteca muito melhor do que Agda e Idris, acredito que esse sistema de verificação formal funcional possa ser útil, mas não sei se foram feitas pesquisas sobre isso ou não.
Veja também o trabalho de tese de doutorado de Yann Régis-Gianas com François Pottier: Uma lógica Hoare para programas funcionais de chamada por valor (MPC'08) . Este trabalho foi estendido para cobrir os efeitos colaterais usuais de ML por Johannes Kanig e Jean-Cristophe Filliatre em 2009: Quem: Um Verificador para Programas Efetivos de Alta Ordem .
fonte
Há um documento no ICFP deste ano , tipos de refinamento para Haskell . O documento trata da verificação de terminação em vez da lógica completa do Hoare, mas espero que seja um começo nessa direção.
A seção de trabalho relacionada nesse documento contém alguns indicadores, como a verificação estática do contrato de Xu, Peyton-Jones e Claessen para Haskell e Sonnex, Drossopoulou e Zeno e Vytiniotis de Eisenbach, Peyton-Jones, Claessen e Halo de Rosen .
fonte
Nosso trabalho sobre verificação suave de contratos está relacionado, no OOPSLA 2012 e no ICFP 2014 , permite que você escreva contratos, que são muito parecidos com as especificações do ACSL, e depois os verifique estaticamente ou use uma verificação dinâmica em tempo de execução.
fonte