You are on page 1of 18

Tecnológico nacional de México

Instituto tecnológico de acapulco

Ingeniería en sistemas computacionales

Programación lógica y funcional

Horario de clases: 02:00 – 03:00 pm

Semestre: séptimo

UIV - Trabajo de investigación unidad IV

Profesor: Trujillo Colon Uziel

Alumno:
Cipriano García Daniel 19321372

Realizar un trabajo de investigación respecto a las fábricas en JavaScript, que son, como se usan,
diferencia respecto a las clases

Lugar y Fecha de entrega: Acapulco Guerrero a 18 de noviembre del 2022

1
ÍNDICE

Contenido
ÍNDICE.............................................................................................................2
INTRODUCCIÓN................................................................................................3
DESARROLLO....................................................................................................4
4. Modelo de programación lógica...................................................................4
4.1 Introducción al modelo de programación lógica..........................................5
4.2. Semántica de los programas lógicos..........................................................9
4.3 Representación clausada del conocimiento................................................11
4.4 Consulta de una base de cláusulas...........................................................11
4.5 Espacios de búsqueda.............................................................................12
4.6 Programación lógica con números, listas y árboles....................................13
4.7. Control de búsqueda en programas lógicos..............................................14
4.8. Manipulación de términos.......................................................................14
4.9 Predicados mitológicos............................................................................15
CONCLUSIONES...............................................................................................16
BIBLIOGRAFÍA.................................................................................................16

2
INTRODUCCIÓN

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

El lenguaje de programación PROLOGO ("PROgrammation en LOGique") fue


creado por Alain Colmerauer y sus colaboradores alrededor de 1970 en la
Universidad de Marseille-Aix.

 David Warren3, de la Universidad de Edimburgh, desarrolló el primer


compilador de Prolog (WAM - "W arr en Abstract machine")..
 Se pretendía usar la lógica formal como base para un lenguaje de
programación.
 ¡Lo que lo diferencia los demás es el énfasis sobre la especificación del
problema!
 Es un lenguaje para el procesamiento de información simbólica.
 El lenguaje PROLOG juega un importante papel dentro de la Inteligencia
Artificial.
 PRÓLOGO es un lenguaje de programación para ordenadores que se basa
en el lenguaje de la Lógica de Primer Orden y que se utiliza para resolver
problemas en los que entran en juego objetos y relaciones entre ellos
 En el presente trabajo se detallarán cada tema relacionado a la unidad 4 de
la materia programación lógica y funcional

3
DESARROLLO
4. Modelo de programación lógica.
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

En qué consiste (ejemplo)

La programación lógica permite formalizar hechos del mundo real, por ejemplo:

una mascota vuela si es un ave y no es un pingüino las aves vuelan los pingüinos
no vuelan "pichurri" es un ave "sandokan" es un perro "alegría" es un ave y
también reglas o restricciones:

Ante dicho "programa" es posible establecer 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 er hipótesis que no son más
que preguntas o incógnitas, por ejemplo:

¿” pichurri" vuela? ¿qué mascotas vuelan? ....

4
4.1 Introducción al modelo de programación lógica
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.

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 + control

Lógica (programador): hechos y reglas para representar conocimiento

Control (interprete): deducción lógica para dar respuestas (soluciones)

La programación lógica intenta resolver lo siguiente:

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.

La programación lógica: construye base de conocimientos mediante reglas y


hechos

 Regla: implicación o inferencia lógica que deduce nuevo conocimiento, la


regla permite definir nuevas relaciones a partir de otras ya existentes

También se usan

Son predicados predefinidos en PROLOG para las operaciones matemáticas


básicas.

Su sintaxis depende de la posición que ocupen, pudiendo ser infijos o prefijos.

5
Por ejemplo el operador suma (“+”), podemos encontrarlo en forma prefija
‘+(2,5)’ o bien infija, ‘2 + 5’.

