Está en la página 1de 7

Otros lenguajes lgicos adems de Prolog

Inteligencia en redes de comunicaciones

Otros Lenguajes Lgicos adems de Prolog


Eduardo Fernndez Matamala
Inteligencia en Redes de Comunicacin

La programacin lgica es aquel tipo de programacin que permite al software razonar, esto es, hacer razonamientos, por ejemplo, de tipo deductivo o inductivo. Dada una base de datos consistente en un conjunto de entidades, propiedades de esas entidades y relaciones de unas entidades con otras, el sistema es capaz de hacer razonamientos. Bsicamente, este proceso se expresa de la siguiente forma:

Resultados = reglas + hechos


Donde entendemos que hechos es el conjunto de datos que conoce el sistema a priori(o que va adquiriendo a lo largo de su ejecucin) y reglas son un conjunto de operaciones que se pueden aplicar a dichos datos para sacar un resultado lgico. Algunos campos donde este tipo de lenguajes es aplicado son en la implementacin de Sistemas Expertos (programas que generan una respuesta o una recomendacin sobre el tema para el que estn implementados) o para la Generacin de Nuevos Teoremas (dadas una serie de reglas, generan teoremas)

Lenguajes Lgicos
ALF (Another logical framework)
Este lenguaje combina la programacin lgica con la programacin funcional (funcional basado en la evaluacin de expresiones y funciones matemticas ms que en la utilizacin de comandos como <alloc>, <malloc>). Al igual que Prolog, ALF esta basado en clusulas de Horn (por eso es programacin lgica) pero tambin en funciones y ecuaciones (y por esto es tambin -1Eduardo Fernndez Matamala

Otros lenguajes lgicos adems de Prolog

Inteligencia en redes de comunicaciones

programacin funcional). En ALF, se puede mezclar expresiones y ecuaciones; puedes poner una expresin funcional como si fuese un predicado y cualquier predicado puede ser introducido como condicin en cualquier ecuacin. La base del procesamiento de ALF es resolution-narrowing-rewritingrejection. ALF usa reglas de resolucin para evaluar los literales y reglas de estrechamiento( narrowing) para evaluar las expresiones funcionales. Esto lo hace buscando en un rbol, que es una representacin del lenguaje. Como el proceso de narrowing puede ser largo, se usan tcnicas de leftmost-innermost basic narrowing, que son ms eficientes (el final de la expresin que se evala primero siempre es un cierre de parntesis, el primer cierre y despus de evaluar esta expresin, se sustituye todo l por el resultado al que se ha llegado, y se sigue procesando el siguiente parntesis). Adems, las expresiones sufren un proceso de reescritura (rewriting) antes de ser procesadas por las reglas de narrowing y las ecuaciones cuyos dos lados de la igualdad no tengan el mismo nodo como origen son rechazadas (rejected). Estos dos pasos previos, hacen que la bsqueda sea mucho ms eficiente. Adems ALF usa backtracking con bsqueda en profundidad en el rbol de derivaciones. Ejemplo de narrowing: Se definen las reglas: s(M)+N=s(M+N)) ; 0+N=N ; Tenemos la expression: X + s(0) = s(s(0)) Primer paso de narrowing: Si X=s(Y) S(Y+s(0)) = s(s(0)) Segundo paso de narrowing: (unificacin) Y+s(0) = s(0) Y=0 Solucin: X=s(0) Los programas escritos en ALF, se compilan y dan lugar a una serie de instrucciones de una mquina virtual basada en Warren Abstract Machine (WAM) con mltiples extensiones para soportar narrowing and rewriting. Actualmente, esta mquina virtual es un emulador y su implementacin est basada en C. Este lenguaje es open Source, por lo que cualquier usuario puedo introducir sus funciones y modificarlo a su gusto. Aqu tenemos un ejemplo de este lenguaje. En este caso, es un archivo de la librera predefinida, en el que se define lo que es un vector y suspropiedades.

-2-

Eduardo Fernndez Matamala

Otros lenguajes lgicos adems de Prolog

Inteligencia en redes de comunicaciones

Gdel programming language


