La lógica de predicados permite hablar de objetos, propiedades, relaciones y cantidades. Extiende la lógica proposicional para expresar afirmaciones más precisas.
La lógica proposicional trata proposiciones completas como unidades indivisibles. Por ejemplo, puede representar "Ana es estudiante" como una proposición p.
La lógica de predicados va más allá: permite analizar la estructura interna de esas afirmaciones, identificando objetos, propiedades y relaciones.
La lógica proposicional puede representar afirmaciones completas, pero no expresa con detalle quién tiene una propiedad o cuántos elementos cumplen una condición.
La lógica de predicados permite representar:
Un predicado expresa una propiedad o relación que puede aplicarse a uno o más objetos.
Esta expresión puede leerse como "Ana es estudiante". El predicado es Estudiante y el objeto es Ana.
Un predicado puede usar variables para representar objetos no especificados.
Esta expresión se lee como "x es estudiante". Todavía no es una proposición completa hasta que sepamos qué valor tiene x o agreguemos un cuantificador.
| Lenguaje natural | Forma con predicados | Tipo |
|---|---|---|
| Ana es usuaria activa | Activa(Ana) | Propiedad |
| El producto tiene stock | TieneStock(producto) | Propiedad |
| Ana compró el producto | Compro(Ana, producto) | Relación |
| Un pedido pertenece a un cliente | Pertenece(pedido, cliente) | Relación |
Los cuantificadores permiten expresar cuántos objetos cumplen una propiedad.
| Cuantificador | Símbolo | Lectura |
|---|---|---|
| Universal | ∀ | Para todo |
| Existencial | ∃ | Existe al menos uno |
La frase:
Puede representarse de forma aproximada como:
Se lee: para todo x, si x es administrador, entonces x puede editar.
La frase:
Puede representarse como:
Se lee: existe al menos un x tal que x es producto y x está sin stock.
En programación, muchas estructuras trabajan con predicados de forma práctica. Una función que devuelve verdadero o falso sobre un objeto puede verse como un predicado.
function estaActivo(usuario) {
return usuario.activo;
}
La función estaActivo expresa una propiedad de un usuario.
Los métodos de arreglos también reflejan ideas de cuantificación.
const usuarios = [
{ nombre: "Ana", activo: true },
{ nombre: "Luis", activo: true }
];
const todosActivos = usuarios.every(usuario => usuario.activo);
const existeActivo = usuarios.some(usuario => usuario.activo);
every se relaciona con "para todo". some se relaciona con "existe al menos uno".
Las consultas a bases de datos también usan condiciones parecidas a predicados.
SELECT *
FROM usuarios
WHERE activo = true;
La condición activo = true funciona como un predicado aplicado a cada registro.
La lógica de predicados permite expresar reglas más ricas que la lógica proposicional.
Estas frases son frecuentes en programación, bases de datos y sistemas expertos.
La lógica de predicados amplía la lógica proposicional al permitir hablar de objetos, propiedades, relaciones y cantidades. Es una herramienta fundamental para expresar reglas más cercanas a los problemas reales.
En el próximo tema estudiaremos predicados y variables con más detalle.