¿No puedes instalar Prolog en un Macintosh?

Después de varias semanas investigando sobre cómo instalar Prolog (intérprete de programación lógica), en un Mac ayer llegué a la solución. Sólo lo he probado en mi ordenador, que es un MacBook Intel Core 2 Duo a 2 GHz con 1 Gb de RAM. La versión del sistema es la 10.4.11 (Tiger). El caso es que ya había probado instalar Prolog en Linux, concretamente en Ubuntu 7.10 y en UbuntuStudio, pero no ha habido forma de hacerlo funcionar, había intentado instalarlo también con el wine en Linux (una reimplementación de la API de Win16 y Win32 para sistemas operativos basados en Unux, bajo plataformas Intel. Permite la ejecución de programas para MS-DOS, Windows 3.11, Windows 95, Windows 98, Windows NT, Windows 2000 y Windows XP), se puede ver más información sobre qué es wine en la wikipedia. Pero esto tampoco funcionó, así que empecé a ponerme en serio con Macintosh.

Voy a intentar hacer un pequeño tutorial para explicar como lo hice, es la primera vez que explico algo con “tantos” pasos, de todas formas no creo que nadie se pierda, ya que no es tan difícil pero si hay alguna duda no tardéis en preguntar, estaré encantado de poder ayudar.

Para empezar, lo primero que hay que hacer es descargar de la página de prolog, la versión para Mac, que es totalmente libre, podéis descargarlo desde este enlace: Descargar Prolog . Lo instalamos como hacemos habitualmente, después tenemos que instalar la Terminal X11, la forma más fácil de instalar el X11 es desde el disco de instalación del sistema operativo. X11 no viene instalado de serie, antes sí que era así, pero no se por qué ahora ya no. Una vez hecho esto, ya podemos usar Prolog, pero no sin antes escribir tres sencillos comandos en la terminal X11, estos comandos son los siguientes:

if [ -z “$DISPLAY” ]; then export DISPLAY=:0; fi

 

PATH=$PATH:/opt/local/bin

 

swipl

 

Al escribir este último comando se inicia el interprete de Prolog, igual que en Windows, ya se puede hacer preguntas al intérprete, pero seguro que vamos a hachar de menos el emacs, con sus colores para ver si hemos construido bien una regla, ya que estos colores son casi imprescindibles a la hora de hacer cualquier cosa con Prolog. Estamos de suerte, con el X11 podemos usar el emacs, lo único que hay que hacer es teclear emacs en el intérprete y se iniciará una ventana de emacs, si queremos abrir un fichero con extensión .pl sólo tendremos que acceder al menú file (dentro del emacs), y hacer un clik en la opción Find file.

 

Y nada más, ya tenemos un Prolog bajo Macintosh igualito que en Windows, por si alguno se hacía la pregunta de si existe el Prolog en Mac como yo me la hice cuando me compré este ordenador, que me reventaba la idea de que no podía usarlo en la asignatura de Lógica Computacional por problemas de imcompatibilidades.

 

Espero que os haya servido  de ayuda, a mí me ha funcionado. 

Clase 4 de Diciembre

La clase comenzó haciendo un pequeño resumen de lo visto anteriormente, recordando como usar el Teorema de Deducción:

P1, P2, …, Pn ==> Q correcto

(T2) P1 ^ P2 ^ …. ^ Pn ==> Q correcto

(TD) Ø ==> P1 ^ P2 ^ …. ^ Pn –> Q correcto

si demostramos que esto es una tautología, tendremos que el argumento original, será correcto.

P1 , P2 , … , Pn ==> Q ≡ P1 ^ P2 ^… ^ Pn –> Q tautología

ahora quitamos el implicador, aplicando equivalencias, de esta forma tenemos dos caminos posibles.

CAMINO 1¬(P1 ^ P2 ^ … ^ Pn) v Q tautología

¬P1 v ¬P2 v … v ¬Pn v Q tautología

Obtenemos la FND, ahora aplicamos el Método del Cuadro para demostrar la tautología.

 

CAMINO 2¬(P1 ^ P2 ^ … ^ Pn ^ ¬Q) tautología

P1 ^ P2  ^ … ^ Pn ^ ¬Q contradicción