También dispone de predicados de igualdad y desigualdad.

 X = Y igual
 X \= Y distinto
 X < Y menor
 X > Y mayor
 X =< Y menor o igual
 X >= Y mayor o igual

Semánticas de los programas lógicos

 Semántica proviene de un vocablo griego que puede traducirse como


“significativo”. Se trata de aquello perteneciente o relativo a la significación
de las palabras . Por extensión, se conoce como semántica al estudio del
significado de los signos lingüísticos y de sus combinaciones.
 La semántica lógica, por otra parte, se encarga del análisis de los
problemas lógicos de significación. Para esto estudia los signos (paréntesis,
cuantificados, etc.) las variables y constantes, los predicados y las reglas

Características

 Una tarea de la semántica es investigar las condiciones de verdad de los


enunciados.
 La semántica formal se ocupa únicamente de los aspectos formales o
estructurales de las condiciones de verdad.
 Un enunciado complejo será verdadero o falso en función de la forma en
que estén dispuestos los enunciados simples que lo componen.
 Esta forma viene dada por la disposición de las conectivas dentro del
enunciado.

6
 Una tarea de la semántica es investigar las condiciones de verdad de los
enunciados.
 La semántica formal se ocupa únicamente de los aspectos formales o
estructurales
 de las condiciones de verdad.
 Un enunciado complejo será verdadero o falso en función de la forma en
que estén dispuestos los enunciados simples que lo componen.
 Esta forma viene dada por la disposición de las conectivas dentro del
enunciado.

Alternativas para capturar la semántica de los programas lógicos.

 Semántica operacional
 Semántica declarativa
 Semántica de punto fijo

Una forma de razonar para resolver problemas en matemáticas se fundamenta en


la lógica de primer orden. El conocimiento básico de las matemáticas se puede
representar en la lógica en forma de axiomas, a los cuales se añaden reglas
formales para deducir cosas verdaderas (teoremas) a partir de los axiomas.
Gracias al trabajo de algunos matemáticos de finales del siglo pasado y principios
de éste, se encontró la manera de automatizar computacionalmente el
razonamiento lógico, particularmente para un conjunto significativo de la lógica de
primer orden, que permitió que la lógica matemática diera origen a otros tipos de
lenguajes de programación, conocidos como lenguajes lógicos.

En los comienzos de los años 70 el francés Alain Colmenuer desarrolló el lenguaje


PROLOG que también permite el desarrollo de aplicaciones en forma declarativa.

En general el PROLOG es un demostrador automático de problema, el cual utiliza


una Base de Conocimientos en forma de reglas de inferencia deductivas (cláusulas

7
de Horn), es decir sus reglas tienen como consecuente una única acción y las
inferencias obte¬nidas son estrictamente lógicas (verdaderas o falsas), aunque
puede parecer una limitación, esto no es totalmente justo, ya que PROLOG permite
programar mecanismos inferenciales con lógica probabilisticas, dado que se trata
de búsquedas en árboles con acumulación de evidencias.

El PROLOG como lenguaje surgido del cálculo de predicados, tomó las siguientes
ideas de la lógica para su ejecución.

a) Un conjunto de axiomas o hechos.


b) Reglas de inferencias las cuales se resuelven por resolución y unificación.
c) El objetivo a demostrar, que serán las condiciones a unificar con las reglas.

También tomó del LISP el tratamiento de las listas para la repre¬sentación de


estructuras complejas. Aunque el PROLOG tuvo su origen en la lógica matemática
no fue una transposición exacta, y esta ligada a las discusiones que sostienen
desde hace años los principales investigadores de la Inteligencia Artificial, los
cuales están divididos en dos grandes grupos, de una parte Minsky quien propone
estudiar los mecanismos del pensamiento humano y luego simularlo en la
computadora.

Lo más importante para Minsky son los conceptos, o sea la inter¬pretación que se
le puede dar a cada palabra en dependencia de un contexto dado.