Gdel es un lenguaje en el que las sentencias lgicas llevan un orden y en el que existe el polimorfismo. Est basado en mdulos (que aceptan polimorfismo) y en tipos de datos (soporta enteros y racionales con una precisin infinita, y nmero en coma flotante) y tiene una amplia librera de mdulos predefinidos. Es un buen lenguaje para tareas de meta-programacin, tales como compilacin, depuracin, anlisis, verificacin o transformacin de programas, ya que es mucho ms declarativo que Prolog, por ejemplo. Como curiosidad, se puede destacar que este lenguaje no funciona en un entorno Windows. Ejemplo: Mximo Comn Divisor
MODULE IMPORT PREDICATE GCD. Integers. Gcd : Integer * Integer * Integer.

Gcd(i,j,d) <CommonDivisor(i,j,d) & ~ SOME [e] (CommonDivisor(i,j,e) & e > d). PREDICATE CommonDivisor : Integer * Integer * Integer.

CommonDivisor(i,j,d) <IF (i = 0 \/ j = 0) THEN d = Max(Abs(i),Abs(j)) ELSE 1 =< d =< Min(Abs(i),Abs(j)) & i Mod d = 0 & j Mod d = 0.

-3-

Eduardo Fernndez Matamala

Otros lenguajes lgicos adems de Prolog

Inteligencia en redes de comunicaciones

Mercury programming language


Mercury es un lenguaje de alto nivel (es decir, no se preocupa de problemas como la reserva y liberacin de memoria) derivado de Prolog, pero con una implementacin que le hace ser ms til para representar y tratar problemas del mundo real. Combina toda la expresividad del lenguaje declarativo con avanzadas tcnicas de anlisis esttico y deteccin de errores. Es un lenguaje compilado, lo que le permite detectar numerosos errores antes de poder ejecutar la aplicacin. El compilador traduce el programa de lenguaje Mercury a C, que es un lenguaje portable a cualquier plataforma. Adems, al igual que el lenguaje de Gdel, Mercury es un lenguaje que utiliza mdulos, lo que da una gran modularidad en el desarrollo de aplicaciones, solventando as uno de los mayores problemas a los que se enfrentaban los lenguajes de programacin lgicos. Las principales caractersticas de Mercury son: Es puramente declarativo los predicados y funciones en Mercury siempre obtienen conclusiones lgicas La comunicacin con el programa es mediante una librera de funciones que necesitan como parmetro el estado anterior del mundo adems del resto de parmetros que considere el usuario necesario y dan como salida el nuevo estado del mundo adems de otros resultados especficos. La declaracin de tipos en Mercury se hace de manera lgica:
:- type maybe(T) ---> yes(T) ; no.

Se puede predeterminar el nmero de veces que se va a llamar a un predicado dentro del programa.
:- pred factorial(int::in, int::out) is det.

det indica una vez, semidet como mucho una vez, multi al menos una vez y nondet un nmero arbitrario de veces El compilador comprobar que se cumple y, en caso contrario, rechazar el programa Mercury tiene un sistema modular. Los programas consisten en la composicin de uno o ms mdulos. Cada mdulo tiene una seccin llamada <interface> donde se declaran todos los tipos, funciones y predicados que se pueden exportar a otros mdulos y otra seccin <implementation> donde estn las definiciones de las entidades exportadas as como definiciones de tipos y predicados no exportables, locales al mdulo. El compilador genera cdigo muy eficiente

La ltima versin estable de Mercury es la 0.11.0, aunque ya hay una versin beta estable, la 0.11.1 (2004-06-30) Ejemplo: HolaMundo

-4-

Eduardo Fernndez Matamala

Otros lenguajes lgicos adems de Prolog


:- module hello_world. :- interface. :- import_module io. :- pred main(io__state, io__state). :- mode main(di, uo) is det. :- implementation. main --> io__write_string("Hello, World!\n").

Inteligencia en redes de comunicaciones

Otro ejemplo: Problema de las 9 Reinas Cdigo En Mercury aqu Cdigo generado por el compilador Mercury aqu

Lista de lenguajes lgicos


