Está en la página 1de 78

Inteligencia Artificial II Curso 2005–2006

Tema 1: Representación del


conocimiento mediante reglas

Carmen Graciani Dı́az


José L. Ruiz Reina

Dpto. de Ciencias de la Computación e Inteligencia Artificial

Universidad de Sevilla

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.1


Sistemas basados en el conocimiento

x
Sistemas basados en el conocimiento:
u Programas que resuelven problemas usando un determinado dominio de conoci-
miento
u A veces llamados sistemas expertos
x
Ventajas:
u Fácil acceso y disponibilidad de conocimiento (experto)
u Coste reducido
u Permanencia
u Fiabilidad y rapidez
u Respuestas no subjetivas
u Tutores
u Explicación del razonamiento
u Competitivos con expertos humanos

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.2


Sistemas basados en el conocimiento

x
Componentes principales de un SBC
u Conocimiento, que necesita ser representado
u Mecanismos que permitan inferir nuevo conocimiento
u Estos componentes deberı́an constituir módulos independientes
x
Otros componentes:
u Interfaz de usuario
u Explicaciones acerca del conocimiento inferido
u Adquisición de nuevo conocimiento
u Tutor

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.3


Representación del conocimiento

x
Requisitos de los formalismos de representación del conocimiento:
u potencia expresiva
u facilidad de interpretación
u eficiencia deductiva
u posibilidad de explicación y justificación
x
Algunos formalismos de representación:
u reglas, redes semánticas, marcos, lógicas de descripción, lógica de primer orden, . . .

x
Cada formalismo de representación usa un método de inferencia es-
pecı́fico:
u razonamiento hacia adelante y hacia atrás (SLD-resolución), herencia, tableros,
resolución, . . .
x
En este tema nos centraremos en la representación del conocimiento
mediante reglas
IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.4
Representación del conocimiento mediante reglas

x
Ejemplos (reglas):
SI la luz del semáforo es verde Y no hay peatones cruzando
ENTONCES continúa la marcha

SI x es número natural Y x es par


ENTONCES x es divisible por 2

SI el reactivo toma color azul Y


la morfologı́a del organismo es alargada Y
el paciente es un posible receptor
ENTONCES existe una evidencia (0.7) de que
la infección proviene de pseudomonas.

x
Ejemplos (hechos):
La luz del semáforo es verde

El reactivo toma color azul

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.5


Representación del conocimiento mediante reglas

x
Esencialmente, existen dos mecanismos para inferir nuevo conocimiento
a partir de un conjunto de reglas
u Razonamiento hacia atrás (backward chaining)
u Razonamiento hacia adelante (forward chaining)
x
En lo que sigue veremos con detalle ambos mecanismos
u Se estudian mejor desde un punto de vista formal mediante su formulación lógica
(proposicional y primer orden)
x
Recomendación: repasar ”Lógica Informática”, segundo curso y ”Pro-
gramación Declarativa”, tercer curso

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.6


Lógica proposicional

x
Lenguaje de la lógica proposicional
u Sı́mbolos (variables) proposicionales: p, q, r, luz-verde, peatones-cruzando, . . .
u Conectivas: ¬, ∨, ∧, →, ↔
x
Fórmulas de la lógica proposicional
u Los sı́mbolos son fórmulas (atómicas)
u Si F1 y F2 son fórmulas, también lo son F1 ∨ F2, F1 ∧ F2, F1 → F2, ¬F1, F1 ↔ F2

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.7


Lógica proposicional

x
Consecuencia lógica:
u Interpretación: asignación de valores de verdad (⊤ ó ⊥) a las variables proposicio-
nales
u Una interpretación asigna un valor de verdad a cada fórmula (por ejemplo, I(F1 →
F2) = ⊥ si I(F1) = ⊤ y I(F2) = ⊥; I(F1 → F2) = ⊤ en caso contrario)
u Consecuencia lógica: decimos que {F1, F2, . . . , Fn} |= G si para toda interpretación I
tal que I(Fi ) = ⊤ i = 1, . . . , n, se tiene que I(G) = ⊤
u Ejemplo: {p, q, p ∧ q → r} |= r

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.8


Reglas, hechos, objetivos y bases de conocimiento

x
Una regla (proposicional) es una fórmula proposicional de la forma
p1 ∧ p2 ∧ . . . ∧ pn → q
donde p1, . . . , pn, q son sı́mbolos proposicionales
u Representaciones alternativas: q ← p1, . . . , pn, SI p1 Y p2 Y ...Y pn ENTONCES q
u Cabeza y cuerpo de una regla
x
Un hecho (proposicional) es una variable proposicional
u Un hecho puede verse como una regla sin cuerpo
u Representación alternativa: p ←
x
Una base de conocimiento es un conjunto de hechos y reglas

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.9


Un ejemplo ”de juguete”: fuga de agua

x
Situación:
VENTANA

COCINA

BAÑO RECIBIDOR

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.10


Un ejemplo ”de juguete”: fuga de agua

x
Base de conocimiento F A:
no ← recibidor_mojado, cocina_seca
fuga_en_ba~
problema_en_cocina ← recibidor_mojado, ba~
no_seco
no_agua_exterior ← ventana_cerrada
no_agua_exterior ← no_llueve
fuga_en_cocina ← problema_en_cocina, no_agua_exterior

recibidor_mojado
ba~
no_seco
ventana_cerrada

x
Ejemplo de consecuencia lógica: F A |= fuga en cocina

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.11


Deducción en una base de conocimiento

x
Problema: implementar un algoritmo tal que dada una base de conoci-
miento BC y un átomo p, responda a la pregunta ¿BC |= p?
x
Derivabilidad respecto de una base de conocimiento:
u Regla de inferencia: Modus Ponens:
p1 p2 . . . pn p1 ∧ p2 ∧ . . . ∧ pn → q
q

u Dada una base de conocimiento BC y un sı́mbolo de proposición p, decimos que


BC ⊢ p si existe una secuencia de fórmulas F1, . . . , Fn tales que Fn = p y cada Fi está en
BC o se obtiene de fórmulas anteriores mediante aplicación de Modus Ponens

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.12


Deducción en una base de conocimiento

x
Teorema: BC |= p ⇐⇒ BC ⊢ p
u Este teorema nos sugiere cómo implementar algoritmos para responder preguntas
a una base de conocimiento
u Esencialmente, se trata de implementar procesos que buscan una secuencia de apli-
caciones válidas de la regla de Modus Ponens que obtenga p como fórmula final
u Por tanto, algoritmos de búsqueda
x
Esta búsqueda puede realizarse:
u Hacia adelante: partiendo de BC
u Hacia atrás: partiendo de p

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.13


