prolog
Post on 20-Jan-2017
64 Views
Preview:
TRANSCRIPT
Prolog – Bases de Datos Deductivas – Lógica
Modal y Temporal
Equipo Nro. 1 Lógica de Computación
2016
Lógica de Computación
2
Prolog – Bases de Datos Deductivas – Lógica Modal y
Temporal
Integrantes
Ángel Mea. Ci. 24.524.004
Violeta León. Ci. 18262154
Judith Montilla. Ci. 18263657
David Singer. Ci. 21048686
María Aponte. Ci. 24565531
María Álvarez. Ci. 25442524
Enguelbert García. Ci. 19933668
Lógica de Computación
3
PROLOG
El lenguaje de programación PROLOG, fue creado por Alain Colmerauer y
sus colaboradores alrededor de 1970 en la Universidad de Marseille-Aix, si bien
uno de los principales protagonistas de su desarrollo y promoción fue Robert
Kowalski de la Universidad de Edimburgh. Las investigaciones de Kowalski
proporcionaron el marco teórico, mientras que los trabajos de Colmerauer dieron
origen al actual lenguaje de programación, construyendo el primer interprete
Prolog. David Warren, de la Universidad de Edimburgh, desarrolló el primer
compilador de Prolog (WAM – “Warren Abstract Machine”). Se pretendía usar la
lógica formal como base para un lenguaje de programación, es decir, era un
primer intento de diseñar un lenguaje de programación que posibilitara al
programador especificar sus problemas en lógica. Lo que lo diferencia de los
demás es el énfasis sobre la especificación del problema. Es un lenguaje para el
procesamiento de información simbólica. PROLOG es una realización
aproximada del modelo de computación de Programación Lógica sobre una
máquina secuencial. Desde luego, no es la única realización posible, pero sí es la
mejor elección práctica, ya que equilibra por un lado la preservación de las
propiedades del modelo abstracto de Programación Lógica y por el otro lado
consigue que la implementación sea eficiente.
El lenguaje PROLOG juega un importante papel dentro de la Inteligencia
Artificial, y se propuso como el lenguaje nativo de las máquinas de la quinta
generación ("Fifth Generation Kernel Language", FGKL) que quería que fueran
Sistemas de Procesamiento de Conocimiento. La expansión y el uso de este
lenguaje propiciaron la aparición de la normalización del lenguaje Prolog con la
norma ISO (propuesta de junio de 1993).
PROLOG es un lenguaje de programación para ordenadores que se basa
en el lenguaje de la lógica de predicados y que se utiliza para resolver problemas
en los que entran en juego objetos y relaciones entre ellos. Por ejemplo, cuando
decimos "Jorge tiene una moto", estamos expresando una relación entre un
objeto (Jorge) y otro objeto en particular (una moto). Más aún, estas relaciones
Lógica de Computación
4
tienen un orden específico (Jorge posee la moto y no al contrario). Por otra parte,
cuando realizamos una pregunta (¿Tiene Jorge una moto?) Lo que estamos
haciendo es indagando acerca de una relación. Además, también solemos usar
reglas para describir relaciones: "dos personas son hermanas si ambas son
hembras y tienen los mismos padres". Como veremos más adelante, esto es lo que
hacemos en Prolog.
Una de las ventajas de la programación lógica es que se especifica qué se
tiene que hacer (programación declarativa), y no cómo se debe hacer
(programación imperativa). A pesar de esto, Prolog incluye algunos predicados
predefinidos metalógicos, ajenos al ámbito de la lógica de predicados, (var,
nonvar, ==, ...), otros extra-lógicos, que tienen un efecto lateral, (write, get, ...) y
un tercer grupo que nos sirven para expresar información de control de cómo
realizar alguna tarea ( el corte, ... ). Por tanto, Prolog ofrece un sistema de
programación práctico que tiene algunas de las ventajas de claridad y
declaratividad que ofrecería un lenguaje de programación lógica y, al mismo
tiempo, nos permite un cierto control y operatividad.
ENTORNO DE TRABAJO
En la figura podemos ver un esquema de la forma de trabajo en Prolog.
mediante un editor de texto escribiremos nuestra Base de Conocimientos
compuesta por distintos hechos y reglas que reflejan nuestro conocimiento acerca
del problema a formalizar. Para poder utilizarlo deberemos guardarlo en disco
Lógica de Computación
5
(disco duro o disquete). Posteriormente desde Prolog deberemos consultar el
fichero deseado. Una vez consultada la base de conocimientos correspondiente,
estaremos en condiciones de hacer las preguntas de las que queramos obtener
respuesta o que resuelvan el problema. Este ciclo se repetirá continuamente
(editar-guardar-consultar-preguntar) hasta que demos por finalizado nuestro
trabajo.
ESTILO DE PROGRAMACIÓN
Los lenguajes de Programación Lógica, al igual que los lenguajes
procedimentales, necesitan de una metodología para construir y mantener
programas largos, así como un buen estilo de programación. Prolog ofrece
mecanismos de control típicos de cualquier lenguaje imperativo y no puras
propiedades o relaciones entre objetos. Dichos mecanismos contribuyen a dar
mayor potencia y expresividad al lenguaje, pero violan su naturaleza lógica.
Adoptando un estilo apropiado de programación podemos beneficiarnos de esta
doble naturaleza de Prolog.
• Metodología de Diseño “top-down”: descomponemos el problema en
subproblemas y los resolvemos. Para ello solucionamos primero los pequeños
problemas: implementación “bottom-up”. Esto nos va a permitir una mejor
depuración («debugged») de nuestros programas, ya que cada pequeño trozo de
programa puede ser probado inmediatamente y, si lo necesita, corregido.
• Una vez analizado el problema y separado en trozos, el siguiente paso es
decidir cómo representar y manipular tanto los objetos como las relaciones del
problema. Debemos elegir los nombres de los predicados, variables, constantes y
estructuras de manera que aporten claridad a nuestros programas (palabras o
nombres mnemónicos que estén relacionados con lo que hacen).
• El siguiente paso es asegurarse de que la organización y la sintaxis del
programa sea clara y fácilmente legible:
- Llamamos procedimiento al conjunto de cláusulas para un predicado
dado. Agruparemos por bloques los procedimientos de un mismo predicado
Lógica de Computación
6
(mismo nombre y mismo número de argumentos). Así, cada cláusula de un
procedimiento comenzará en una línea nueva, y dejaremos una línea en blanco
entre procedimientos.
- Si el cuerpo de una regla es lo bastante corto, lo pondremos en una línea;
sino, se escriben los objetivos de las conjunciones indentados y en líneas
separadas.
- Primero se escriben los hechos, y luego las reglas.
- Es recomendable añadir comentarios y utilizar espacios y líneas en blanco
que hagan el programa más legible. El listado del programa debe estar
“autodocumentado”. Debemos incluir para cada procedimiento y antes de las
cláusulas el esquema de la relación.
- Los argumentos deben ir precedidos por el signos `+', `-' o `?'. `+' indica
que el argumento es de entrada al predicado (debe estar instanciado cuando se
hace la llamada), `-' denota que es de salida y `?' indica que puede ser tanto de
entrada como de salida
- Agrupar los términos adecuadamente. Dividir el programa en partes
razonablemente autocontenidas (por ejemplo, todos los procedimientos de
procesado de listas en un mismo fichero).
- Evitar el uso excesivo del corte. - Cuidar el orden de las cláusulas de un
procedimiento. Siempre que sea posible escribiremos las condiciones límite de la
recursividad antes de las demás cláusulas. Las cláusulas “recogetodo” tienen que
ponerse al final.
VENTAJAS Y DESVENTAJAS DE LA PROGRAMACIÓN LÓGICA
Ventajas
• La habilidad de PROLOG para calcular de forma procedural es una de las
ventajas específicas que tiene el lenguaje. Como consecuencia esto anima al
programador a considerar el significado declarativo de los programas de forma
Lógica de Computación
7
relativamente independiente de su significado procedural. Es decir, las ventajas
de la forma declarativa de este lenguaje son claras (es más fácil pensar las
soluciones y muchos detalles procedurales son resueltos automáticamente por el
propio lenguaje) y podemos aprovecharlas.
• Una ventaja desde el punto de vista del usuario es la facilidad para programar
ya que se pueden escribir programas rápidamente, con pocos errores originando
programas claramente legibles, aun si no se conoce muy bien el lenguaje.
• No hay que pensar demasiado en la solución del problema, ya que Prolog infiere
sus respuestas basándose en las reglas declaradas dentro del programa. 4.
Modularidad: cada predicado (procedimiento) puede ser ejecutado, validado y
examinado independiente e individualmente. Prolog no tiene variables globales,
ni asignación. Cada relación está auto contenida, lo que permite una mayor
modularidad, portabilidad y reusabilidad de relaciones entre programas. 5.
Polimorfismo: se trata de un lenguaje de programación sin tipos, lo que un alto
nivel de abstracción e independencia de los datos (objetos).
• En Prolog, se puede representar incluso los mismos programas Prolog como
estructuras.
• Prolog utiliza un mecanismo de búsqueda independiente de la base de hechos.
Aunque pueda parecer algo retorcido, es una buena estrategia puesto que
garantiza el proceso de todas las posibilidades. Es útil para el programador
conocer dicho mecanismo a la hora de depurar y optimizar los programas. 8.
Manejo dinámico y automático de memoria.
• En prolog se utiliza notación prefija e infija mientras que en Lisp solo utiliza
notación prefija.
Desventajas
• La resolución automática no siempre es eficiente, por lo que eventualmente se
podría dar una respuesta incorrecta a una consulta. 2. Poco eficientes. 3. Poco
utilizado en aplicaciones reales.
Lógica de Computación
8
• Prolog algunas veces es incapaz de reconocer que un problema es (para su
propio conocimiento) inaplicable o insuficiente. Si el programa no contiene
suficiente información para contestar una consulta, es incapaz de reconocerlo y
responde no. En esta situación sería más eficiente conocer que la respuesta no es
negativa, sino que no es posible inferir un resultado.
• Los motores de inferencia poseen algunos límites.
APLICACIONES DE PROLOG
RFuzzy: es una herramienta implementada sobre el lenguaje de
programación Prolog, que es capaz de representar y trabajar con lógica
difusa. Se ha utilizado para potenciar la inteligencia de los robots. RFuzzy
se ha aplicado para la programación de robots participantes en la liga
mundial de fútbol de robots (RoboCupSoccer), que se viene desarrollando
desde 1996 con la finalidad de desarrollar la robótica y la inteligencia
artificial. Desde otro punto de vista, la aplicación analiza las medidas
sonoras de una conversación, que se obtienen con otro programa
específico, y en base a las reglas descritas en la nueva aplicación, es capaz
de distinguir las emociones escondidas en una oración, pudiendo
determinar si una persona está triste, asustada, alegre o nerviosa. La
aplicación puede precisar, incluso si la emoción no está clara, el porcentaje
de adecuación del hablante a cada emoción. Fue presentado por la
profesora Susana Muñoz Hernández en la First International Conference
on Fuzzy Computation, celebrada en Madeira, Portugal, en el 2009.
Cloze (Técnica de la Inteligencia Artificial y Aprendizaje de Lenguas
hechas en Prolog): consiste, en la presentación de un texto escrito al cual
se le han sustituido palabras, según un criterio previamente establecido,
por una marca de longitud fija o un espacio de longitud proporcional a la
de la palabra. La tarea del sujeto consiste en adivinar y proponer la palabra
omitida a partir de las claves sintácticas o semánticas dadas por el
contecto. También es conocido como preguntas incrustadas. En el 2013 se
liberó un complemento para Moodle 1.9, 2.x y 3.x que permite la
producción de preguntas tipo Cloze mediante una interfaz gráfica, pero
Lógica de Computación
9
que modifica el editor HTML estándar de Moodle. Lo cual ayuda a
importar las preguntas dentro del módulo de Examen de Moodle.
Desarrollo de Sistemas Multi – Agentes desarrollados mediante JavaLog:
desarrollado utilizando Java y el intérprete de Prolog aumentado con un
algoritmo de programación lógica inductiva. es un sistema compuesto por
múltiples agentes inteligentes que interactúan entre ellos. Los sistemas
multi pueden ser utilizados para resolver problemas que son difíciles o
imposibles de resolver para un agente individual o un sistema monolítico.
Los ámbitos en los que la investigación de sistemas multi puede ofrecer un
enfoque adecuado incluyen el comercio online, la respuesta a desastres y
el modelado de estructuras sociales.
PROLOG Y LÓGICA DE PREDICADOS
La Lógica de Primer Orden analiza las frases sencillas del lenguaje
(fórmulas atómicas o elementales) separándolas en Términos y Predicados. Los
términos hacen referencia a los objetos que intervienen y los predicados a las
propiedades o relaciones entre estos objetos. Además, dichas fórmulas atómicas
se pueden combinar mediante Conectivas permitiéndonos construir fórmulas
más complejas, llamadas fórmulas moleculares.
Predicados
Se utilizan para expresar propiedades de los objetos, predicados
monádicos, y relaciones entre ellos, predicados poliádicos. En Prolog los
llamaremos hechos.
Debemos tener en cuenta que:
• Los nombres de todos los objetos y relaciones deben comenzar con una
letra minúscula.
• Primero se escribe la relación o propiedad: predicado
• Y los objetos se escriben separándolos mediante comas y encerrados
entre paréntesis: argumentos.
• Al final del hecho debe ir un punto (".").
Lógica de Computación
10
Ejemplo: símbolo_de_predicado(arg1,arg2,…,argn).
Tanto para los símbolos de predicado como para los argumentos,
utilizaremos en Prolog constantes atómicas.
Ejemplos (ej01.pl):
/* Predicados monádicos: PROPIEDADES */
/* mujer(Per) Per es una mujer */
mujer(clara).
mujer(chelo).
/* hombre(Per) Per es un hombre */
hombre(jorge).
hombre(felix).
hombre(borja).
/* moreno(Per) Per tiene el pelo de color oscuro */
moreno(jorge).
/* Predicados poliádicos: RELACIONES */
/* tiene(Per,Obj) Per posee el objeto Obj */
tiene(jorge,moto).
/* le_gusta_a(X,Y) a X le gusta Y */
le_gusta_a(clara,jorge).
le_gusta_a(jorge,clara).
le_gusta_a(jorge,informatica).
Lógica de Computación
11
le_gusta_a(clara,informatica).
/* es_padre_de(Padre,Hijo-a) Padre es el padre de Hijo-a */
es_padre_de(felix,borja).
es_padre_de(felix,clara).
/* es_madre_de(Madre,Hijo-a) Madre es la madre de Hijo-a */
es_madre_de(chelo,borja).
es_madre_de(chelo, clara).
/* regala(Per1,Obj,Per2) Per1 regala Obj a Per2 */
regala(jorge, flores, clara).
Términos
Los términos pueden ser constantes o variables, y suponemos definido un
dominio no vacío en el cual toman valores (Universo del Discurso). En la práctica
se toma como dominio el Universo de Herbrand. Para saber cuántos individuos
del universo cumplen una determinada propiedad o relación, cuantificamos los
términos.
Las constantes se utilizan para dar nombre a objetos concretos del
dominio, dicho de otra manera, representan individuos conocidos de nuestro
Universo. Además, como ya hemos dicho, las constantes atómicas de Prolog
también se utilizan para representar propiedades y relaciones entre los objetos
del dominio. Hay dos clases de constantes:
• Átomos: existen tres clases de constantes atómicas:
- Cadenas de letras, dígitos y subrayado (_) empezando por letra
minúscula.
- Cualquier cadena de caracteres encerrada entre comillas simples (').
Lógica de Computación
12
- Combinaciones especiales de signos: "?-", ":-", ...
• Números: se utilizan para representar números de forma que se puedan realizar
operaciones aritméticas. Dependen del ordenador y la implementación.
- Enteros: en la implementación de Prolog-2 puede utilizarse cualquier
entero que el intervalo [-223,223-1]=[-8.388.608,8.388.607].
- Reales: decimales en coma flotante, consistentes en al menos un dígito,
opcionalmente un punto decimal y más dígitos, opcionalmente E, un «+» o «-» y
más dígitos.
Ejemplos de constantes:
Las variables se utilizan para representar objetos cualesquiera del
Universo u objetos desconocidos en ese momento, es decir, son las incógnitas del
problema. Se diferencian de los átomos en que empiezan siempre con una letra
mayúscula o con el signo de subrayado (_). Así, deberemos ir con cuidado ya que
cualquier identificador que empiece por mayúscula, será tomado por Prolog como
una variable. Para trabajar con objetos desconocidos cuya identidad no nos
interesa, podemos utilizar la variable anónima (_). Las variables anónimas no
están compartidas entre sí.
Ejemplos de variables:
X
Sumando
Primer_factor
Lógica de Computación
13
_indice
_ (variable anónima)
Una variable está instanciada cuando existe un objeto determinado
representado por ella. Y está no instanciada cuando todavía no se sabe lo que
representa la variable. Prolog no soporta asignación destructiva de variables, es
decir, cuando una variable es instanciada su contenido no puede cambiar. Como
veremos más adelante, la manipulación de datos en la programación lógica se
realiza por medio de la unificación.
Explícitamente Prolog no utiliza los símbolos de cuantificación para las
variables, pero implícitamente sí que lo están. En general, todas las variables que
aparecen están cuantificadas universalmente, ya que proceden de la notación en
forma clausal, y, por tanto, todas las variables están cuantificadas
universalmente, aunque ya no escribamos explícitamente el cuantificador (paso
6ª de la transformación a forma clausal: eliminación de cuantificadores
universales). Pero veamos qué significado tienen dependiendo de su ubicación.
Si las fórmulas atómicas de un programa lógico contienen variables, el significado
de estas es:
• Las variables que aparecen en los hechos están cuantificadas
universalmente ya que en una cláusula todas las variables que aparecen están
cuantificadas universalmente de modo implícito.
Lógica de Computación
14
• Las variables que aparecen en la cabeza de las reglas (átomos afirmados)
están cuantificadas universalmente. Las variables que aparecen en el cuerpo de
la regla (átomos negados), pero no en la cabeza, están cuantificadas
existencialmente.
• Las variables que aparecen en las preguntas están cuantificadas
existencialmente.
SINTAXIS: HECHOS, PREGUNTAS Y REGLAS
Hecho: Para decir que Laura es uno de los dos progenitores de Damián,
podríamos declarar el siguiente hecho PROLOG:
Progenitor (laura, damian).
“progenitor” es el nombre de la relación o nombre de predicado y “laura” y
“damian” son los argumentos. Los hechos acaban siempre con punto. Nosotros
interpretaremos que Laura, primer argumento de la relación, es la madre de
Damián, segundo argumento de la relación. Sin embargo, este orden es arbitrario
y cada programador puede darle su propio significado. Los nombres de las
relaciones y los argumentos que se refieren a objetos o personas concretas se
escribirán con minúscula.
Preguntas: Sobre un conjunto de hechos se pueden realizar una serie de
preguntas. Por ejemplo:
?- le_gusta_a (juan,maria).
Lógica de Computación
15
PROLOG busca automáticamente en la base de datos si existe un hecho
que se puede unificar (es decir, tiene el mismo nombre de predicado, el mismo
número de argumentos o arista y cada uno de los argumentos tiene el mismo
nombre, uno a uno) con el hecho que aparece en la pregunta. PROLOG contestará
“SI” si encuentra ese hecho y “NO” si no lo encuentra. La contestación “NO” no
implica que el hecho sea falso (aunque sí lo sea para nuestra base de datos), sino
que no se puede probar (en general) que sea verdadero con el conocimiento
almacenado en la base de datos.
Reglas: Existe en PROLOG la posibilidad de definir la relación
“abuelo(X,Y)” o la relación “tio(X,Y)” como reglas, además de poderlo hacer como
hechos o como conjunción de objetivos. Ejemplo:
Abuelo(X, Y):- progenitor(X,Z), progenitor(Z,Y). tio(X,Y):- progenitor(Z,Y),
progenitor(V,Z), progenitor(V,X).
A la primera parte de la regla se le llama cabeza o conclusión, el símbolo
":-" es el condicional (SI), y a la parte de la regla que está después de “:-“ es el
cuerpo o parte condicional. El cuerpo puede ser una conjunción de objetivos
separados por comas. Las preguntas se le hacen al programa para determinar qué
cosas son ciertas.
SINTAXIS: OBJETOS ESTRUCTURADOS. LISTAS.
Los objetos estructurados (o estructuras) en PROLOG son términos de la
forma f(t1, ..., tn) donde f es un símbolo de función n-ario, o funtor, y t1, ..., tn
son a su vez términos (que pueden ser constantes, variables o a su vez
estructuras).
Ejemplos de estructuras son las siguientes: libro(moby-dick,
autor(herman, melville)) a+(b*c) ó +(a, *(b, c))
Los ejemplos anteriores se representarían de la forma:
Lógica de Computación
16
Las estructuras se suelen representar por árboles donde el autor es un
nodo y los componentes son los subárboles que cuelgan de dicho nodo.
Una lista es una secuencia ordenada de elementos que puede tener
cualquier longitud. Los elementos de una lista (como los de cualquier otra
estructura) son términos, los cuales pueden ser en particular otras listas. Las
listas pueden representarse como un tipo especial de árbol. Una lista es o bien la
lista vacía, sin elementos, denotada [ ], o bien una estructura cuyo funtor se
denota "." (punto) y con dos componentes llamados "cabeza" y "resto" de la lista.
La lista con un solo elemento a es :(a, [ ]) y su árbol es:
La lista que consta de los elementos a, b y c sería: .(a, .(b, .(c, [ ]))) y en
forma de árbol es:
Pero la forma sintáctica más habitual de escribir las listas es separando los
elementos entre comas y toda la lista encerrada entre corchetes. Las listas
anteriores se escribirían de la forma:
Lógica de Computación
17
[a] y [a,b,c]
La forma de manejar las listas es dividiéndolas en cabeza (el primer
argumento del funtor punto o el primer elemento de la lista) y resto (el segundo
argumento del funtor punto o la lista formada por el resto de elementos de la
lista).
Lógica de Computación
18
REGLA DE RESOLUCIÓN
Se obtiene a partir de una pregunta y una sentencia del programa, una
nueva pregunta. En concreto: Dada la pregunta ?A1, A2, ,..., An. donde A1 es un
átomo de la forma p(t1, …, tk) y dada una sentencia del programa B:- B1, B2, ... ,
Bm. Con cabeza B de la forma p(s1, …, sk), si A1 y B son unificables se aplica la
regla de resolución para obtener una nueva pregunta (llamada “resolvente”) ? (B1,
B2, ..., Bm, A2,..., An) g siendo g el umg de los átomos A1 (primer fin de la
pregunta) y B (cabeza de la regla).
Gráficamente
En particular, cuando tenemos una pregunta con un único fin ?A de la
forma p(t1, …, tk) que se resuelve con un hecho del programa B de la forma p(s1,
…, sk), el resultado de aplicar la regla de resolución es la pregunta vacía, que lo
expresaremos con
Es decir, si existe un umg g tal que A g = B g, entonces la nueva pregunta
es vacía lo que significa que la pregunta inicial es cierta para ese programa.
En concreto, el procedimiento a seguir es el siguiente:
Dada una pregunta de la forma ?A1, A2, .., An. se buscará la primera
sentencia del programa B:-B1, ..., Bm. tal que A1 y B sean unificables por un umg
Lógica de Computación
19
g. PROLOG elige (de entre las posibles sentencias cuya cabeza B se unifica con
A1) la primera introducida en el programa.
Por tanto, el orden en que se introducen las sentencias de un programa es
significativo, entre otras cosas determinará el orden de las respuestas.
Entonces la nueva pregunta (el resolvente) será ?(B1, ..., Bm, A2, ..., An) g.
El proceso continuará de igual forma hasta obtener la pregunta vacía (lo
que corresponde a un éxito), o una pregunta para la cual no exista resolvente con
ninguna sentencia del programa (lo que corresponderá a un fracaso). Esta
estrategia de resolución que sigue PROLOG se denomina estrategia de resolución
SLD. La secuencia de pasos desde la pregunta original hasta la pregunta vacía se
llama refutación SLD.
Ejemplo:
Lógica de Computación
20
RECORRIDO EN EL ESPACIO DE BUSQUEDA
PROLOG es capaz de dar todas las posibles respuestas a una pregunta, es
decir, buscará todas las posibles refutaciones SLD. El espacio de búsqueda de
soluciones se puede representar mediante un árbol, donde cada rama representa
una posible refutación SLD. (En lugar de expresar en cada paso de resolución la
pregunta a tratar y la sentencia con la que se resuelve, tal y como vimos en el
apartado anterior, indicaremos únicamente el número de la sentencia con la que
se resuelve dicha pregunta, tal y como se muestra en la figura siguiente.)
La exploración del árbol de soluciones PROLOG, es en profundidad, es
decir, explora una rama del árbol hasta llegar al final de ella (a un éxito o fracaso)
y sólo después recorrerá las siguientes ramas de la misma forma. Si dibujamos el
árbol de búsqueda de manera que las distintas posibilidades de resolución de
cada objetivo se dibujen ordenadamente de izquierda a derecha (tal y como se
Lógica de Computación
21
muestra en el árbol del ejemplo), entonces el orden de exploración de las ramas
es de izquierda a derecha.
El árbol de búsqueda de soluciones para una pregunta y un programa
dados, representa todos los caminos que el sistema debe recorrer para encontrar
las respuestas a la pregunta. Pero, ¿Qué ocurre cuando se llega al final de la rama?
- Si ha sido un éxito (se obtiene ) corresponde a una respuesta del sistema.
- Si ha sido un fracaso se debe seguir buscando por otra rama hasta
encontrar una refutación. El proceso a seguir es hacer una vuelta atrás por los
nodos recorridos hasta llegar a alguno del que salga otra rama. Entonces se
recorre esta rama en profundidad y así sucesivamente.
Por tanto, el recorrido en el árbol es en PROFUNDIDAD y con VUELTA
ATRAS a la última elección hecha. Este proceso de vuelta atrás para recorrer más
ramas del árbol, no sólo se hace para encontrar la primera refutación (que
corresponde a la primera respuesta del sistema), sino también si se quieren
encontrar otras posibles refutaciones (otras posibles respuestas).
Ejemplo:
Veamos el proceso para la pregunta ?es-hija(Z, haran).
- Esta pregunta se unifica con la cabeza de la regla 19 (paso 1), se hace una marca
para esta pregunta en el programa y se intentan satisfacer los fines de la pregunta
?es-padre(haran, Z), es-mujer(Z).
Lógica de Computación
22
- Se comienza siempre con el fin más a la izquierda, en este caso con ?es-
padre(haran, Z). Este fin se satisface al resolverse con el hecho 5. (paso 2), donde
la variable Z se ha instanciado a lot por g11, se hace una marca para este fin en
dicho punto del programa y se pasa a satisfacer la nueva pregunta obtenida que
es ?es-mujer(lot).
- Como el nuevo fin ?es-mujer(lot) fracasa se hace una vuelta atrás (paso 3),
intentando resatisfacer el fin ?es-padre(haran, Z) (la ligadura de la variable Z con
lot se ha deshecho), buscando desde el punto del programa donde se encontraba
la marca de este fin en adelante (es decir, desde el hecho 6 en adelante).
- Ahora se satisface ?es-padre(haran,Z) al resolverse con el hecho 6 (paso 4) por
lo que se hace una marca para este fin en dicho punto del programa y se pasa a
satisfacer el siguiente fin, que con el nuevo unificador g12 es ?es-mujer(milcah).
- Este fin se satisface al resolverse con el hecho 16 (paso 5) y se hace la marca
correspondiente. Como los dos subfines se han satisfecho, el objetivo principal
?es-hija(Z,haran) también se ha resuelto. Ya se ha encontrado una refutación y
por tanto una respuesta. El sistema contesta con: Z=milcah.
- Si se quieren más respuestas (el usuario escribe ;) el proceso es análogo a si el
último fin ?es-mujer(milcah) hubiera fracasado, es decir, se fuerza de nuevo a
hacer vuelta atrás (paso 6 y paso 7), intentando resatisfacer el fin ?es-
padre(haran,Z) (la ligadura de la variable Z con milcah también se deshace).
- Ahora se busca desde el punto del programa donde se encontraba la marca de
este fin, es decir, desde el hecho 7 en adelante. El proceso es análogo hasta
encontrar la siguiente refutación (pasos 8 y 9) que da lugar a la segunda respuesta
Z=yiscah. Si de nuevo se piden más respuestas, el sistema hace vuelta atrás hasta
el primer objetivo (pasos 10, 11 y 12) y termina (no hay más resoluciones
posibles).
BASE DE DATOS
Es un conjunto de datos pertenecientes a un mismo contexto y
almacenados sistemáticamente para su posterior uso.
Lógica de Computación
23
Un ejemplo sencillo es comparar una base de datos con una biblioteca;
donde la biblioteca está compuesta en su mayoría por documentos y textos
impresos en papel e indexados para su consulta. Actualmente, y debido al
desarrollo tecnológico de campos como la informática y la electrónica, la mayoría
de las bases de datos están en formato digital, siendo este un componente
electrónico, y por ende se ha desarrollado y se ofrece un amplio rango de
soluciones al problema del almacenamiento de datos.
BASES DE DATOS DEDUCTIVAS
Es un sistema de base de datos, pero con la diferencia de que permite hacer
deducciones a través de inferencias. Se basa principalmente en reglas y hechos
que son almacenados en la base de datos.
Las bases de datos deductivas tienen tres componentes principales: los
hechos, las reglas y el motor de inferencia. Los hechos corresponden a los tuples
en una base de datos relacional. La única diferencia es que se indica el nombre
del tuple pero no se indican los nombres de los atributos. Las reglas indican cómo
deducir hechos nuevos a partir de los hechos almacenados y cómo deducir
relaciones indirectas entre las entidades. Estas reglas se escriben usando un
lenguaje declarativo y, por lo tanto, se indica lo que se desea, pero no se indica el
algoritmo para llegar a esa meta. El motor de inferencia es el que implementa el
algoritmo para deducir nuevos hechos y relaciones a partir de las reglas y los
hechos almacenados.
Las bases de datos deductivas son también llamadas bases de datos
lógicas, a raíz de que se basa en lógica matemática. Este tipo de base de datos
surge debido a las limitaciones de la Base de Datos Relacional de responder a
consultas recursivas y de deducir relaciones indirectas de los datos almacenados
en la base de datos.
Ventajas.
Uso de reglas lógicas para expresar las consultas.
Permite responder consultas recursivas.
Cuenta con negaciones estratificadas.
Lógica de Computación
24
Capacidad de obtener nueva información a través de la ya
almacenada en la base de datos mediante inferencia.
Uso de algoritmos de optimización de consultas.
Soporta objetos y conjuntos complejos.
Desventajas
Encontrar criterios de interpretación para las reglas deductivas.
Replantear un contexto deductivo.
Desarrollar procedimientos eficaces de deducción.
Lenguaje
Las bases de datos deductivas utilizan un subconjunto del lenguaje Prolog,
llamado Datalog; el cual es declarativo y permite al ordenador hacer deducciones
para contestar a consultas basándose en los hechos y reglas almacenados.
Fases
Fase de Interrogación: Se encarga de buscar en la base de datos
informaciones deducibles implícitas. Las reglas de esta fase se denominan reglas
de derivación.
Fase de Modificación: Se encarga de añadir a la base de datos nuevas
informaciones deducibles. Las reglas de esta fase se denominan reglas de
generación.
Interpretación
Se encuentran dos teorías de interpretación de las bases de datos
deductiva; se consideran las reglas y los hechos como axiomas. Los hechos son
axiomas base que se consideran como verdaderos y no contienen variables. Las
reglas, son axiomas deductivos ya que se utilizan para deducir nuevos hechos.
Teoría de Modelos: Consiste en asignar a un predicado todas las
combinaciones de valores y argumentos de un dominio de valores constantes
dado. A continuación, se debe verificar si ese predicado es verdadero o falso.
Mecanismos
Lógica de Computación
25
Existen dos mecanismos de inferencia:
Ascendente: Donde se parte de los hechos y se obtiene los nuevos,
aplicando reglas de inferencia.
Descendente: Donde se parte del predicado (objetivo de la consulta
realizada) e intenta encontrar similitudes entre las variables que nos lleven a
hechos correctos almacenados en la base de datos.
LOGICA MODAL
Una lógica modal es un sistema formal que intenta capturar el
comportamiento deductivo de algún grupo de operadores modales. Los
operadores modales son expresiones que califican la verdad de los juicios. Por
ejemplo, en la oración «es necesario que 2+2=4», la expresión «es necesario que»
es un operador modal que califica de necesaria a la verdad del juicio «2+2=4».
En un sentido más restringido, sin embargo, se llama lógica modal al
sistema formal que se ocupa de las expresiones «es necesario que» y «es posible
que». Este artículo trata exclusivamente sobre este sistema formal. Otros
sistemas de lógica modal conocidos son la lógica deóntica, la lógica temporal, la
lógica epistémica y la lógica doxástica.
Vamos a definir ahora la sintaxis formal del lenguaje modal básico.
La signatura del lenguaje va a consistir de dos conjuntos infinitos
numerables, disjuntos entre sí:
o PROP = {p1, p2, . . . }, el conjunto de variables
proposicionales.
o REL = {R1, R2, . . . }, el conjunto de símbolos de relación.
El conjunto de fórmulas FORM en la signatura (PROP, REL) está
definido como:
FORM := p | ¬ϕ | ϕ ∧ ψ | (R)ϕ en donde p ∈ PROP, R ∈ REL y ϕ, ψ ∈
FORM.
Lógica de Computación
26
El operador [R] se define como [R]ϕ = ¬(R)¬ϕ (de igual forma que
∀x.ϕ es ¬∃x.¬ϕ)
PROPIEDADES DE LA LOGICA MODAL
UTILIDAD DE LA LOGICA MODAL
La lógica tiene importantes funciones en la construcción de las teorías
científicas, como las siguientes: El razonamiento valido, establecido y examinado
por la lógica formal, es utilizado, ya sea para concluir o para derivar
conocimientos contenidos. La sistematización de las ciencias es posible gracias a
la lógica, que permite el establecimiento de ciertos postulados básicos
relacionados lógicamente entre sí. Con la lógica formal, además, es posible probar
indirectamente ciertos conocimientos a partir de conocimientos previamente
establecidos y verificados, los cuales sirven de premisas de las que pueden
inferirse a los otros como conclusiones válidas. La lógica informal, que pretende
no solo examinar la corrección de las argumentaciones sino enseñarnos a
argumentar y ser más racionales. La lógica de investigación se interesa por la
verdad y la manera de obtenerla y fundamentarla, estudiando la practica
científica.
LOGICA TEMPORAL
La lógica temporal es una extensión de la lógica modal, la cual es
prácticamente usada en sistemas de reglas, donde está presente el tiempo. Existe
Lógica de Computación
27
una cierta relación con otras variedades de lógica, por ejemplo, la lógica modal.
Su estudio tiene importancia en la informática hasta nuestros días.
Por ejemplo, tomemos la sentencia: "Tengo hambre"; aunque su
significado es independiente del tiempo, el valor de verdad o falsedad de la misma
puede variar con el tiempo en un determinado sistema que incluya acciones de
comer; así, en función del sistema, algunas veces será cierta y otras falsa, aunque
nunca será cierta y falsa simultáneamente.
PROPIEDADES DE LA LOGICA TEMPORAL
Algunas de las propiedades típicas que suelen ser especificadas son:
● Alcanzabilidad: es posible alcanzar una situación.
● Seguridad: es seguro que una situación no sucederá.
● Vivacidad: si empieza debe terminar.
● Equidad: un número infinito de veces una situación se podrá dar, se dará
o no se dará nunca. Las propiedades son especificadas normalmente a través de
lógica temporal.
SISTEMAS LOGICOS BASADOS EN LOGICA TEMPORAL
Algunos sistemas lógicos basados en lógica temporal son: Lógica
computacional en árbol (Computational tree logic, CTL), lógica temporal lineal
(Linear-Time temporal logic, LTL) y Lógica temporal de intervalos (Interval
temporal logic, ITL).
USOS DE LA LOGICA TEMPORAL
Lógica de Computación
28
LTL es una lógica temporal que nos permite referirnos al futuro, en la que
el tiempo se modela como una secuencia infinita de estados. A esta secuencia de
estados a veces se le llama ruta. LTL fue propuesto por primera vez para la
verificación formal de programas de ordenador mediante Amir Pnueli en 1977.
CTL es ampliamente utilizada en:
● Verificación: Tanto de sistemas hardware como sistemas software.
● Inteligencia Artificial: En particular, en sistemas de planificación de
agentes, en los que cada agente planifica sus estrategias de acción teniendo en
cuenta las diferentes opciones futuras.
● Formalización de especificaciones y comportamientos de sistemas
top related