El otro grupo encabezado por Mac Carthy (autor del LISP), afirma que la lógica
matemática es el elemento característico para la representación del razonamiento
y su implantación en la computadora, este grupo centra su atención en la
formalización y en la estructura de los conocimientos más que en el sentido de
estos.

La lógica desde la antigüedad se concibió como el método de descubrir las leyes


del pensamiento, pero estas leyes siempre han estado restringidas al pensamiento
científico y muy especialmente el matemático, quedando fuera el sentido común.
Esta deficiencia es admitida por los defensores de la lógica, pero ellos consideran

8
que la lógica es la única senda posible para desarrollar programas capaces de
mostrar inteligencia.

4.2. Semántica de los programas lógicos.


Hay tres maneras bien conocidas de dar significado o semántica a los programas
lógicos: la semántica declarativa, la semántica operacional y la semántica
denotacional (comúnmente llamada semántica de punto fijo).

Sea L un lenguaje de primer orden.

1. El universo de Herbrand de L, denotado HL, es el conjunto de todos los


términos de base que pueden formarse a partir de las constantes y los
símbolos de función que ocurren en L.
2. La base de Herbrand de L, denotada BL, es el conjunto de todos los
´átomos que pueden formarse a partir de los predicados que ocurren en L y
los términos en HL.
3. Una estructura A para L es una estructura de Herbrand si su dominio es HL
y, para cada s´ımbolo de funci´on f de L y elementos
t1 . . . , tn de A, f
A(t1, . . . , tn) = f(t1, . . . , tn). Para cada constante c en
L, c A = c.
4. Si Γ un conjunto de sentencias, un modelo de Herbrand de Γ es una
estructura de Herbrand que es un modelo para Γ. Debido a que en los
modelos de Herbrand la interpretación de las constantes y los s´ımbolos de
función son fijas, es posible identificar un modelo de Herbrand con un
subconjunto de la base de Herbrand.

Semántica declarativa. Desde el punto de vista lógico, un programa P puede


verse como una teoría lógica formada por las cláusulas del programa. Los
modelos de Herbrand de esta teor ́ıa son considerados los modelos del

9
programa P. Por ejemplo, la base de Herbrand del programa P, BP , es un modelo
de P.

Semántica operacional. Está definida por el proceso de inferencia utilizado para


probar que un objetivo puede ser derivado del programa. En la próxima sección
estudiaremos en detalle este punto.

Semántica dotacional. Esta semántica asigna significado a un programa


asociando una función sobre el dominio calculado por el programa. El significado
viene dado entonces por el punto fijo de la función, si existe.

10
4.3 Representación clausada del conocimiento.
Representación del conocimiento es un término para referirse a representaciones
pensadas para el procesamiento por ordenadores modernos, en particular, para
representaciones compuestas por objetos explícitos y de afirmaciones sobre ellos.

Representar el conocimiento mediante cláusulas permite a los ordenadores sacar


conclusiones de conocimiento previamente almacenados.

Tipos de Cláusulas

Ejemplos

1. Si algunos perros son mamíferos, luego todos son mamíferos.


2. Todos los colibríes son aves.

Este colibrí es ave.

Representación de clausada del conocimiento Es un área de inteligencia artificial


Analiza cómo pensar formalmente Se usa algún tipo de lógica para proveer una
semántica formal Cuyo objetivo fundamental es representar el conocimiento de
una manera que facilite la inferencia (sacar conclusiones) a partir de dicho
conocimiento. Cómo usar un sistema de símbolos para representar un dominio del
discurso (aquello de lo que se puede hablar), junto con funciones que permitan
inferir (realizar un razonamiento formal) sobre los objetos Las funciones de
razonamiento se aplican a los símbolos del dominio del discurso

Se refiere a representaciones pensadas para el procesamiento por computadoras


modernos. Estas se representa el conocimiento mediante clausulas.

Una cláusula es la disyunción de cualquier número de fórmulas atómicas afirmadas


