Vous êtes sur la page 1sur 8

Programa= lgica + control

Lgica (programador): hechos y reglas para representar conocimiento

Control (interprete): deduccin lgica para dar respuestas (soluciones)

Como hemos especificado antes, para construir programas en Prolog necesitamos una serie
de elementos. Vamos a especificarlos :

tomos: Es una definicin genrica de un objeto del mundo que queremos representar.
Predicados: Nos permite especificar caractersticas de los objetos de nuestro mundo o las
relaciones entre ellos.
Hechos: es algo que est ocurriendo en nuestro mundo,caracterstica o relacin entre
objetos. En el lenguaje natural un hecho podra ser por ejemplo que Lgica y
Computabilidad es una asignatura de Ingenera Informtica.
Variables: no es variable con el concepto que tenemos de ella en la programacin
habitual. En Prolog, una variable representa el valor de un tomo.

La programacin lgica es un paradigma de programacin basado en la lgica de primer


orden. S, esa lgica que te ensean en el instituto (al menos en mis tiempos) y en la
carrera donde tienes predicados y, mediante reglas, puedes derivar conclusiones:
Todos los hombres son mortales

Socrates es un hombre

------------------------------

Socrates es mortal

Se trata de un tipo de programacin declarativa, es decir, no se indica cmo se hacen las


cosas, sino qu cosas hacer. A partir de eso, el motor de ejecucin decide cmo hacerlo.

Conclusiones
Aunque a primera vista pueda parecer que este tipo de programacin est muy limitada a
resolver puzzles y cosas por el estilo, lo cierto es que (tericamente) puedes realizar
cualquier tipo de programa con ellos.

Aun as, lo lgico (valga la redundacia) es utilizar programacin lgica en las reas en que
ms sentido tiene: inteligencia artificial, sistemas expertos, procesamiento de lenguajes,
etc.
El poder utilizar este paradigma a travs de libreras hace sea mucho ms atractivo,
porque hace que sea ms sencillo usarlo slo en aquellas partes del problema que tiene
sentido.

La programacin lgica: construye base de conocimientos mediante reglas y hechos

Regla: implicacin o inferencia lgica que deduce nuevo conocimiento, la regla permite definir nuevas
relaciones apartir de otras ya existentes

Ej.:

Mortal (x): - humano(x)

x es mortal si x es humano

Hecho: declaracin, clusula o proposicin cierta o falsa, el hecho establece una relacin entre
objetos y es la forma ms sencilla de sentencia
Ej.:

Humano (Scrates); Scrates es humano

Ama (Juan, Maria) ; ama Juan a Maria

Consulta: se especifica el problema, la proposicin a demostrar o el objetivo Partiendo de que los


humanos son mortales y de que Scrates es humano, deducimos que
Scrates es mortal

Mortal (x): - humano(x);- los humanos son mortales ; regla

Humano (Scrates); Scrates es humanos ; hecho

Scrates es mortal ; consulta

% Hechos:
es_espaol("Manolo").
es_italiano("Marco").
es_colombiano("Marcelo").

% Reglas:
es_europeo(A) :- es_espaol(A).
es_europeo(A) :- es_italiano(A).
es_americano(A) :- es_colombiano(A).
son_del_mismo_continente(A,B) :- es_europeo(A), es_europeo(B).
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 leera si A es espaol,
entonces A es europeo. La coma en la parte derecha funciona como un
operador Y lgico entre las clasulas que aparecen. La ltima regla sera 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:
1 ?- son_del_mismo_continente("Manolo", "Marco").
2 yes
Tambin podemos establecer objetivos abiertos y el sistema nos dir qu
valores hacen que se cumplan:

1 ?- es_europeo(A).
2 A = Manolo
3 A = Marco
Adems de este tipo de proposiciones basadas en hechos y relaciones, la
mayora de los lenguajes de programacin lgica soportan
tambin predicados basados en restricciones, del tipo X > 5 o A * Z = 58.

Cmo funciona todo esto


