Está en la página 1de 32

UNIVERSIDAD PRIVADA SAN JUAN BAUTISTA

FACULTAD DE INGENIERÍAS
PROGRAMA ACADÉMICO DE
INGENIERÍA DE COMPUTACIÓN Y SISTEMAS

TÍTULO

PROGRAMACIÓN LÓGICA

PROYECTO FINAL

CURSO

PROGRAMACIÓN I

CHINCHA – PERÚ

2020
DOCENTE DEL CURSO

MG. CLAUDIO JESUS IBARRA RIOS

PRESENTADO POR LOS ESTUDIANTES

 GARCIA CASTILLA, MARIA


 LEVANO MAGALLANES, ALEX
 MARROQUIN PASTOR, JOSE
 PACHAS ZAMBRANO, JAVIER

CICLO:

 III
PROGRAMACIÓN LÓGICA
AGRADECIMIENTO

El amor recibido, la dedicación y la paciencia con la que cada día se preocupaban

nuestros padres por nuestro avance y desarrollo de nuestro proyecto final, es

simplemente único y se refleja en la vida de nosotros.

Gracias a nuestros padres por ser los principales promotores de nuestros sueños, gracias

a ellos por cada día confiar y creer en nosotros y en nuestras expectativas, gracias a

nuestras madres por estar dispuesta a acompañarme cada larga y agotadora noche de

estudio, agotadoras noches en las que su compañía y la llegada de sus cafés era para mí

como agua en el desierto; gracias a nuestros padres por siempre desear y anhelar

siempre lo mejor para nuestras vidas, gracias por cada consejo y por cada una de sus

palabras que nos guiaron durante nuestra vida.

Gracias a Dios por la vida de nuestros padres, también porque cada día bendice nuestras

vida con la hermosa oportunidad de estar y disfrutar al lado de las personas que

sabemos que más me aman, y a las que nosotros sabemos que más amamos en nuestras

vidas, gracias a Dios por permitirnos amar a nuestros padres, gracias a nuestros padres

por permitirnos conocer de Dios y de su infinito amor.

Gracias a todas las personas que nos apoyaron y creyeron en la realización de este

proyecto final.
DEDICATORIA

Dedicamos este trabajo a Dios por


habernos dado la vida, habernos
guiado siempre en el buen camino y
dándonos fuerzas cada día.

A Nuestros padres por concedernos su


incondicional apoyo en todo momento
de nuestra vida y su gran esfuerzo que
ponen en nosotros.

A nuestros Docentes por apoyarnos en


nuestra formación profesional y
personal.
INDICE

DATOS GENERALES

CAPÍTULO I............................................................................................................................1
1. INTRODUCCIÓN.........................................................................................................2
1.1. OBJETIVOS...........................................................................................................2
1.1.1. OBJETIVO GENERAL......................................................................................2
1.1.2. OBJETIVOS ESPECÍFICOS.............................................................................2
1.2. JUSTIFICACIÓN...................................................................................................2
1.3. METODOLOGÍA EMPLEADA............................................................................2
1.4. ALCANCE DE LA INVESTIGACIÓN................................................................2
CAPÍTULO II...........................................................................................................................3
2. DESARROLLO.............................................................................................................4
CAPÍTULO III.......................................................................................................................21
3. CONCLUSIONES Y RECOMENDACIONES........................................................22
3.1. CONCLUSIONES................................................................................................22
3.2. RECOMENDACIONES......................................................................................22
4. REFERENCIA BIBLIOGRÁFICAS........................................................................22
5. ANEXOS..........................................................................¡Error! Marcador no definido.
RESUMEN

Históricamente, los ordenadores se han programado utilizando lenguajes muy cercanos


a las peculiaridades de la propia máquina: operaciones aritméticas simples,
instrucciones de acceso a memoria, etc. Un programa escrito de esta manera puede
ocultar totalmente su propósito a la comprensión de un ser humano, incluso uno
entrenado. Hoy día, estos lenguajes pertenecientes al paradigma de la Programación
imperativa han evolucionado de manera que ya no son tan crípticos.

En cambio, la lógica matemática es la manera más sencilla, para el intelecto humano, de


expresar formalmente problemas complejos y de resolverlos mediante la aplicación de
reglas, hipótesis y teoremas. De ahí que el concepto de "programación lógica" resulte
atractivo en diversos campos donde la programación tradicional es un fracaso.

La programación lógica constituye una herramienta que tradicionalmente ha provisto de


una sólida estructura conceptual para representar conocimiento. Puede ser usada para
describir y recuperar conocimiento sobre un dominio de aplicación, para describir
nuestro conocimiento sobre tareas de cálculo tradicional, y para describir tareas menos
triviales como la capacidad de encontrar solución a problemas que normalmente se
considera dentro del campo de la Inteligencia Artificial.

