Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 01
Tema 01
Universidad de Sevilla
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
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
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
x
Ejemplos (hechos):
La luz del semáforo es verde
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
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
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
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
x
Situación:
VENTANA
COCINA
BAÑO RECIBIDOR
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
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
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
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
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
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: ∀, ∃
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
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)
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
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
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
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)}
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
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
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
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
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
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)
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 ...
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
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.
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
?-
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
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
=== 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)
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
θ = {x 7→ Juan, y 7→ Pedro}
θ = {x 7→ Juan, y 7→ padre(padre(Juan))}
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>*
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>*
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)
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)
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)
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
Reglas Hechos
Equiparacion de patrones
Agenda
Resolucion de conflictos
Disparo
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)
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)
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)
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)
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
Entrada
H1 H2
1,2: ?x = 2, ?y = 4, ?z = 3
activar R1
1,2: ?x = 2, ?y = 4, ?z = 3
Entrada
H1 H2 H3
activar R1 activar R2
1,2: ?x = 2, ?y = 4, ?z = 3 2,4: ?y = 4, ?z = 3.
3,5: ?y = 5, ?z = 9.
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
Universidad de Sevilla
:- dynamic respuesta/2.
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).
escribe_lista([]).
escribe_lista([X|L]) :- write(X), escribe_lista(L).
escribe_prueba_aux(N,A y B):-
escribe_prueba_aux(N,A),tab(N),write_ln(’y’),
escribe_prueba_aux(N,B).
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).
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.