No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Programación lógica

10/21
Recursos

La programación lógica es un paradigma declarativo que expresa los objetivos como una colección de afirmaciones o reglas acerca de los resultados y restricciones en lógica matemática. Entre sus áreas de aplicación encontramos el NLP (Procesamiento de lenguaje natural), la recuperación de información en bases de datos y aplicaciones matemáticas.

Cláusulas de Horn

La programación lógica se basa en las Cláusulas de Horn. Estas son preposiciones definidas por predicados, donde tenemos un hecho (algo que damos por sentado) y tenemos uno o varios predicados. Lo correcto sería tener por lo menos 2, para poder determinar si algo es verdadero o falso, también se les conoce como cuerpo/body. Las cláusulas de Horn están relacionadas con las tablas de verdad.
Cláusula de horn

H= Hecho/Head of the rule.
P= Predicado/Body

Ejemplo de cláusula de Horn

Podemos decir que es verdadero que está nevando en la ciudad, C es el nombre de la ciudad. Si está lloviendo y hace frío, entonces es verdadero que está nevando. Y, por el contrario, si quisiéramos negar que está lloviendo, pero hace frío, entonces es falso que está nevando. Esto tiene una estrecha relación con las tablas de verdad.

nevando(C) ← lluvia(C), frío(C)

Origen de la programación lógica

La programación lógica viene de los años 60, cuando Cordell Green propuso el uso de cláusulas en programas a finales de los 60. El lenguaje Prolog impulsó este paradigma. Otros lenguajes lógicos son Alf, Fril ,Mercury, Oz ,Visual Prolog y XSB.

No es muy frecuente el uso de programación lógica en la industria. Se usa más en investigación y ámbitos académicos.

Ejemplos de Prolog

Este es un ejemplo de “hola mundo” en Prolog. Nótese que al final se imprime true.

% Hola mundo

?- write('Hello World!'), nl
> Hello World!
> true

En el siguiente ejemplo vemos como le indicamos que hay personas que hablan un lenguaje, hacemos la evaluación de la persona 1 con la persona 2 y cuál es el resultado. Luego hacemos también la evaluación, preguntando “Quién habla francés” El resultado retornado debería ser “Juan”.

speaks(juan, french)
speaks(isabel, english)
speaks(eduadro, french)
speaks(eduardo, english)

talkswith(Person1, Person2) :-
speaks(Person1, L),
speaks(Person2, L),
Person1 \= Person2

?- speaks(Who, French)

Conclusión

La programación lógica es un paradigma utilizado sobre todo en entornos académicos. Se basa en el uso de Cláusulas de Horn, y tiene una relación estrecha con las tablas de verdad.

Contribución creada por: Ciro Villafraz con los aportes de Valentina Barrios.

Aportes 33

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Hola Platzinauta. 👋
Te comparto mis apuntes para que #NuncaParesDeAprender. 👀✍

¿Qué es la programación lógica?

Paradigma declarativo que expresa los objetivos como una colección de afirmaciones o reglas acerca de los resultados y restricciones en lógica matemática.

Áreas de aplicación

  • NLP (Procesamiento de lenguaje natural)
  • Recuperación de información en BBDD
  • Aplicaciones matemáticas

Cláusula de Horn

La programación lógica se basa en las clausulas de Horn las cuales son preposiciones definidas por predicados, donde tenemos un hecho (algo que damos por sentado) y tenemos uno o varios predicados, lo correcto sería tener por lo menos 2, para poder determinar si algo es verdadero o falso, también se les conoce como cuerpo/body.

H= Hecho/Head of the rule.

P= Predicado/Body

Ejemplo:

Podemos decir que es verdadero que está nevando en la ciudad, C es el nombre de la ciudad. Si está lloviendo y hace frío, entonces es verdadero que está nevando. Y por el contrario si quisiéramos negar que está lloviendo, pero hace frío, entonces es falso que está nevando. Esto tiene una estrecha relación con las tablas de verdad.