Esto es porque encontrar soluciones a problemas es todavía una capacidad muy


dependiente de la intuición humana, las cuales son muchas veces difíciles de desarrollar
y formalizar. No hay una fórmula general para un buen uso de la programación lógica
en el desarrollo de aplicaciones de este tipo, pero se intentará ilustrar en este trabajo una
aproximación para abordar esta tarea. En esta aproximación se plantea un enfoque que
parte desde una descripción del dominio de aplicación en términos de entidades y
relaciones satisfechas por estas entidades, que a su vez permiten representar al mundo
en términos de estados. Fundamentalmente, se describen un estado inicial y otro final
(objetivo). A continuación, se desarrolla una estrategia que define un conjunto de
acciones que transforman el dominio descrito por el estado inicial en otros estados
intermedios hasta llegar al estado final. El problema se resuelve encontrando el camino
que lleva desde el estado inicial al estado final. Las entidades, sus relaciones y la
estrategia son traducidas a un lenguaje de programación que soporte el paradigma
lógico. Y finalmente, se evalúa el producto en sus aspectos de corrección, validez y
usabilidad.
CAPÍTULO I
2

1. INTRODUCCIÓN

1.1. OBJETIVOS

1.1.1. OBJETIVO GENERAL

Comprender la programación lógica como introducción a la


programación en general, comprendiendo la descripción de los conceptos
y componentes de un sistema de programación lógica, con la finalidad de
apoyar en el desarrollo de programas lógicos que permitan representar
conocimiento y sean capaces de encontrar soluciones basadas en el
conocimiento.

1.1.2. OBJETIVOS ESPECÍFICOS

 Antecedentes
 Conceptos previos
 Paradigma de la programación lógica
 Sistema de programación lógica
 Lógica de primer orden
 Poniendo a prueba la programación lógica

1.2. JUSTIFICACIÓN

El estudio de este es requerido ya que la lógica es la base de todo el


conocimiento en programación, ya que es posible aprender a escribir un código
para que la computadora interprete correctamente. Es decir que aprendes a
comunicarte con la máquina a partir de un lenguaje.

1.3. METODOLOGÍA EMPLEADA

El enfoque metodológico usa una notación formal para representar los


conceptos necesarios y consiste en cuatro fases fundamentales: Descripción del
dominio de aplicación, Diseño de una estrategia, Traducción a un lenguaje de
programación que soporte el paradigma lógico, como lo es Prolog, y
finalmente, una Evaluación. Se muestra su aplicabilidad para desarrollar
descripciones de programas lógicos que manipulan conocimiento y resuelven
problemas en base a ese conocimiento.
3

1.4. ALCANCE DE LA INVESTIGACIÓN


4

CAPÍTULO II
5

2. DESARROLLO

2.1. ANTECEDENTES

Históricamente, los ordenadores se han programado utilizando lenguajes muy


cercanos a las peculiaridades de la propia máquina: operaciones aritméticas
simples, instrucciones de acceso a memoria, etc. Un programa escrito de esta
manera puede ocultar totalmente su propósito a la comprensión de un ser
humano, incluso uno entrenado.

Hoy día, estos lenguajes pertenecientes al paradigma de la programación


imperativa han evolucionado de manera que ya no son tan crípticos, en cambio,
la lógica matemática es la manera más sencilla, para el intelecto humano, de
expresar formalmente problemas complejos y de resolverlos mediante la
aplicación de reglas, hipótesis y teoremas. De ahí que el concepto
de "programación lógica" resulte atractivo en diversos campos donde la
programación tradicional es un fracaso. La lógica ha estado muy relacionada
históricamente con las computadoras y los lenguajes de programación.

Presentemos algunos ejemplos:

 Los circuitos de las computadoras son diseñados con la ayuda del


álgebra booleana (George Boole)
 Datos y expresiones booleanos son usados en casi todos los lenguajes
de programación para el control de acciones del programa.
 Proposiciones lógicas se han usado para describir formalmente la
semántica de los lenguajes de programación, según el método
axiomático que tuvo a Floyd y Hoare como iniciadores.
 Enunciados lógicos se usan para especificaciones formales que
describen el comportamiento de un programa, lo que permite realizar
sobre estas pruebas de corrección.
 Las computadoras han sido empleadas para implementar los principios
de la lógica matemática, a través de sistemas de deducción automática y
demostradores de teoremas.
6

 Enunciados lógicos vistos como un lenguaje de programación y


ejecutados en la computadora.

Estos trabajos, iniciados tales como Robinson, Colmenaner y Kowalsky,


condujeron al lenguaje Prolog.