Encadenamiento hacia atrás proposicional
FUNCIÓN ENCADENAMIENTO-HACIA-ATRÁS-PROP(BC,p)
Devolver ENCADENAMIENTO-HACIA-ATRÁS-PROP-REC(BC,{p})

FUNCIÓN ENCADENAMIENTO-HACIA-ATRÁS-PROP-REC(BC,OBJETIVOS)
1. Si OBJETIVOS está vacı́o, devolver ÉXITO y terminar
2. Hacer ACTUAL igual a SELECCIONA-UNO(OBJETIVOS)
3. Para cada elemento q ← p1, ..., pn (n≥0) en BC tal que q=ACTUAL
3.1 Hacer NUEVOS-OBJETIVOS igual a {p1, ..., pn} ∪ (OBJETIVOS\{ACTUAL})
3.2 Hacer RESULTADO igual a
ENCADENAMIENTO-HACIA-ATRÁS-PROP-REC(BC,NUEVOS-OBJETIVOS)
3.3 Si RESULTADO es ÉXITO, devolverlo y terminar.
4. Devolver FALLO

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.14


Encadenamiento hacia atrás proposicional

x
Es fácil ver que si ENCADENAMIENTO-HACIA-ATRÁS-PROP(BC,p) devuelve
ÉXITO, entonces BC ⊢ p
x
Se trata de una búsqueda en profundidad mediante backtracking
x
No es completa (podrı́a ser que BC ⊢ p y que el algoritmo no devolviera
ÉXITO, debido a la posible existencia de ramas infinitas)
x
Estrategia de búsqueda:
u Búsqueda en profundidad
u Selección del objetivo a resolver: cualquier función de selección valdrı́a
u Orden de uso de las reglas de la base de conocimiento

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.15


Lógica de primer orden

x
Lenguaje de la lógica de primer orden
u Sı́mbolos de variable: x, y, . . .
u Sı́mbolos de función (con su aridad): f , g, . . .
u Sı́mbolos de predicado (con su aridad): p, q , . . .
u Conectivas: ¬, ∨, ∧, →, ↔
u Cuantificadores: ∀, ∃

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.16


Lógica de primer orden

x
Términos de la lógica de primer orden
u Las variables son términos
u Si t1, . . . , tn son términos y f es un sı́mbolo de función de aridad n, entonces
f (t1, . . . , tn) es un término
x
Fórmulas de la lógica de primer orden
u Si t1, . . . , tn son términos y p es un sı́mbolo de función de aridad n, entonces p(t1, . . . , tn)
es una fórmula (atómica)
u Si F1 y F2 y son fórmulas y x es una variable, también lo son F1 ∨ F2, F1 ∧ F2, F1 → F2,
¬F1, F1 ↔ F2, ∀xF1 y ∃xF1

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.17


Lógica de primer orden

x
Consecuencia lógica:
u Interpretación: un conjunto (universo) junto con una asignación de funciones y
relaciones concretas, en ese universo, a los sı́mbolos de función y predicado
u Una interpretación asigna un valor de verdad a cada fórmula (repasar LI)
u Consecuencia lógica: decimos que {F1, F2, . . . , Fn} |= G si para toda interpretación I
tal que I(Fi ) = ⊤, para todo i = 1, . . . , n, se tiene que I(G) = ⊤
u Ejemplo:
{∀x(antecesor(y, x) → quiere(x, y)), antecesor(P edro, Juan)} |= quiere(Juan, P edro)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.18


Reglas, hechos, y bases de conocimiento

x
Una regla es una fórmula de primer orden de la forma
P1 ∧ P2 ∧ . . . ∧ Pn → Q
donde P1, . . . , Pn, Q son fórmulas atómicas
u Las variables de una regla se interpretan como universalmente cuantificadas
u Representaciones alternativas: como en el caso proposicional
x
Un hecho es una fórmula atómica
u Como en el caso proposicional, un hecho puede verse como una regla sin cuerpo
x
Una base de conocimiento es un conjunto de hechos y reglas

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.19


Ejemplo: una pequeña base de conocimiento
R1: hereda_de(x,y) ← bueno(x),rico(y),quiere(x,y)
R2: quiere(x,y) ← amigo(x,y)
R3: quiere(x,y) ← antecesor(y,x)
R4: antecesor(x,y) ← progenitor(x,y)
R5: antecesor(x,y) ← progenitor(x,z),progenitor(z,y)
H1: progenitor(padre(x),x)
H2: rico(Pedro)
H3: rico(padre(padre(Juan)))
H4: amigo(Juan,Pedro)
H5: bueno(Juan)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.20


Deducción en una base de conocimiento

x
Sustituciones: θ = {x1 7→ t1, . . . , xn 7→ tn}
u Si Q es una fórmula atómica, θ(Q) es la fórmula obtenida sustituyendo cada aparición
de xi en Q por ti
x
Regla de inferencia: Modus Ponens Generalizado
P1 P2 . . . Pn P1′ ∧ P2′ ∧ . . . ∧ Pn′ → Q
θ(Q)
donde θ es una sustitución tal que θ(Pi) = θ(Pi′)
u Ejemplo: a partir de antecesor(y, x) → quiere(x, y) y de antecesor(P edro, Juan) se deduce
quiere(Juan, P edro) (mediante la sustitución θ = {x 7→ Juan, y 7→ P edro})
u Dada una base de conocimiento BC y una fórmula atómica P , decimos que BC ⊢ P si
existe una secuencia de fórmulas F1, . . . , Fn tales que Fn = P y cada Fi está en BC o se
obtiene de fórmulas anteriores mediante aplicación de Modus Ponens Generalizado
x
Teorema: BC |= P ⇐⇒ BC ⊢ P

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.21


Razonamiento hacia atrás con reglas de primer orden

x
Podemos aplicar la misma idea que en el caso proposicional para di-
señar un algoritmo de encadenamiento hacia atrás basado en la regla de
Modus Ponens Generalizado
x
Dado un objetivo Q y una regla Q1 ∧ . . . ∧ Qn → P , los nuevos objetivos
podrı́an ser {θ(Q1), . . . , θ(Qn)} si encontramos una sustitución θ tal que
θ(P ) = θ(Q)
u Dicha sustitución se denomina unificador de P y Q
x
Por tanto, se necesita un algoritmo que dado el objetivo y la cabeza de
la regla, encuentre un unificador, si es que existe
u Dicho algoritmo se denomina algoritmo de unificación

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.22