o negadas. los tipos hijo:

11
 hechos
 reglas
 consultas

4.4 Consulta de una base de cláusulas.


Las cláusulas contienen la especificación o implementación del conjunto de hechos
y reglas que componen el programa. se encabeza con la palabra CLAUSES. Una
cláusula puede ser: un hecho: por ejemplo padre (juan, maria). una secuencia de
cláusulas que definen un predicado se denomina procedimiento.

Tipos de datos estructurados:

Átomos: Constantes y variables de cadena.

Listas, representadas entre [].

Tipos definidos por el usuario. Las reglas para definir relaciones pueden actuar
como tipos de usuario.

 SELECT select_list
 FROM table_source
 [WHERE search_condition]
 [GROUP BY group_by_expression]
 [HAVING search_condition]
 [ORDER BY order_expression [ASC | DESC] ]

FROM

Especifica de dónde queremos obtener los datos, es decir, de que tabla. Se utiliza
no sólo en el comando de consulta, SELECT, sino también en los comandos
UPDATE y DELETE .

WHERE

Está clausula es donde se indican las condiciones de filtrado de los datos. Estas
condiciones se definen a través de los operadores lógicos y de comparación.

12
4.5 Espacios de búsqueda.
Cuando se resuelve un problema, se busca la mejor solución entre un conjunto de
posibles soluciones. Al conjunto de todas las posibles soluciones a un problema
concreto se llama espacio de búsqueda.

Entonces parece que buscar una solución se reduce a buscar un valor extremo
(mínimo o máximo) en el espacio de búsqueda. A veces el espacio de búsqueda
puede ser bien definido, pero en la mayoría de las ocasiones sólo se conocen
algunos puntos en el espacio de búsqueda. Cuando se usa un AG las posibles
soluciones generan otras a medida que el genético evoluciona.

La resolución de un problema puede expresarse como la búsqueda del extremo de


una función Aquí resolvemos ese problema, este es un algoritmo genético que
calcula el máximo de una función. La gráfica representa un espacio de búsqueda y
las líneas verticales son posibles soluciones. La línea roja es el mejor individuo de
la población y las verdes el resto.

4.6 Programación lógica con números, listas y árboles.


Numéricos

En PROLOG los objetos numéricos pueden corresponder a tipo integer o float de c.


Para realizar operaciones numéricas, se tiene el predicado is, que se comporta
como una asignación en un lenguaje imperativo. Así, el objetivo X is <expresión>
será verdadero cuando X unifique con el resultado numérico de evaluar
<expresión>

Listas

13
La representación de hechos simples no es lo común en la clasificación del
elemento, sino que se agrupan los elementos de un mismo tipo en una lista. las
listas son colecciones de elementos en PROLOG. Una lista se divide en dos partes:

 Cabeza. Es el primer elemento de la lista


 Cola. Es una lista con el resto de los elementos de la lista. la cabeza y la
cola de una lista se separan con el símbolo |

Árboles

Es más fácil entender la forma de una estructura complicada si la escribimos como


un árbol en el que el nombre es un nodo y los componentes son las ramas.

4.7. Control de búsqueda en programas lógicos


El predicado proporciona control sobre el mecanismo de backtracking de
programación lógica: siempre tiene éxito pero tiene el efecto lateral de podar
todas las elecciones alternativas en el nodo correspondiente en el árbol de
búsqueda

El orden en que aparecen los literales dentro de una sentencia (dentro del cuerpo)
o el orden en que se introducen las sentencias en el programa son importantes en
PROLOG. El orden afecta tanto al correcto funcionamiento del programa, como al

14
recorrido del árbol de llamadas, determinando, entre otras cosas, el orden en que
PROLOG devuelve las soluciones a una pregunta dada. El orden de las sentencias
determina el orden en que se obtienen las soluciones ya que varía el orden en que
se recorren las ramas del árbol de búsqueda de soluciones.

4.8. Manipulación de términos.