La programación lógica implica forzosamente al uso de hechos y relaciones


para representar la información y al de deducciones para responder a consultas.
Las consultas permiten conocer informaciones sobre las relaciones. Estos dos
aspectos reflejan una división de labores entre los programadores y un lenguaje
para la programación lógica.

El programador proporciona las reglas y los hechos, mientras que el lenguaje


usa la deducción para dar respuesta a consultas. Esta división de labores es
usualmente representado por la ecuación: 

ALGORITMO = LÓGICA + CONTROL

La lógica se refiere a los hechos y reglas que especifican lo que realiza el


algoritmo, y el control se refiere a cómo puede implementarse el algoritmo
mediante la aplicación de reglas en un orden particular. El programador
proporciona la parte lógica y el lenguaje de programación proporciona el
control. Las consultas en los programas lógicos pueden usarse de dos formas:

1. Para determinar si un determinado conjunto de valores pertenece a una


relación, en las cuales el intérprete responde Si, en caso de pertenecer la tupla,
y Fracaso en caso de fracasar la deducción de una respuesta Si.

2. Para determinar una instancia de valores para cada una de las variables
presentes en la consulta, que pueda deducirse a partir de las reglas y hechos del
programa lógico.

A partir de 1970 se desarrollaron en la Universidad de Edimburg intérpretes


eficientes de Prolog que aumentaron el interés en los sistemas de Programación
Lógica. Campos de aplicación La programación lógica encuentra su hábitat
natural en aplicaciones de inteligencia artificial o relacionadas:
7

 Sistemas expertos, donde un sistema de información imita las


recomendaciones de un experto sobre algún dominio de conocimiento.
 Demostración automática de teoremas, donde un programa genera
nuevos teoremas sobre una teoría existente.
 Reconocimiento de lenguaje natural, donde un programa es capaz de
comprender la información contenida en una expresión lingüística
humana.
 Etc.

La programación lógica también se utiliza en aplicaciones más "mundanas"


pero de manera muy limitada, ya que la programación tradicional es más
adecuada a tareas de propósito general.

2.2. CONCEPTOS PREVIOS

2.2.1. PROGRAMACION

Programación es el proceso de tomar un algoritmo y codificarlo en una


notación, un lenguaje de programación, de modo que pueda ser ejecutado
por una computadora. Aunque existen muchos lenguajes de
programación y muchos tipos diferentes de computadoras, el primer paso
es la necesidad de tener una solución. Sin un algoritmo no puede haber
un programa.

Las ciencias de la programación no son el estudio de la programación. La


programación, sin embargo, es una parte importante de lo que hace un
científico de la computación. La programación es a menudo la manera en
la que creamos una representación para nuestras soluciones. Por tanto,
esta representación en un lenguaje y el proceso de crearla se convierte en
una parte fundamental de la disciplina.

Los algoritmos describen la solución a un problema en términos de los


datos requeridos para representar el caso del problema y el conjunto de
pasos necesarios para producir el resultado pretendido. Los lenguajes de
programación deben suministrar un modo notacional para representar
8

tanto el proceso como los datos. Para este fin, los lenguajes suministran
estructuras de control y tipos de datos.

Las estructuras de control permiten que los pasos algorítmicos sean


representados de una manera conveniente pero sin ambigüedades. Como
mínimo, los algoritmos requieren estructuras que lleven a cabo
procesamiento secuencial, selección para toma de decisiones e
iteraciones para control repetitivo. Siempre y cuando el lenguaje
proporcione estas instrucciones básicas, éste puede ser usado para la
representación del algoritmo.

Todos los ítems de datos en la computadora están representados como


cadenas de dígitos binarios. Con el fin de darle significado a estas
cadenas, necesitamos tener tipos de datos. Los tipos de datos brindan una
interpretación para estos datos binarios de modo que podamos
considerarlos en términos que tengan sentido con respecto al problema
que está siendo resuelto. Estos tipos de datos incorporados de bajo nivel
(a menudo denominados tipos de datos primitivos) proporcionan los
bloques constructivos para el desarrollo de algoritmos.

Por ejemplo, la mayoría de lenguajes de programación proporcionan un


tipo de datos para los enteros. Las cadenas de dígitos binarios en la
memoria de la computadora pueden interpretarse como enteros y se les
dan los significados típicos que comúnmente asociamos con los enteros.
Además, un tipo de datos también proporciona una descripción de las
operaciones en las que los ítems de datos pueden participar. Con enteros,
son comunes las operaciones tales como la suma, la resta y la
multiplicación. Podemos dar por sentado que los tipos de datos
numéricos puedan participar en estas operaciones aritméticas.

La dificultad que a menudo nos surge es el hecho que los problemas y


