Enumeraciones de los números racionales en Haskell

He publicado en LógicaMente una relación de ejercicios en Haskell sobre enumeraciones de los números racionales, cuyo contenido es el siguiente.


El objetivo de esta relación es construir dos enumeraciones de los números racionales. Concretamente,

  • una enumeración basada en las representaciones hiperbinarias y
  • una enumeración basada en los los árboles de Calkin-Wilf.

También se incluye la comprobación de la igualdad de las dos sucesiones y una forma alternativa de calcular el número de representaciones hiperbinarias mediante la función fucs.

Esta relación se basa en los siguientes artículos:

La relación de ejercicios es
Read More “Enumeraciones de los números racionales en Haskell”

Interactive Proof: Introduction to Isabelle/HOL

Tobias Nipkow ha publicado un nuevo tutorial de Isabell/HOL: Interactive Proof: Introduction to Isabelle/HOL, que presentará a principio de agosto en la Summer School Marktoberdorf 2011.

El contenido del tutorial es el siguiente:

  • Elementos básicos de Isabelle/HOL: los tipos, términos, fórmulas y teorías.
  • Isabelle/HOL como lenguaje funcional verificable. En esta sección, presenta los tipos básicos (bool, nat y list), cómo pueden definirse funciones y tipos y cómo pueden demostrarse propiedades por inducción y simplificación.
  • Lógica y automatización de las demostraciones. En esta sección, presenta cómo se trabaja con fórmulas y conjuntos, cómo puede automatizarse las demostraciones de sus propiedades y cómo pueden analizarse las demostraciones en pasos elementales.
  • Demostraciones estructuradas con Isar. En esta sección, presenta ejemplos de demostraciones en Isar, patrones de demostraciones, técnicas para mejorar demostraciones y demostraciones por inducción y casos en Isar.

La presentación del tutorial está basada en ejemplos: se concentra en ejemplos que presenta los casos típicos sin explicar el caso general si se puede inferir de los ejemplos.

Las teorías que sirven de ejemplo del tutorial son las siguientes: Overview, Nat, List, Tree, Simp, Induct, Auto_Proof_Demo, Single_Step_Demo, Inductive_Demo, Isar_Demo, Isar_Induct_Demo.

El resto del material utilizado se encuentra en MOD2011.

Descomposiciones en sumas de cuadrados en Haskell

Esta relación de ejercicios, para la asignatura de Informática de 1º del Grado en Matemáticas, se basa en el problema 19 de los desafíos matemáticos de El País titulado Cuadrados que suman grandes cifras cuyo enunciado es el siguiente

Los números cuadrados (o cuadrados perfectos) son los cuadrados de los números naturales, es decir: 1 (1^2), 4 (2^2), 9 (3^2), 16 (4^2), 25 (5^2), etcétera. En el problema de esta semana trataremos de descubrir de cuántas maneras distintas se puede escribir un número dado como suma de cuatro cuadrados. Por ejemplo, el número 39 se puede escribir de dos formas: 39=1+1+1+36 y 39=1+4+9+25. Observemos que se pueden repetir sumandos y que no contaremos como maneras distintas de escritura las que se obtienen al cambiar el orden de los sumandos.

Las preguntas concretas son: ¿De cuántas formas distintas se puede escribir 2^2012 como suma de cuatro cuadrados? ¿Y de cuántas formas se puede escribir 2^2011?

La relación de ejercicios es la siguiente
Read More “Descomposiciones en sumas de cuadrados en Haskell”

Expresiones aritméticas mediante tipos abstracto de datos y polinomios en Haskell

El objetivo de esta relación de ejercicios es estudiar dos representaciones de las expresiones aritméticas construidas con una variable, los números enteros y las operaciones suma y producto.

Una representación es mediante tipo algebraico y la otra es mediante la lista de los coeficientes del polinomio correspondiente.

Se verá como puede transformarse una representación en la otra y se comprobará con QuickCheck la equivalencia de las representaciones.

La relación está basada en el ejercicio 3.3 (página 15) del artículo Interactive Proof Introduction to Isabelle/HOL de Tobias Nipkow.

El contenido de la relación de ejercicios se encuentra en LógicaMente y se muestra a continuación:
Read More “Expresiones aritméticas mediante tipos abstracto de datos y polinomios en Haskell”

Reseña – Automated theorem provers: a practical tool for the working mathematician?

El artículo Automated theorem provers: a practical tool for the working mathematician? de Alan Bundy se ha publicado el 16 de julio en Annals of Mathematics and Artificial Intelligence.

En el artículo se analiza la utilización de los sistemas de demostración asistida por ordenador (SDAO) en la investigación matemática. Se parte del hecho de que los SDAO se usa por los matemáticos menos que otros sistemas informáticos (como LaTeX o los sistemas de cálculo simbólico). Pero, su interés ha aumentado en la última década, como puede observarse en el número de Diciembre de 2008 de las Notices of the AMS dedicado a las demostraciones formales. El autor conjetura que este interés seguirá creciendo e influirá en la metodología matemática.

Entre las causas de este creciente interés destaca la aparición de teoremas con grandes demostraciones (como el teorema de los cuatros colores, la conjetura de Kepler y la clasificación de los grupos finitos) en cuya demostración se ha usado ordenadores. Se ha críticado el uso de los ordenadores en la demostración, por la posibilidad de que los programas tuviesen errores. Para asegurar su corrección se ha formalizado (en el caso del teorema de los cuatro colores) o se está formalizando (en los otros dos) su demostración mediante SDAO.

Otros razones para el aumento del interés en los SDAO se encuentra en nuevas aplicaciones como síntesis automática de teoremas, automatización de la refactorización de demostraciones, búsqueda de teoremas, automatización de la revisión de artículos y automatización de la corrección de exámenes.

Por otra parte, entre las razones para la resistencia del uso de los SDAO y sus posibles soluciones, apunta las siguientes:

  1. Las demostraciones formalizadas son demasiadas detalladas y largas. Se puede mejorar presentando las demostraciones jarárquicamente de forma que se pueda elegir el nivel de detalle y los pasos esenciales de las pruebas.
  2. Los demostradores no son lo sufientemente potentes. La potencia de los demostradores está creciendo así como el volumen de matemáticas formalizada.
  3. Los demostradores son difíciles de usar. Los desarrolladores de los sistemas están mejorando los interfaces. Una mejora significativa es el uso de demostraciones declarativas (como en Isar).

Personalmente, pienso que la principal barrera está en disponer de una buena base de conocimiento formalizado utilizable en distintos SDAO y de herramientas de búsqueda semántica en dicha base de conocimiento. Además, entre las posibles aplicaciones de los SDAO creo que también será importante su uso como ayudantes en la docencia como describe Benjamin C. Pierce en Using a Proof Assistant to Teach Programming Language Foundations.