LMF2019: Razonamiento sobre programas con Isabelle/HOL (2º parte)

En la clase de hoy del curso de Lógica matemática y fundamentos se ha concluido el estudio, iniciado en la clase anterior, de cómo se pueden demostrar manualmente propiedades de programas Haskell y cómo traducir dichas demostraciones a Isabelle/HOL.

Para ello, se han usado las transparencias del tema 8 del curso de Informática (de 1º del Grado en Matemática). Como lectura complementaria se recomienda el capítulo 13 del libro de G. Hutton Programming in Haskell.

De cada propiedad se han presentados distintas demostracciones:

  • automática,
  • aplicativa estructurada (usando simp)
  • aplicativa detallada (usando simp only)
  • declarativa estructurada (usando simp)
  • declarativa detallada (usando simp only)

La clase se ha dado mediante videoconferencia y los vídeos correspondientes son:

  • Primera parte:

  • Segunda parte:

  • Tercera parte:

Las transparencia utilizadas son las del tema a partir de la página 29.

La teoría con los ejemplos presentados en la clase es la siguiente:
Read More “LMF2019: Razonamiento sobre programas con Isabelle/HOL (2º parte)”

I1M2019: El TAD de los polinomios en Haskell

En la clase de hoy de Informática de 1º del Grado en Matemáticas hemos estudiado el tipo abstracto de los polinomios y su implementación en Haskell.

Comenzamos la clase analizando las posibles representaciones de los polinomios y, como consecuencia, establecer la signatura y las propiedades del TAD de los polinomios.

A continuación, estudiamos tres posibles representaciones del TAD de los polinomios mediante tipos algebraicos, mediantes listas dispersas y mediante listas densas y sus implementaciones en Haskell

La clase se ha dado mediante videoconferencia y los correspondientes vídeos son

Los apuntes correspondientes a la clase son

Una versión interactiva de los apuntes en IHaskell se encuentra aquí.

I1M2019: El TAD de los montículos en Haskell

En la segunda parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos estudiado el tipo abstracto de datos de los montículos en Haskell.

En primer lugar, se han introduccido los montículos usando el artículo Functional heap – Leftist tree.

En segundo lugar, se ha seguido el mismo patrón que en los anteriores tipos de datos para estudiar el TAD de los montículos:

  • elección de las operaciones básicas,
  • especificación de sus propiedades,
  • implementación en Haskel,
  • análisis de la complejidad de las definiciones de las operaciones básicas y
  • verificación con QuickCheck de sus propiedades características.

En tercer lugar, se ha usado los montículos para implementar el TAD de las colas de prioridad.

Finalmente, se ha comentado las librerías de Haskell para montículos: Data.Heap.Leftist y Data.Heap. La primera se corresponde totalmente con la implementación presentada en clase y la segunda es una generalización ampliada.

La clase se ha dado mediante videoconferencia y el correspondiente vídeo es

Los apuntes correspondientes a la clase son

Una versión interactiva de los apuntes en IHaskell se encuentra aquí.

I1M2019: El TAD de los árboles binarios de búsqueda en Haskell

En la primera parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos estudiado el tipo abstracto de datos de los árboles binarios de búsqueda.

Un árbol binario de búsqueda (ABB) (binary search tree) en inglés) es un árbol binario tal que el valor de cada nodo es mayor que los valores de su subárbol izquierdo y es menor que los valores de su subárbol derecho y, además, ambos subárboles son árboles binarios de búsqueda. Por ejemplo, al almacenar los valores de [2,3,4,5,6,8,9] en un ABB se puede obtener los siguientes ABB:

El objetivo principal de los ABB es reducir el tiempo de acceso a los valores.

El contenido de la clase ha sido el siguiente:

  • la signatura del TAD de los árboles binarios de búsqueda;
  • las propiedades del TAD de los árboles binarios de búsqueda;
  • la implementación, en Haskell, de los árboles binarios de búsqueda mediante tipos de datos algebraicos y
  • la comprobación con QuickCheck de sus propiedades.

La clase se ha dado mediante videoconferencia y el correspondiente vídeo es

Los apuntes correspondientes a la clase son

Una versión interactiva de los apuntes en IHaskell se encuentra aquí.