Obtenemos la FNC, ahora aplicamos el método de Davis-Puttnam para demostrar que esto es una contradicción.

 

ESTUDIO DE LA VALIDEZ DE ARGUMENTOS POR MÉTODOS MECÁNICOS 

¬ce –> vi , ce ^ vi –> ¬an , vi –> an ^ ce ==> ce

 MÉTODO DEL CUADRO

según este método: ¬P1 v ¬P2 v ¬P3 v Q Tautología

¬(¬ce –> vi) v ¬(ce ^ vi –> ¬an) v ¬(vi –> an ^ ce) v ce

ahora hay que demostrar que esto es una tautología, pero para usar el Método del Cuadro, tenemos que pasar la fórmula a FND:

quitamos implicadores

¬(¬¬ce v vi) v ¬(¬(ce ^ vi) v ¬an) v ¬(¬vi v (an ^ ce)) v ce

normalizamos negadores

¬(ce v vi) v ¬(¬ce v ¬vi v ¬an) v vi ^ ¬(an ^ ce) v ce

(¬ce ^ ¬vi) v (ce ^ vi ^ an) v (vi ^ (¬an v ¬ce)) v ce

ahora tenemos que aplicar una distributiva al último término, porque es el único que no está en FND

(¬ce ^ ¬vi) v (ce ^ vi ^ an) v (vi ^ ¬an) v (vi ^ ¬ce) v ce

ahora ya tenemos la FND y podemos aplicar el Método del Cuadro, para ello tenemos que demostrar que la FND obtenida es una tautología.

1º) No es contradicción

2º) ce = Falso

(V ^ ¬vi) v (F ^ vi ^ an) v (vi ^ ¬an) v (vi ^ V) v F

         ¬vi  v          F            v (vi ^ ¬an) v       vi

los F se simplifican

¬ vi v (vi ^ ¬an) v vi Tautología

________________________

Ahora vamos a demostrar este mismo argumento con el Método de Davis-Puttnam, demostrando que P1 ^ P2 ^ P3 ^ ¬Q es contradicción. Para aplicar este método, tenemos que conseguir la FNC.

(¬ce –> vi) ^ (ce ^ vi –> ¬an) ^ (vi –> an ^ ce) ^ ¬ce

(¬¬ce v vi) ^ (¬(ce ^ vi) v ¬an) v (¬vi v (an^ ce)) ^ ¬ce

(ce v vi) ^ (¬ce v ¬vi v ¬an) ^ (¬vi v (an ^ ce)) ^ ce

ahora tenemos todos los términos en FNC menos el último, en el cual hay que aplicar una distributiva

(ce v vi) ^ (¬ce v ¬vi v ¬an) ^ (¬vi v an) ^ (¬vi v ce) ^ ¬ce

ya tenemos toda la fórmula en FNC, así que aplicamos el Método de Davis-Puttnam

1º) No es tautología

2º) ¬ce = Verdadero

(F v vi) ^ (V v ¬vi v ¬an) ^ (¬ve v an) ^ (¬vi v F) ^ V

        vi   ^            V             ^ (¬vi v an) ^    ¬vi         ^ V

en este caso simplificamos los V

vi(¬vi v an) ^ ¬vi Contradicción, el argumento es correcto 

Clase 27 Noviembre

Las tablas de verdad, el Método del Contraejemplo, y los métodos mecánicos, ya sea el Método del Cuadro o el de Davis Puttnam, nos sirven para:

– Clasificar semánticamente una fórmula

*Tautología

*Contingencia

*Contradicción

– Demostrar la validez o corrección de un argumento:

*Sí

*No

NOTA: El Método del Contraejemplo es el que más se suele preguntar en los exámenes.

 

EJERCICIO USANDO EL MÉTODO DEL COTRAEJEMPLO:

Lo que hace este método, es tomar las premisas por verdaderas, y la conclusión la hace falsa. Si partiendo de esto, llegamos a una contradicción, el argumento será correcto, y todas sus interpretaciones, serán modelo del argumento.Para este ejercicio vamos a usar el argumento de la cerveza.

premisa 1     premisa 2          premisa 3              conclusión

¬ce –> vi , ce ^ vi –> ¬an , vi –> an ^ ce ==> ce

         V                       V                  V                        

