You are on page 1of 6

INSTITUTO TECNOLOGICO DE CIUDAD

VICTORIA UNIDAD ACADEMICA A DISTANCIA


ZOZOCOLCO

EUNICE MORA AGUSTIN

No. De Control: 13380963

Programación Lógica y Funcional

Actividad-2.4
Avance de la unidad 3

ING. Miguel Ángel Macías García


4.1. Repaso de la lógica de primer orden
La programación lógica es un tipo de paradigmas de programación dentro del
paradigma de programación declarativa. El resto de los subparadigmas de
programación dentro de la programación declarativa son: programación
funcional, programación con restricciones, programas DSL (de dominio
específico)e híbridos. La programación funcional se basa en el concepto de
función (que no es más que una evolución de los predicados), de corte más
matemático. La programación lógica gira en torno al concepto de predicado, o
relación entre elementos.

Básicamente, la lógica de primer orden, introduce un conjunto de símbolos que


nos permiten expresarnos acerca de los objetos en un dominio de discurso
dado. El conjunto de todos estos objetos se conoce como universo de discurso
(U).Los miembros del universo de discurso pueden ser objetos concretos, ej.,
un libro, un robot, etc; abstractos, ej., números; e incluso, ficticios, ej.,
unicornios, etc.

Una fórmula en lógica de primer orden está definida sobre algunas constantes,
funciones y predicados.

4.2. Unificación y resolución


La idea básica de la unificación es muy sencilla. Para unificar dos literales
vamos recorriéndolos de izquierda a derecha. En primer lugar se comprueba si
los predicados coinciden. Si es así, seguimos adelante; si no es que no son
unificables.

Si el predicado concuerda, comenzamos a comparar los argumentos. Si el


primero de ellos coincide en ambos literales, continuamos con el siguiente... y
así hasta completar todos los argumentos. Como resulta obvio, ambos literales
deben tener el mismo número de argumentos.

Para probar la existencia de algo: Suponer lo opuesto y usar modus ponens y


la regla de eliminación del cuanticador universal, para encontrar un contra
ejemplo al supuesto.
 Primera sustitución: (y/x)
Resultado: P(y, y) P(y, z)
 Segunda sustitución: (z/y)
Resultado: P(z, z) P(z, z)
4.3. Cláusulas de Horn. Resolución SLD.
Seleccionar una literal, usando una estrategia Lineal, restringido a cláusulas
Definitivas Un caso especial de resolución lineal Resolución lineal: el último
resolvente se toma como cláusula padre La otra cláusula padre se toma de otro
resolvente o del conjunto original Una forma especial de resolución lineal es:
input resolution.
En esta estrategia, cada paso de resolución, exceptuando el primero, se toma
del último resolvente (cláusulas metas) y del conjunto original (cláusulas de
entrada) Input resolution es completa para cláusulas de Horn, pero no para
cláusulas en general Una variante de resolución de entrada es resolución SLD
para cláusulas de Horn.
Resolución de entrada se extiende con una regla de selección que determina
en cada paso que literal de la cláusula meta es seleccionada.

Resolución SLD es sound y complete para las cláusulas de Horn.


La estrategia de búsqueda afecta el resultado.
e.g., depth-first con diferente orden de clausulas:
Aunque resolución SLD es sound y complete para cláusulas de Horn, en la práctica (por razones
de eficiencia) se hacen variantes

 eliminar el ``occur check'' de unificación


 usar un orden específico

3.4 Programación lógica con cláusulas de Horn.


Un programa lógico (proposicional) es un conjunto de cláusulas de programa.

Una clausula de Horn, es una regla de interferencia lógica con una serie de
premisas (cero una o más) y un único consecuente. Las clausulas de Horn son
las instrucciones básicas del lenguaje de programación en PROLOG de
paradigma declarativo.

La sintaxis de una clausula de Horn en PROLOG tiene el siguiente aspecto:


Hija (A, B) :- mujer (A) padre(B, A)
Aquellas cuyo consecuente tienen un predicado

Una pregunta en PROLOG (con variables X1, ..., Xp) tiene la forma ?B1, B2, ...
, Bn y se lee ¿existen valores para las variables x1, ..., xp tales
que B1 y B2 y ...y Bn son ciertos?. Es decir, dicha pregunta se corresponde con
la fórmula lógica: x1 x2... xp (B1 B2 ...Bn)
Conviene notar que la negación de esta pregunta se corresponde con la
fórmula anterior negada:
¬ (x1 x2... xp (B1B2...Bn)) que es lógicamente equivalente a la fórmula
x1 x2 ... xp (¬B1¬B2...¬Bn).
Desde un punto de vista formal, cuando se hace una pregunta a un programa
lógico, se está trabajando en realidad con el conjunto de fórmulas
lógicas (cláusulas), cuantificadas universalmente, correspondientes a los
hechos y reglas del programa junto con la negación de la pregunta.
Cada cláusula es por tanto una disyunción de literales donde a lo sumo uno de
ellos es positivo. Se denominan cláusulas de Horn.
· Una regla A :- B1 , ... , Bn es una cláusula de Horn con un literal positivo y n
negativos: AÚ¬B1Ú¬B2Ú...Ú¬Bn con n>0.
· Un hecho A es una cláusula de Horn con un literal positivo y 0 negativos.
· La negación de una pregunta es una cláusula de Horn con todos sus literales
negativos: ¬B1Ú ¬B2Ú...Ú ¬Bn con n³0.
Términos
Al igual que en Lógica de Primer Orden, los términos en Prolog se clasifican en
tres categorías: constantes, variables y términos compuestos.
REFERENCIAS:
http://dsc.itpn.mx/recursosisc/8semestre/programacionlogicayfuncional/U
nidad%20IV.pdf
http://zeus.inf.ucv.cl/~rsoto/cursos/INF152/Cap4_Parte1_2ppt_INF152.pdf
https://es.wikipedia.org/wiki/Cl%C3%A1usula_de_Horn
http://zeus.inf.ucv.cl/~rsoto/cursos/INF152/Cap4_Parte1_2ppt_INF152.pdf
http://www.uap.edu.pe/intranet/fac/material/02/20092CL0201024060201070
11/20092CL02010240602010701111934.pdf

You might also like