Unificación

x
Ejemplos:
Objetivo Cabeza de regla Unificador
amigo(x,Juan) amigo(Antonio,y) {x 7→ Antonio,y 7→ Juan}
progenitor(padre(x),x) progenitor(y,Juan) {x 7→ Juan,y 7→ padre(Juan)}
p(f(x),g(y)) p(z,z) No existe
p(x) q(y) No existe
quiere(x,z) quiere(padre(y),x) {x 7→ padre(Juan),y 7→ Juan,z 7→ padre(Juan)}
quiere(x,z) quiere(padre(y),x) {x 7→ padre(y),z 7→ padre(y)}

x
En general, dados dos átomos podrı́an no ser unificables, o si son unifi-
cables pueden tener más de un unificador
u Aunque se puede probar que si son unificables existe un unificador más general que
cualquier otro unificador
u Ejemplo: {x 7→ padre(y), z 7→ padre(y)} es más general que {x 7→ padre(Juan), y
7→ Juan, z 7→ padre(Juan)}

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.23


Algoritmo de unificación
FUNCIÓN UNIFICA(S,T)
Devolver UNIFICA-REC(S,T,{})

FUNCIÓN UNIFICA-REC(S,T,θ)
1. Si S = T, devolver {}
2. Si no, si S es variable, entonces:
2.1 Si S ocurre en T, devolver FALLO
2.2 Si S no ocurre en T, devolver {S 7→ T}
3. Si no, si T es variable, entonces devolver UNIFICA-REC(T,S,θ)
4. Si no, sea S=f(S1,...,Sn) y T=g(T1,...,Tm)
4.1 Si f6=g ó n6=m, devolver FALLO
4.2 En caso contrario, devolver UNIFICA-REC-LISTA([S1,...,Sn],[T1,...,Tn],θ)

FUNCIÓN UNIFICA-REC-LISTA(LS,LT,θ)
1. Si LS es la lista vacı́a, devolver θ
2. Si no, sea σ = UNIFICA-REC(PRIMERO(LS),PRIMERO(LT),θ)
2.1 Si σ es igual a FALLO, devolver FALLO
2.2 En caso contrario, devolver
UNIFICA-REC-LISTA(σ(RESTO(LS)),σ(RESTO(LT)),COMPONER(θ,σ))
u Nota: COMPONER(S1,S2) obtiene la sustitución que actúa como si se aplicara S1 y

a continuación S2. Por ejemplo: COMPONER({x 7→ f(y),z 7→ g(u,v)}, {y 7→ k(u)}) =


{x 7→ f(k(u)), z 7→ g(u,v), y 7→ k(u)}
IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.24
Algoritmo de unificación

x
Ejemplo:
UNIFICA(quiere(x,z),quiere(padre(y),x)) ⇒
UNIFICA-REC(quiere(x,z),quiere(padre(y),x),{}) ⇒
UNIFICA-REC-LISTA({x,z},{padre(y),x},{}) ⇒
[UNIFICA-REC(x,padre(y),{}) = {x 7→ padre(y)}]
UNIFICA-REC-LISTA({z},{padre(y)},{x 7→ padre(y)}) ⇒
[UNIFICA-REC(z,padre(y),{x 7→ padre(y)}) = {z 7→ padre(y)}]
UNIFICA-REC-LISTA({},{},{x 7→ padre(y),z 7→ padre(y)}) ⇒
{x 7→ padre(y),z 7→ padre(y)}

x
Teorema: UNIFICA(S,T) no devuelve FALLO si y sólo si S y T se pueden
unificar; en ese caso, devuelve un unificador de S y T más general que
cualquier otro unificador

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.25


SLD-resolución

x
Combinando unificación y encadenamiento hacia atrás proposicional po-
demos obtener un procedimiento que permite responder a preguntas del
tipo ¿BC |= P ?
u En concreto, el algoritmo encontrará sustituciones θ tal que BC |= θ(P ) (respuestas)
u Este algoritmo se denomina de SLD-resolución
x
Como en el caso proposicional, el algoritmo realiza una búsqueda en
profundidad (backtracking)
u Como es habitual, esta búsqueda se puede representar mediante un árbol

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.26


Un ejemplo de árbol SLD

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.27


Árboles SLD
x
Un árbol SLD representa el proceso de búsqueda
u Los nodos de un árbol representan los objetivos pendientes (átomos por deducir)
x
Nodo raı́z: objetivo inicial
x
Nodos finales:
u Un nodo de fallo se obtiene cuando su primer átomo no es unificable con la cabeza
de ninguna regla o hecho
u Un nodo de éxito es aquél en el que no tiene objetivos pendientes
x
Ramas de éxito
u Una rama de éxito es aquella que termina en un nodo de éxito
u Cada rama de éxito ”construye” una sustitución (respuesta) que se va ”concretan-
do” mediante los sucesivos pasos de unificación
u Cada rama de éxito representa una SLD-refutación
x
Renombrado de reglas y hechos
IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.28
Algoritmo de SLD-resolución
FUNCIÓN SLD-RESOLUCIÓN(BC,Q)
Devolver SLD-RESOLUCIÓN-REC(BC,{Q},{})

FUNCIÓN SLD-RESOLUCIÓN-REC(BC,OBJETIVOS,θ)
1. Si OBJETIVOS está vacı́o, devolver la lista unitaria θ
2. Hacer RESPUESTAS igual a la lista vacı́a
Hacer ACTUAL igual θ(SELECCIONA-UNO(OBJETIVOS))
3. Para cada elemento P ← P1, ..., Pn en BC (renombrado con variables nuevas)
tal que σ=UNIFICA(P,ACTUAL) es distinto de FALLO
3.1 Hacer NUEVOS-OBJETIVOS igual a {P1, ..., Pn} ∪ (OBJETIVOS\{ACTUAL})
3.2 A~nadir a RESPUESTAS el resultado de
SLD-RESOLUCIÓN-REC(BC,NUEVOS-OBJETIVOS,COMPONER(θ,σ))
4. Devolver RESPUESTAS

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.29


Propiedades del algoritmo de SLD-resolución