sus soluciones son muy complejos. Estas estructuras y tipos de datos
simples, suministrados por el lenguaje, si bien son ciertamente suficientes
para representar soluciones complejas, están típicamente en desventaja a
medida que trabajamos en el proceso de solución de problemas.
9

Requerimos maneras de controlar esta complejidad y contribuir con la


creación de soluciones.

2.2.2. LA LOGICA

Ciencia de las formas y de las leyes del pensamiento. En lógica como en


toda la filosofía, la lucha entre las corrientes materialista e idealista ha
proseguido siempre y prosigue todavía. La lógica idealista separa las
formas y las leyes del pensamiento, del mundo objetivo, que existe
independientemente de la conciencia humana. De acuerdo con esta falsa
concepción, el hombre, apoyándose en ignoradas propiedades innatas,
establece arbitrariamente las reglas y las leyes del pensamiento sin
preocuparse de si se halla de acuerdo con la realidad objetiva. De ese
modo, la lógica idealista no reúne al hombre y a la naturaleza, sino que
los separa y opone. La lógica materialista, marxista, considera las formas
y las leyes del pensamiento como un reflejo de la realidad objetiva. El
conocimiento humano tiene por objeto reflejar fielmente la naturaleza,
penetrar sus leyes, sin lo cual no sería posible ninguna actividad práctica
consciente. Lejos de levantar una barrera entre el hombre y la naturaleza,
la lógica materialista, la única verdaderamente científica, reúne a ambos
y ayuda al hombre a conocer las leyes objetivas, a utilizarlas en su
interés.

2.2.3. LA LOGICA DE PROGRAMACION

Lógica es la técnica utilizada para desarrollar instrucciones en una


secuencia para lograr determinado objetivo.

Es la organización y planificación de instrucciones en un algoritmo, con


el objetivo de tornar visible la implementación de un programa o
software.

“La lógica de la programación es la organización coherente de las


instrucciones del programa para que su objetivo sea alcanzado.”
10

El gran desafío del programador es entonces montar la estructura del


programa para que este sea ejecutado por la computadora. Y es necesario
partir del principio de que la computadora no piensa de la misma forma
que el ser humano, y no es inteligente para saber qué es lo que tiene que
hacer, ni comprender mensajes subjetivos.

Por eso organizar la información de forma clara y en el orden adecuado


es primordial para que la acción sea ejecutada correctamente.

2.3. PROGRAMACION LOGICA

En el mundo actual en el que nos encontramos el uso del aprendizaje para


resolver problemas que se presentan en la vida real tiene cada vez un impacto
mayor. Desde hace siglos tenemos la capacidad de resolver los problemas que
se nos plantean, ya sea una toma de decisiones en un momento oportuno o la
solución al problema planteado. Esta capacidad para resolver problemas la
adquirimos desde que somos niños a través de la enseñanza y el
perfeccionamiento del conocimiento durante nuestra madurez. Dentro de esta
enseñanza una de las partes más importantes será la lógica, que nos permitirá
sacar conclusiones del problema presentado, sin importar que sea verdadero o
falso , por lo que adquiriremos conocimiento sobre él para un problema futuro
con las mismas características. A este concepto se le conoce como aprendizaje.
Por otra parte, esta necesidad de resolver problemas junto a los avances
tecnológicos de los últimos años hace que surja el concepto de la
programación, a partir del cual buscamos generar modelos y programas que
aprendan las soluciones a nuestros problemas de manera autónoma.

Es cierto que la programación, en su definición como desarrollo de


aplicaciones informáticas y tal y como la conocemos en la actualidad, tiene
infinitas capacidades que a medida que pasa el tiempo se van actualizando y
perfeccionando, pero la capacidad que en nuestro caso nos interesa es la de
resolver problemas que se puedan presentar en el mundo real y que tengan que
ser resueltos por un ser humano. Enfocándolo de esta manera es más
11

complicado su uso si no tenemos en cuenta el pensamiento lógico humano.


Este es necesario para resolver ciertos problemas que el programa pueda
presentarlos como una solución posible, mientras que llevándolo al mundo real
no se puede realizar porque quizá supere las capacidades humanas.

Por ello es necesario presentar la programación lógica, un concepto de


programación donde se unifica la programación declarativa clásica con los
conceptos de lógica formal que se conocen hasta la fecha. De esta manera en
vez de proporcionar al programa una serie de instrucciones que debe realizar
para conseguir el objetivo deseado, se proporciona al programa el problema
que se quiere llegar a resolver y a partir de mecanismos de inferencia con la
información proporcionada, se ejecuta buscando la solución al problema,
imitando al comportamiento humano.

Es cierto que la programación lógica nos proporciona las capacidades


