SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 
Modelado de caso de uso y Diagrama de Caso de Uso
Modelado de caso de uso  y Diagrama de Caso de UsoModelado de caso de uso  y Diagrama de Caso de Uso
Modelado de caso de uso y Diagrama de Caso de Usoturlahackers
 
Metodologías para el desarrollo de aplicaciones móviles
Metodologías para el desarrollo de aplicaciones móvilesMetodologías para el desarrollo de aplicaciones móviles
Metodologías para el desarrollo de aplicaciones móvilesJaqueline Luna
 
Analisis y diseño diagrama de caso de uso
Analisis y diseño diagrama de caso de usoAnalisis y diseño diagrama de caso de uso
Analisis y diseño diagrama de caso de usoYovana Connie Roca Avila
 
Cuadro comparativo de manejadores de la base de datos
Cuadro comparativo de manejadores de la base de datos Cuadro comparativo de manejadores de la base de datos
Cuadro comparativo de manejadores de la base de datos Maria Garcia
 
Guiones o scripts en la representación del conocimiento
Guiones o scripts en la representación del conocimientoGuiones o scripts en la representación del conocimiento
Guiones o scripts en la representación del conocimientoFacultad de Ciencias y Sistemas
 
Bases de Datos para Dispositivos Móviles - Unidad II: Arquitectura de Base de...
Bases de Datos para Dispositivos Móviles - Unidad II: Arquitectura de Base de...Bases de Datos para Dispositivos Móviles - Unidad II: Arquitectura de Base de...
Bases de Datos para Dispositivos Móviles - Unidad II: Arquitectura de Base de...José Antonio Sandoval Acosta
 
Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)katherine revelo gomez
 
Extensiones UML para aplicaciones web - Rocío Santiago
Extensiones UML para aplicaciones web - Rocío SantiagoExtensiones UML para aplicaciones web - Rocío Santiago
Extensiones UML para aplicaciones web - Rocío Santiago2008PA2Info3
 
Unidad iii paradigmas de la ingeniería de software
Unidad iii  paradigmas de la ingeniería de softwareUnidad iii  paradigmas de la ingeniería de software
Unidad iii paradigmas de la ingeniería de softwareHelen De la Cruz
 
Arquitecturas de pizarra o repositório
Arquitecturas de pizarra o repositórioArquitecturas de pizarra o repositório
Arquitecturas de pizarra o repositóriorehoscript
 
Tareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosTareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosnenyta08
 
Reglas de producción
Reglas de producciónReglas de producción
Reglas de producciónsolesito1237
 

La actualidad más candente (20)

Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Modelado de caso de uso y Diagrama de Caso de Uso
Modelado de caso de uso  y Diagrama de Caso de UsoModelado de caso de uso  y Diagrama de Caso de Uso
Modelado de caso de uso y Diagrama de Caso de Uso
 
Metodologías para el desarrollo de aplicaciones móviles
Metodologías para el desarrollo de aplicaciones móvilesMetodologías para el desarrollo de aplicaciones móviles
Metodologías para el desarrollo de aplicaciones móviles
 
Proyecto programacion
Proyecto programacionProyecto programacion
Proyecto programacion
 
Analisis y diseño diagrama de caso de uso
Analisis y diseño diagrama de caso de usoAnalisis y diseño diagrama de caso de uso
Analisis y diseño diagrama de caso de uso
 
Cuadro comparativo de manejadores de la base de datos
Cuadro comparativo de manejadores de la base de datos Cuadro comparativo de manejadores de la base de datos
Cuadro comparativo de manejadores de la base de datos
 
Guiones o scripts en la representación del conocimiento
Guiones o scripts en la representación del conocimientoGuiones o scripts en la representación del conocimiento
Guiones o scripts en la representación del conocimiento
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
Bases de Datos para Dispositivos Móviles - Unidad II: Arquitectura de Base de...
Bases de Datos para Dispositivos Móviles - Unidad II: Arquitectura de Base de...Bases de Datos para Dispositivos Móviles - Unidad II: Arquitectura de Base de...
Bases de Datos para Dispositivos Móviles - Unidad II: Arquitectura de Base de...
 
Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)Arquitectura flujo de datos(filtros y tuberías)
Arquitectura flujo de datos(filtros y tuberías)
 
Extensiones UML para aplicaciones web - Rocío Santiago
Extensiones UML para aplicaciones web - Rocío SantiagoExtensiones UML para aplicaciones web - Rocío Santiago
Extensiones UML para aplicaciones web - Rocío Santiago
 
Taller de Base de Datos - Unidad 6 SQL procedural
Taller de Base de Datos - Unidad 6 SQL proceduralTaller de Base de Datos - Unidad 6 SQL procedural
Taller de Base de Datos - Unidad 6 SQL procedural
 
Unidad iii paradigmas de la ingeniería de software
Unidad iii  paradigmas de la ingeniería de softwareUnidad iii  paradigmas de la ingeniería de software
Unidad iii paradigmas de la ingeniería de software
 