ACE, PALS: And/Or-Parallel Implementation of Prolog Es una implementacin de Prolog, pero que soporta una arquitectura multiprocesador http://www.cs.nmsu.edu/lldap/NewSite/bugrep.htm Actor Prolog http://www.cplire.ru/Lab144/ ALF http://www.cs.chalmers.se/Cs/Research/Logic/alf/guide.html

CLP(FD) Otra extensin de Prolog, especializado en los problemas CSPs (Constraint Satisfaction Problem) De forma general, podemos decir que un programa en CLP(FD) consta de tres partes: generacin de variables (donde tambin se especifica su domino), definicin de restricciones (sobre las variables) y labeling, donde se instancian las variables por enumeracin. Ejemplo: SEND MORE MONEY puzzle sendmory(Vars):Vars=[S,E,N,D,M,O,R,Y], % variable generation Vars :: 0..9, alldifferent(Vars), % constraint generation S #\= 0, M #\= 0, 1000*S+100*E+10*N+D + 1000*M+100*O+10*R+E #= 10000*M+1000*O+100*N+10*E+Y, labeling(Vars). % labeling cu-Prolog -5Eduardo Fernndez Matamala

Otros lenguajes lgicos adems de Prolog Otro lenguaje lgico para CSPs

Inteligencia en redes de comunicaciones

Eclipse Programacin lgica con restricciones http://www.icparc.ic.ac.uk/eclipse/ Elf Programacin lgica con restricciones basado en Logical Framework (metalenguaje) http://www-2.cs.cmu.edu/afs/cs/user/fp/www/elf.html Flang Programacin lgica-funcional Fish http://fishell.sourceforge.net/ Gdel http://www.cs.bris.ac.uk/~bowers/goedel.html KLIC Programacin lgica concurrente. Derivado del lenguaje KL1 , que a su vez, es derivado de GHC (Guarded Horn Clauses) http://www.klic.org/ Lambda Prolog Extensin de Prolog, incluyendo tipos polimrficos, mdulos y tipos de datos abstractos. http://www.lix.polytechnique.fr/Labo/Dale.Miller/lProlog/index.html LIFE (Logic, Inheritance, Functions, and Equations) Trata de ser la unificacin de los lenguajes lgicos, funcionales y orientados a objetos Logtalk Extensin a Prolog orientada a objetos http://www.logtalk.org/ Mercury http://www.cs.mu.oz.au/research/mercury/index.html MONA Lenguaje lgico y adems traduce los programas (frmulas) a autmatas de estados finitos http://www.brics.dk/mona/

Muse

-6-

Eduardo Fernndez Matamala

Otros lenguajes lgicos adems de Prolog

Inteligencia en redes de comunicaciones

Versin Or-parallel del lenguaje SICTStus Prolog http://www.sics.se/ps/muse.html Progol RELFUN Extiende la lgica de Horn con sintaxis de orden superior http://www.dfki.uni-kl.de/~vega/relfun.html SAMPLE http://sampletalk.8m.com/ SICStus Prolog Igual que Prolog, pero conforme al estndar ISO/IEC http://www.sics.se/sicstus.html

Adems
Existen numerosas extensiones y compiladores de Prolog: Aquarius Prolog, GNU Prolog, Beta-Prolog, BinProlog http://www.codebox.8m.com/prolog.htm

Ejemplo: Cdigo escrito en Prolog


/* Filename: ancestor.pro Author: Br. David Carlson Date: December 6, 1999 This program creates a small set of facts and rules on who is the ancestor of whom. The user types the desired goal interactively when the program is run. */ /* Note that ancestor(A, B) means that A is an ancestor of B. */ ancestor(bob, susan). ancestor(A, X) :- parent(A, X). ancestor(A, X) :- parent(A, C), ancestor(C, X). /* Note that parent(P, C) means that P is a parent of C. */ parent(fred, sally). parent(tina, sally). parent(sally, john). parent(sally, diane). parent(sam, bill).

En este enlace hay diversos ejemplos: http://cis.stvincent.edu/carlsond/prolog.html

Bibliografa:
www.wikipedia.com http://vl.fmnet.info/logic-prog/#others

-7-

Eduardo Fernndez Matamala