necesarias para resolver problemas de la vida real, pero sigue sin adecuarse de
manera exacta a estos problemas. Esta razón se debe a que de alguna manera
en la vida real nunca puedes estar seguro de que algún hecho vaya a ocurrir
siempre. Aunque dependa de alguna condición que su aparición sea
extremadamente difícil que ocurra, por pequeña que sea esa su probabilidad de
que no ocurra, se debe tener en cuenta esta incertidumbre presente en el mundo
real. La manera de tratar la incertidumbre mediante el uso de la programación
lógica es mediante la adicción a esta del concepto de probabilidad, generando
en este caso la programación lógica probabilística. Con la programación lógica
probabilística se seguirá el mismo funcionamiento que en la programación
lógica, pero teniendo en cuenta que los hechos presentados no tienen por qué
ocurrir siempre, como ocurre en la vida real. Para ver las capacidades que tiene
esta programación se puede hacer uso del lenguaje de Prolog que basa su
funcionamiento en este, pero incluyendo el trato con la incertidumbre.

Entre todas las aplicaciones que tiene la programación lógica probabilística


para resolver problemas reales para un ser humano, nos centraremos sobretodo
en las técnicas de reconocimiento de actividades en el tiempo, aquellas que
dada cierta información del problema realiza el reconocimiento de lo que
ocurre en él. Este reconocimiento funciona de tal manera que a partir de cierta
12

información clasificada con una serie de datos de entrada es capaz de generar


predicciones sobre qué tipo de salida, en este caso la actividad que se realiza,
se ejecutará previsiblemente. Combinando todas las técnicas vistas, un
programa con todas estas características sería capaz de predecir actividades de
la manera más real posible.

2.4. PARADIGMA DE LA PROGRAMACION LOGICA

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.

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

"Un paradigma de programación como un modelo básico de diseño e


implementación de programas... ". (Alonso y Segovia)

“una colección de modelos conceptuales que juntos modelan el proceso de


diseño y determinan la estructura de un programa”. (Ambler, Brunett y
Zimmerman)

Ambler Brunett y Zimmerman proponen que el tipo de solución que aporta un


paradigma para resolver un problema particular, define tres categorías de
paradigmas: Solución procedimental u operacional, Solución demostrativa y
Solución declarativa. Aquí interesa describir el paradigma declarativo el cual es
el centro de atención de éste trabajo.

"la programación lógica es una programación por descripción. El programa se


construye describiendo el área de aplicación, esto es, se señala el qué se desea
pero no el cómo obtenerlo, esto está implícito" (Genesereth y Ginsberg)
13

Así, la programación lógica, desde la perspectiva del programador, es una


técnica que consiste en expresar apropiadamente todos los hechos y reglas
necesarias que definen un problema.

2.5. CONCEPTOS CLAVE DEL PARADIGMA


2.5.1. HECHOS

Expresión atómica (declaración, cláusula o proposición) que se formula


de la forma:

 P(t1,...,tn)P(t1,...,tn), indicando que se verifica el predicado P sobre los


objetos t1,...,tnt1,...,tn.

“PEPITO ES HUMANO”

Humano (pepito)

Sobre estas expresiones se puede definir el concepto de aridad como la


cantidad de objetos presentes en su declaración, a partir de este concepto
se pueden clasificar los hechos como:

Enunciado: Aridad = 0. Ejm: Verdadero.

Propiedad: Aridad = 1. Ejm: humano(Pepito), animal(Perro).

Relación: Aridad > 1. Ejm: padre(Homero, Bart), aprobar(Juan,


Lenguajes de Programación).

Los hechos son utilizados para declarar verdades desde el principio de la


ejecución de un programa, y el conjunto de estos hechos se denomina
como base de conocimientos.

2.5.2. REGLAS

Conjunto de proposiciones lógicas escritas como clausulas de Horn que


permiten inferir el valor de verdad de nuevas proposiciones, permitiendo
ampliar la base de conocimientos, a la vez que son utilizadas para definir
el dominio del problema.

“X ES MORTAL SI X ES HUMANO”
14

Mortal (x): - humano (x)

2.5.3. CONSULTAS

Proposición construida con el propósito de ser demostrada/desmentida o


de encontrar el conjunto de valores que la convierten verdadera. En las
consultas se especifica el problema a resolver. Partiendo de que los
humanos son mortales y de que Pepito es humano, deducimos que Pepito
es mortal.

Humano (pepito) . HECHO

Mortal (x) :- humano (x) .Regla

Mortal pepito

VERDAD

2.5.4. RECURSION

La recursividad puede ser tratada de una manera más eficaz si se piensa en


que hace el algoritmo recursivo que se piensa aplicar, en vez de cómo
hacerlo. Para esto se usará la modularidad, la cual se basa en separar el
problema en otros más pequeños y hallar la solución a estos para luego
unirlos, como es usual en la programación lógica.

