Quiero proporcionar pruebas de partes de un programa de Haskell que estoy escribiendo como parte de mi tesis. Hasta ahora, sin embargo, no pude encontrar un buen trabajo de referencia.
El libro introductorio de Graham Hutton Programming in Haskell ( Google Books ), que leí mientras aprendía Haskell, aborda algunas técnicas para razonar sobre programas como
- razonamiento equitativo
- utilizando patrones no superpuestos
- lista de inducción
en el capítulo 13 pero no es muy profundo.
¿Hay algún libro o artículo que pueda recomendar que proporcione una descripción más detallada de las técnicas formales de prueba para Haskell u otro código funcional?
Puedes comenzar con
Puede omitir (o desglosar) las partes de la teoría del lenguaje de programación y solo aprender a lidiar con las pruebas formales desde el Prefacio hasta los Principios Ind. El libro está muy bien escrito e iluminante.
Entonces es posible que desee continuar con
Una nota de advertencia: ¡VFA todavía está en versión beta!
fuente
Theorem app_assoc : ∀ l1 l2 l3 : natlist, (l1 ++ l2) ++ l3 = l1 ++ (l2 ++ l3)
de la listas capítulo. ¿Este ejemplo se parece a lo que le interesa? Comienzan con la programación funcional en Coq, pero luego continúan con el razonamiento sobre las propiedades de los programas funcionales. Los capítulos desde el Prefacio hasta IndPrinciples cubren ambos, y yo diría que la programación y el razonamiento están entrelazados allí.Resulta que una excelente fuente de técnicas de prueba y ejemplos para probar cosas sobre lenguajes funcionales puros son los asistentes de pruebas que generalmente incluyen como parte de su lenguaje de especificación un lenguaje funcional puro sobre el cual es posible razonar de manera equitativa.
Es posible que desee consultar un libro como Programación certificada con tipos dependientes para una introducción en profundidad a este tipo de razonamiento en un asistente de prueba específico, a saber, Coq.
fuente
Sugiero usar la lógica del programa. Manejan mucho mejor los efectos que los sistemas de mecanografía.
Existen numerosas lógicas de programas para lenguajes funcionales. Esto se vuelve interesante con los efectos. Consulte, por ejemplo, Razonamiento lógico para funciones de orden superior con estado local .
El trabajo de Arthur Charguéraud integra el enfoque de la lógica del programa con asistentes de prueba; consulte, por ejemplo, esta página de resumen .
fuente