Generalmente se usa un mecanismo que se llama resolucin SLD (algo as
como resolucin por seleccin lineal de clasulas definidas) que se encarga
de obtener todas las posibles formas de satisfacer el objetivo planteado.
Explicar esto en profundidad lleva su tiempo, pero vamos a ver si nos
podemos hacer una idea de cmo funciona:
Se parte del objetivo que queremos resolver y se van seleccionando reglas
hasta intentar encontrar una solucin. Esta seleccin de reglas se realiza de
arriba a abajo, es decir, en el orden que estn definidas, y una vez que se
elige una regla, se resuelven recursivamente sus clasulas de izquierda a
derecha. Cuando hemos terminado, ya sea porque hemos encontrado una
solucin o porque hemos descubierto que no hay solucin posible (no hay
ms reglas que aplicar), se realiza un backtracking y se toma la siguiente
regla hasta procesar exhaustivamente todas las reglas definidas.

En realidad el proceso es un poco ms complicado que eso, pero para


hacernos una idea de cmo funciona, nos sirve.

Vamos a verlo con un ejemplo sobre el programa anterior:

1 son_del_mismo_continente("Manolo", A).
Estamos preguntando al sistema qu valores de A cumplen que son del
mismo continente que Manolo. Para resolverlo, empezaramos por tomar
la primera regla que tenemos para son_del_mismo_continente y la
aplicaramos, conviertiendo nuestro objetivo en:
1 es_europeo("Manolo"), es_europeo(B).
Ahora procesaramos cada objetivo de izquierda a derecha. Aplicando la
regla es_europeo(A) :- es_espaol(A), nos quedara:
1 es_espaol("Manolo"), es_europeo(B).
Que Manolo es espaol lo sabemos porque est definido directamente
(es_espaol("Manolo")), as que pasaramos a resolver la segunda
clasula:
1 es_europeo(B).
Ahora habra que encontrar todos aquellos valores de B para los que se
cumple que B es europeo, y as alcanzaramos la solucin. Como eso es un
poco largo, os dejo un video en el que alguien se entretiene haciendo
una resolucin SLD en Prolog.
% Hechos:
es_espaol("Manolo").
es_italiano("Marco").
es_colombiano("Marcelo").

% Reglas:
es_europeo(A) :- es_espaol(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).

a es europeo si a es espaol
La programacin lgica: construye base de conocimientos mediante reglas y hechos
Regla: implicacin o inferencia lgica que deduce nuevo conocimiento, la regla permite
definir nuevas relaciones apartir de otras ya existentes

Ej.:

Mortal (x): - humano(x)

x es mortal si x es humano

Hecho: declaracin, clusula o proposicin cierta o falsa, el hecho establece una relacin
entre objetos y es la forma ms sencilla de sentencia
Ej.:

Humano (Pedro); Pedro es humano

Ama (Juan, Maria) ; ama Juan a Maria


La programacin lgica comprende dos Paradigmas de Programacin la Programacin
Declarativa y la Programacin funcional.
La lgica de primer orden, tambin llamada lgica predicativa, lgica de
predicados o clculo de predicados, es un sistema formal diseado para estudiar
la inferencia en los lenguajes de primer orden.1 Los lenguajes de primer orden son, a su
vez, lenguajes formales con cuantificadores que alcanzan slo a variables de individuo, y con
predicados y funciones cuyos argumentos son slo constantes o variables de individuo.2
La lgica de primer orden tiene un poder expresivo muy superior al de la lgica proposicional.

La lgica proposicional o lgica de orden cero es un sistema formal cuyos elementos ms


simples representan proposiciones, y cuyas constantes lgicas, llamadas conectivas lgicas,
representan operaciones sobre proposiciones, capaces de formar otras proposiciones de
mayor complejidad
Considrese el siguiente argumento:

1. Maana es mircoles o maana es jueves.