Lo que se ha estado mostrando hasta ahora es, este sistema de resolver


problemas de la programación lógica mediante el modularidad, entonces,
¿cómo puede ser aplicada ésta en la recursión?

Si nuestro problema es obtener el área de un cuadrado, lo que se debe hacer


no es separar esta área en una de un triángulo o un círculo, sino en las áreas
de otros cuadrados, por lo cual se puede dar el valor del área del cuadrado
con las medidas mínimas y de ahí empezar a llamar recursivamente la
función con medidas mayores a ésta. Por ejemplo:

El área de un cuadrado de área de 2 unidades cuadradas es igual a cuatro


veces el área de un cuadrado de 1 unidad cuadrada.
15

De esta manera se pueden obtener resultados de un problema con solo


definir los casos base y de ahí realizar las operaciones recursivamente.

En un ámbito más matemático ésta idea puede ser utilizada para resolver
operaciones sencillas como es el caso de las sumatorias o factoriales, en
general cualquier operación que requiera información del resultado que
generan valores inferiores al dado. Un ejemplo de ésto podría ser el hallar
las potencias de dos dado el exponente en la función, lo cual puede ser
hallado con el siguiente programa de Prolog.

2.6. VENTAJAS Y DESVENTAJAS DEL USO DEL PARADIGMA


2.6.1. 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.
2.6.2. 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.
16

 Inferencia limitada por su base de conocimiento.

2.7. PROGRAMA LOGICO

En consecuencia, un programa lógico se configura como un conjunto de hechos,


y de reglas lógicas previamente establecidas, que obtienen conclusiones en base
a una serie de preguntas lógicas. El control es inherente al sistema, el que
permite investigar las preguntas lógicas. Esta capacidad es el concepto clave que
subyace en la Programación Lógica. Al separar el control y la lógica, el
programa lógico se transforma en un conjunto de declaraciones formales de
especificaciones que deben ser correctas por definición.

2.8. SISTEMA DE PROGRAMACION LOGICA

El conjunto de hechos y reglas constituye lo se denomina una descripción, que


llega a ser un programa donde combinado con un procedimiento de inferencia
independiente de la aplicación hace posible a la computadora sacar
conclusiones acerca del área de aplicación y responder preguntas aun cuando
estas respuestas no estén explícitamente registradas en la descripción. Esta
capacidad es la base de la tecnología de la programación lógica. La figura
número 1 ilustra la configuración de un típico sistema de programación lógica.
En el corazón del sistema está su procedimiento de inferencia, el cual acepta
consultas del usuario, accede a los hechos y reglas en su base de conocimiento
y saca conclusiones apropiadas. Esto es, es capaz de responder preguntas del
usuario. El funcionamiento de un Sistema de Programación Lógico se basa en
los conceptos de Descripción, Deducción y Control.

2.9. LOGICA DE PRIMER ORDEN

El cálculo de predicados de primer orden consta de un alfabeto y de dos clases


de expresiones definidas a partir de los símbolos de este alfabeto, los términos y
las fórmulas. El alfabeto del lenguaje consta de los siguientes conjuntos:

V={ x, y, z, ....} cuyos elementos se denominan símbolos de variables


(individuales).
17

F={ f, g, h, ….} , donde cada elemento f es un símbolo funcional n-ario (n ≥ 0),


por ejemplo sucesor(x). Si n = 0 el símbolo de función se denomina símbolo de
constante. Las constantes m{as empleadas son true y false.

R={ R, S, .....} , donde cada elemento R es un símbolo de relación n-aria ( n ≥


0). Si n = 0 el símbolo de relación se denomina símbolo de constante
proposicional o proposición.

d) Un conjunto finito de símbolos denominados operadores lógicos:

 : denominado negación,

∧ : denominado conjunción,

∨ : denominado disyunción,

⇒ : denominado implicación,

⇔: denominado bicondicional

y los operadores de cuantificación o cuantificadores:

∀(.) (denominado cuantificador universal) y

∃(.) (denominado cuantificador existencial).

Símbolos auxiliares de escritura. Términos Sea t una sucesión lineal finita de


símbolos del alfabeto de L, entonces:

 Si t es una variable, entonces es un término.


 Si f es un símbolo de función n-aria (n ≥ 0) y
tl,t2,...,tn son términos,entonces f( tl,t2, ,tn) un
término

Ejemplos x, a, f(x), g(a, f(b)) son términos

En consideraciones posteriores jugará un papel importante una clase de términos


denominados listas, que en la programación lógica se presenta con la notación:
[ t1, t2, ..., tn ]

con cabeza t1 el car y cola [ t2, ..., tn].


