Bases de datos Deductivas Borja Compés Mancisidor 3ºITIS INDICE 1.-Que es una base de datos deductiva 2.-Introduccion a las bases de datos deductivas 3.-Prolog/datalog(notación prolog) 4.-Datalog 5.-Clausulas de Horn 6.-Interpretacion de las reglas 7.-Mecanismos de inferencia(ascendente y descendente) 8.-Programas en Datalog y su evaluación 9.-Sistema LDL BASES DE DATOS DEDUCTIVAS ¿Que es una base de datos deductiva? Dados una serie de datos o hechos almacenados en una base de datos, se dice q ésta es Deductiva si es capaz de definir una serie de reglas con las cuales deducir información adicional. También reciben el nombre de Bases de datos lógicas debido a la capacidad que tienen de reaccionar frente a los hechos o reglas. Introducción En estos sistemas de bases de datos deductivos (BDD) se utiliza un lenguaje declarativo para definir y especificar las reglas. De éstas hablaremos mas adelante dando una serie de definiciones para su creación y su definición. Un lenguaje declarativo, es un lenguaje que define lo que un programa desea lograr, y no especifica los detalles de cómo lograrlo. En este texto hablaremos primeramente de los lenguajes declarativos, centrándonos en dos lenguajes; el Prolog, y el Datalog,(siendo Datalog un subconjunto del Prolog) posteriormente hablaremos sobre los distintos maquinas de inferencia, siendo estos mecanismo de deducción, para utilización de las consultas, y para lograr nuevos hechos a partir de las reglas ya establecidas. Una base de datos utiliza dos tipos de especificaciones, los hechos y las reglas. Los hechos se especifican de manera similar a como se especifican las relaciones, excepto que no es necesario incluir los nombres de los atributos. En las bases de datos deductivas, el significado de un atributo en la tupla queda determinado exclusivamente por su posición dentro de la tupla. Por ejemplo: Estudia(jon,física) Así se representaría una tupla, siendo los atributos jon y física y su significado “jon estudia física” Las reglas especifican relaciones abstractas que no están almacenadas realmente, si no que se pueden formar a partir de los hechos aplicando alguna regla de inferencia. O mecanismo de inferencia. Comenzamos con las distintas notaciones de los lenguajes declarativos. Prolog/Datalog Veamos cual es la notación para escribir reglas en Prolog y en datalog. Esta notación se basa en proveer predicados con nombres únicos. Estos nombres deberán tener algún significado implícito, sugerido siempre por su nombre, como en el caso anterior “Estudia(jon, física)” claramente se puede entrever el significado de este predicado; “jon estudia física”. También es posible colocar variables como atributos de estos predicados, para poder diferenciar en tres valores constantes y los valores fijos de estos predicados, existe la convención en Prolog de que las variables deberán empezar con una letra mayúscula mientras q los valores fijos con minúscula. Veamos un ejemplo: Hechos 1)Supervisar(federico,josé). 2)Supervisar(federico,ramon). 3)Supervisar(federico,Josefa), 4)supervisar(jazmín,alicia), 5)supervisar(jazmín,ahmed). 6)Supervisar(jaime,federico). 7)Supervisar(jaime,jazmín). ... Reglas 8)Superior(X,Y):-supervisar(X,Y). 9)Superior(X,Y):-supervisar(X,Z),superior(Z,Y). 10)Subordinado(X,Y):-superior(Y,X). ... Consultas: Superior(jaime,Y)? Superior(jaime,josefa)? Estos hechos y reglas nos darían una serie de relaciones del siguiente tipo: El predicado supervisar se define mediante un conjunto de hechos, cada uno de los cuales tiene dos argumentos, un nombre de supervisor seguido del nombre del supervisado directo (subordinado) de ese supervisor. estos hechos corresponden a datos reales almacenados en la base de datos, y puede considerarse que constituyen un conjunto de tuplas de una relación SUPERVISAR con dos atributos cuyo esquema es: SUPERVISAR(Supervisor,Supervisado)“Supervisor SUPERVISA Supervisado” Los otros dos nombres de predicados se definen mediante reglas, La característica principal de este tipo de bases de datos radica en la capacidad de especificar reglas recursivas y de proporcionar formas de lograr mayor información a partir de las reglas ya especificadas. Las reglas tienen la forma de cabeza:-cuerpo con un predicado en la parte de la izquierda (denominada LHS left hand side) y una o mas en la parte derecha (RHS right hand side) en esta parte derecha los predicados que aparecen podrían verse como características que se debe cumplir para que se verifique el predicado de la cabeza, de esta forma si estos predicados en RHS son verdaderos hacen verdad el de cabeza, cuando se utilizan valores fijos. La forma de separación entre los predicados de la derecha, se podría ver como una conjunción Y, dado que se debe cumplir el predicado1 Y predicado2 Y....etc. Expliquemos ahora por ejemplo las siguiente reglas: Superior(X,Y):-supervisar(X,Y). Superior(X,Y):-supervisar(X,Z),superior(Z,Y). El predicado superior, hace referencia a que X es superior directo o indirecto de Y, indirecto quiere decir que Y puede ser un subordinado de un subordinado, y asi hasta cualquier nivel. Esto se ve en las reglas dado que en la primera se expresa que X supervisa a Y por lo tanto X es superior a Y. En la segunda regla vemos la declaración recursiva, o en la que se observa que también es superior de alguien jerárquicamente mas bajo, dado que si X supervisa a Z, y Z es superior a Y, tenemos que X es superior a Y. Esto es un ejemplo de una regla recursiva. Además de los predicados que podamos declarar, el sistema Prolog también posee una serie de ellos integrados, como las operaciones de comparación; =(X,Y), <,>,<=,>=. Así mismo posee funciones aritméticas como la suma , división y multiplicación, Datalog no posee estas ultimas siendo esta carencia una de las principales diferencias entre los dos lenguajes, pero se han propuesto extensiones de Datalog que incluyen estas funciones. Una consulta contiene un símbolo como predicado, o una palabra, y algunos argumentos variables, y su significado, es deducir las diferentes combinaciones de constantes que, cuando se enlazan a las variables, pueden hacer que se cumpla el predicado. Cojamos por ejemplo la primera consulta del ejemplo: Superior(jaime,Y)? Esta consulta solicita los nombres de todos los subordinados de jaime en cualquier nivel. La segunda consulta al contener únicamente valores constantes como atributos, devolvería únicamente un valor booleano. Notación Datalog. Datalog es un subconjunto de Prolog, en donde se definen declarativamente las reglas, junto con un conjunto de relaciones existentes que se tratan como literales en el lenguaje. Se compone de una serie de objetos llamados formulas atómicas. Estas formas tienen una forma similar a los predicados de prolog, “p(a1,a2....an) donde p es el nombre del predicado , n el numero de argumentos. Este valor n, se llama aridad de p. Los predicados integrados de Datalog son del tipo: less, less_or_equal, greater or greater_or_equal.. Un programa escrito en datalog se podría considerar como una serie de formulas del calculo de predicados, Estas formulas, se componen de una condición que con tiene predicados llamados átomos que están basados en los nombres de las relaciones. En datalog estas formulas se convierten primero en lo que se conoce como forma clausal antes de expresarse en datalog, y solo pueden utilizarse en datalog formulas dadas en una forma clausal restringida, llamadas cláusulas de Horn. Clausulas de Horn Una cláusula de horn deberá tener la siguiente estructura: B ^ C => Z Ó Z<= B ^ C Teniendo en cuenta lo que hemos visto sobre las formulas atómicas y de estas pueden ser positivas o negativas si consideramos una cláusula de la siguiente forma: Not (p1) or not(p2) or not(p3) or q1 Tendríamos una formula equivalente que nos daría: P1 and p2 and p3 => q1 Lo cual nos da una cláusula de horn. Esto escrito en Datalog daría la siguiente forma Q1(p1,p2,p3) Como se interpretan las reglas Existen dos mecanismos para interpretar las reglas, una es por la teoria de demostraciones y otra por la teoría de modelos. La forma de utilización viene dado por el mecanismo de inferencia (del que hablaremos mas adelante). Este mecanismo realiza una serie de cómputos del significado de las reglas. 1º Teoría de demostraciones. Los hechos se dan por ciertos, y las reglas sirven para deducir hechos nuevos. A los hechos se les denomina Axiomas base , y a las reglas axiomas deductivos, ya que pueden servir para deducir hechos nuevos. Ejemplo: 1 superior(X,Y):-supervisar(X,Y). 2 superior(X,Y):-supervisar(X,Z),superior(Z,Y) (regla 1) (regla 2) 3 supervisar(jazmín,ahmed), 4 supervisar(jaime,jazmín), 5 superior(jazmín,ahmed) 6 superior(jaime,ahmed):-supervisar(jaime,jazmín),superior(jazmín,ahmed). (axioma base,dado) (axioma base,dado) (aplicar la regla 1 a 3) (aplicar la regla 2 a 4 y 5) El ejemplo demuestra el hecho superior(jaime,ahmed), a partir de los hechos y reglas anteriores. 2º Interpretación por la teoría de modelos. Dado un modelo finito o infinito de valores constantes, asignamos a un predicado todas las combinaciones posibles de valores como argumentos. después deberemos determinar si el predicado es verdadero o falso. En general basta con especificar las que se hacen verdadero y decir que para el resto se hace falso. Mecanismos de Inferencia Existen dos tipos principales de mecanismos de inferencia computacional que se basan en la teoría de las demostraciones, estas son los mecanismos de inferencia ascendente o mecanismos de inferencia descendentes. Mecanismos de inferencia ascendentes También llamado encadenamiento hacia delante o resolución ascendente. parte de los hechos y aplica las reglas para generar hechos nuevos, estos se comparan con el predicado que es el objetivo de la consulta para ver si coinciden. Tomando el ejemplo anterior: Hechos Supervisar(federico,josé). Supervisar(federico,ramon). Supervisar(federico,Josefa), supervisar(jazmín,alicia), supervisar(jazmín,ahmed). Supervisar(jaime,federico). Supervisar(jaime,jazmín). ... Reglas Superior(X,Y):-supervisar(X,Y). Superior(X,Y):-supervisar(X,Z),superior(Z,Y). Subordinado(X,Y):-superior(Y,X). Consultas: Superior(jaime,Y)? Superior(jaime,josefa)? En la consulta Superior(jaime,Y)? Este mecanismo lo que haría es primeramente ver si el predicado de la consulta coincide con algún hecho, en este caso no coincide, por lo tanto se van generando nuevos hechos derivados a partir de las reglas como podrían ser: Hechos derivados: Superior(federico,josé). Superior(federico,ramon). Superior(federico,Josefa), superior (jazmín,alicia), superior(jazmín,ahmed). Superior(jaime,federico). Superior(jaime,jazmín). (Estos hechos derivados aparecen a partir de los hechos dados, y de la regla Superior(X,Y):-supervisar(X,Y)) En un principio la consulta no devuelve resultados dado que hasta que Y toma el valor de federico, no ha encontrado ningún resultado adecuado para la consulta. En estos momentos tenemos el primer valor resultado, el segundo seria Y=jazmín y posteriormente y de forma recursiva, utilizando la regla “superior(X,Y):- supervisar(X,z),superior(Z,Y), tendremos todos los subordinados indirectos de jaime.: Superior(jaime,jose) Superior(jaime,ramon) Superior(jaime,josefa) Superior(jaime,alicia) Superior(jaime,ahmed) Mecanismo de inferencia descendente Los interpretes de Prolog utilizan los mecanismos de inferencia descendente, también llamados encadenamiento hacia atrás, y resolución descendente. Se basa en partir del predicado que es el objetivo de la consulta y encontrar las coincidencias con las variables que conduzcan a hechos validos en la base de datos. Tomando el mismo ejemplo anterior con la consulta superior(jaime,Y)?, el sistema primeramente buscara en los hechos algún tipo de coincidencia con esta consulta, teniendo como primer argumento la palabra jaime. En este caso los hechos tienen predicados Supervisar, por lo que no hay coincidencia. En segundo lugar visto que no hay coincidencia en los hechos, buscara nuevamente pero esta vez en las reglas, y se encuentra que si existe en la primera: Superior(X,Y):-supervisar(X,Y). Intercambiando el valor de X por jaime y aplicando la regla buscaremos con supervisar(jaime,Y) en los hechos. Dando los valores federico y jazmín a la variable Y. En tercer lugar continuamos viendo las reglas, toca el turno de la regla Superior(X,Y):-supervisar(X,Z),superior(Z,Y). Algo mas compleja volvemos a sustituir el valor de X por jaime, en este caso deberemos de resolver los predicados supervisar(X,Z),superior(Z,Y) para satisfacer la cabecera, entonces tomamos los resultados obtenidos anteriormente y damos a Z el valor de Federico y jazmín, de forma que la formula nos quedaria: Superior(jaime,Y):-supervisar(jaime,federico),superior(federico,Y) En estos momentos debemos buscar hacer verdadero superior(jaime,Y) y para ello volvemos a realizar lo mismo que en el primer paso con el predicado superior(federico,,Y) dándonos como resultado tras la ejecución de la primera regla todos los subordinados de federico, posteriormente realizamos la misma operación pero esta vez con jazmín, y tendríamos todos los subordinados de jazmín quedando como resultado: Superior(jaime,federico). Superior(jaime,jazmín). Superior(jaime,jose) Superior(jaime,ramon) Superior(jaime,josefa) Superior(jaime,alicia) Superior(jaime,ahmed) En este método se han propuesto diferentes soluciones para poder agilizar las operaciones como por ejemplo dar prioridades a algunas reglas que darían mas resultados, o la posibilidad de realizar estas búsquedas en paralelo. Programas en datalog y su evaluación Es posible la creación de programas inseguros, por ejemplo relizando una consulta cuyo resultado sea infinito, esto puede ser por ejemplo, suponiendo q tenemos una serie de hechos Sueldo(X,Y) donde X es un nombre y Y es un valor entero, si hacemos una consulta como; Sueldo_grande(Y):-Y>6000 entonces nos daría una cantidad infinita de resultados, lo que provocaría diversos problemas. Programas como estos se pueden reparar reajustando las formulas, y añadiendo algún tipo de tope, o haciendo que realice la búsqueda sobre una cantidad fija de elementos, de modo que no habría tal cantidad de resultados. Como reglas principales para evitar resultados infinitos existen unas reglas a cumplir con respecto a los atributos que aparecen en las reglas, de esta forma se dirá que esos atributos son limitados. a)aparece en un predicado normal (no integrado) en el cuerpo de la regla. b)aparecen en formas como las siguientes, donde X es la variable y c los valores constantes: X=c o c=X o (C1 <=X and X<= C2) c)aparece en un predicado de la forma X=Y o Y=X en el cuerpo de la regla, donde Y es una variable limitada. Una regla se dice que es segura, si sus variables son limitadas. Sistemas LDL. El proyecto Logic Data Languaje (Lenguaje Lógico de dato: LDL) de Microelectronics and Computer Corporation (MCC) se inicio en 1984 con dos objetivos primarios: -Crear un sistema que extendiera el modelo relacional y a la vez que aprovechara algunas de las características positivas de un SGBDR. -Mejorar la funcionalidad de un SGBD de modo que operara como un SGBD deductivo y ademas permitiera la creación de aplicaciones de propósito general. Ahora el sistema resultante es un SGBD deductivo que se encuentra en el mercado. Aplicaciones de LDL El sistema LDL se ha utilizado en los siguientes dominios de la aplicación: -Modelado de empresas: este dominio implica modelar la estructura, los procesos y las restricciones dentro de una empresa. Los datos relacionados con ella pueden resultar en modelo ER extendido que contiene cientos de entidades y vínculos y miles de atributos. Es posible desarrollar varias aplicaciones útiles para los diseñadores de nuevas aplicaciones (asi como para los gerentes) a partir de esta “metabase de datos”, que contiene información tipo diccionario a cerca de toda la empresa. Prueba de hipótesis o dragado de datos: este dominio implica formular una hipótesis, traducirla a un conjunto de reglas LDL y una consulta y luego ejecutar la consulta contra los datos para probar la hipótesis. El proceso se repite reformulando las reglas y la consulta. Esto se ha aplicado al análisis de datos de genoma en el campo de la microbiología. El dragado de datos consiste en identificar las secuencias de DNA a partir de autoradiografias digitalizadas de bajo nivel obtenidas de experimentos con bacterias E.coli. Reutilización del software: Una pequeña fracción de una aplicación se basa en reglas y se codifica en LDL.Por ejemplo, en cada modulo en C empleado en un programa se pueden definir un conjunto de reglas que definen las formas en que los módulos pueden exportar/importar funciones. Conclusión La utilización de bases de datos deductivas se ha realizado principalmente en la realización de prototipos de bases de datos de mayor tamaño, esto es, en creación de una “pequeña” base de datos sobre la cual realizar algunas consultas para probar o verificar dichas consultas. Pero una BDD también tiene capacidad para el almacenamiento de bases de datos de mayor tamaño, pudiéndose representar cualquier base de datos relacional como BDD. GNU prolog Existe una versión de prolog gratuita para plataformas uníx/linux y para plataformas windows, la pagina donde poder adquirirlo se encuentra en la bibliografía. La instalación de este software se puede hacer por medio de los rpm, en la versión linux, y paso a explicar brevemente como montar una pequeña base de datos. Lo primero serÁ crear un fichero con extensión pl, donde se especificaran los hechos y las reglas que tendrá la base de datos, tras esto entrar en gprolog. Una vez dentro de gprolog, el shell cambiara pasando a ser algo similar a lo siguiente; “ ?- “. Una vez dentro, para cargar la base de datos: ?- consult(‘nombrefichero.pl’). Desde el interprete de comandos se realizarán las consultas. Para salir: halt. BIBLIOGRAFÍA -Sistemas de bases de datos, conceptos fundamentales. ELMASRI/NAVATHE -http://www.lsi.upc.es/~rigau/ Ejemplo mecanismos inmersión. -http://www.google.com http://pauillac.inria.fr/~diaz/gnu-prolog/ Página donde lograr el gprolog