Bases de datos Deductivas Borja Compés Mancisidor

Anuncio
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
Descargar