18

La lista [X|Y] se denomina una lista patrón o un esquema de lista que denota


cualquier lista con un primer elemento X y resto Y.

FORMULAS:

 Si R es un símbolo relacional n-ario ( n ≥ 0 ) y tl,t2,...,tn son términos,


entonces R(t1,t2,...,tn) es una fórmula elemental o átomo.
 Si A es una fórmula elemental, entonces A es una fórmula.
1. Si A es una fórmula, entonces A es una fórmula.
 Si A y B son fórmulas, entonces [A ∨ B], [A ∧ B], [A=>B] y [A <=> B]
son fórmulas.
 Si A es una fórmula, entonces ∀(x)A y ∃(x)A son fórmulas.
 En ∀(x)A (∃(x)A), A se denomina el alcance del cuantificador ∀(x)
(∃(x)).
 Si x es una variable que ocurre en la fórmula A, entonces se dice que x
está acotada o ligada en A, si A es el alcance del cuantificador ∀(x) (∃
(x)).
 Si x es una variable que ocurre en la fórmula A, entonces se dice que x es
libre en A si x no está acotada en A.

Si x no ocurre libre en A, entonces ∀(x)A (∃(x)A) es simplemente la fórmula A.


Una fórmula es una fórmula cerrada o un enunciado si no contiene ocurrencia
alguna de variable libre. Si tiene ocurrencia de variables libres se
llama predicado. El cálculo de predicados posee un grupo de reglas de inferencia
que permite deducciones a partir de axiomas y teoremas previamente
demostrados. La esencia de la programación lógica es consistir de una colección
de enunciados asumidos como axiomas y derivar un hecho deseado aplicando
reglas de inferencia de forma automática. Un lenguaje de programación lógica es
un sistema notacional para escribir enunciados lógicos junto con algoritmos para
implementar reglas de inferencia.

” El conjunto de enunciados lógicos que son asumidos como axiomas


constituyen el programa lógico.” Los enunciados que deben ser derivados, que
pueden ser vistos como entradas que desencadenan el cálculo son las demandas
o metas.
19

Por ello los sistemas de programación lógica son llamadas bases de datos
deductivas, en el sentido de volúmenes de datos que consisten de un conjunto de
enunciados y un sistema de deducción que responde a demandas.

En qué consiste, la programación lógica permite formalizar hechos del mundo


real, por ejemplo:

 Las aves vuelan


 Los pingüinos no vuelan
 “pichurrro” es un ave
 “sandoan” es un perro
 “alegría” es un ave

También se les puede colocar restricciones

 Una mascota vuela si es un ave y no es un pingüino

Ante dicho "programa" es posible establecer hipótesis que no son más que
preguntas o incógnitas, por ejemplo:

 ¿“Pichurri” vuela?
 ¿Qué mascota vuela?

Gracias a que la lógica de primer orden es computable, el ordenador será capaz


de verificar la hipótesis, es decir, responder a las incógnitas:

 Es cierto que “Pichurri” vuela.


 “Pichurri” y “Alegría” vuelan.

Obsérvese que el programa lógico no solamente es capaz de responder si una


determinada hipótesis es verdadera o falsa. También es capaz de determinar que
valores de la incógnita hacen cierta la hipótesis. Este ejemplo es claramente
académico. Sin embargo, consideremos el siguiente ejemplo: el sistema de
control de semáforos de una ciudad. El estado de cada uno de los semáforos
constituye los hechos del mundo real. El programa en sí consiste en unas pocas
reglas de sentido común: determinados semáforos no pueden permanecer
simultáneamente en verde, un semáforo solamente puede transitar de verde a
20

ámbar y de ámbar a rojo, etc. La hipótesis es el estado en el que deberían estar


cada uno de los semáforos en el siguiente instante de tiempo. Éste es un ejemplo
imposible de resolver mediante programación tradicional, ya que la lógica
subyacente al comportamiento de los semáforos en su conjunto queda
enmascarada por simples órdenes imperativas del tipo "cambiar color de tal o
cual semáforo".

2.10. PONIENDO A PRUEBA LA PROGRAMACION LOGICA

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 paises y continentes.

HECHOS:

ES_ESPAÑOL("MANOLO").

ES_ITALIANO("MARCO").

ES_COLOMBIANO("MARCELO").

REGLAS:

ES_EUROPEO(A) :- ES_ESPAÑOL(A).

ES_EUROPEO(A) :- ES_ITALIANO(A).

ES_AMERICANO(A) :- ES_COLOMBIANO(A).

ES_TERRICOLA(A) :- ES_EUROPEO(A).

ES_TERRICOLA(A) :- ES_AMERICANO(A).