x
Propiedades:
u Teorema (corrección): Si θ ∈ SLD-RESOLUCION(BC, P ) entonces BC ⊢ θ(P )
u Teorema: Si BC ⊢ σ(P ), entonces existe una SLD-refutación a partir de P que
construye una respuesta θ tal que σ es ”un caso particular” de θ
u Problema: el algoritmo de SLD-resolución podrı́a no encontrar tal SLD-refutación
debido a la existencia de ramas infinitas
x
Estrategia de búsqueda:
u En nuestro pseudocódigo, búsqueda en profundidad
u Selección del objetivo a resolver: cualquier función de selección servirı́a
u Orden en el que se usan las reglas y hechos de la BC

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.30


Programación lógica

x
Una base de conocimiento puede verse como un programa declarativo
u Programa lógico: conjunto de reglas y hechos
u Declarativo: ”qué es” en lugar de ”cómo se hace”
x
Las respuestas que calcula el algoritmo de SLD-resolución pueden verse
como la salida que calcula el programa lógico
x
Ejemplo de programa lógico: concatenación
R1: concatena(c(x, y), z, c(x, v)) ← concatena(y, z, v)
H1: concatena(NIL, x, x)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.31


Árbol SLD

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.32


Árbol SLD

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.33


Programación lógica y PROLOG

x
PROLOG es el lenguaje de programación más conocido basado en el
paradigma de la programación lógica
x
Diferencias entre PROLOG y Programación lógica pura
u Notación :- en lugar de ←
u Estrategia de búsqueda: selección del primer átomo; reglas y hechos usados en el
orden en el que aparecen en el problema
u Se amplı́a la expresividad: negación como fallo
u Control: corte
u Unificación sin occur-check
u Funciones predefinidas: aritmética,entrada/salida,. . .
u Azúcar sintáctico: operadores
u ...

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.34


Implementación en PROLOG de la deducción hacia atrás

x
SBCs implementados en PROLOG:
u Debido a que el encadenamiento hacia atrás forma parte del propio intérprete,
PROLOG es un lenguaje especialmente adecuado para la implementación de SBCs
basados en reglas con razonamiento hacia atrás
x
SBC: BC+motor de inferencia+interfaz de usuario
x
Veamos un ejemplo de cómo se implementa un SBC básico en PROLOG

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.35


Un SBC básico en PROLOG

x
Azúcar sintáctico para reglas y hechos
:- op(875, xfx, hecho).
:- op(875, xfx, #).
:- op(825, fx, si).
:- op(850, xfx, entonces).
:- op(775, xfy, y). % Asociatividad a la derecha

x
Ejemplo de BC:
r1 # si bueno(X) y rico(Y) y quiere(X,Y) entonces hereda_de(X,Y).
r2 # si amigo(X,Y) entonces quiere(X,Y).
r3 # si antecesor(Y,X) entonces quiere(X,Y).
r4 # si progenitor(X,Y) entonces antecesor(X,Y).
r5 # si progenitor(X,Z) y progenitor(Z,Y) entonces antecesor(X,Y).
h1 hecho progenitor(padre(X),X).
h2 hecho rico(pedro).
h3 hecho rico(padre(padre(juan))).
h4 hecho amigo(juan,pedro).
h5 hecho bueno(juan).
x
Nota: Las reglas y hechos de la base de conocimiento son hechos Prolog
IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.36
Un SBC básico en PROLOG

x
Programa PROLOG:
se_deduce(P) :- _ hecho P.

se_deduce(P) :- _ # si C entonces P, se_deduce(C).

se_deduce(P1 y P2) :- se_deduce(P1), se_deduce(P2).

x
Ejemplo:
?- se_deduce(hereda_de(X,Y)).
X = juan
Y = pedro ;
X = juan
Y = padre(padre(juan))
Yes
?- se_deduce(hereda_de(pedro,juan)).
No
?-

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.37


SBC en PROLOG con justificación de respuestas

x
Estructura de las pruebas:
P es cierto esta_afirmado_por F.
P es cierto es_consecuencia_de R porque Prueba.
Prueba1 y Prueba2.

x
Operadores:
:- op(850, xfx, es_consecuencia_de).
:- op(850, xfx, esta_afirmado_por).
:- op(800, xfx, porque).
:- op(750, xfx, es).
x

Árboles de prueba
x
Diferencia entre árbol SLD y árbol de prueba
u

Árbol SLD: Refleja el proceso de búsqueda de la deducción


u

Árbol de prueba: Justifica la deducción encontrada


IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.38
SBC en PROLOG con justificación de respuestas
se_deduce(P, P es cierto esta_afirmado_por F) :- F hecho P.

se_deduce(P, P es cierto es_consecuencia_de R porque Pr) :-


R # si C entonces P, se_deduce(C, Pr).

se_deduce(P1 y P2, Prueba1 y Prueba2) :-


se_deduce(P1, Prueba1), se_deduce(P2, Prueba2).

se_deduce(P) :- se_deduce(P,Prueba), escribe_prueba(Prueba).

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.39


Ejemplo de SBC en PROLOG con justificación de respuestas
?- se_deduce(hereda_de(X,Y)).
****** Prueba encontrada:
por h5, sabemos que bueno(juan),
y
por h2, sabemos que rico(pedro),
y
por h4, sabemos que amigo(juan, pedro),
luego, segun r2 se concluye que quiere(juan, pedro),
luego, segun r1 se concluye que hereda_de(juan, pedro),
X = juan
Y = pedro ;
****** Prueba encontrada:
por h5, sabemos que bueno(juan),
y
por h3, sabemos que rico(padre(padre(juan))),
y
por h1, sabemos que progenitor(padre(padre(juan)), padre(juan)),
y
por h1, sabemos que progenitor(padre(juan), juan),
luego, segun r5 se concluye que antecesor(padre(padre(juan)), juan),
luego, segun r3 se concluye que quiere(juan, padre(padre(juan))),
luego, segun r1 se concluye que hereda_de(juan, padre(padre(juan))),
X = juan
Y = padre(padre(juan))
Yes

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.40


Ampliando funcionalidades del SBC

x
Interfaz de usuario: hechos preguntables
x
Preguntas ¿Cómo?
x
Preguntas ¿Por qué?
x
Navegación en la prueba
x
Razonamiento probabilı́stico
x
Objetivos retardables
x
Aprendizaje
x
En el anexo se muestra un SBC implementado en PROLOG que incor-
pora alguna de estas funcionalidades

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.41


Ejemplo de sesión (I):
?- se_deduce(hereda_de(X, Y)).
¿Es cierto amigo(juan, pedro)?
Posibles respuestas: [si, no, porque] (seguidas de un punto): porque.

=== Porque:
La regla r2 dice que probando:
amigo(juan, pedro)
se tiene:
quiere(juan, pedro)

Repito:
¿Es cierto amigo(juan, pedro)?
Posibles respuestas: [si, no, porque] (seguidas de un punto): porque.

=== Porque:
La regla r1 dice que probando:
bueno(juan)y rico(pedro)y quiere(juan, pedro)
se tiene:
hereda_de(juan, pedro)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.42


Ejemplo de sesión (II):
Repito:
¿Es cierto amigo(juan, pedro)?
Posibles respuestas: [si, no, porque] (seguidas de un punto): si.

****** Se ha encontrado respuesta afirmativa:


------ Opciones:
------ 1) Ver la prueba completa y continuar.
------ 2) Navegar dentro de la prueba.
------ 3) Continuar.
Posibles respuestas: [1, 2, 3] (seguidas de un punto): 1.

