Reseña: “Proof pearl: Braun trees”

Se ha publicado un artículo de razonamiento formalizado en Isabelle/HOL sobre algorítmica titulado Proof pearl: Braun trees.

Sus autores son

Su resumen es

Braun trees are functional data structures for implementing extensible arrays and priority queues (and sorting functions based on the latter) efficiently. Some well-known functions on Braun trees have not yet been verified, including especially Okasaki’s linear time conversion from lists to Braun trees. We supply the missing proofs and verify all of these algorithms in Isabelle, including non-obvious time complexity claims. In particular we provide the first linear-time conversion from Braun trees to lists. We also state and verify a new characterization of Braun trees as the trees t whose index set is the interval {1,…, size of t}.

El trabajo se presentará en el POPL 2020 (47th ACM SIGPLAN Symposium on Principles of Programming Languages) el próximo 20 de enero.

El código de las correspondientes teorías se encuentra en AFP.

Resumen de lecturas compartidas del 1 al 11 de enero de 2020

Esta entrada es una recopilación de lecturas compartidas, del 1 al 11 de enero, en Twitter fundamentalmente sobre programación funcional y demostración asistida por ordenador.

Al final de cada artículo se encuentran etiquetas relativas a los sistemas que usa o a su contenido.

Una recopilación de todas las lecturas compartidas se encuentra en GitHub.
Read More “Resumen de lecturas compartidas del 1 al 11 de enero de 2020”

I1M2019: El juego de la vida en Haskell

En la clase de hoy de Informática de 1º del Grado en Matemáticas se ha estudiado el juego de la vida como caso de estudio de programación interactiva.

Los apuntes correspondientes son

En la implementación anterior, las funciones de interacción con la terminal son dependientes del sistema operativo. A continuación se muestra otra que no lo es basada en el uso de la librería ansi-terminal.

Read More “I1M2019: El juego de la vida en Haskell”

RA2019: Sintaxis y semántica de la lógica de primer orden

En la segunda parte de la clase de hoy del curso Razonamiento automático se ha presentado la sintaxis y la semántica de la lógica de primer orden como respuestas a las siguientes preguntas:

  • ¿cómo se puede representar el conocimiento con la lógica de primer orden?,
  • ¿qué es una fórmula de primer orden?,
  • ¿qué significa que una fórmula verdadera? y
  • ¿qué significa que un argumento sea correcto?

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.

A partir de los ejemplos de representación del conocimiento, 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, respondemos a la segunda de las preguntas iniciales.

En segundo lugar hemos estudiado la semántica, comenzando con distintas 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, respondemos a la tercera de las preguntas iniciales.

Las transparencias de esta clase son las del tema 8a.

Como práctica, se ha propuesto la 8ª relación de ejercicios.