3. Programación Lógica
Instituto Tecnológico de Tehuacán
Ingeniería en Sistemas Computacionales | Programación Lógica y Funcional
Unidad 2: Fundamental de Programación Lógica, Unificación y Resolución SLD
La Programación Lógica permite a los ingenieros resolver problemas declarativos donde se definen las relaciones entre entidades y las condiciones necesarias, dejando que el **motor de inferencia** deduzca automáticamente la solución. Es indispensable para:
Inteligencia Artificial
Sistemas expertos, procesamiento de lenguaje natural (PLN) y bases de conocimiento.
Análisis Gramatical
Parsing automático de sintaxis en compiladores e intérpretes mediante gramáticas de cláusulas definidas (DCG).
Consultas Complejas
Búsqueda en grafos, deducción de dependencias complejas y verificación de teoremas.
A diferencia de la lógica proposicional, la Lógica de Primer Orden expresa la estructura interna de las proposiciones utilizando objetos, propiedades y relaciones.
- Términos: Constantes (ej.
juan), Variables (ej.X) y Funciones (ej.padre_de(X)). - Predicados: Expresan relaciones o propiedades que devuelven un valor verdadero/falso (ej.
hermano(X, Y)). - Cuantificadores: Universal (
∀– «Para todo») y Existencial (∃– «Existe al menos uno»). - Conectivos Lógicos: Conjunciones (
∧), Disyunciones (∨), Implicaciones (→) y Negaciones (¬).
Son los dos pilares algorítmicos que permiten computar respuestas a partir de premisas lógicas.
Unificación
Proceso de encontrar un Sustituto Unificador MÁS General (MGU) que haga idénticas a dos expresiones atómicas.
Término 1:
padre(X, maria)Término 2:
padre(juan, Y)MGU (Sustitución):
{ X = juan, Y = maria }Resultado Unificado:
padre(juan, maria)
Principio de Resolución (Robinson)
Regla de inferencia sintáctica que demuestra por contradicción (refutación). Dada la presencia de P ∨ Q y ¬P ∨ R, permite deducir la cláusula resolvente: Q ∨ R.
Una Cláusula de Horn es una fórmula lógica formada por una disyunción de literales con **a lo sumo un literal positivo**.
Hecho (Sin antecedente)
A (1 literal positivo, 0 negativos). Afirmación incondicional.
Regla (Definida)
A ← B1 ∧ B2 ∧ ... ∧ Bn (1 literal positivo: A, el resto negativos).
Consulta / Objetivo (Goal)
← B1 ∧ B2 (0 literales positivos, todos negativos). Busca ser refutada.
SLD (Selective Linear Definite clause resolution) es la regla de inferencia utilizada por los lenguajes de programación lógica como Prolog para ejecutar programas compuestas por cláusulas de Horn definitivas.
- S (Selective): Selecciona un literal objetivo de la meta actual.
- L (Linear): Sigue un camino resolviendo consecutivamente desde la última meta generada.
- D (Definite): Opera exclusivamente sobre Cláusulas Definidas (Horn).
Esquema Visual de Ejecución SLD:
?- abuelo(juan, Z).↓ (Aplica regla: abuelo(X,Y) :- padre(X,W), padre(W,Y). [X=juan, Y=Z])
Sub-metas:
?- padre(juan, W), padre(W, Z).↓ (Unifica con Hecho: padre(juan, pedro). [W=pedro])
Sub-meta 2:
?- padre(pedro, Z).↓ (Unifica con Hecho: padre(pedro, maria). [Z=maria])
Resultado:
ÉXITO Cláusula Vacía (□) -> Z = maria
En el lenguaje **Prolog**, la base de conocimiento se estructura directamente usando la sintaxis de las Cláusulas de Horn:
% Base de Conocimiento (Hechos)
padre(juan, pedro).
padre(pedro, maria).
padre(pedro, luis).
% Regla (Cláusula Definida de Horn)
hermano(X, Y) :- padre(P, X), padre(P, Y), X \== Y.
abuelo(X, Y) :- padre(X, Z), padre(Z, Y).
% Consulta (Goal)
% ?- abuelo(juan, Quien).
% Respuesta: Quien = maria ; Quien = luis.
f(X, g(Y)) y f(a, g(b)).
MGU:
{ X = a, Y = b }Ambas expresiones quedan unificadas como:
f(a, g(b)).
(P ∧ Q) → R a una sintaxis tipo Prolog.
En lógica estándar:
R ∨ ¬P ∨ ¬Q (1 solo literal positivo: R).En sintaxis de Horn / Prolog:
R :- P, Q.
ancestro(X, Y) partiendo del predicado padre(X, Y).
% Caso Base: Un padre es un ancestro
ancestro(X, Y) :- padre(X, Y).
% Caso Recursivo: X es ancestro de Y si X es padre de Z y Z es ancestro de Y
ancestro(X, Y) :- padre(X, Z), ancestro(Z, Y).