F1) Para que esto se cumpla, ce tiene que ser falso ce=F

   V               F                                              F                                            

F2) Para que la premisa 1 sea verdadera, vi tiene que ser verdadero vi=V

 3) Para que la premisa 3 sea verdadera, necesitamos que vi sea falso vi=F

Ya hemos encontrado la contradicción, por lo tanto decimos que el argumento es correcto, y que todas sus interpretaciones son modelo del argumento.

_____________________________

Se puede estudiar un argumento, en una única fórmula, cambiando las comas que separan las premisas por conjuntores: P1,P1,…,Pn ==> Q

P1 ^P2 ^… ^Pn –> Q

ahora tenemos las premisas y la conclusión en el mismo lado, si demostramos que esto es una tautología, diremos que la conclusión es correcta.

AHORA VAMOS A EXPLICAR EL TEOREMA DE DEDUCCIÓN

TEOREMA DE DEDUCCIÓN

Si es correcta la deducción

D1: P1,P2,P3,…,Pn ==> Q

también lo es

D2: P1,P2,P3,…,Pn-1 ==> Pn –> Q

y viceversa.

Este teorema es el fundamento de pasar a estudiar un argumento, con una única fórmula.

* El teorema 1, nos dice que aplicando el Teorema de Deducción n veces no tendremos ninguna premisa, así que sólo tendremos que demostrar que lo que queda en la conclusión es tautología. Este teorema no suele usarse, ya que pueden quedar muchas implicaciones anidadas, y es difícil de seguir por ese camino.

* El teorema 2, nos dice que las comas que separan las premisas, pueden tomarse como conjuntores. Esto es una paso más para estudiar solamente una fórmula.Ejemplo:

 P1,P2,…Pn ==> Q   correcto

 T2) P1 ^ P2 ^… ^ Pn ==> Q   correcto

TD) Ø ==> P1 ^ P2 ^….^ Pn –> Q   correcto 

T1) P1 ^ P2 ^ ….^ Pn –> Q tautología

A partir de aquí tenemos dos caminos:

– Uno es quitar el implicador, para simplificar un poco más la fórmula. Nos quedaría:

¬(P1 ^ P2 ^ … ^ Pn) v Q tautología

ahora habría que hacer el Método del Cuadro

– El otro camino sería el siguiente:

  ¬(P1 ^ P2 ^ … ^ Pn ^ ¬Q) tautología

ahora si estudiamos lo de dentro del paréntesis, y demostramos que es una contradicción, al conclusión será correcta, porque la contradicción está negada, ya que tenemos un negador fuera del paréntesis y una contradicción negada es una tautología. 

Publicado en General. 1 Comment »

Clase 13 de Noviembre

En esta clase, empezamos a estudiar el Bloque 2, correspondiente a los Métodos de Teoría Semántica (interpretativa).En este bloque se afirmó que un argumento es correcto si no se da el caso de que las premisas sean verdaderas y la conclusión falsa. En otras palabras, esto quiere decir que la conclusión debe ser verdadera, porque no partimos de premisas falsas nunca.Por otra parte, hay que aclarar que validar o estudiar la validez de un argumento, es demostrar si es o no correcto.

 P1,P2,…,Pn==> Q

Desde P1 hasta Pn tenemos las premisas, que están separadas por ‘,’ sería equivalente poner conjuntores (^) en vez de comas. A la derecha de las premisas tenemos un símbolo que indica que la conclusión (Q), es lo siguiente, pero a pesar de que ese símbolo tenga relación con el implicador, hay que aclarar que no lo es.

 Cuándo el argumento sea correcto, diremos que la conclusión es consecuencia lógica de dicho argumento.

Cambiando un poco de tema, he de decir que el examen del cuál hablé anteriormente, está aprobado, el 11 de Diciembre tenemos el segundo parcial, espero que todo salga bien, ya que ahora estoy un paso más cerca de aprobar la asignatura, y la verdad es que la situación pinta mejor que la del año pasado.

Volviendo al tema anterior, diremos que una fbf A es una posible asignación de valores de verdad (verdadero o falso), a las fbf atómicas de A. Esto quiere decir que si las fbf atómicas de A son verdaderas, la fbf A será verdadera. De esta forma, partiremos de que las fbf atómicas pueden ser verdaderas o falsas.

 

