Curso relámpago de lógica de predicados para programadores

Fuentes: A Crash Course in Predicate Logic

Este artículo es una versión en abierto del segundo capítulo del libro "Logic for Programmers" y ofrece una introducción práctica a la lógica formal dirigida a programadores. La lógica de predicados, explica el texto, es una herramienta potente y a la vez sencilla: un predicado es, a grandes rasgos, una función que devuelve un valor booleano, como Positive(x) o IsSum(x, y, z), pero a diferencia de las funciones de un programa, define qué es verdadero o falso sin especificar cómo calcularlo. Esa abstracción permite expresar condiciones que hoy no sabemos computar, como CanRunProgram(c) o RainyDayInCa(date). El texto distingue entre predicados concretos, con implementación clara, y predicados abstractos, escritos entre comillas inversas, y propone la convención de usar TitleCase para predicados y snake_case para funciones. Como ejemplo práctico, analiza un requisito ambiguo en inglés —"suficiente RAM y una CPU rápida o una buena GPU"— y muestra cómo formalizarlo evidencia el problema de precedencia entre && y ||, resuelto mediante una tabla de verdad que revela dos interpretaciones con resultados distintos. A continuación introduce los predicados condicionales: si un programa tiene versión nativa y versión web, la capacidad de ejecución depende del tipo de programa, lo que lleva a redefinir CanRunProgram(c, p) como !Native(p) || ((RAM(c) && CPU(c)) || GPU(c)). El cierre anticipa el uso de tablas de verdad como herramienta de análisis sistemático de casos. Incluye ejercicios resueltos, como la demostración de la ley de De Morgan (!P && !Q equivale a !(P || Q)), y enlaza una herramienta gratuita de generación de tablas de verdad.