Download Analicemos el clásico ejemplo sobre Sócrates.

Document related concepts

Mercury (lenguaje) wikipedia , lookup

Programación funcional wikipedia , lookup

ACL2 wikipedia , lookup

Curry (lenguaje de programación) wikipedia , lookup

Oz (lenguaje de programación) wikipedia , lookup

Transcript
MINISTERIO DE EDUCACIÓN
INSTITUTO TECNOLÓGICO BARÚ
ODERAY CUBILLA
GUILLERMO SALAZAR
KRYSTHELLE AGUILAR
12. ºCOMERCIO
ARELIS DE LEÓN
PROGRAMACIÓN
PROGRAMACIÓN LÓGICA
16/07/12
Introducción
En este trabajo hecho con esfuerzo y dedicación se
destacarán los puntos de la programación lógica. Durante
la parte de programación funcional vamos a hablar sobre
Haskell. La programación funcional está constituida
mediante definición de funciones puramente
matemáticas. Está basado en un modelo matemático :el
lambda-cálculo. A diferencia de Prolog , el objeto básico
aquí es la función. Esta vez nos enfrentamos a un lenguaje
tipiado y polimórfico además de poseer funciones de
orden superior. Esperamos que aprendas más.
Lee, instruye y aprende.
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 su
paradigmas 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 lógica gira en torno al concepto de predicado, o
relación entre elementos. 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.
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.
En sus inicios la actividad de la computadora estuvo limitada
exclusivamente al cálculo numérico. Si bien es cierto que las
Máquinas fueron construidas principalmente para realizar operaciones
aritméticas, ellas son capaces de ejecutar tareas no numéricas, como
resolver problemas “lógicos”.
En realidad la computadora está dotada para procesar “símbolos”, el
que estos fuesen utilizados como numéricos no fue mas que un hecho
circunstancial.
Los primeros en comprender esta idea fueron los investigadores de la
Inteligencia Artificial, especialmente el trío NeweLL, Show y Simon con
su “logic theorist”. Este programa podía demostrar teoremas del cálculo
proposicional y sentó las bases sobre las posibilidades de las
computadoras para la manipulación de símbolos (no numéricos) y el
tratamiento de estructuras de datos en forma de <>.
Siguiendo estas ideas John Mac Carthy a principio de los años 60
desarrollo el lenguaje LISP, primer lenguaje que rompió con los
esquemas convencionales de programación.
El LISP utiliza el tratamiento simbólico de la información representadas
por listas, es el primer lenguaje que no hace diferenciación entre datos
e instrucciones y se le considera el pionero de los lenguajes funcionales
por su método de trabajo, similar a la resolución de funciones
matemáticas
Los conocimientos se dan en forma declarativa, sin indicar el
modo de empleo, ni donde, ni cuando utilizarlos
Los conocimientos son representados en forma de regla del tipo
antecedente consecuente. Donde en el antecedente viene la
descripción de un hecho y en el consecuente la acción a ejecutar la cual
produce nuevos hechos (cambios en la memoria de trabajo). Por su
puesto que es más cómodo proporcionar a un sistema conocimientos
en forma declarativa, ya que podemos dárselo en cualquier momento,
suprimirlos o modificarlos con facilidad.
En los comienzos de los años 70 el francés Alain Colmenear 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 de Horn), es decir sus reglas tienen como
consecuente una única acción y la 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 probabilísticas, dado
que se trata de búsquedas en árboles con acumulación de evidencias.
Analicemos el clásico ejemplo sobre Sócrates.
Todos los hombres son mortales
Sócrates es hombre
Sócrates es mortal
Su representación lógica será
Para todo X hombre(X) => mortal(X)
Existe Sócrates y hombre (Sócrates)
Entonces mortal (Sócrates)
En PROLOG sería.
Hombre (Sócrates) < –
Mortal(x) < — hombre(x)
? <– mortal (Sócrates)
También es posible definir una regla abuelo como sigue:
Abuelo (x,y) < — Padre (x,z) Padre (y,z)
y entonces la pregunta se reduciría a
? <– Abuelo (x,y)
El resultado a imprimir sería Juan, José.
Otra posibilidad sería saber de quién es abuelo Juan.
? <– Abuelo (Juan,x)
La regla anterior “Abuelo” está limitada a Abuelo por parte de padre, en
PROLOG basta modificar la regla Abuelo y agregarlas reglas progenitor
como sigue:
Abuelo (x,y) < — Padre (x,z) Progenitor (y,z)
Progenitor (x,y) <– Padre (x,y)
Progenitor (x,y) <– Madre (x,y)
De igual forma se puede agregar las reglas Tío, Hermano, Sobrino, Hijo etc.,
sin necesidad de alterar el programa.
Programando en Prolog
A la hora de programar en Prolog tenemos dos cuerpos principales: la
especificación de los hechos y las preguntas sobre esos objetos o
relaciones. Cuando creamos nuestra base de datos con esa
especificación de hechos podemos poneros a hacer preguntas sobre esa
especificación dando como resultado sí o no. Prolog saca la respuesta
explorando cada uno de los hechos introducidos en la base de datos
hasta encontrar uno que coincida, que será el caso en la que la
respuesta será afirmativa, o hasta que termine toda la base de datos,
cuyo caso dará una respuesta negativa. Las preguntas que hacemos
sobre la base de hechos pueden ser más complejas usando operadores
lógicos como AND,OR y NOT. En este caso, Prolog busca que la
satisfacción a la primera parte de la pregunta y si lo es, lo busca en la
segunda.
A la hora de ponernos a trabajar con Prolog necesitaremos un compilar
o intérprete para este lenguaje. El más común y usado es el SWIPROLOG que lo podemos encontrar tanto bajo Windows como y Linux y
MacOS
Motivación
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.
Fundamentos
La mayoría de los lenguajes de programación lógica se basan en la teoría
lógica de primer orden, aunque también incorporan algunos
comportamientos de orden superior como la lógica difusa.
En este sentido, destacan los lenguajes funcionales, ya que se basan en
el cálculo lambda, que es la única teoría lógica de orden superior que es
demostradamente computable (hasta el momento).
CONCLUSIÓN
ESPERAMOS QUE HAYAS APRENDIDO MÁS SOBRE LA
PROGRAMACIÓN LÓGICA Y LO QUE LA COMPONE.
HICIMOS ESTE TRABAJO PARA LA SATISFACCIÓN DEL
LECTOR Y SUS NECESIDADES.ESPERAMOS QUE HAYA
SIDO DE EFICACIA.