martes, 9 de mayo de 2017

PROLOG

1-) INSTALAR PROLOG ✔


2-) APRENDER A USAR ✔

3-) ¿QUE ES PROLOG?

Prolog es un lenguaje de programación lógica cuya primera versión fue desarrollada a principios de la década de 1970 por Colmerauer en la universidad de Marsella. Contrariamente a otros lenguajes de programación basados es estructuras de control y definición de funciones para calcular resultados, Prolog está orientado a la especificación de relaciones para responder consultas. En ese sentido Prolog es similar a un sistema de base de datos, aunque en el contexto de la inteligencia artificial se prefiere hablar de bases de conocimiento, enfatizando la complejidad estructural de los datos y de las deducciones que se pueden obtener de ellos.

Por ejemplo, para especificar la relación el padre de X es Y, se crea una base de conocimiento con hechos expresados mediante un predicado padre(X,Y) de la siguiente manera:

padre(juan,pedro).
padre(josé,pedro).
padre(maría,pedro).
padre(pedro,pablo).
padre(ana,alberto).
...
Esto es muy parecido a crear una tabla en una base de datos, sólo que cada caso se  especifica mediante una cláusula independiente terminada por '.' . Si además se quiere incorporar conocimiento sobre la madre, se puede proceder de la misma manera agregando por ejemplo:

madre(juan,ana).
madre(josé,ana).
madre(maría,ana).
madre(pedro,juanita).
madre(ana,julia).
...

En prolog todas las cláusulas terminan con el delimitador '.' . Las cláusulas de consulta se interpretan como ecuaciones lógicas y pueden incluir variables. Por ejemplo:

?- padre(maría,pablo).

No
?- padre(ana,alberto).

Yes
?- padre(maría,X).

X = pedro ;

No
?- padre(X,Y).

X = juan
Y = pedro ;

X = josé
Y = pedro ;

X = maría
Y = pedro ;

X = pedro
Y = pablo ;

X = ana
Y = alberto ;

No

EJEMPLO:
% La sintaxis es factorial(N, F) -> Factorial de N es F (el resultado se guarda en F)factorial(0, 1).factorial(1, 1).factorial(N, F) :- N>0, N1 is N - 1, factorial(N1, F1), F is N * F1. %el factorial se llama recursivamente dejando el resultado en F

4-) ¿CUAL ES LA RELACIÓN ENTRE PROLOG Y LÓGICA PREDICADOS?


Algoritmo de búsqueda
********************

Un query consise en una conjunción de predicados que Prolog debe
demostrar que es verdadero, mostrando además las restricciones bajo
las cuales se cumple.

Ejemplo 1:

1.- member(2,[1,2,3]).

  Se considera (A): no unifica
  Se considera (B): unifica con X=2, L=[2,3]
  Se insertan las condiciones de (B) en la lista de metas reemplazando
  la variables pro las restricciones.

  2.- member(2,[2,3]).

    Se considera (A): unifica con X=2, L=[3].
    Como no hay condiciones => exito.
    El interprete arroja yes.
















martes, 2 de mayo de 2017

FORMA NORMAL DE SKOLEM 02/05/2017


  1. Formula Normal de Skolem

  1. Definición de una FNS: Una formula de la lógica de primer orden se considera expresada en forma normal de Skolem si su forma normal prenexa solamente contiene cuantificadores universales. Una fórmula puede ser Skolemizada, lo que implica que sus cuantificadores existenciales son suprimidos, produciendo una nueva fórmula equisatisfactible con respecto a la original.

  2. Como encontrar la FNS: Para encontrar la forma normal de Skolem de una fórmula es la eliminación de los cuantificadores existenciales, esta eliminación es conocida como skolemización. Las reglas básicas para realizar la skolemización son 3
  3. 1- Si un cuantificador existencial no se encuentra dentro del ámbito de ningún cuantificador universal, se sustituye la variable cuantificada existencialmente por una constante Por ejemplo, puede ser cambiado a P(c),
  4. 2: Si un cuantificador existencial se encuentra dentro del ámbito de un cuantificador universal, se ha de sustituir la variable cuantificada existencialmente por una función de la variable cuantificada universalmente y se elimina el cuantificador existencial. Por ejemplo, la fórmula no está en forma normal de Skolem porque ella contiene un cuantificador existencial
  5. 3: Si un cuantificador existencial se encuentra dentro del ámbito de más de un cuantificador universal se sustituirá la variable cuantificada existencialmente por una función de todas las variables afectadas por estos cuantificadores universales y se elimina el cuantificador existencial.

  6. Ejemplo para encontrar FNS
  7. Uso de la skolemización Uno de los usos de la skolemización es aplicarlo en el método de resolución de la lógica de predicados que se basa en:
  8. 1. Una única regla: la de resolución. 
  9. 2. Una única estrategia: la reducción al absurdo. 
  10. 3. La utilización de la forma normal de Skolem (FNS) con la matriz en forma normal conjuntiva(FNC ). 
  11. 4. La utilización del replanteamiento de la última decisión para garantizar la sistematicidad.
  12. 5. El cálculo de sustituciones y el algoritmo de unificación.

sustitución:

  1. Si un cuantificador existencial no se encuentra dentro del ámbito de ningún cuantificador universal, se sustituye la variable cuantificada existencialmente por una constante que aún no haya sido utilizada y el cuantificador existencial es eliminado. La constante utilizada no puede volver a ser reutilizada. Por ejemplo,  puede ser cambiado a P(c), donde c es una nueva constante.
  2. Si un cuantificador existencial se encuentra dentro del ámbito de un cuantificador universal, se ha de sustituir la variable cuantificada existencialmente por una función de la variable cuantificada universalmente y se elimina el cuantificador existencial. La función no puede haber sido utilizada previamente ni podrá utilizarse posteriormente. Por ejemplo, la fórmula  no está en forma normal de Skolem porque ella contiene un cuantificador existencial . La skolemización reemplaza  con , donde  es una nuevo símbolo de función, y elimina la cuantificación existencial sobre . La fórmula resultante es . El término Skolem  contiene  pero no  porque el cuantificador a ser eliminado  está en el ámbito de  pero no en el ámbito de ; debido a que la fórmula está en forma normal prenexa, esto es equivalente a decir que, en la aparición de los cuantificadores,  precede  mientras  no. La fórmula obtenida por esta transformación es satifactible si y solo si la fórmula original lo es.
  3. Si un cuantificador existencial se encuentra dentro del ámbito de más de un cuantificador universal se sustituirá la variable cuantificada existencialmente por una función de todas las variables afectadas por estos cuantificadores universales y se elimina el cuantificador existencial. La función no puede haber sido utilizada previamente ni podrá utilizarse posteriormente

conjunto de diferencias:

unificación algoritmo:

Sabemos que “Una fórmula F es satisfacible sii FNS(F) es satisfacible” y que “FNS(F) existe siempre para cualquier fórmula F”, luego podemos trabajar exclusivamente con fórmulas en forma normal de Skolem. 

Para trabajar más cómodamente con fórmulas en FNS utilizaremos la forma clausular

La mayoría de procedimientos de prueba operan por refutación. Estas pruebas se aplican a formulas en una forma denominada forma clausal. 

Cláusula: Una cláusula es una disyunción finita de cero o más literales. Cuando la cláusula está compuesta de un solo literal diremos que es una cláusula unitaria. C = L1∨…∨Ln, Li(1≤i ≤n) literal 

La forma clausular de una fórmula F, FC(F), es el conjunto de cláusulas de la FNS(F). 

La forma clausular se entiende como la conjunción de las cláusulas, cuyas variables están todas ellas ligadas universalmente.