Las interpretaciones de un fbf pueden ser de dos tipos:

– Modelo: interpretación que hace verdadera la fórmula.

– Contramodelo: interpretación que hace falsa la fórmula.

De esta forma, la sentencia p -> q tiene tres interpretaciones modelo y una interpretación contramodelo. 

 

Una fbf molecular puede ser de tres tipos:

– Tautología: si A es verdadera para todas las interpretaciones de sus componentes (todas las del conjunto de asignaciones es modelo).

– Contradicción: si A es falsa para todas las interpretaciones (son contramodelo).

 p ^¬p   y   p <–> ¬  son dos claros ejemplos de contradicción.

 – Contingencia: si existen interpretaciones que hacen la fbf verdadera y otras que la hacen falsa.

 p –> ¬ p es un ejemplo de contingencia.

 

 Existen unas fórmulas que permiten saber el número de interpretaciones de una fbf mulecular:

– Si es proposicional: 2^n donde n=variables proposicionales.

– Si es predicativa: 2^m donde m=d^n

 d=número de elementos del dominio, sólo si es finito

n=aridad del predicado (número de variables).

 

Un ejemplo del caso si es una fbf predicativa es el siguiente:

D={a,b,c} 

 ∀x∃y P(x,y) ^ ∀x Q(x)

P(x,y):- 2^9=512 Q(x):- 2^3=8

ahora se multiplican las interpretaciones de los predicados:

512*8=4098 posibles interpretaciones.

(esta puede ser una pregunta de examen, y como vemos no es tan difícil de resolver)

 

Este es otro ejemplo de un caso que podría darse:

D={b,c}

∀x P(x,a) ^Q(a) sería equivalente a  ∀x P(b,a) ^P(c,a) ^Q(a)

2*2^2^1=8 interpretaciones posibles.

 Para interpretar una fórmula predicativa, tenemos que:

– Definir un dominio no vacío, dónde dicho dominio sea finito.

– Asignar elementos del dominio a los términos.

– Asignar valores de verdad a los predicados.

 

La siguiente tabla de verdad puede servirnos para poder interpretar una fbf:

 

A

B

¬A

A ^ B

A v B

A –> B

A <–> B

V

V

F

V

V

V

V

F

F

V

F

F

F

V

V

F

V

V

F

F

F

F

V

V

 

Según sus interpretaciones, una fbf puede ser: 

Una fbf es satisfacible si existe alguna interpretación que la haga verdadera.

Una fbf es insatisfacible si y sólo si es falsa para todas sus interpretaciones. 

Publicado en General. 2 Comments »

Clase 30 de Octubre

Esta clase fue bastante densa, ya que era la clase antes del examen. En ella se explicó básicamente, la normalización de fórmulas, este tema corresponde al capítulo 7 del libro, y es fundamental para el examen del día 6, ya que los examinadores del campus trata bastante este tema.

Aquí esta expuestas las principales equivalencias para la normalización de fórmulas:

¬(A ^ B) = ¬A v ¬B

¬(A v B) = ¬A ^ ¬B

A –> B = ¬A v B

A <–> B = (A –> B) ^ (B –> A)

EN LA CLASE SE RESOLVIERON ESTAS EQUIVALENCIAS:

1º ¬(A ^ B) = ¬A v ¬B = A –> ¬B

2º ¬(A v B) = ¬(¬A –> B) = A v B

3º ¬(A –> B) = ¬(¬A v B) = A ^ ¬B

4º ¬(A –> ¬B) = ¬(¬A v ¬B) = A ^ B

5º  (A1 ^ A2 –> ¬B) = ¬(A1 ^ A2 v ¬B) = ¬A1 v ¬A2 v ¬B = ¬(A1 ^ A2 ^ B)

6º (A1 –> (¬A2 –> B)) = A1 –> (A2 v B) = ¬A1 v A2 v B = ¬(A1 ^ ¬A2 ^ ¬B)

EQUIVALENCIAS CON CUANTIFICADORES 

∀x[A(x) –> B(x)] = ∀x[¬(A(X) ^ ¬B(x))] =  ∀x ¬[A(x) ^ ¬B(x)] = ¬∃x[A(x) ^ ¬B(x)]

