El problema de Josefo en Haskell

El problema de Josefo hace referencia a Flavio Josefo, un historiador judío que vivió en el siglo I. Según lo que cuenta Josefo, él y cuarenta soldados camaradas fueron capturados por los romanos. Antes que rendirse, decidieron acabar ellos mismos con sus vidas. Para hacerlo, se dispusieron en un círculo y acordaron que irían contando de tres en tres, de forma que cada tercer soldado sería ejecutado por la persona de su izquierda. El último hombre que quedara con vida tendría que suicidarse. Según cuenta la leyenda, Josefo calculó rápidamente cuál sería la posición del último hombre en morir para colocarse allí, y una vez hubieron muerto sus compatriotas, se entregó a los romanos.

El enunciado del problema de Josefo de orden (n,m) es el siguiente: Se tienen n personas entorno a un círculo, ordenadas y numeradas desde la primera a la n-ésima. Empezando por la persona número 1, se saltan m-1 personas y se mata a la m-ésima. A continuación se saltan otras m-1 personas y se ejecuta a la siguiente. El proceso continúa hasta que sólo quede una. El objetivo es, dados n y m, encontrar el lugar inicial en el círculo para sobrevivir.

A continuación muestro una relación de ejercicios (elaborada para la asignatura de Informática de 1º del Grado en Matemáticas y para la siguiente versión del libro Piensa en Haskell) en la que se presentan distintas soluciones y se compara su eficiencia.

Read More “El problema de Josefo en Haskell”

Formal kinematic analysis of the two-link planar manipulator

Se ha publicado un artículo de razonamiento formalizado en HOL Light sobre cinemática titulado Formal kinematic analysis of the two-link planar manipulator.

Sus autores son Binyameen Farooq, Osman Hasan, Sohail Iqbal (de la Universidad de Islamabad, Pakistán).

Su resumen es

Kinematic analysis is used for trajectory planning of robotic manipulators and is an integral step of their design. The main idea behind kinematic analysis is to study the motion of the robot based on the geometrical relationship of the robotic links and their joints. Given the continuous nature of kinematic analysis, traditional computer-based verification methods, such as simulation, numerical methods or model checking, fail to provide reliable results. This fact makes robotic designs error prone, which may lead to disastrous consequences given the safety-critical nature of robotic applications. Leveraging upon the high expressiveness of higher-order logic, we propose to use higher-order-logic theorem proving for conducting formal kinematic analysis. As a first step towards this direction, we utilize the geometry theory of HOL-Light to develop formal reasoning support for the kinematic analysis of a two-link planar manipulator, which forms the basis for many mechanical structures in robotics. To illustrate the usefulness of our foundational formalization, we present the formal kinematic analysis of a biped walking robot.

El trabajo se ha presentado en el ICFEM 2013 (15th International Conference on Formal Engineering Methods). Las trasparencias de la presentación se encuentran aquí.

El código de las correspondientes teorías en HOL LIght se encuentra aquí.

Exámenes de programación funcional con Haskell (2)

He publicado una actualización del libro Exámenes de programación funcional con Haskell (2009-2014) en el que recopilo los exámenes de la asignatura de Informática (de primero del Grado en Matemáticas) desde el curso 2009-10 hasta el actual. El libro contiene 81 exámenes y 539 ejercicios.

Este libro es el complemento de los anteriores:

I1M2013: Ejercicios sobre funciones de orden superior y plegados (2)

En la clase de hoy del curso Informática (de 1º de Grado en Matemáticas) se han comentado las soluciones de los ejercicios 6 a 11 de la 12ª relación. En los ejercicios se piden definiciones de funciones de orden superior y con plegados.

Los ejercicios y soluciones se muestran a continuación
Read More “I1M2013: Ejercicios sobre funciones de orden superior y plegados (2)”

RA2013: Razonamiento por inducción estructural, general y cruzada con Isabelle/HOL

En la clase de hoy del curso de Razonamiento automático se ha estudiado cómo definir y demostrar propiedades de tipos de datos recursivos, funciones recursivas que no son primitivas recursivas y tipos de datos con recursión cruzada.

La correspondiente teoría Isabelle/HOL se muestra a continuación
Read More “RA2013: Razonamiento por inducción estructural, general y cruzada con Isabelle/HOL”