Viendo a los conectores lógicos como relaciones entre conjuntos

Mi amigo Joel estudia Filosofía en Rosario y este fin de semana estuvimos charlando sobre lógica. Durante la charla me enseño que los conectores lógicos se pueden pensar como relaciones entre conjuntos. Yo nunca los había visto así.

Esta forma de pensarlos es a veces muy útil y sirve para darnos cuenta cual es el conector indicado para representar cierto conocimiento. Por ejemplo, muchas veces me encontré queriendo representar conocimiento del tipo “Los conejos son blancos” y errónea e instintivamente escribía:

B(x): x es blanco
C(x): x es conejo


C(x) ^ B(x)

Lo cual es un error. La forma correcta de representar ese conocimiento es:

C(x) -> B(x)

La implicación entre C(x) y B(x) puede entenderse una forma muy simple:

C es el conjunto de todos los conejos y B es el conjunto de todas las cosas blancas.

Recordemos que la información que queremos representar es “Los conejos son blancos”, enfatisando: Todos los conejos son blancos. No hay conejos grises o negros, todos son blancos.

El ejemplo en cuestión no era este, sino otro, pero lo importante es que Joel me explicó que la implicación es equivalente a la relación entre conjuntos de inclusión e hizo un dibujo parecido a este:

Conejos blancos

En el dibujo se ve claramente el exacto conocimiento que queríamos representar: si algo es conejo, entonces es blanco. Si pertenece al conjunto C entonces pertenece al conjunto B. Porque el conjunto B incluye al conjunto C. El conjunto de las cosas blancas incluye al conjunto de los conejos.

El resto de los conectores lógicos también pueden verse como relaciones entre conjuntos.

AND : intersección

AND o conjunción, muchas veces simbolizado con ^, es verdadero cuando los dos predicados que conecta lo son. Así pues B(x) ^ A(x) será verdadero cuando x pertenezca tanto a B como a A.

AND sin corchetes

OR: unión

OR o disyunción es una relación menos estricta ya que para ser verdadera solo necesita que uno de sus predicados sea verdadero. En el ejemplo anterior, que x pertenezca a B o a A. Eventualmente podría pertenecer a ambos conjuntos.

OR sin corchetes

XOR: unión – intersección

Unión MENOS intersección. La disyunción exclusiva es verdadera cuando x pertenece exclusivamente a uno de los conjuntos, pero es falsa cuando pertenece a ambos.

XOR

-> : inclusión

Es el caso del ejemplo de los conejos con el que empezó este post.

IMP sin corchetes

<-> : mutua inclusión

La doble implicación es un caso especial de la implicación ya que se define como A -> B AND B -> A. Así mismo su representación en forma de conjuntos es un caso especial de la inclusión. En el dibujo puede verse claramente que cuando decimos A(x) <-> B(x) estamos diciendo que cualquier elemento x que pertenezca a A también pertenece a B.

bimp

NOT : no pertenencia

Todos los conectores pueden pensarse como conjuntos: NOT A(x) significa que el elemento x no pertenece a A.

NOT

Para finalizar: todos los conectores lógicos pueden pensarse como relaciones entre conjuntos. Si se crean conectores a partir de algunos de los listados anteriormente, también se podrán definir las relaciones entre conjuntos correspondientes.

Acerca de Juanjo