nevando© ← lluvia©, frío©

Origen

Se origina en los 60’s cuando Cordell Green propuso el uso de cláusulas en programas a finales de los 60.

Prolog impulsó este paradigma.

Lenguajes

  • Prolog
  • Alf
  • Fril
  • Mercury
  • Oz
  • Visual Prolog
  • XSB

No es muy frecuente este paradigma de programación en la industria, se usa más para investigación y cuestiones académicas, dada su naturaleza.

% Hola mundo

?- write('Hello World!'), nl
> Hello World!
> true

En este ejemplo podemos ver como le indicamos que hay personas que hablan un lenguaje, hacemos la evaluación de la persona 1 con la persona 2 y cuál es el resultado. Luego hacemos también la evaluación, preguntando “Quién habla francés” El resultado retornado debería ser “Juan”

speaks(juan, french)
speaks(isabel, english)
speaks(eduadro, french)
speaks(eduardo, english)

talkswith(Person1, Person2) :-
speaks(Person1, L),
speaks(Person2, L),
Person1 \= Person2

?- speaks(Who, French)

Hace poco estuve probando Prolog y es un paradigma muy diferente a lo que la mayoría conocemos, y pude notar que hay problemas que son mucho más fáciles de resolver con este lenguaje.
Sudoku 9x9 en Prolog
En este post por ejemplo muestran cómo resolver un sudoku de 9x9 y el código es muy legible gracia a la sintaxis de Prolog y mucho más corto si lo comparamos con la solución a este mismo problema con otros lenguajes.

💡 La programación lógica permite resolver problemas mediante predicados, este es usado en la Inteligencia Artificial.

Programación Lógica

Definición

Otro derivado del paradigma declarativo. Este estilo de programación que expresa sus objetivos (recordemos que el paradigma declarativo se enfoca en el objetivo) como una colección de afirmaciones o reglas, en lógica matematica.

Origen

La programación lógica viene de las clausulas de Horn, los cuales son basicamente predicados que se evaluan y dan como resultado verdadero o falso.
Ejemplo: Nevando(Si) <- Lluvia (Si), Frío (Si)
Si está lloviendo y hace frio, entonces … está nevando.
Si alguno de los predicados es falso, entonces se hace falso el resultado.

Ejemplo de lenguajes: Prolog, ALF, Fril, Mercury, Oz, Visual Prolog, XSB

Por lo que entiendo, la programación lógica busca resolver un problema a partir de relaciones.
No termino de entender el cómo se aplica porque lo veo como condicionales, pero parece que la forma en la que se hace da pie a conocer el ambiente del problema.

La Programación lógica

Expresa los objetivos como una colección de afirmaciones o reglas acerca de los resultados y restricciones en lógica matemática.

Los lenguajes de programación lógica, casi no tienen estructuras de control. Aqui les muestro un algoritmo en Prolog para mostrar los números entra a y b.

mostrarNumeros(A, B) :-
    (A =< B) -> (
        writeln(A),
        A1 is A + 1,
        mostrarNumeros(A1, B)
    ) ; true.

Para casi todo se utiliza recursividad y backtracking

.
Aunque también tienen cosas como listas, pero no como las conocemos


%%intercalar(L1, L2, L3) : Predicado que encuentra la lista 
%L3, resultado intercalar los elementos de las Listas L1 y L2.
%%
intercalar([], L2, L2) :- !.
intercalar(L1, [], L1) :- !.
intercalar([X|L1], [Y|L2], [X, Y|L3]) :- intercalar(L1, L2, L3).

Este algotimo mezcla los elemntos de la lista1 y la lista2 en la lista3
Recursividad casi al 100%