∃x[A(x) ^ ¬B(x)] = ¬∀x[A(x) –> B(x)]

FORMAS NORMALES

La formas normales, sólo podrán estar formadas por ¬,^,v. Hay tres tipos de formas normales:

– Forma normas conjuntiva: los conjuntores «^» se quedan fuera de los paréntesis, y los disyuntores     «v» dentro.

– Forma normal disyuntiva: los disyuntores «v» se quedan fuera de los paréntesis, y los conjuntores     «^» dentro.

– Forma normal clausal: esta es la usada en programación lógica, según la wikipedia

* P v ¬q es una forma normal conjuntiva, y no tiene ningún conjuntor.

Un ejemomplo para pasar un FND (forma normal disyuntiva) a FNC (forma normal conjuntiva), sería el siguiente:

(P ^ ¬q) v R = (P v R) ^ (¬q v R)

En el libro, hay un método para reducir a forma normal, se hablamos del lenguaje preposicional. Ahora os dejo un ejemplo que resolvió en profesor en clase, paso por paso.

(p ^ q) v R –> q v ¬R a forma normal

1º eliminamos el implicador

¬[(p ^ q ) v R] v [¬q v ¬R]

2º normalizamos el negador (Morgan)

[¬(p ^ q) v R] v ¬q v ¬R

2º volvemos a normalizar el negador (Morgan)

[(¬p v ¬q)^ ¬R] v ¬q v ¬R

3º exteriorizar conjuntores o disyuntores

para la FNC hacemos:

(¬p v ¬q v ¬q v ¬R) ^ (¬R v ¬q v ¬R)

* Podemos agrupar en ploques, que sean A, B, C… para que sea más sencillo reducir la fórmula al aplicar las esquivalencias.

4º simplificamos

(¬p v ¬q v ¬R) ^ (¬q v ¬R) FNC

EXISTEN UN MÉTODO PARA ELIMINAR EXISTENCIALES, LLAMADO SKOLEM, Y OTRO PARA ELIMINAR CUANTIFICADORES UNIVERSALES, LLAMADO PRENEX.

SKOLEM

Si el existencial está afectado por un universal, se sustituye su variable por una función. Por ejemplo:

    ∀x∃y M(x,y) =  ∀x M(x,f(y))

Si el existencial no está afectado por un universal, se sustituye su variable por una constante. Por ejemplo:

∃x P(x) ^ ∃y q(y) = P(a) ^ q(b) 

PRENEX

Este método consiste en pasar los universales a la cabeza de la fórmula, si no lo están.

-Si la fórmula no contiene la variable cuantificada, hacemos:

        A ^ ∀x P(x) = ∀x(P(x) ^ A)

-Si la fórmula contiene la variable cuantificada, hacemos:

        A(x) ^ ∀x P(x) = ∀y(A(x) ^ P(y))

Ejemplo del lenguaje de predicados, vistos en clase

 

MARCO CONCEPTUAL:

D= {animales}

De(x) = x es delfín

Fo(x) = x es foca

J(x) = x es juguetón

V(x,y) = x vive con y

Constantes: fli, flo y flu

* Fli flo y flu son delfines

De(fli)^De(flo)^De(flu)

*Los delfines son juguetones

∀x[De(x) –> J(x)]

*Algunos delfines son juguetones

∃x[De(x) ^ J(x)]

*Los delfines son no juguetones

¬∃x[De(x) ^ J(x)] = ∀x[De(x) –> ¬J(x)]

*No todos los delfines son juguetones

¬ ∀x[De(x) –> J(x)] = ∃x[De(x) ^ ¬J(x)]

*Sólo los delfines son juguetones

∀x[J(x) –> De(x)]

*Todos los delfines viven con algunas focas

∀x[De(x) –> ∃y(Fo(y) ^ V(x,y))]

*Todos los delvines viven con las focas

∀x[De(x) –> ∀y(Fo(y) –> V(x,y)) ]

Bueno pues parece ser que estas son preguntas típicas del examen, ya sabemos lo que eso quiere decir.

Clase 23 de Octubre

En esta clase se explicó el «Lenguaje de predicados», dos datos esenciales, y de gran utilidad de cara al examen del día 6 de noviembre, serían los siguientes:

