¿Cómo podría razonar matemáticamente sobre la corrección y solidez de un programa en programación funcional?

Esa es una pregunta bastante difícil de responder. Depende íntimamente de lo que quieras probar.

Sin embargo, se simplifica por la pureza de un lenguaje (como lo es Haskell) en el sentido de que puedes razonar por igualdad. Entonces, si tiene e1 y e2 y puede demostrar que e1 es igual a e1 ′ y e2 es igual a e2 ′, entonces también e1 e2 es igual a e1 ′ e2 ′, la idea de que puede reemplazar iguales por iguales. Dado que los cálculos no tienen efectos secundarios en un lenguaje puro, obtiene dicha garantía.

En mi curso de programación funcional, enseño a los estudiantes cómo probar las propiedades de las funciones que funcionan en listas, como map (f. G) xs = map f (map g xs), lo que significa que puede fusionar mapas en un solo mapa, y Dada nuestra intuición de lo que hace el mapa, esto es algo que espera mantener. De esta forma, puede probar un conjunto de propiedades para una función, y puede probar que su función tiene todas las propiedades que necesita para ser la función que deseaba (por ejemplo, para una implementación de clasificación particular que podría probar que la lista de entrada y salida contiene los mismos valores (exactamente el mismo número de veces), y que la lista de salida aumenta de acuerdo con el operador de comparación que utiliza, lo que implica que su función es una función de clasificación). Y varios otros tipos de propiedades. Estos son típicamente probados por inducción. Además, puede usar técnicas similares habituales, o simplemente razonamiento igual para probar las leyes de mónada y otras propiedades relativamente simples. Las estructuras más complicadas exigirán formas más complicadas de razonamiento.

En cuanto a probar que los programas completos son “correctos”, me pregunto si alguien realmente hace eso. Tal vez, entonces, debería pasar a idiomas como Coq y Agda, idiomas dependientes.

Jur

More Interesting

¿Cuál es la mejor manera de aprender geometría algebraica si uno no está interesado en usarlo para propósitos teóricos numéricos, sino más bien para aplicaciones en física teórica e informática teórica?

¿Por qué los lenguajes de programación como C no definen constantes como Pi o e?

¿Hay algún fractal completo de Turing?

¿Qué es un diagrama de máquina de Turing y cómo diseño uno?

Muchos resultados matemáticos se prueban con computadoras. Si un estudiante escribió un código como prueba en un examen sobre una prueba tradicional, ¿debería ser aceptado?

¿Qué es el helecho Barnsley?

Cómo calcular la función de rango en Excel

Cómo desplazar cíclicamente a la derecha un número entero en C ++

¿Qué entero decimal está representado por 0xE4 en una notación de complemento a dos de 8 bits?

¿Qué quiere decir uno con "Cada base es base 10"?

¿Qué se entiende por una sólida formación en matemáticas?

Tienes 25 caballos y quieres elegir los 3 caballos más rápidos de esos 25. En cada carrera, solo 5 caballos pueden correr al mismo tiempo porque solo hay 5 pistas. ¿Cuál es el número mínimo de carreras requeridas para encontrar los 3 caballos más rápidos sin usar un cronómetro?

¿Cuál es el papel de las matemáticas en las computadoras?

¿Cuál es el método para encontrar el valor aproximado de la potencia de dos (2 ^ x) sin usar una calculadora?

¿Cómo funciona la pila de recursión en la generación de una cadena binaria de n bits?