Está en la página 1de 5

PROGRAMACION LOGICA

 DEFINICION
o Paradigma de programación basado en la lógica de primer orden. La programación
lógica estudia el uso de la lógica para el planteamiento de problemas y el control
sobre las reglas de inferencia para alcanzar la solución automática.
o La programación lógica, junto con la funcional, forma parte de lo que se conoce
como Programación Declarativa, es decir la programación consiste en indicar
como resolver un problema mediante sentencias, en la Programación Lógica, se
trabaja en una forma descriptiva, estableciendo relaciones entre entidades,
indicando no como, sino que hacer, entonces se dice que la idea esencial de la
programación lógica es

 Programa = Lógica (Determina las soluciones producidas) + Formas (Formas


alternativa de ejecutar Lógica)
o Se puede ver como una deducción controlada.
o Lógica (programador): hechos y reglas para representar conocimiento.
o Control (interprete): deducción lógica para dar respuestas (soluciones).
 QUE TRATA DE RESOLVER
o Dado un problema S, saber si la afirmación A es solución o no del problema o
en qué casos lo es. Además, queremos que los métodos sean implantados en
máquinas de forma que la resolución del problema se haga de forma
automática
o La programación lógica construye base de conocimientos mediante reglas y
hechos.
 CARACTERISTICAS
o Unificación de términos
o Mecanismos de inferencia automática
o Recursión como estructura de control básica
o Visión lógica de la computación
 EJEMPLOS
o En un programa lógico generalmente se definen un hechos y reglas, lo que se
suele llamar base de conocimiento, y a partir de ellos, se pueden «obtener
respuestas». Vamos a verlo con un ejemplo sencillo en pseudo - prolog en el que
definimos la nacionalidad de varias personas y las relaciones de pertenencia entre
países y continentes.
1. % Hechos:
2. es_español("Manolo").
3. es_italiano("Marco").
4. es_colombiano("Marcelo").
5.
6. % Reglas:
7. es_europeo(A) :- es_español(A).
8. es_europeo(A) :- es_italiano(A).
9. es_americano(A) :- es_colombiano(A).
10. es_terricola(A) :- es_europeo(A).
11. es_terricola(A) :- es_americano(A).
12. son_del_mismo_continente(A,B) :- es_europeo(A), es_europeo(B).
13. son_del_mismo_continente(A,B) :- es_americano(A), es_americano(B).
o Las reglas indican que, si se cumple la parte derecha, entonces se cumple la parte
izquierda. Por ejemplo, la primera regla se leería «si A es español, entonces A es
europeo». La coma en la parte derecha funciona como un operador Y lógico entre
las cláusulas que aparecen. La última regla sería «Si A es americano y B es
americano, entonces son del mismo continente A y B».

o A partir de la base de conocimiento que hemos definido, podemos establecer


objetivos y el sistema intentará satisfacerlos e indicarnos si son ciertos o falsos:

1. ?- son_del_mismo_continente("Manolo", "Marco").
2. Yes
o También podemos establecer objetivos abiertos y el sistema nos dirá qué valores
hacen que se cumplan:
1. ?- es_europeo(A).
2. A = Manolo
3. A = Marco

Como funciona
o Generalmente se usa un mecanismo que se llama resolución SLD (algo así como
resolución por selección lineal de cláusulas definidas) que se encarga de obtener
todas las posibles formas de satisfacer el objetivo planteado. Explicar esto en
profundidad lleva su tiempo, pero vamos a ver si nos podemos hacer una idea de
cómo funciona:
o Se parte del objetivo que queremos resolver y se van seleccionando reglas hasta
intentar encontrar una solución. Esta selección de reglas se realiza de arriba a
abajo, es decir, en el orden que están definidas, y una vez que se elige una regla,
se resuelven recursivamente sus cláusulas de izquierda a derecha. Cuando hemos
terminado, ya sea porque hemos encontrado una solución o porque hemos
descubierto que no hay solución posible (no hay más reglas que aplicar), se realiza
un backtracking y se toma la siguiente regla hasta procesar exhaustivamente
todas las reglas definidas.
o En realidad, el proceso es un poco más complicado que eso, pero para hacernos
una idea de cómo funciona, nos sirve.
o Vamos a verlo con un ejemplo sobre el programa anterior:
1. son_del_mismo_continente ("Manolo", A).
o Estamos preguntando al sistema qué valores de A cumplen que son del mismo
continente que «Manolo». Para resolverlo, empezaríamos por tomar la primera
regla que tenemos para son_del_mismo_continente y la aplicaríamos,
convirtiendo nuestro objetivo en:
1. es_europeo("Manolo"), es_europeo(B).
o Ahora procesaríamos cada objetivo de izquierda a derecha. Aplicando la regla
es_europeo(A) :- es_español(A), nos quedaría:
1. es_español("Manolo"), es_europeo(B).
o Que Manolo es español lo sabemos porque está definido directamente
(es_español("Manolo")), así que pasaríamos a resolver la segunda cláusula:
1. es_europeo(B).
o Ahora habría que encontrar todos aquellos valores de B para los que se cumple
que B es europeo, y así alcanzaríamos la solución. Como eso es un poco largo, os
dejo un video en el que alguien se entretiene haciendo una resolución SLD en
Prolog.
 VENTAJAS Y DESVENTAJAS