2. Maana no es jueves.
3. Por lo tanto, maana es mircoles.
Es un argumento vlido. Quiere decir que es imposible que las premisas (1) y (2) sean
verdaderas y la conclusin (3) falsa.
Sin embargo, a pesar de que el argumento sea vlido, esto no quiere decir que la conclusin
sea verdadera. En otras palabras, si las premisas son falsas, entonces la conclusin tambin
podra serlo. Pero si las premisas son verdaderas, entonces la conclusin tambin lo es. La
validez del argumento no depende del significado de las expresiones maana es mircoles
ni maana es jueves, sino de la estructura misma del argumento. Estas premisas podran
cambiarse por otras y el argumento permanecera vlido. Por ejemplo:

1. Hoy est soleado o est nublado.


2. Hoy no est nublado.
3. Por lo tanto, hoy est soleado.
La validez de los dos argumentos anteriores depende del significado de las expresiones o y
no. Si alguna de estas expresiones se cambia por otra, entonces los argumentos podran
dejar de ser vlidos. Por ejemplo, considrese el siguiente argumento invlido:

1. Ni est soleado ni est nublado.


2. No est nublado.
3. Por lo tanto, est soleado.
Estas expresiones como o y no, de las que depende la validez de los argumentos, se
llaman conectivas lgicas. En cuanto a expresiones como est nublado y maana es
jueves, lo nico que importa de ellas es que tengan un valor de verdad. Es por esto que se
las reemplaza por simples letras, cuya intencin es simbolizar una expresin con valor de
verdad cualquiera. A estas letras se las llama variables proposicionales, y en general se toman
del alfabeto latino, empezando por la letra p (de proposicin) luego q, r, s, etc. Es as que
los dos primeros argumentos de esta seccin se podran reescribir as:

1. p o q
2. No q
3. Por lo tanto, p
Y el tercer argumento, a pesar de no ser vlido, se puede reescribir as:

1. Ni p ni q
2. No q
3. Por lo tanto, p
Conectivas lgicas[editar]
Artculo principal: Conectiva lgica

Conectivas lgicas

Tautologa

Conjuncin opuesta

Implicacin opuesta

Implicacin

Disyuncin lgica

Negacin lgica

Disyuncin exclusiva

Bicondicional

Afirmacin lgica

Disyuncin opuesta

Adjuncin lgica
Adjuncin opuesta

Conjuncin lgica

Contradiccin

A continuacin hay una tabla que despliega todas las conectivas lgicas que ocupan a la
lgica proposicional, incluyendo ejemplos de su uso en el lenguaje natural y los smbolos que
se utilizan para representarlas en lenguaje formal.

Expresin Smbolo
en el en Smbolos
Conectiva Ejemplo
lenguaje este alternativos
natural artculo

Negacin no No est lloviendo.

Conjuncin y Est lloviendo y est nublado.

Disyuncin o Est lloviendo o est soleado.

Condicional Si est soleado, entonces es


si... entonces
material de da.

Est nublado si y slo si hay


Bicondicional si y slo si
nubes visibles.

Disyuncin Ni est soleado ni est


ni... ni
opuesta nublado.
Disyuncin o bien... o O bien est soleado, o
exclusiva bien bien est nublado.

En la lgica proposicional, las conectivas lgicas se tratan como funciones de verdad. Es


decir, como funciones que toman conjuntos de valores de verdad y devuelven valores de
verdad. Por ejemplo, la conectiva lgica no es una funcin que si toma el valor de verdad V,
devuelve F, y si toma el valor de verdad F, devuelve V. Por lo tanto, si se aplica la funcin
no a una letra que represente una proposicin falsa, el resultado ser algo verdadero. Si es
falso que est lloviendo, entonces ser verdadero que no est lloviendo.
El significado de las conectivas lgicas no es nada ms que su comportamiento como
funciones de verdad. Cada conectiva lgica se distingue de las otras por los valores de verdad
que devuelve frente a las distintas combinaciones de valores de verdad que puede recibir.
Esto quiere decir que el significado de cada conectiva lgica puede ilustrarse mediante una
tabla que despliegue los valores de verdad que la funcin devuelve frente a todas las
combinaciones posibles de valores de verdad que puede recibir.
Disyuncin
Negacin Conjuncin Disyuncin Condicional Bicondicional
exclusiva

Leyes notables en lgica[editar]

Vous aimerez peut-être aussi