Ensayo ia
Curso 2003-2004
Ingeniería Técnica en Informática de Gestión Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga
Programación Declarativa
1
Tema I
Principios de la Programación Lógica
Programación Declarativa
2
Origen de la Programación Lógica
La lógica de predicados (L.P.) sirve para representar conocimiento. La L.P. sirvepara establecer problemas y representar la información necesaria para resolverlos de manera efectiva. La forma clausal de la L.P. Admite un sistema de inferencia consistente y completo con una sola regla: el principio de resolución, fácilmente automatizable. Todas estas ideas se materializan en el lenguaje de programación Prolog (Programación en lógica) diseñado por A. Colmerauer como undemostrador automático de teoremas para cláusulas de Horn.
Programación Declarativa
3
Programa
Los programas se establecen como conjuntos de axiomas (base de conocimiento), expresados mediante cláusulas de Horn, para la definición de predicados entre objetos: ∀X1,...,Xn • (A∨ ¬B1 ∨... ∨ ¬Bk) o ∀X1,...,Xn • (A ⇐ B1 ∧... ∧ Bk) y una cuestión: ∃X1,...,Xn • (B1 ∧... ∧ Bk) que debe verificarse conayuda de los axiomas.
Programación Declarativa 4
Cláusulas de Horn: notación de Kowalski
abuelo(A,N):- padre(A,P),padre(P,N).
cabeza cuello cuerpo
regla
padre(juan,ana). :- abuelo(A,ana).
hecho (sólo cabeza) cuestión (sólo cuerpo)
Programación Declarativa 5
Ejemplo 1 (hechos)
Base de conocimientos de relaciones familiares: % varon(V) % hembra(H) varon(antonio). hembra(ana).varon(luis). hembra(pepa). varon(jose). hembra(lola). varon(andres). hembra(maria). ... ... % procrean(Padre,Madre,Hijo/a) procrean(antonio,ana,jose). procrean(antonio,ana,luis). procrean(antonio,pepa,maria). procrean(andres,lola,antonio).
Programación Declarativa 6
Ejemplo 1 (reglas)
(Uso de variables lógicas para identificar parámetros comunes) % padre(Padre,Hijo) padre(P,H):-procrean(P,M,H). % hijo(Hijo,Progenitor) hijo(H,P):- varon(H), procrean(P,M,H). hijo(H,M):- varon(H), procrean(P,M,H). Defínanse las relaciones: madre(Madre,Hijo) hija(Hija,Progenitor) abuelo(Abuelo,Nieto) hermanos(H1,H2)
Programación Declarativa 7
Ejemplo 1 (cuestiones)
Padre de Antonio: :- padre(P,antonio). Abuelo de Luís: :- abuelo(A,luis). Nietos de Andrés: :- abuelo(andres,N). Hermanos de José: :-hermanos(jose,H). Abuela de Luís: :- padre(P,luis),procrean(H,M,P). :- madre(M,luis),procrean(H1,M1,M).
Programación Declarativa 8
Ejemplo 2 (Contrucción de una b.c.)
Tenemos el siguiente conocimiento directo sobre un grupo de personas que padecen ciertas enfermedades:
Pedro padece gripe y hepatitis, Juan padece hepatitis, María padece gripe y Carlos tiene intoxicación. La fiebre y elcansancio son síntomas de la gripe, el cansancio también es síntoma de la hepatitis y la diarrea es síntoma de intoxicación. La Aspirina suprime la fiebre y el Lomotil suprime la diarrea.”
Expresad este conocimiento mediante predicados, como una serie de hechos.
Programación Declarativa 9
Ejemplo 2 (continuación)
También sabemos que:
Un fármaco alivia una enfermedad si la enfermedad presentaun síntoma que pueda ser suprimido por el fármaco, y que una persona debería tomar un fármaco si padece una enfermedad que se pueda ver aliviada por dicho fármaco.”
Expresad este conocimiento mediante predicados, como una serie de reglas. Enunciad correctamente cuestiones para determinar: ¿quién padece gripe?, ¿qué padece Pedro?, ¿qué síntomas tiene Pedro?, ¿quién sufre cansancio?, ¿hay algúnfármaco que alivie a Pedro?, ¿hay algún síntoma que presenten Juan y María?
Programación Declarativa 10
Cálculos: resolución SLD
Los cálculos resultan de las demostraciones de cuestiones a partir de una b.c., por aplicación del principio de resolución SLD. La resolución SLD (Selective Linear for Definite Clauses) es un procedimiento sistemático de refutación que consiste en añadir la...
Regístrate para leer el documento completo.