La programación es una herramienta increíblemente poderosa que nos permite realizar tareas de manera más eficiente y con mayor rapidez. Prolog es un lenguaje de programación interesante y único que nos permite abordar problemas complejos de una manera directa y sencilla. Está especialmente diseñado para aplicaciones de lógica matemática, y su sintaxis es relativamente sencilla de aprender. Muchas empresas lo usan para resolver problemas complejos con una gran cantidad de datos, lo que lo convierte en una herramienta muy útil para cualquier desarrollador.

father(zeb, john_boy_sr).
father(john_boy_sr, john_boy_jr).

ancestor(X, Y) :-
    father(X, Y).
ancestor(X, Y) :-
    father(X, Z), ancestor(Z, Y).

Este ejemplo define dos hechos que hacen referencia a relaciones entre padres e hijos, y una regla para calcular los ancestros de una persona.

Para qué se usa la programación lógica?
.

No existe un consenso o una fórmula sobre el uso de la programación lógica para el desarrollo de aplicaciones. Sin embargo, el ámbito más importante de aplicación de la programación lógica es la inteligencia artificial.

.También es posible encontrar desarrollos programados con el paradigma de la programación lógica en:

  • Sistemas expertos: En este campo, los sistemas de información simulan las recomendaciones de un experto acerca de múltiples temas.
  • Demostración automática de teoremas: En este caso, un aplicativo es capaz de generar nuevos teoremas sobre teorías que ya existían previamente.
  • Reconocimiento de lenguaje natural: En este campo, de mucha actividad en la actualidad, un programa es capaz de entender, aunque con ciertas limitaciones, la expresión lingüística humana.
    .
    Con respecto a la aplicación de la programación lógica en el campo del software de usuario, se suele utilizar. Sin embargo, su ámbito de aplicación es realmente muy limitado.
    .
    Esto es así ya que con la programación tradicional se obtienen mejores resultados, sobre todo en la informática de consumo, que lo que se podría obtener mediante la programación lógica.

Interesante conocer esto. Hacer una algo complejo a algo mas NLP.

Un código que le pedi a chat gpt para entender mejor el tema

% Definición de hechos
hombre(juan).
hombre(pedro).
mujer(ana).
padre(juan, pedro).
madre(ana, pedro).

% Definición de reglas
hermano(X, Y) :- padre(Z, X), padre(Z, Y), X \= Y.

% Consultas
?- hombre(juan).  % Pregunta: ¿Juan es un hombre?
  Respuesta: true.

?- padre(juan, pedro).  % Pregunta: ¿Juan es el padre de Pedro?
  Respuesta: true.

?- hermano(pedro, X).  % Pregunta: ¿Quién es el hermano de Pedro?
  Respuesta: X = pedro.

Es curioso que la programacion logica tenga la funcion de declarar los objetos que se asignan. Nunca pense que este tendria un origen muy antiguo y como ayudo a muchos programadores en llegar a su camino como profesionales.

Programación Logica, se enfoca a los objetivos resultados

Me costó entender las cláusulas de horn pero al verlo en cierta manera como un operador lógico (aunque no son lo mismo), la compresión de este se me hizo más fácil.

Programación lógica

  • Afirmaciones o reglas acerca de los resultados y restricciones en lógica matemática
  • Usados para NLP, DataBases Querying, aplicaciones matemáticas
  • Se basa en las cláusulas de Horn

Genial!