o VENTAJAS
 Descripciones independientes de la implementación (unificación
semántica).
 Puede mejorarse la eficiencia modificando el componente de control sin
tener que modificar la lógica del algoritmo.
 Base de conocimiento fácilmente escalable.
 Relaciones multipropósito.
 Expresión simple y precisa de los problemas.
 Generación rápida de prototipos e ideas complejas.
 Sencillez en la implementación de estructuras complejas.
 Potencia.
o DESVENTAJAS
 Dependiendo del problema a solucionar, la implementación y el motor de
inferencia, puede llegar a ser extremadamente ineficiente.
 Pocas y muy específicas áreas de aplicación.
 Existen muy pocas herramientas de depuración, en su mayoría poco
efectivas.
 En problemas reales, es poco utilizado.
 Si el programa no contiene suficiente información para responder una
consulta la respuesta puede ser una que se preste para malentendidos.
 Inferencia limitada por su base de conocimiento.
 LENGUAJES
o PROLOG
o MERCURY
o LOGTALK
o CURRY
o DATALOG (LOGIC PROGRAMMING IN PYTHON)
 REGLAS
o CLAUSULAS DE HORN
 Secuencia de literales que contiene a lo sumo uno de sus literales
positivos (disyunción de literales). Esto es un ejemplo de una cláusula de
Horn, y abajo se indica una fórmula como esta también puede reescribirse
de forma equivalente como una implicación:
 Cláusula ‘definite’: Cláusula de Horn con exactamente un literal positivo.
 Hecho: Cláusula ‘definite’ sin literales negativos.
 Cláusula objetivo: Sin ningún literal positivo (consulta).

antecedente → consecuente "Si es verdad el antecedente, entonces es


verdad el consecuente"

 En Prolog Se escribe primero el consecuente luego el antecedente.

 Ej: Estructura de clúasulas de Horn:Estructura de clásulas de Horn en


Prolog:

o RESOLUCION SLD (Selective Linear Definite clause resolution)


 El nombre "SLD resolution" fue dado por Maarten van Emden para la regla
de inferencia sin nombre introducida por Robert Kowalski. Su nombre
deriva de la resolución de SL, que es a la vez sonido y refutación completa
de la forma clausal sin restricciones de la lógica. "SLD" significa "SL
resolution with Definite clauses".

 En ambos, SL y SLD, "L" representa el hecho de que una prueba de


resolución se puede restringir a una secuencia lineal de cláusulas:

 C1, C2, ⋯, Cl

 Donde la "cláusula superior" C1, es una cláusula de entrada, y cada otra


cláusula Ci+1 es una solución de cuyos padres es la cláusula anterior Ci. La
prueba es una refutación si la última cláusula Cl, es la cláusula vacía.

 En SLD, todas las cláusulas son una secuencia cláusulas objetivo y el otro
padre es una cláusula de entrada. En la resolución SL, el otro padre es una
cláusula de entrada o una cláusula ancestral anterior en la secuencia.

 Tanto en SL como en SLD, "S" representa el único literal resuelto en


cualquier cláusula Ci, es aquel que es seleccionado únicamente por una
regla de selección o función de selección. En la resolución SL, el literal
seleccionado está restringido a uno que ha sido introducido
recientemente en la cláusula. En el caso más simple, tal función de
selección de último en entrar primero en salir puede especificarse por el
orden en el que se escriben los literales, como en Prolog. Sin embargo, la
función de selección en la resolución SLD es más general que en la
resolución SL y en Prolog. No hay ninguna restricción sobre el literal que
se puede seleccionar.

También podría gustarte