****** Prueba encontrada:

por h5, sabemos que bueno(juan),


y
por h2, sabemos que rico(pedro),
y
por usted, sabemos que amigo(juan, pedro),
luego, segun r2 se concluye que quiere(juan, pedro),
luego, segun r1 se concluye que hereda_de(juan, pedro),
X = juan
Y = pedro
Yes

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.43


Ejemplo de sesión (III):
?- se_deduce(hereda_de(X, Y)).

****** Se ha encontrado respuesta afirmativa:


------ Opciones:
------ 1) Ver la prueba completa y continuar.
------ 2) Navegar dentro de la prueba.
------ 3) Continuar.
Posibles respuestas: [1, 2, 3] (seguidas de un punto): 2.
Por r1, hereda_de(juan, pedro) es consecuencia de:
1: bueno(juan)
2: rico(pedro)
3: quiere(juan, pedro)
Posibles respuestas: [seguir, 1, 2, 3] (seguidas de un punto): 3.
Por r2, quiere(juan, pedro) es consecuencia de:
1: amigo(juan, pedro)
Posibles respuestas: [seguir, arriba, 1] (seguidas de un punto): 1.
amigo(juan, pedro) esta afirmado por usted.
Posibles respuestas: [seguir, arriba] (seguidas de un punto): seguir.
¿Es cierto amigo(juan, padre(padre(juan)))?
Posibles respuestas: [si, no, porque] (seguidas de un punto): no.

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.44


Ejemplo de sesión (IV):
****** Se ha encontrado respuesta afirmativa:
------ Opciones:
------ 1) Ver la prueba completa y continuar.
------ 2) Navegar dentro de la prueba.
------ 3) Continuar.
Posibles respuestas: [1, 2, 3] (seguidas de un punto): 1.

****** Prueba encontrada:


por h5, sabemos que bueno(juan),
y
por h3, sabemos que rico(padre(padre(juan))),
y
por h1, sabemos que progenitor(padre(padre(juan)), padre(juan)),
y
por h1, sabemos que progenitor(padre(juan), juan),
luego, segun r5 se concluye que antecesor(padre(padre(juan)), juan),
luego, segun r3 se concluye que quiere(juan, padre(padre(juan))),
luego, segun r1 se concluye que hereda_de(juan, padre(padre(juan))),
X = juan
Y = padre(padre(juan))
Yes
?-

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.45


Deducción hacia adelante

x
En contraposición al encadenamiento hacia atrás, podemos aplicar la
regla de Modus Ponens Generalizado hacia adelante
u A partir de los hechos, y usando las reglas, obtener nuevos hechos
u De la misma manera, los hechos deducidos permiten obtener nuevos hechos
x
Problemas adecuados para razonar hacia adelante
u Monitorización y control
u Problemas dirigidos por los datos
u Sin necesidad de explicación
x
Problemas adecuados para razonar hacia atrás
u Diagnóstico
u Problemas dirigidos por los objetivos
u Interacción/Explicación al usuario

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.46


Algoritmo de encadenamiento hacia adelante
FUNCIÓN ENCADENAMIENTO-HACIA-ADELANTE(BC,P)
1. Hacer DEDUCIDOS igual a vacı́o
2. Para cada elemento Q ← P1, ..., Pn en BC (renombrado con variables nuevas)
2.1 Para cada θ tal que θ(Pi) = θ(Pi′) para ciertos
Pi′ en BC, i=1,...,n,
2.1.1 Hacer Q’=θ(Q)
2.1.2 Si Q’ (o un renombrado de Q’) no está ni en BC ni en DEDUCIDOS,
a~
nadir Q’ a DEDUCIDOS
2.1.3 Si σ=UNIFICA(P ,Q’) es distinto de FALLO,
devolver σ y terminar
3. Si DEDUCIDOS es vacı́o, devolver FALLO y terminar.
en caso contrario, a~nadir DEDUCIDOS a BC y volver al punto 1

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.47


Algoritmo de encadenamiento hacia adelante
ENCADENAMIENTO-HACIA-ADELANTE(BC,hereda_de(x,y))

H6 | antecesor(padre(x), x) | R4 {x1 7→ padre(x), y1 7→ x} H1


H7 | antecesor(padre(padre(x)), x) | R5 {x1 →7 padre(padre(x2)),
| | z1 7→ padre(x2), y1 7→ x2},
| | H1 {x 7→ padre(x2)}, H1 {x 7→ x2}
H8 | quiere(Juan, Pedro) | R2 {x1 7→ Juan, y1 7→ Pedro} H4
H9 | quiere(x, padre(x)) | R3 {x1 7→ x, y1 7→ padre(x)} H6
H10 | quiere(x, padre(padre(x))) | R3 {x1 7→ x, y1 7→ padre(padre(x))} H9
H11 | hereda_de(Juan, Pedro) | R1 {x1 7→ Juan, y1 7→ Pedro}, H5, H2, H8

θ = {x 7→ Juan, y 7→ Pedro}

H12 | hereda_de(Juan, padre(padre(Juan))) | R1 {x1 7→ Juan, y1 7→ padre(padre(Juan))},


| | H5, H3, H10 {x 7→ Juan}

θ = {x 7→ Juan, y 7→ padre(padre(Juan))}

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.48


Sistemas de producción

x
Paradigma de los sistemas de producción
u Hechos: pieza básica de información
u Reglas: describen el comportamiento del programa en función de la información
existente
x
Modelo de hecho:
<ı́ndice>: <sı́mbolo>(<elemento>*)

x
Modelo de regla:
<Nombre>:
SI <Condición>*
ENTONCES
<Acción>*

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.49


Elementos de una regla