Existen operadores para el chequeo de tipos de términos, se pueden usar par
manejo de errores, el predicado var/1 se satisface cuando su argumento es una
variable no unificada

Consiste en construir programas que manipulan otros programas proporcionando


una mayor expresividad al lenguaje

Predicados

Meta-Lógicos

 abuelo(X,Y):-novar(X)
 hombre(x), progenitor(x,z), progenitor(z,y).
 abuelo(x,y):-novar(y)
 progenitor(z,y), progenitor(x,z), hombre(x)
 abuelo(x,y):- X es abuelo de Y
 X es una variable no instanciada

4.9 Predicados mitológicos.


la construcción sirve para pasar nombres de predicados como argumentos. El
siguiente predicado determina si cierta lista está ordenada según algún criterio que
no se conoce a priori.

El predicado functor es uno de los más útiles entre la biblioteca standard Prolog.

15
Este predicado permite extraer el functor y la aridad de un término cualquiera.
Pero, al ser reversible, también permite construir nuevos términos a partir del
funtor y la aridad deseada.

Los modos de uso son:

 Functor(+Término,-Functor,-Aridad).
 Functor(-Término,+Functor,+Aridad). Predicados meta-lógicos

Ejemplo:

 Predicados de Clasificación
 Los predicados meta-lógicos permiten controlar el algoritmo de resolución
facilitando la meta-programación.

CONCLUSIONES
La programación lógica con su amplio rango de aplicabilidad y específicamente en
la representación de conocimiento y para implementar aplicaciones que sean
capaces de encontrar soluciones a problemas en base al conocimiento, resulta una
aproximación muy útil. Sin embargo, existe carencia de formalismos metodológicos
para apoyar al programador lógico en el desarrollo de "Descripciones" La

16
propuesta descrita presenta una serie de pasos, con una anotación y conceptos
asociados a cada paso, que conforman un enfoque sistemático para producir
aplicaciones lógicas. Se ha demostrado su aplicabilidad para desarrollar
descripciones de programas lógicos que manipulan conocimiento y resuelven
problemas en base a ese conocimiento.

La programación lógica es la parte de la informática que se ocupa de la lógica


como lenguaje de programación. En este paradigma, un programa es un conjunto
finito de FBFs, y la computación es la obtención de pruebas formales.

BIBLIOGRAFÍA
 Programación lógica | Apuntes de 4o de Ingeniería Informática. (s. f.).
github.
http://adrm.github.io/apuntes-cuarto/ico/4_programacion_logica.html
 Serra, S. (2011, junio). Paradigma logico. labsys.
https://labsys.frc.utn.edu.ar/ppr-2011/Unidad%20V%20-%20Paradigma
%20Lógico/Unidad%20V%20%20Paradigma%20LOGICO.pf
 Moreno, L. D. C. L., & Perfil, V. T. M. (s. f.). 4.3 Representación clausada
del conocimiento. Blogspot.
https://lucydelcarmenleonmoreno.blogspot.com/2019/05/43-
representacion-clausada
 Pasarella, E. (2004, mayo). Apuntes. cs.upc.edu.
https://www.cs.upc.edu/~edelmira/ApuntesLP.pdf
 Lopez, R. J. A. (2019, 11 mayo). Programacion Logica y funcional.
GoConqr.
https://www.goconqr.com/es/mindmap/9271680/programacion-logica-y-
funcional

 Chuc, I. E. (s. f.). ProgramaciÃ3n lÃ3gica con nÃomeros, listas y árboles.


prezi.com.

17
https://prezi.com/s58qigggszsd/programacion-logica-con-numeros-listas-y-
arboles/
 Couoh, R. (s. f.). 4.1.1 Manipulacion de terminos 4.1.2 Predicados
Metalogicos. prezi.com.
https://prezi.com/wzpdx9r407pp/411-manipulacion-de-terminos-412-
predicados-metalogicos/

18

You might also like