Sistemas de ternas de Steiner en Haskell

Un sistema de Steiner de ternas de orden n, S(n), es un conjunto de ternas tal que los elementos de cada terna son números del 1 al n y cualquier par de elementos \{i,j\} (con 1 \leq i < j \leq n[/latex]) pertenece exactamente a una terna. Por ejemplo, [latex]S(3) = \{\{1,2,3\}\}[/latex] [latex]S(7) = \{\{1,2,4\}, \{2,3,5\}, \{3,4,6\}, \{4,5,7\}, \{5,6,1\}, \{6,7,2\}, \{7,1,3\}\}[/latex] Se verifica que [latex]S(n)[/latex] es no vacío si, y sólo si, si [latex]n[/latex] es congruente con 1 o con 3 módulo 6. En ese caso, el número de elementos de [latex]S(n)[/latex] es [latex]\frac{n(n-1)}{6}[/latex]. En la Wikipedia se encuentra más información sobre los sistemas de Steiner.

El objetivo de esta relación es definir en Haskell una función para calcular los sistemas de ternas de Steiner de orden n.
Read More "Sistemas de ternas de Steiner en Haskell"

I1M2011: Operaciones con el TAD de los polinomios en Haskell (3)

En la clase de hoy de Informática de 1º del Grado en Matemáticas hemos continuado estudiando la implementación en Haskell de operaciones con los polinomios utilizando las implementaciones del TAD de los polinomios estudiadas en las clases anteriores.

En los ejercicios se usan las siguientes librerías:

  • PolRepTDA: Implementación de los polinomios mediante tipos de datos algebraicos.
  • PolRepDispersa: Implementación de los polinomios mediante listas dispersas.
  • PolRepDensa: Implementación de los polinomios mediante listas densas.
  • PolOperaciones: Operaciones con el TAD de los polinomios.

Los ejercicios, y sus soluciones, se muestran a continuación.
Read More “I1M2011: Operaciones con el TAD de los polinomios en Haskell (3)”

LMF2012: Semántica de la lógica de primer orden (1)

En la clase de hoy del curso Lógica matemática y fundamentos se ha presentado la semántica de la lógica de primer orden.

Se ha comenzado planteando cuestiones sobre qué significa que una fórmula sea verdadera para resaltar su dependencia del universo, la interpretación de los símbolos no lógico y de las asignaciones a las variables libres.

Se han definido las estructuras de un lenguaje, las asignaciones a las variables y las interpretaciones de un lenguaje.

Se ha definido el valor de un término o de una fórmula en una interpretación. Con ello, repondemos a las preguntas iniciales.

Finalmente, se ha definido las realizaciones y los modelos de una fórmula lo que nos permite clasificar las fórmulas en insatisfacibles, satisfacibles y válidas.

Las transparencias de esta clase son las páginas 24 a 39 del tema 6.

LMF2012: Sintaxis de la lógica de primer orden

En la clase de hoy del curso Lógica matemática y fundamentos se ha presentado la sintaxis de la lógica de primer orden.

A partir de los ejemplos de representación del conocimiento de la clase anterior, se han definido los símbolos lógicos (variables, conectivas, cuantificadores e igualdad) y los símbolos no lógicos (constantes, predicados y funciones) que forman el alfabeto del lenguaje de la lógica de primer orden.

A partir del alfabeto, se definen los términos, las fórmulas atómicas y las fórmulas del lenguaje.

Como medio del reconocimiento de fórmulas, se introducen los árboles de análisis. Con ello, repondemos a la primera de las preguntas iniciales.

En el estudio sintáctico, definimos el conjunto de las subfórmulas, el conjunto de las variables de un término, las ocurrencias libres y ligadas, el conjunto de las variables libres y ligadas y las fómulas cerradas y abiertas. Algunas de las definiciones anteriores se realizan por recursión sobre fórmulas o sobre términos.

Las transparencias de esta clase son las páginas 11 a 23 del tema 6.

I1M2011: Operaciones con el TAD de los polinomios en Haskell (2)

En la clase de hoy de Informática de 1º del Grado en Matemáticas hemos continuado estudiando la implementación en Haskell de operaciones con los polinomios utilizando las implementaciones del TAD de los polinomios estudiadas en las clases anteriores.

En los ejercicios se usan las siguientes libretrías:

  • PolRepTDA: Implementación de los polinomios mediante tipos de datos algebraicos.
  • PolRepDispersa: Implementación de los polinomios mediante listas dispersas.
  • PolRepDensa: Implementación de los polinomios mediante listas densas.
  • PolOperaciones: Operaciones con el TAD de los polinomios.

Los ejercicios, y sus soluciones, se muestran a continuación.
Read More “I1M2011: Operaciones con el TAD de los polinomios en Haskell (2)”