– Cuando esté presente el cuantificador ««, irá acompañado de un implicador «–>» en el 99% de los         casos.

Un ejemplo de este tipo de sentencia, sería el siguiente:  ∀x[H(x)–>M(x)],

    donde H(x)=x es un hombre y M(x)=x es mortal

– Cuando en el dominio incluyamos al universo, si no a algún grupo determinado, se usará el                  cuantificador ««, que en el 99% de los casos irá seguido de una conjunción «^»

Por ejemplo:  ∃x[H(x)^M(x)] tomando H(x) y M(x) el valor del ejemplo anterior.

Con respecto al domínio, se podría decir que usaríamos el cuantificador universal (), si todos los elementos del dominio, cumplen una determinada propiedad.  Por el contrario, si sólo algún elemento del dominio cumple una determinad apropiedad, usaríamos el cuantificador existencia ().

La definición de dominio, sería la siguiente: conjunto de objetos que constituye el marco de referencia de nuestro lenguaje en un momento dado. Y de él depende:

– La formalización de la fórmula bien formada (fbf)

– El valor de verdad de la fbf.

Retomando el concepto de «Lenguaje de predicados», he de decir que sus sentencias, también se toman por verdaderas o falsas. Las componentes que forman parte del lenguaje predicativo son: el lenguaje proposicional, términos (de quién), predicados (como son, se relacionan), cuantificación (cuántos objetos) y el dominio (qué objetos.)

Un buen consejo, para usarse antes de formalizar, sería definir los componentes de la frase, y así queda todo mucho más claro.

En el lenguaje de predicados, hay dos tipos de predicados: los monádicos (propiedades) y los poliádicos (relaciones entre objetos).

RELACIÓN CUANTIFICADORES-NEGACIÓN

* ¬∀xP(x) <–> no todos tienen la propiedad P

que es igual que decir:  ∀x¬P(x)<–> hay alguno que no tiene la propiedad P

* ∀x¬P(x) <–> todos los x poseen la propiedad no P

que es igual que decir: ¬ ∃xP(x) <–> no existe ningún x que tenga la propiedad P

Ya sólo me queda decir, que el próximo 6 de noviembre, tengo el primer examen de Lógica, espero que me salga mejor que el primer examen de Lógica que hice el curso pasado, de todas formas estoy convencido de que me irá bien, ya que este examen lo voy preparando día a día.

Clase 2-10-07

Después de la primera clase, he de decir que la nueva idea de los profesores de la asignatura, de hacer un cuaderno de bitácora por internet me parece genial. Si ya me gustó la idea de que las prácticas del año pasado se basaran solamente en hacer un juego en lenguaje prolog, la nueva de hacer un cuaderno de bitácora en internet para la clase de teoría, me parece una buena forma de llevar la asignatura al día, además es una forma de estudiar entretenida, ya que no piensas que es una coñazo ponerte a repasar la clase de hoy.

En cuanto a la primera clase oficial, he de decir que el ejercicio que el profesor expuso, para que hiciésemos en grupo, no me cojió desprevenido, ya que al haber cursado esta asignatura el curso pasado tengo una ligera idea, de los conceptos y temario, de los que se compone Lógica Computacional. La idea de hacer ejercicios en grupo, no sólo ayuda a que conozcas a gente de la clase, si no que también conlleva una «discusión» a la hora de responder el ejercicio.

Haciendo un pequeño resumen, de la clase, diría que al ser el principio, la explicación se basó en exponer los diferentes tipos de argumentos, con sus respectivos ejemplos. Argumentos como son los siguientes: deductivos, no deductivos (falacias) e inductivos. Además se explicaron las proposiciones atómicas y las moleculares, tambiés se distinguieron las conectivas lógicas, como son: negador, conjunción, disyunción, impelicador y el fascinante coimplicador.

CONECTIVAS LÓGICAS:

  1. Negación (\neg)
  2. Disyunción (\vee)
  3. Conjunción (\wedge)
  4. Implicación (\rightarrow)
  5. Coimplicación (\leftrightarrow)

Sólo me queda comentar, que en clase heché de menos el «Argumento de la cerveza», que sirvió de ejemplo en muchas ocasiones el curso pasado.