SON_DEL_MISMO_CONTINENTE(A,B) :- ES_EUROPEO(A),
ES_EUROPEO(B).
21

SON_DEL_MISMO_CONTINENTE(A,B) :- ES_AMERICANO(A),
ES_AMERICANO(B).

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 claúsulas que aparecen. La última regla sería «Si A
es americano y B es americano, entonces son del mismo continente A y B».

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:

SON_DEL_MISMO_CONTINENTE("MANOLO", "MARCO").

SI

También podemos establecer objetivos abiertos y el sistema nos dirá qué valores
hacen que se cumplan:

ES_EUROPEO(A).

A = MANOLO

A = MARCO

Además de este tipo de proposiciones basadas en hechos y relaciones, la mayoría


de los lenguajes de programación lógica soportan también predicados basados en
restricciones, del tipo X > 5 o A * Z = 58.

2.11. APLICACIONES

 Desarrollo de aplicaciones de inteligencia artificial.


 Construcción de Sistemas expertos, donde un Sistema de información
mita las recomendaciones de un experto sobre algún dominio de
conocimiento.
 Prueba de teoremas de forma automática, donde un programa genera
nuevos teoremas sobre una teoría existente.
 Reconocimiento de lenguaje natural
22

 Procesamiento del lenguaje natural, donde un programa es capaz de


comprender (con limitaciones) la información contenida en una
expresión lingüística humana.
 Sistemas de administración de bases de datos relacionales
 Resolución de ecuaciones simbólicas
 Simulación
 Creación de prototipos
 Consultas lógicas basadas en reglas como:
 Búsquedas en bases de datos.
 Sistemas de control de voz.
23

CAPÍTULO III
24

3. CONCLUSIONES Y RECOMENDACIONES

3.1. 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 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.

3.2. RECOMENDACIONES

La programación se basa principalmente en resolver problemas, y una buena


técnica es dividir el gran problema en muchos problemas pequeños para poder
focalizarse en cada problema de manera más detallada. Una buena forma de
practicar esto es trabajar con pseudocódigo.

Se recomienda el Libro de Conciencia Tecnológica del instituto tecnológico


creado por Alonso Amo, Fernando; Villalobos Abarca, Marco; donde prueban
nuestro argumento con mayores hechos y pruebas estructuradas basadas en la
programación lógica.

Usar la programación lógica como base para comprender el funcionamiento de


la programación en diversas circunstancias, y destacando el lenguaje Prolog a
detalle se dará un mejor entendimiento y descripción a la programación lógica.

4. REFERENCIA BIBLIOGRÁFICAS

 [l]Alonso, F.; Segovia, J. (1995): "Entornos y Metodologías de


Programación". Paraninfo, España.
25

 [2]Ambler, A.; Burnett, M. y Zimmerman, B. (1992): "Operational Versus


Definitional: A Perspective on Programming Paradigms", Computer,
Septiembre.
 [3]Bratko, I. (1990): "PROLOG programming for artificial intelligence",
Addison Wesley [4]Brewka G.;
 Dix J. (1998): "Knowledge representation with logic programs", Logic
Programming and Knowledge Representation. Third International
Workshop,
 LPKR'97. Selected Papers. Springer-Verlag, Berlin, Germany; 246 pp. p.1-
51
 [5]Dahal, V. (1983): "Logic programming as a Representation of
Knowledge", Com rrter Octubre.
 [6]Floyd, R. (1979): "The Paradigms of Programming", Communications Of
The ACM, Agosto, Volumen 22, número 8.
 [7]Gelfond M.; Gabaldon A. (1997): "From functional specifications to logic
programs ", Logic Programming. Proceedings of the 1997 International
Symposium. MIT Press, Cambridge, MA, USA; 425 pp, p.355-69
 [8]Genesereth, M. y Ginsberg, M. (1985): "Logic Programming",
Communivations Of The ¿CM, Septiembre, Volumen 28, Número 9.
 [9]Kowalski, R. (1986): "Lógica, Programación e Inteligencia Artificial",
Díaz de Santo , España.
 [10]Le Charlier B.; Leclere C .; Rossi S.; Cortesi A. (1999): "Automated
verification of Prolog programs" Journal of Lo ic Pros mming ra , vol.39,
no.1-3; AprilJun; p.3-42
 [1 1]Nilsson N. (1987): "Principios de Inteligencia ArtificiaP', Ediciones
Díaz de Santos, España.
 [ 12]Pedreschi D. Ruggieri S . ( 1999): "Verification of logic programs",
Journal of Logic Progra ,. mming, vo1.39, no. l -3; April-June; p.125-76
 [13]Rolston, D. (1990): "Principios de Inteligencia Artificial y Sistemas
Expertos" , McGraw-Hill, Colombia.

También podría gustarte