x
Condiciones acerca de:
u Existencia de cierta información: <patrón de hecho>*
u Relaciones entre datos
x
Acciones:
u Incluir nueva información: INCLUIR: <hecho>*
u Eliminar información: ELIMINAR: <hecho>*

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.50


Ejemplo de sistema de producción (I)
Base de Hechos:
1: Tiene(pelos)
2: Tiene(pezu~
nas)
3: Tiene(rayas_negras)

Base de Reglas:
Jirafa:
SI Es(ungulado)
Tiene(cuello_largo)
ENTONCES
INCLUIR: Es(jirafa)

Cebra:
SI Es(ungulado)
Tiene(rayas_negras)
ENTONCES
INCLUIR: Es(cebra)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.51


Ejemplo de sistema de producción (II)
Ungulado_1:
SI Es(mamı́fero)
Tiene(pezu~nas)
ENTONCES
INCLUIR: Es(ungulado)

Ungulado_2:
SI Es(mamı́fero)
Rumia()
ENTONCES
INCLUIR: Es(ungulado)

Mamı́fero_1:
SI Tiene(pelos)
ENTONCES
INCLUIR: Es(mamı́fero)

Mamı́fero_2:
SI Da(leche)
ENTONCES
INCLUIR: Es(mamı́fero)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.52


Razonamiento hacia adelante

x
Componentes:
u Base de hechos (memoria de trabajo). Dinámica
u Base de reglas. Estática
u Motor de inferencia (produce los cambios en la memoria de trabajo)
x
Elementos adicionales:
u Algoritmo para calcular eficientemente las reglas cuyas condiciones se satisfacen en
cada momento (equiparación de patrones)
u Método para decidir en cada momento qué regla de las activadas debe actuar (re-
solución de conflictos)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.53


Ciclo de ejecución

x
Construcción de la agenda: Conjunto de activaciones
u Activación: regla para la que existen hechos que satisfacen sus condiciones (valores
de comodines)
x
Selección de una regla cuya activación se encuentra en la agenda
x
Se llevan a cabo las acciones de la regla
x
El ciclo se repite hasta que no existen más activaciones en la agenda

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.54


Ciclo de ejecución

Reglas Hechos

Equiparacion de patrones
Agenda

Resolucion de conflictos

Disparo

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.55


Resolución de conflictos

x
Estrategias más comunes:
u Una activación sólo se produce una vez
u La primera de la pila
u Aleatorio
u Más especı́fica (número de condiciones)
u Menos utilizada
u Mejor (pesos)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.56


Tabla de seguimiento

I Base de Hechos E Agenda D


1 Tiene(pelos) 0 Mamı́fero 1: 1 1
2 Tiene(pezu~ nas) 0
3 Tiene(rayas negras) 0
4 Es(mamı́fero) 1 Ungulado 1: 4,2 2
5 Es(ungulado) 2 Cebra: 5,3 3
6 Es(cebra) 3

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.57


Comodines: anónimos, simples y múltiples

x
Comodı́n simple: ?x, ?y, ?elemento, ?
x
Comodı́n múltiple: $?x, $?y, $?elemento, $?
Base de Hechos:
1: Lista(Mar Ana Luis Pepe)
2: Alumno(Mar)
3: Alumno(Ana 2 3 9)
4: Alumno(Luis)
5: Alumno(Pepe 3)

Base de Reglas:
Elimina:
SI Alumno(?n ? $?)
Lista($?i ?n $?f)
ENTONCES
ELIMINAR: Lista(?i ?n ?f)
INCLUIR: Lista(?i ?f)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.58


Tabla de seguimiento

Base de Hechos E S Agenda D S


1: Lista(Mar Ana Luis Pepe) 0 1
2: Alumno(Mar) 0
3: Alumno(Ana 2 3 9) 0 Elimina: 3,1 (?n7→Ana ?i7→Mar ?f7→Luis Pepe) 1
4: Alumno(Luis) 0
5: Alumno(Pepe 3) 0 Elimina: 5,1 (?n7→Pepe ?i7→Mar Ana Luis ?f7→) 1
6: Lista(Mar Ana Luis) 1 2 Elimina: 3,6 (?n7→Ana ?i7→Mar ?f7→Luis) 2
7: Lista(Mar Luis) 2

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.59


Mundo de los bloques
Base de Hechos:
1: Pila(a b c)
2: Pila(d e f)
3: Objetivo(c sobre e)

Base de Reglas:
Mover_sobre_bloque:
SI Objetivo(?bl1 sobre ?bl2)
Pila(?bl1 $?r1)
Pila(?bl2 $?r2)
ENTONCES
ELIMINAR: Objetivo(?bl1 sobre ?bl2) Pila(?bl1 ?r1) Pila(?bl2 ?r2)
INCLUIR: Pila(?r1) Pila(?bl1 ?bl2 ?r2)

Mover_al_suelo:
SI Objetivo(?bl sobre suelo)
Pila(?bl $?r)
ENTONCES
ELIMINAR: Objetivo(?bl sobre suelo) Pila(?bl ?r)
INCLUIR: Pila(?r) Pila(?bl)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.60


Mundo de los bloques

Liberar_bloque:
SI Objetivo(?bl sobre ?)
Pila(?cima $? ?bl $?)
ENTONCES
INCLUIR: Objetivo(?cima sobre suelo)

Liberar_bloque_base:
SI Objetivo(? sobre ?bl)
Pila(?cima $? ?bl $?)
ENTONCES
INCLUIR: Objetivo(?cima sobre suelo)

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.61


Tabla de seguimiento
Base de Hechos E
S Agenda D
1: Pila(a b c) 2 0
2: Pila(d e f) 6 0
3: Objetivo(c sobre e) 7 Liberar bloque base: 3,2 (?bl7→e ?cima7→d)
0 5
Liberar bloque: 3,1 (?bl7→c ?cima7→a) 1
4: Objetivo(a sobre suelo) 1 2 Mover al suelo: 4,1 (?bl7→a ?r7→b c) 2
5: Pila(b c) 2 4 Liberar bloque: 3,5 (?bl7→c ?cima7→b) 3
6: Pila(a) 2
7: Objetivo(b sobre suelo) 3 4 Mover al suelo: 7,5 (?bl7→b ?r7→c) 4
8: Pila(c) 4 7
9: Pila(b) 4
10: Objetivo(d sobre suelo) 5 6 Mover al suelo 10,2 (?bl7→d ?r7→e f) 6
11: Pila(e f) 6 7 Mover sobre bloque: 3,8,11 7
(?bl17→c ?bl27→e ?r17→ ?r27→f)
12: Pila(d)
13: Pila() 7
14: Pila(c e f) 7

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.62