Proyecto final de software
Proyecto final de softwareProyecto final de software
Proyecto final de software
 
Agentes inteligentes
Agentes inteligentesAgentes inteligentes
Agentes inteligentes
 
Arquitecturas de pizarra o repositório
Arquitecturas de pizarra o repositórioArquitecturas de pizarra o repositório
Arquitecturas de pizarra o repositório
 
Pruebas De Software
Pruebas De SoftwarePruebas De Software
Pruebas De Software
 
Tareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientosTareas de ingenieria de requerimientos
Tareas de ingenieria de requerimientos
 
Ingenieria de software
Ingenieria de softwareIngenieria de software
Ingenieria de software
 
Reglas de producción
Reglas de producciónReglas de producción
Reglas de producción
 

Destacado

Avances tecnológicos
Avances tecnológicos Avances tecnológicos
Avances tecnológicos Adricaro99
 
Introduccion al analisis numerico
Introduccion al analisis numericoIntroduccion al analisis numerico
Introduccion al analisis numericoNiel Velasquez
 
FY 2017 Fiscal Forecast School Operating Fund
FY 2017 Fiscal Forecast School Operating FundFY 2017 Fiscal Forecast School Operating Fund
FY 2017 Fiscal Forecast School Operating FundFairfax County
 
Dulles Metrorail Silver Line Phase 2: Fairfax County Parking Garages Herndon ...
Dulles Metrorail Silver Line Phase 2: Fairfax County Parking Garages Herndon ...Dulles Metrorail Silver Line Phase 2: Fairfax County Parking Garages Herndon ...
Dulles Metrorail Silver Line Phase 2: Fairfax County Parking Garages Herndon ...Fairfax County
 
The benefits of joining women in transportation
The benefits of joining women in transportationThe benefits of joining women in transportation
The benefits of joining women in transportationIngrid Reeves
 

Destacado (9)

David's Rec Letter
David's Rec LetterDavid's Rec Letter
David's Rec Letter
 
Avances tecnológicos
Avances tecnológicos Avances tecnológicos
Avances tecnológicos
 
Introduccion al analisis numerico
Introduccion al analisis numericoIntroduccion al analisis numerico
Introduccion al analisis numerico
 
Fire Safety Training
Fire Safety TrainingFire Safety Training
Fire Safety Training
 
How hemp oil works
How hemp oil worksHow hemp oil works
How hemp oil works
 
Euglucon
EugluconEuglucon
Euglucon
 
FY 2017 Fiscal Forecast School Operating Fund
FY 2017 Fiscal Forecast School Operating FundFY 2017 Fiscal Forecast School Operating Fund
FY 2017 Fiscal Forecast School Operating Fund
 
Dulles Metrorail Silver Line Phase 2: Fairfax County Parking Garages Herndon ...
Dulles Metrorail Silver Line Phase 2: Fairfax County Parking Garages Herndon ...Dulles Metrorail Silver Line Phase 2: Fairfax County Parking Garages Herndon ...
Dulles Metrorail Silver Line Phase 2: Fairfax County Parking Garages Herndon ...
 
The benefits of joining women in transportation
The benefits of joining women in transportationThe benefits of joining women in transportation
The benefits of joining women in transportation
 

Similar a Prolog

Similar a Prolog (20)

Lenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionLenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcion
 
Int a la computacion
Int a la computacionInt a la computacion
Int a la computacion
 
Manual lab prolog
Manual lab prologManual lab prolog
Manual lab prolog
 
Lenguaje de programacion de c++
Lenguaje de programacion de c++Lenguaje de programacion de c++
Lenguaje de programacion de c++
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Tutorial basico prolog
Tutorial basico prologTutorial basico prolog
Tutorial basico prolog
 
Taller 2 conceptualizacion
Taller 2 conceptualizacionTaller 2 conceptualizacion
Taller 2 conceptualizacion
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
502-Prog-P1-Act5-Expo-AlcudiaMendezMoyses.pptx
502-Prog-P1-Act5-Expo-AlcudiaMendezMoyses.pptx502-Prog-P1-Act5-Expo-AlcudiaMendezMoyses.pptx
502-Prog-P1-Act5-Expo-AlcudiaMendezMoyses.pptx
 
LENGUAJE DE PROGRAMACIÓN ORIENTADA A OBJETOS
LENGUAJE DE PROGRAMACIÓN ORIENTADA A OBJETOSLENGUAJE DE PROGRAMACIÓN ORIENTADA A OBJETOS
LENGUAJE DE PROGRAMACIÓN ORIENTADA A OBJETOS
 
Computacion alejandro
Computacion alejandroComputacion alejandro
Computacion alejandro
 
Tarea3
Tarea3 Tarea3
Tarea3
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
Tutorial de prolog
Tutorial de prologTutorial de prolog
Tutorial de prolog
 
Programa informático
Programa informáticoPrograma informático
Programa informático
 
Informatica
InformaticaInformatica
Informatica
 
