I1M2011: El TAD (tipo abstracto de datos) de las tablas en Haskell

En la clase de hoy de Informática de 1º del Grado en Matemáticas se ha estudiado el TAD (tipo abstracto de datos) de las tablas y 3 implementaciones en Haskell: como funciones, como listas de asociación y como matrices.

Una tabla (array en inglés y tableau en francés) es una colección de elementos (valores) a los que se accede mediante sus índices.

El contenido de la clase ha sido el siguiente:

  • la signatura del TAD de las tablas;
  • las propiedades del TAD de las tablas;
  • las implementaciones, en Haskell, de las tablas mediante funciones, listas de asociación y matrices y
  • la comprobación con QuickCheck de sus propiedades.

Read More “I1M2011: El TAD (tipo abstracto de datos) de las tablas en Haskell”

LMF2012: Formas normales en Haskell

En la clase de hoy del curso de Lógica matemática y fundamentos (de 3º de Grado en Matemáticas) se ha comentado las soluciones de los ejercicios sobre la implementación en Haskell de las formas normales.

Las soluciones de los ejercicios se muestran a continuación. En los ejercicios se usa el módulo SintaxisSemantica desarrollado en la clase del día 13 de marzo.
Read More “LMF2012: Formas normales en Haskell”

Límites de sucesiones y tipos de números en Haskell

En Haskell se dispone de tres tipos para trabajar con los números racionales: dos como números aproximados (Float y Double) y uno como números exactos (Rational). En este ejemplo veremos cómo el uso de números aproximados puede conducir a falsas conjeturas sobre límites de sucesiones que pueden refutarse con el uso de los números exactos. Para ello consideraremos tres definiciones de la sucesión u:

\begin{array}{l}     u_0 = \frac{3}{2} \\ \\     u_1 = \frac{5}{3} \\ \\     u_{n} = 2003 - \frac{6002}{u_{n-1}} + \frac{4000}{u_{n-1} \cdot u_{n-2}},         \mbox{ para } n \geq 2     \end{array}

usando en cada caso uno de los tipos y conjeturando el límite de la sucesión.
Read More “Límites de sucesiones y tipos de números en Haskell”

LMF2012: Representación del conocimiento mediante lógica de primer orden

En la clase de hoy del curso Lógica matemática y fundamentos se ha presentado la lógica de primer orden como sistema de representación del conocimiento.

Ya hemos estudiado el sistema básico de representación del conocimiento (la lógica proposicional) y tres sistemas deductivos (deducción natural, tableros semánticos y resolución). Además, hemos usado Prover9 y Mace4 para resolver problemas que se pueden codificar mediante la lógica proposicional, como el de las 4 reinas. Un inconveniente de las codificaciones es la cantidad y el tamaño de las fórmulas resultantes.

Una forma de simplificar las codificaiones es mediante el uso de la lógica de primer orden. Este sistema permite representar de forma más compacta conocimiento representable en lógica proposicional y también representar conocimiento que no se puede representar en lógica proposicional.

Como ejemplos de representación hemos visto cómo representar conocimiento geográfico, del mundo de los bloques y conocimiento astronómico. En los distintos ejemplos hemos resaltado los tipos de símbolos lógicos utilizados.

Finalmente, como tutor para la representación del conocimiento, se ha presentado el APLI2 (APLIcación de Ayuda Para Lógica Informática).

Las transparencias de esta clase son las páginas 1 a 10 del tema 6.

Como tarea se propone la resolución de los ejercicios de primer orden del APLI2.