Equiparación de patrones

x
Algoritmo de fuerza bruta
Por cada regla Ri hacer
Por cada patrón de hecho Pj en Ri hacer
Por cada hecho Hk en la memoria de trabajo hacer
Comprobar si Pj equipara con Hk
Si todos los patrones tienen equiparación
incluir en la agenda todas las posibles
activaciones de la regla Ri

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.63


El algoritmo RETE
x
Optimiza la construcción de la agenda en cada vuelta del ciclo de eje-
cución.
u El disparo de una regla produce, generalmente, pocos cambios en la memoria de
trabajo.
u Un mismo patrón de hecho suele utilizar en varias reglas.
x
Construye y mantiene el grafo enraizado, dirigido y acı́clico Rete:
u Nodos: Representan patrones de hechos (menos la raı́z)
u Caminos: Representan las condiciones de una regla (desde la raiz)
x
Cada nodo contiene información acerca de los hechos que equiparan con
los patrones de los nodos desde la raı́z (incluido él mismo), junto con
las asociaciones necesarias de las distintas variables.
x
Al incluir/eliminar un hecho de la memoria de trabajo se envı́a la in-
formación desde la raı́z, se propaga hacia las hojas y se modifica la
información de los nodos de manera adecuada.
IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.64
RETE
R1: INCLUIR: H1(2 1)
SI H1(?x ?y) tal que ?y > 3 H1(2 4)
H2(?y ?z ?z) H2(4 3 3)
ENTONCES ... H2(5 9 9)

Entrada

H1 H2

?y (2 el.) > 3 ?z (2 el.) = ?z (3 el.)


1: ?x = 2, ?y = 4 2: ?y = 4, ?z = 3
3: ?y = 5, ?z = 9
?y (2 el.) = ?y (1 el.)

1,2: ?x = 2, ?y = 4, ?z = 3

activar R1

1,2: ?x = 2, ?y = 4, ?z = 3

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.65


RETE
R2 INCLUIR: H3(3 1 8)
SI H2(?y ?z ?z) H3(9)
H3(?z $?)
ENTONCES ...

Entrada

H1 H2 H3

?y (2 el.) > 3 ?z (2 el.) = ?z (3 el.)


4: ?z = 3.
1: ?x = 2, ?y = 4 2: ?y = 4, ?z = 3 4: ?z = 9.
3: ?y = 5, ?z = 9
?y (H1) = ?y (H2) ?z (H2) = ?z (H3)
2,4: ?y = 4, ?z = 3.
1,2: ?x = 2, ?y = 4, ?z = 3 3,5: ?y = 5, ?z = 9.

activar R1 activar R2

1,2: ?x = 2, ?y = 4, ?z = 3 2,4: ?y = 4, ?z = 3.
3,5: ?y = 5, ?z = 9.

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.66


Clips
x
CLIPS ≡ C Language Integrated Production Systems
u http://www.ghg.net/clips/CLIPS.html
x
Lenguaje basado en reglas de producción.
x
Desarrollado en el Johnson Space Center de la NASA.
x
Relacionado con OPS5 y ART
x
Caracterı́sticas:
u Conocimiento: Reglas, objetos y procedimental
u Portabilidad: implementado en C
u Integración y Extensibilidad: Con programas en C, Java, FORTRAN, ADA...
u Verificación y Validación
u Documentación
u Bajo coste: software libre

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.67


Bibliografı́a

x
Russel, S. y Norvig, P. Artificial Intelligence: A Modern Approach
(2nd edition) (Prentice-Hall, 2003)
x
Giarrantano, J.C. y Riley, G. Expert Systems Principles and Program-
ming (3 ed.) (PWS Pub. Co., 1998)
x
Lucas, P. y Van Der Gaag, L. Pinciples of Expert systems (Addison–
Wesley Publishers Co., 1991)
x
Curso ”Lógica Informática” 2004–05,
http://www.cs.us.es/cursos/li
x
Curso ”Programación Declarativa” 2005–06,
http://www.cs.us.es/cursos/pd

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.68


Inteligencia Artificial II Curso 2005–2006

Tema 1 (anexo): SBC en Prolog

Dpto. de Ciencias de la Computación e Inteligencia Artificial

Universidad de Sevilla

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.69


Un pequeño sistema basado en el conocimiento: sbc.pl (I)
% ============================================
% sbc.pl
% Un peque~
no sistema basado en el conocimiento
% ============================================

%%%%%%%%%%% Representacion del conocimiento


% La representacion interna de una regla debe ser:
%
% #
% / \
% / \
% Id entonces
% / \
% / \
% si Afirmacion
% |
% Cond
% Cond puede ser una combinacion, usando ’o’ o ’y’, de hechos (la disyuncion con prioridad mayor).

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.70


Un pequeño sistema basado en el conocimiento: sbc.pl (II)
% Ademas los hechos se deben representar internamente como:
%
% hecho
% / \
% / \
% Id Afirmacion
:- op(875, xfx, hecho).
:- op(875, xfx, #).
:- op(825, fx, si).
:- op(850, xfx, entonces).
:- op(800, xfy, o). % Asociatividad a la derecha
:- op(775, xfy, y). % Asociatividad a la derecha

%%%%%%%%%%%%%%%%%%%% Representación de las pruebas


% P es cierto esta_afirmado_por H (H es un número de hecho o usted).
% P es_consecuencia_de R porque Prueba.

:- op(850, xfx, es_consecuencia_de).


:- op(850, xfx, esta_afirmado_por).
:- op(800, xfx, porque).
:- op(750, xfx, es).

:- dynamic respuesta/2.

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.71


Un pequeño sistema basado en el conocimiento: sbc.pl (III)
%%%%%%%%%%%%% Motor de inferencia

se_deduce(P) :-
se_deduce(P,[],Prueba),
menu,
recoge_respuesta(Leida,[1,2,3]),
(Leida=1,escribe_prueba(Prueba);
Leida=2,navega(Prueba,0);
Leida=3).

se_deduce(P,_,P es cierto esta_afirmado_por F) :-


F hecho P.

se_deduce(P,T,P es cierto es_consecuencia_de R porque Prueba ) :-


R # si C entonces P,
se_deduce(C,[R # si C entonces P|T],Prueba).

se_deduce(P1 y P2,T,Prueba1 y Prueba2) :-


se_deduce(P1,T,Prueba1),
se_deduce(P2,T,Prueba2).

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.72


Un pequeño sistema basado en el conocimiento: sbc.pl (IV)
se_deduce(P1 o _, T,Prueba1) :- se_deduce(P1,T,Prueba1).

se_deduce(_ o P2, T,Prueba2) :- se_deduce(P2,T,Prueba2).

se_deduce(P,_,P es cierto esta_afirmado_por usted) :-


preguntable(P), respuesta(P,R), % sólo habra si o no.
!,R=si.

se_deduce(P,T,P es cierto esta_afirmado_por usted) :-


preguntable(P), pregunta(P,T,R), assert(respuesta(P,R)),
R=si.

%%%%%%%%%%%%% Menú final


menu :-
nl,nl,write_ln(’****** Se ha encontrado respuesta afirmativa:’),
write_ln(’------ Opciones:’),
write_ln(’------ 1) Ver la prueba completa y continuar.’),
write_ln(’------ 2) Navegar dentro de la prueba.’),
write_ln(’------ 3) Continuar. ’).

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.73


