Está en la página 1de 12

ITSM

Instituto Tecnológico Superior de Misantla

Ingeniería en Sistemas
Computacionales
Materia: Programación Lógica y Funcional

Actividad: A3-2. Investigación

Docente: Dr. Roberto Ángel Meléndez Armenta

Alumno:
Navarro Romero Erika Yamileth
Num. Control: 192T0450

Semestre: 6° Grupo: 603

Fecha: 03/05/22
Contenido
Introducción ........................................................................................................................................ 1
Antecedentes ...................................................................................................................................... 2
Desarrollo ............................................................................................................................................ 3
a)...................................................................................................................................................... 3
¿Qué es la unificación en la programación lógica? ..................................................................... 3
Composición de sustituciones ................................................................................................. 4
¿Qué es la resolución en la programación lógica? ...................................................................... 5
b) ..................................................................................................................................................... 6
¿Qué son las cláusulas de Horn? ................................................................................................. 6
Ejemplo (proceso y traducción en Prolog) .............................................................................. 6
Resolución SLD ............................................................................................................................ 7
Ejemplo.................................................................................................................................... 7
Conclusiones ....................................................................................................................................... 9
Referencias ........................................................................................................................................ 10
Introducción
En los lenguajes lógicos se utiliza el formalismo de la lógica de primer orden para
representar el conocimiento sobre un problema y para hacer preguntas que, si se
demuestra que se pueden deducir a partir del conocimiento dado en forma de axiomas y de
las reglas de deducción estipuladas, se vuelven teoremas. Así se encuentran soluciones a
problemas formulados como preguntas. Con base en la información expresada dentro de
la lógica de primer orden, se formulan las preguntas sobre el dominio del problema y el
intérprete del lenguaje lógico trata de encontrar la respuesta automáticamente. El
conocimiento sobre el problema se expresa en forma de predicados (axiomas) que
establecen relaciones sobre los símbolos que representan los datos del dominio del
problema. Este concepto de programación lógica está ligado históricamente a un lenguaje
llamado Prolog, que proviene de PROgrammation en LOGique (programación en lógica),
que fue el primer lenguaje de programación lógico y el más conocido y utilizado.

1
Antecedentes
Lógica: Parte de la filosofía que estudia las formas y principios generales que rigen el
conocimiento y el pensamiento humano, considerado puramente en sí mismo, sin referencia
a los objetos.

Semántica: estudio de diversos aspectos del significado, sentido o interpretación de signos


lingüísticos como símbolos, palabras, expresiones o representaciones formales.

Algoritmos de decisión: secuencia de instrucciones secuenciales, gracias al cual pueden


llevarse a cabo ciertos procesos y darse respuesta a determinadas necesidades o
decisiones.

Cuantificadores: un cuantificador es una expresión que indica la cantidad de veces que un


predicado o propiedad P se satisface dentro de una determinada clase.

Variables: es un elemento de datos con nombre cuyo valor puede cambiar durante

el curso de la ejecución de un programa.

Sentencia: es una línea de código al mando de una tarea

Expresión: Una expresión es cualquier secuencia de símbolos pertenecientes al alfabeto.

2
Desarrollo
a)
¿Qué es la unificación en la programación lógica?
La unificación es un caso especial de sustitución. Es decir:

Sean E y F dos expresiones (ya sean dos fórmulas atómicas o dos términos funcionales).
Un unificador de E y F es una sustitución σ tal que

Eσ = Fσ.

Ejemplo:

3
Composición de sustituciones
La composición de dos sustituciones de define por:

σ = [x1 , . . . , xn := t1 , . . . , tn]

η = [y1 , . . . , ym := s1 , . . . , sm]

η ◦ σ = ση = ([x1 , . . . , xn := t1η , . . . tnm] − [xi := t1η | xi = t1η ])

∪ ([y1 , . . . , ym := s1 , . . . , sm] − [yi := si | yi ∈ dom(σ)])

4
¿Qué es la resolución en la programación lógica?
• La resolución es una regla de inferencia que permite demostrar teoremas por medio
de refutación.
• Supóngase que se tiene un programa lógico Γ y se quiere demostrar que una
fórmula atómica α se sigue de Γ.
• Entonces se incluye como premisa la meta ← α (es decir, ¬α).
• Una demostración por resolución nos permitirá derivar fórmulas hasta que, en caso
de éxito, lleguemos a una contradicción y entonces se afirmará que α se sigue de Γ.

5
b)

¿Qué son las cláusulas de Horn?


Una cláusula de Horn es una secuencia de literales que contiene a lo sumo un literal
positivo. Al escribirla en notación de Kowalski tendrá una de estas cuatro formas:

1. Hecho: p ← 2
2. Regla: p ← q1, . . . , qn
3. Objetivo: ← q1, . . . , qn 4
4. Exito: ´ ←

Los hechos y las reglas se denominan cláusulas definidas:

• los hechos representan “hechos acerca de los objetos” (de nuestro universo de
discurso), relaciones elementales entre estos objetos
• las reglas expresan relaciones condicionales entre los objetos, dependencias.
• las reglas engloban todos los casos en el siguiente sentido:
• un hecho es una regla con cuerpo vacío
• un objetivo es una regla con cabeza vacía y el éxito es una regla con cabeza y
cuerpo vacíos

Nótese que en las cláusulas de Horn trabajamos con secuencias de literales en vez de
conjuntos (como veníamos haciendo con las cláusulas generales). Esto implica dos cosas:

• los literales pueden aparecer repetidos en el cuerpo


• hay un orden en los literales del cuerpo (podemos hablar del primer literal, segundo
literal, etc).

Ejemplo (proceso y traducción en Prolog)


La sintaxis de una cláusula de Horn en PROLOG tiene el siguiente aspecto:
hija(A,B) :- mujer(A), padre(B,A).
que podría leerse así: "A es hija de B si A es mujer y B es padre de A".
En términos lógicos representa la siguiente implicación:

Por definición de implicación se obtiene la siguiente cláusula de Horn:

*Obsérvese que, en PROLOG, el símbolo :- separa la conclusión de las condiciones.

6
Resolución SLD
En programación lógica, la resolución SLD (SLD significa Seleccionado , Lineal , Definido )
es un algoritmo que se utiliza para probar una fórmula lógica de primer orden a partir de un
conjunto de cláusulas Horn . Se basa en una resolución lineal, con función de selección
sobre las cláusulas definidas. La resolución SLD es más conocida por su extensión, SLDNF
(NF significa negación como falla, la negación como falla), que es la resolución utilizada por
el lenguaje del algoritmo Prolog .
Una cláusula definida es una cláusula de Horn que contiene exactamente un literal positivo.
Por lo tanto, la noción abarca cláusulas Horn estrictas y cláusulas Horn positivas. En el
contexto de la resolución SLD, el literal positivo de una cláusula definida se denomina
cabeza, conclusión o meta. La disyunción de literales negativos, si existen, se llama cuerpo,
antecedentes o subobjetivos . Por ejemplo, la cláusula Horn
¬a∨¬b∨c
es lógicamente equivalente a:
(a∧b)→c
o la siguiente regla de Prolog:
c :- a, b.
En cada caso, c es la conclusión, un y b son los antecedentes.

Ejemplo
Se tiene el siguiente programa como ejemplo:
q∨¬p
pag
así como la consulta:
{q}
La lista de objetivos consta de la única negación {¬ q } y se busca una cláusula unificable
en el programa. La primera cláusula coincide, está seleccionada. La conjunción de la lista
de objetivos con la cláusula da:
(q∨¬p)∧¬q
Es :
¬p
Al relanzar el algoritmo en esta nueva lista de objetivos, encontramos una unificación con
la segunda cláusula del programa, lo que conduce a una contradicción:

p∧¬p

7
Por lo tanto, la lista de objetivos {¬ q } es incompatible con el programa, por lo que la solicitud
{ q } se completa con éxito.

Nota: En Prolog, se escribiría la primera cláusula q :- p . El algoritmo se describiría entonces


de la siguiente manera: “Para probar q, busque una cláusula que tenga qcomo encabezado.
La primera cláusula coincide y pdebe mostrarse. La segunda cláusula muestra p, por q lo
tanto, está probada."

Si se añadiera la siguiente cláusula en la parte superior del programa:


q∨¬r
luego, el algoritmo de resolución de SLD lo seleccionaría primero, obteniendo ¬ r por
unificación, y luego fallaría en unificar ¬ r . Esto induciría a retroceder; el algoritmo buscaría
nuevamente unificar ¬ q con una cláusula en el resto del programa. Se seleccionaría la
cláusula q ∨ ¬ p , y recurriríamos al caso anterior.

8
Conclusiones
Se concluye que la programación lógica es uno de los paradigmas de programación más
alejados del imperativo. Un sistema de demostración de teoremas funciona como un
mecanismo computacional. La programación lógica es declarativa: un programa es una
declaración de qué se desea, y no una receta de cómo obtenerlo. En la práctica, no siempre
se puede alcanzar este ideal, por cuestiones de eficiencia. La fundamentación semántica
de la programación lógica son los modelos de Herbrand. Un problema difícil en
programación lógica es el de la negación. Aquí se presentarán dos enfoques distintos del
tema. El lenguaje Prolog es un compromiso entre los principios de la programación lógica
y la eficiencia de implementación.
Además, La resolución SLD está mucho más próxima a una implementación realista de la
programación lógica porque ha acotado notablemente el indeterminismo con respecto a la
resolución general. Las cláusulas de Horn son lo suficientemente expresivas para utilizarlas
como lenguaje de programación.

9
Referencias

colaboradores de Wikipedia. (2021, 10 junio). Cláusula de Horn. Wikipedia, la enciclopedia

libre.

https://es.wikipedia.org/wiki/Cl%C3%A1usula_de_Horn#:%7E:text=La%20sintaxi

s%20de%20una%20cl%C3%A1usula,B%20es%20padre%20de%20A%22.&text=O

bs%C3%A9rvese%20que%2C%20en%20PROLOG%2C%20el,la%20conclusi%C3

%B3n%20de%20las%20condiciones.

Hernández Quiroz, F. (2020). ANÁLISIS LÓGICO - PROGRAMACIÓN LÓGICA.

fciencias.unam.mx. https://lya.fciencias.unam.mx/fhq/Cursos/ALogico/2012-2/al-7-

ho.pdf

José Alonso Jiménez, J. A. (2003). Tema 6: Sintaxis y semántica de la lógica de primer

orden. www.cs.us.es. https://www.cs.us.es/~jalonso/cursos/li-03/temas/tema-6.pdf

ResoluciÃ3n SLD - frwiki.wiki. (2021, 27 marzo). frwiki.wiki.

https://es.frwiki.wiki/wiki/SLD-r%C3%A9solution

10

También podría gustarte