Trabajo practico nº1 pajon pighin kamlofsky
Trabajo practico nº1 pajon pighin kamlofskyTrabajo practico nº1 pajon pighin kamlofsky
Trabajo practico nº1 pajon pighin kamlofsky
 
Fundamentos de Lenguaje de programacion
Fundamentos de Lenguaje de programacionFundamentos de Lenguaje de programacion
Fundamentos de Lenguaje de programacion
 
Paradigmas de programacion
Paradigmas de programacionParadigmas de programacion
Paradigmas de programacion
 

Más de B3lleza Online

Ejercicios de Electrónica
Ejercicios de ElectrónicaEjercicios de Electrónica
Ejercicios de ElectrónicaB3lleza Online
 
Análisis numérico examen
Análisis numérico examenAnálisis numérico examen
Análisis numérico examenB3lleza Online
 
Computacion para ingenieros: ejercicios propuestos
Computacion para ingenieros: ejercicios propuestosComputacion para ingenieros: ejercicios propuestos
Computacion para ingenieros: ejercicios propuestosB3lleza Online
 
Solución de Sistemas de Ecuaciones Lineales
Solución de Sistemas de Ecuaciones LinealesSolución de Sistemas de Ecuaciones Lineales
Solución de Sistemas de Ecuaciones LinealesB3lleza Online
 
Ejercicios de Computación Para Ingenieros
Ejercicios de Computación Para IngenierosEjercicios de Computación Para Ingenieros
Ejercicios de Computación Para IngenierosB3lleza Online
 
Analisis Numérico: definiciones
Analisis Numérico: definicionesAnalisis Numérico: definiciones
Analisis Numérico: definicionesB3lleza Online
 
Higiene y Seguridad Laboral
Higiene y Seguridad LaboralHigiene y Seguridad Laboral
Higiene y Seguridad LaboralB3lleza Online
 
Problemas Fundamentales de la Humanidad
Problemas Fundamentales de la HumanidadProblemas Fundamentales de la Humanidad
Problemas Fundamentales de la HumanidadB3lleza Online
 
La salud emocional, física y mental
La salud emocional, física y mentalLa salud emocional, física y mental
La salud emocional, física y mentalB3lleza Online
 

Más de B3lleza Online (12)

Ejercicios de Electrónica
Ejercicios de ElectrónicaEjercicios de Electrónica
Ejercicios de Electrónica
 
Sistemas II. Proyecto
Sistemas II. ProyectoSistemas II. Proyecto
Sistemas II. Proyecto
 
Análisis numérico examen
Análisis numérico examenAnálisis numérico examen
Análisis numérico examen
 
Computacion para ingenieros: ejercicios propuestos
Computacion para ingenieros: ejercicios propuestosComputacion para ingenieros: ejercicios propuestos
Computacion para ingenieros: ejercicios propuestos
 
Solución de Sistemas de Ecuaciones Lineales
Solución de Sistemas de Ecuaciones LinealesSolución de Sistemas de Ecuaciones Lineales
Solución de Sistemas de Ecuaciones Lineales
 
Ejercicios de Computación Para Ingenieros
Ejercicios de Computación Para IngenierosEjercicios de Computación Para Ingenieros
Ejercicios de Computación Para Ingenieros
 
Analisis Numérico: definiciones
Analisis Numérico: definicionesAnalisis Numérico: definiciones
Analisis Numérico: definiciones
 
Mapa de Riesgo
Mapa de RiesgoMapa de Riesgo
Mapa de Riesgo
 
Higiene y Seguridad Laboral
Higiene y Seguridad LaboralHigiene y Seguridad Laboral
Higiene y Seguridad Laboral
 
Temas Gerenciales
Temas GerencialesTemas Gerenciales
Temas Gerenciales
 
Problemas Fundamentales de la Humanidad
Problemas Fundamentales de la HumanidadProblemas Fundamentales de la Humanidad
Problemas Fundamentales de la Humanidad
 
La salud emocional, física y mental
La salud emocional, física y mentalLa salud emocional, física y mental
La salud emocional, física y mental
 

Último

30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdf
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdfResolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdf
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxinformacionasapespu
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 

Último (20)

30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdf
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdfResolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdf
Resolucion de Problemas en Educacion Inicial 5 años ED-2024 Ccesa007.pdf
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
La Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdfLa Trampa De La Felicidad. Russ-Harris.pdf
La Trampa De La Felicidad. Russ-Harris.pdf
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 

Prolog

  • 1. Prolog – Bases de Datos Deductivas – Lógica Modal y Temporal Equipo Nro. 1 Lógica de Computación 2016
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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.
  • 8. 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
  • 9. 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 (".").
  • 10. 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).
  • 11. 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 (').
  • 12. 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
  • 13. 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.
  • 14. 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).
  • 15. 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:
  • 16. 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:
  • 17. 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).
  • 18. 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
  • 19. 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:
  • 20. 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
  • 21. 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).
  • 22. 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.
  • 23. 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.
  • 24. 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
  • 25. 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.
  • 26. 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
  • 27. 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
  • 28. 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