Un pequeño sistema basado en el conocimiento: sbc.pl (V)
%%%%%%%%%%%% Auxiliares
recoge_respuesta(R,L) :-
write(’Posibles respuestas: ’),write(L),
write(’ (seguidas de un punto): ’),
read(R),member(R,L),!.
recoge_respuesta(R,L) :-
nl,write_ln(’Respuesta no valida.’),
recoge_respuesta(R,L).

escribe_lista([]).
escribe_lista([X|L]) :- write(X), escribe_lista(L).

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.74


Un pequeño sistema basado en el conocimiento: sbc.pl (VI)
%%%%%%%%%%%% Escritura de la prueba
escribe_prueba(Prueba) :-
nl,write_ln(’****** Prueba encontrada:’),nl,
escribe_prueba_aux(0,Prueba).

escribe_prueba_aux(N,A es cierto es_consecuencia_de B porque Prueba):-


M is N+2,
escribe_prueba_aux(M,Prueba),tab(N),
escribe_lista([’luego, segun ’,B,’ se concluye que ’,A,’,’]),nl.

escribe_prueba_aux(N,A y B):-
escribe_prueba_aux(N,A),tab(N),write_ln(’y’),
escribe_prueba_aux(N,B).

escribe_prueba_aux(N,P es cierto esta_afirmado_por F):-


tab(N),escribe_lista([’por ’,F,’, sabemos que ’,P,’,’]),nl.

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.75


Un pequeño sistema basado en el conocimiento: sbc.pl (VII)
%%%%%%%%%%%%%% Preguntas al usuario. Preguntas porque
pregunta(P,T,Respuesta) :-
nl,escribe_lista([’¿Es cierto ’,P,’?’]),nl,
recoge_respuesta(Leido,[si,no,porque]),
gestiona_respuesta_porque(P,T,Respuesta,Leido).

gestiona_respuesta_porque(_,_,si,si).
gestiona_respuesta_porque(_,_,no,no).
gestiona_respuesta_porque(P,[R|Reglas],Respuesta,porque) :-
escribe_regla(R),nl,write(’Repito:’),
pregunta(P,Reglas,Respuesta).
gestiona_respuesta_porque(P,[],Respuesta,porque) :-
write_ln(’Porque esa fue su pregunta!!’),write(’Repito: ’),
pregunta(P,[],Respuesta).

escribe_regla(R # si C entonces P) :-
nl,write_ln(’=== Porque:’),
escribe_lista([’La regla ’,R,’ dice que probando:’]),nl,
write_ln(C),
% escribe_condicion(C), cuando se mejore el de abajo.
write_ln(’se tiene: ’),write_ln(P).

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.76


Un pequeño sistema basado en el conocimiento: sbc.pl (VIII)
%%%%%%%%%%%%%% Navegación por el árbol.
navega(P es cierto esta_afirmado_por usted,Nivel) :-
!, escribe_lista([P,’ esta afirmado por usted.’]),nl,
opciones_no_numericas(Nivel,Opciones),
recoge_respuesta(Opcion,Opciones),
gestiona_respuesta_navega(Opcion,Nivel,_,_).

navega(P es cierto esta_afirmado_por F,Nivel) :-


!,escribe_lista([P,’ esta afirmado por el hecho ’,F]),nl,
opciones_no_numericas(Nivel,Opciones),
recoge_respuesta(Opcion,Opciones),
gestiona_respuesta_navega(Opcion,Nivel,_,_).

navega(A es cierto es_consecuencia_de B porque Pruebas,Nivel) :-


!, escribe_lista([’Por ’,B,’, ’,A,’ es consecuencia de:’]),nl,
escribe_cuerpo(Pruebas,1,Max),
Max1 is Max - 1,
findall(N,between(1,Max1,N),L),
opciones_no_numericas(Nivel,M),
append(M,L,Opciones),
recoge_respuesta(Opcion,Opciones),
(A es cierto es_consecuencia_de B porque Pruebas) = Aux,
gestiona_respuesta_navega(Opcion,Nivel,Pruebas,Aux).

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.77


Un pequeño sistema basado en el conocimiento: sbc.pl (IX)
gestiona_respuesta_navega(arriba,_,_,_):-!.
gestiona_respuesta_navega(seguir,_,_,_):-!,fail.
gestiona_respuesta_navega(N,Nivel,Pruebas,P) :-
n_esima_prueba(Pruebas,N,Pn), Nivel1 is Nivel+1,
navega(Pn,Nivel1), navega(P,Nivel).

opciones_no_numericas(0,[seguir]):-!.
opciones_no_numericas(_,[seguir,arriba]).

escribe_cuerpo(P1 y P2,N1,N3) :-
!, escribe_cuerpo(P1,N1,N2), escribe_cuerpo(P2,N2,N3).

escribe_cuerpo(P,N,N1) :-
tab(3), escribe_lista([N,’: ’]),
escribe_lo_probado(P),nl, N1 is N+1.

escribe_lo_probado(P es cierto esta_afirmado_por _):- write(P).


escribe_lo_probado(P es cierto es_consecuencia_de _) :- write(P).

n_esima_prueba((P1 y P2) y P3,N,P) :- !,n_esima_prueba(P1 y P2 y P3,N,P).


n_esima_prueba(P1 y _,1,P1):-!.
n_esima_prueba(_ y P2,N,P) :-!, N1 is N-1, n_esima_prueba(P2,N1,P).
n_esima_prueba(P,1,P).

IA-II 2005–2006 Cc Ia Representación del conocimiento mediante reglas 1.78

También podría gustarte