Mi nombre es Juanjo Conti, vivo en Santa Fe y soy Ingeniero en Sistemas de Información. Mi lenguaje de programación de cabecera es Python; lo uso para trabajar, estudiar y jugar. Como hobby escribí algunos libros.
Esta entrada fue publicada en General y etiquetada . Guarda el enlace permanente.
  • Juanjo

    Gracias a este enfoque es fácil hacer algunas observaciones interesantes:

    • Si A y B son conjuntos disyuntos (no tienen elementos en común), entonces no existe un x tal que A(x) AND B(x) sea verdadero.
    • La disyunción no tiene este problema.
    • NOT A(x) OR A(x) es siempre verdadero.
  • Juanjo

    Nota: cuando escribo B(x) estoy usando lógica de predicados de primer orden, estoy predicando la propiedad B de un objeto x. También puedo usar constantes en lugar de variables y decir Conejo(Tobby) para expresar que Tobby es un conejo.

  • http://blog.dieresys.com.ar Manuel

    Ups, me hiciste agarrar nostalgia =)
    Hace 6 años tuve en el secundario una materia que se llamaba “Algoritmos y pensamiento lógico”. En ese entonces no sabía que corno era un algoritmo. Me enseñaron estas cosas y un montón de “juegos” lógicos. Uno de esos juegos consistía en llegar de una palabra a otra siguiendo ciertas reglas de reemplazo de caracteres. En ese entonces le pregunté a mi profesora “para que (merda) vemos esto”, a lo que me respondió “si te lo explico ahora, no me vas a entender”. Aparentemente me estaba entrenando el cerebro para que un IF o un XOR no me resulte algo tan abstracto. Sin embargo en ese entonces me caía muy mal esta señora..

  • http://www.taniquetil.com.ar/plog/ Facundo Batista

    Un detalle, algunos ejemplos, y una expresión de disconformidad.

    AND no se escribe con un ^, sino con una especie de U mayúscula dada vuelta. La distincion es importante, porque ^ se usa normalmente para XOR…

    Ahora sí, los ejemplos. Arrancamos con…

    >>> primos
    set([2, 3, 5, 7, 11, 13, 17, 19, 23, 29])
    >>> impares
    set([1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29])

    Tenemos el AND (o intersección):

    >>> primos & impares
    set([3, 5, 7, 11, 13, 17, 19, 23, 29])
    >>> primos.intersection(impares)
    set([3, 5, 7, 11, 13, 17, 19, 23, 29])

    El OR, o unión:

    >>> primos | impares
    set([1, 2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29])
    >>> primos.union(impares)
    set([1, 2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29])

    El XOR, o la diferencia entre la unión y la intersección:

    >>> primos ^ impares
    set([1, 2, 9, 15, 21, 25, 27])
    >>> primos.union(impares) – primos.intersection(impares)
    set([1, 2, 9, 15, 21, 25, 27])

    Con respecto a la inclusión, creo que estás manejando mal el tema de mostrar el gráfico un punto adentro de B, ya que en la inclusión no nos interesan los elementos de B per sé, sino que si todo el conjunto de B está adentro del conjunto de A (¿todos los conejos son blancos?). Esta operación claramente es una “pregunta”: inclusión no devuelve un nuevo conjunto de elementos como las anteriores, sino Verdadero o Falso:

    >>> primos.issubset(impares)
    False
    >>> primos – impares # esto es para ver por qué da False
    set([2])

    Saludos!

  • http://nacho.larrateguy.com.ar Nacho

    Recuerdo de parte de lo que decís de conjuntos, lo vimos en matemática discreta y lo volvimos a veren paradigmas e inteligencia artificial. Recordamos el tema cuando teníamos que definir un sistema utilizando cuantificadores (existencial y universal).
    Es cierto lo que decís que para expresar Los conejos son blancos
    C(x) ∧ B(x)
    es erróneo, ya que la omisión de cuantificador indica que es para todo
    La aserción sería:
    Todos los conejos son blancos
    y lo correcto es:
    ∀ x conejo(x) ⇒ blanco(x)
    o bien
    ∃ x conejo(x) ∧ blanco(x)

    Y además usando las equivalencias de los operadores lógicos, se podría escribir
    ∀ x ¬ conejo(x) ∨ blanco(x)
    Que significaría:

    Si es un conejo, para estar dentro del conjunto de la aserción debe ser blanco.
    Si no es conejo, no me interesa el color.
    Y si es blanco, no puedo determinar si es conejo o no :-)
    Esto último debido a que no hay implicancia hacia el otro lado (condición necesaria pero no suficiente).

    Cosas de interés que se pierden al trabajar con palabras como AND OR.
    ∧ se llama disyunción (interesección también)
    ∨ conjunción (o unión)
    El resto de los operadores pueden ser escritos como combinación de estos y la negación (¬ o negación de pertenencia) como bien explica Facundo en la parte del XOR para los primos e impares.

    Referente al comentario de Facundo.
    Según Los conejos son blancos, la única forma que esa expresión sea falsa es que sea conejo y que no sea blanco (cosa que no es posible por la inclusión).

    Interesante posteo!

    Saludos

  • Juanjo

    Gracias a todos por los interesantes y elaborados comentarios!!

    Nacho: no estoy de acuerdo con que ∃ x conejo(x) ∧ blanco(x) represente el conocimiento Todos los conejos son blancos, representa el conocimiento Existen conejos blancos, al menos uno lo es. Los otros tal vez sean negros, grises o verdes.

    Facu: gracias por los ejemplos en Python!

    Tenés razón respecto al símbolo ^ que usé para el AND. En realidad tendría que ser una v dada vuelta (∧). De http://en.wikipedia.org/wiki/And: “..p AND q (also written as p ∧ q (logic), p && q (computer science), or p·q (electronics))”.

    La U dada vuelta que mencionás es justamente el símbolo de intersección.

    Por último con lo del puntito en el dibujo de la inclusión también tenés razón, no había reparado en eso.

    Saludos a todos!

  • http://nacho.larrateguy.com.ar Nacho

    Tenés razón!
    Debería haber negado el cuantificador existencial (y su expresión proposicional)
    ∄ x ¬ (conejo(x) ∧ blanco(x))

  • http://nacho.larrateguy.com.ar Nacho

    Es más, debía ser
    ∄ x conejo(x) ∧ ¬ blanco(x)

  • http://MARICON DENNIS

    tas ta las huevas

  • http://tatas santiago

    e super vacano hola nacho

  • Nancy

    interesante esto de leer los comentarios dos años después que fueron realizados… es extraño.

    ¿matemáticos? o sólo por oficio comentan?

    saludos!

  • Tana_shana

    q m e importa esta facil

  • http://www.facebook.com/people/Reina-Juárez-de-Martinez/100002110160780 Reina Juárez de Martinez

    grazias esta mejor esplicado, le entiendo mas que al profe de programacion