Lógica

Recursos sobre cálculo lambda

Mario Román

1936 - Alonzo Church also invents every language that will ever be but does it better. His lambda calculus is ignored because it is insufficiently C-like. This criticism occurs in spite of the fact that C has not yet been invented.

A Brief, Incomplete, and Mostly Wrong History of programming languages

Alonzo Church desarrolló el cálculo lambda en los años 30 como un sistema formal que capturaba una noción abstracta de función. Este sistema puede interpretarse a su vez como un modelo de computación equivalente a las máquinas de Turing. Refinamientos posteriores añadieron tipos al lenguaje, que serían la base de una correspondencia entre modelos de computación y sistemas lógicos.

Apuntes generales

Pueden encontrarse presentaciones generales sobre el cálculo lambda en:

Seguir leyendo...

Programación

Emacs for lazy people

David Charte

Emacs is one of the most powerful, extensible editors out there. However, learning to use it is not an easy task, and I’m just really lazy. The following are some packages that I hope will make your life way easier. And if you already use Emacs, I encourage you to try them and see if they help you get a more comfortable development environment.

To add any of these packages to your Emacs configuration, find your initialization file (usually ~/.emacs or ~/.emacs.d/init.el) and add the snippets there. You will also need to install and enable use-package beforehand (why?).

Seguir leyendo...

Lógica

Introducción a ZFC

Pablo Baeyens

A principios del siglo XX las matemáticas sufrieron una crisis fundacional: los principios que se consideraban básicos para la deducción de las teorías matemáticas daban lugar a paradojas y los matemáticos de la época se embarcaron en la creación de un sistema axiomático que pudiera formalizar todos los teoremas de la época sin dar lugar a estas paradojas.

Una de las posibles soluciones son las teorías axiomáticas de conjuntos, de entre las cuales la más utilizada actualmente es ZFC (la teoría de Zermelo-Fraenkel junto con el axioma de elección)1.

En este artículo exponemos los axiomas de esta teoría y la comparamos con otras teorías de conjuntos (y de clases). Se incluyen también algunos ejercicios.

Seguir leyendo...

Álgebra

Apuntes de Álgebra II

Rodrigo Raya

En los repositorios de LibreIM se han añadido unos apuntes que se corresponden con el temario de la asignatura Álgebra II.

Las aportaciones para mejorar estos apuntes son bienvenidas. En particular, en el archivo pdf del repositorio se incluyen los teoremas de Sylow, que se perdieron en la versión del código latex. También son bienvenidas contribuciones que completen las demostraciones de los teoremas enunciados o amplíen el material existente.

Enlace al repositorio

Programación

Mónadas

Mario Román

A monad is just a monoid in the category of endofunctors, what’s the problem?

Philip Walder (apócrifa) en A Brief, Incomplete, and Mostly Wrong History of programming languages

Prerrequisitos

Este artículo requiere un conocimiento previo de Haskell, o al menos, de otro lenguaje de programación funcional. Puedes consultar nuestra introducción a Haskell con recursos para iniciarte en el lenguaje.

Por otro lado, para la segunda parte del artículo es recomendable conocimiento previo sobre teoría de categorías. Aun así, no es necesaria para leer la primera parte del artículo, donde hablamos de mónadas sin hacer ninguna referencia explícita a la teoría de categorías. Si quieres leer sobre ese tema, puedes consultar nuestros apuntes de introducción a teoría de categorías.

Motivación para las mónadas

Mónadas en Haskell

Imaginemos que necesitamos controlar cuando una función interna devuelve un error, o cuando usa un estado que debe ser pasado al resto de funciones. Cuando trabajamos con programación funcional pura, debemos devolver explícitamente el error (señalar cómo va a tratarlo cada función) o pasar el estado como argumento a cada una de las funciones; así que una solución sería modificar cada una de las funciones que usamos para que tenga en cuenta ese estado o ese caso de error, pero esto añadiría mucha complejidad innecesaria a nuestro código. La estructura de mónada simplifica esta escritura.

Seguir leyendo...