La programación lógica es un paradigma utilizado sobre todo en entornos académicos. Se basa en el uso de Cláusulas de Horn, y tiene una relación estrecha con las tablas de verdad
![](https://static.platzi.com/media/user_upload/image-db9d2f8f-c798-48ca-a430-1d7449e3cb9b.jpg)

Las cláusulas de Horn son un tipo de cláusulas utilizadas en lógica proposicional y programación lógica. Se definen como una disyunción de literales donde, como máximo, uno es positivo. En otras palabras, una cláusula de Horn puede tener la forma:
A1​∨…∨Ak​←B1​∧…∧Bn​
con ( k=1 ) o ( k=0 ) y ( n \geq 0 ), donde ( A ) y ( B ) representan átomos. Las cláusulas de Horn con ( k=1 ) y ( n>0 ) son reglas, las que tienen ( k=1 ) y ( n=0 ) son hechos, y las que tienen ( k=0 ) y ( n>0 ) son objetivos1.
Por ejemplo, en el contexto de la programación lógica con Prolog, una cláusula de Horn podría verse así:
hija(A, B) :- mujer(A), padre(B, A).

Esto se leería como: “A es hija de B si A es mujer y B es padre de A”. Aquí, el símbolo :- separa la conclusión de las condiciones, y las variables se escriben comenzando por una letra mayúscula2.
Las cláusulas de Horn son importantes porque permiten representar conocimiento de una manera que es eficiente para la inferencia computacional, lo que las hace fundamentales en lenguajes de programación lógica como Prolog.

True and True = True
True and False = False
False and True = False
False and False = False

.

prEposición es un conector en las oraciones y es el famoso a, ante, bajo... pero prOposición es un hecho que puede ser verdad o mentira, además mire en un artículo y en la programación lógica y en otros lugares se llama lógica proprosicional.

Mi resumen:

La programación lógica es básicamente un 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

Se puede ver como una deducción controlada.

  • Lógica (programador): hechos y reglas para representar conocimiento.
  • Control (interprete): deducción lógica para dar respuestas (soluciones).

La programación lógica es un paradigma declarativo que expresa los objetivos como una colección de afirmaciones o reglas acerca de los resultados y restricciones en lógica matemática.

PARADIGMA DE PROGRAMACIÓN LOGICA
.
Es un paradigma que expresa los objetivos como una colección de afirmaciónes o reglas acerca de los resultados y restricciones en lógica matemática.
.
Areas de aplicación
.

  • NLP.
  • Recuperación de información en BBDD.
  • Aplicaciones matemáticas.
    .
    El paradigma se basa en las clausulas de Horn las cuales son preposiciones definidas por predicados.
    .
    h = Hecho | Head of the rule
    p = predicado | Body

    .
    nevando© <- lluvia©, frio©
    .
    Este paradigma se origina en los años 60s cuando Cordell Green propuso el uso de cláusulas en programas.

Programación lógica

Hace uso de la lógica, un conjunto de afirmaciones o reglas que crean un modelo estructural para establecer los principios para llegar a un resultado

Por ejemplo podríamos tener 3 mascotas y declarar los siguientes hechos:
las aves vuelan
Los pingüinos no vuelan

Y establecer que:
“Firulais” es un perro
“penpen ” es un pingüino
“zasú”es una ave

Ante el programa podríamos preguntar que:
¿firulais vuela?
¿Que mascotas vuelan?

Y gracias a la lógica podríamos obtener
Que firulais no vuela
Zasú es capas de volar

La programación lógica es un tipo de paradigmas de programación dentro del paradigma de programación declarativa. La programación lógica gira en torno al concepto de predicado, o relación entre elementos. 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 asignatura de Programación Lógica y Funcional aporta al perfil del Ingeniero en Sistemas Computacionales la capacidad de desarrollar habilidades para la generación de soluciones automatizadas basadas en lenguajes de inteligencia artificial, considerando el entorno y la aplicación de diversas técnicas, herramientas.

Programación lógica: Enfocado al resultado no al cómo; Expresa los objetivos como una colección de afirmaciones o reglas acerca de los resultados y restricciones en lógica matemática.
-Paradigma declarativo-
*Areas de aplicación:
.-NLP(Procesamiento Lenguaje Natural).
.-Recuperación de información en BBDD.
.-Aplicación matemáticas.
*Principios basados en las cláusulas de HORN == Preposiciones definidas por predicados.
ej: PROLOG, ALF, Mercury, Oz, SXB, Visual Prolog.

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

En la universidad conocí el Lenguaje Prolog, al desarrollar un sistema experto; por reglas de inferencias puedes determinar hechos.

gran profesor