Quero fornecer provas para partes de um programa Haskell que estou escrevendo como parte de minha tese. Até agora, porém, não consegui encontrar um bom trabalho de referência.
O livro introdutório de Graham Hutton, Programming in Haskell ( Google Books ) - que li enquanto aprendia Haskell - aborda algumas técnicas para raciocinar sobre programas como
- raciocínio equacional
- usando padrões não sobrepostos
- lista de indução
no capítulo 13, mas não é muito aprofundado.
Você pode recomendar livros ou artigos que forneçam uma visão geral mais detalhada das técnicas formais de prova para Haskell, ou outro código funcional?
Você pode começar com
Você pode pular (ou pular) as partes da teoria da linguagem de programação e aprender apenas como lidar com provas formais, começando do Prefácio até os IndPrinciples. O livro é realmente bem escrito e esclarecedor.
Então você pode continuar com
Uma observação: o VFA ainda está na versão beta!
fonte
Theorem app_assoc : ∀ l1 l2 l3 : natlist, (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3)
do Lists . Este exemplo é parecido com o que você está interessado? Eles começam com a programação funcional no Coq, mas depois passam a raciocinar sobre as propriedades dos programas funcionais. Os capítulos de Prefácio até IndPrinciples cobrem os dois, e eu diria que programação e raciocínio estão entrelaçados lá.Acontece que uma excelente fonte de técnicas de prova e exemplos para provar coisas sobre linguagens funcionais puras são assistentes de prova que geralmente incluem como parte de sua linguagem de especificação uma linguagem funcional pura na qual é possível raciocinar de maneira equitativa.
Pode-se consultar um livro como Programação Certificada com Tipos Dependentes para obter uma introdução detalhada a esse tipo de raciocínio em um assistente de prova específico, chamado Coq.
fonte
Eu sugiro usar a lógica do programa. Eles lidam muito melhor com efeitos do que com sistemas de digitação.
Existem inúmeras lógicas de programa para linguagens funcionais. Isso se torna interessante com efeitos. Consulte, por exemplo, Raciocínio lógico para funções de ordem superior com estado local .
O trabalho de Arthur Charguéraud integra a abordagem lógica do programa aos assistentes de prova, consulte, por exemplo, esta página de visão geral .
fonte