-[ 0x09 ]--------------------------------------------------------------------
-[ Analisis Booleano]--------------------------------------------------------
-[ by Aristoteles ]--------------------------------------------------SET-26--

Este articulo es una base bastante completa para comenzar a adentrarse en la 
criptologia. No se trata de mostrar direcciones maravillosas ni trucos
infalibles, es solo informacion basica,... dura informacion que solo os va a
servir para algo en el caso de que posteriormente vosotros aporteis algun
esfuerzo de desarrollo y ,.... compartais vuestro trabajo con el resto del
mundo.


        oo          oo                oo        oo              oo
    oo   o  ooo  oo  o     oo oo       o  oo     o               o   oo
      o  o o  o o  o o    o     o      o o  o    o     oo   oo   o  o  o
    ooo  o  ooo oooo ooo  o   ooo    ooo oooo    ooo  o  o o  o  o  oooo
   o  o  o    o o    o  o o  o  o   o  o o       o  o o  o o  o  o  o
    ooo ooo   o  oo  ooo  o   ooo    ooo  oo     ooo   oo   oo  ooo  oo
            oo

 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIlIlIllIlllIIlIIIllIllIIlllI

 para Angela, primera y ultima. gracias por todo lo que me has dado


  Advertencia: Este texto contiene algunos caracteres extendidos que se
  muestran correctamente en la pagina 437 de MS-DOS. Ha sido necesario
  usarlos. La lista completa es:

  "" pertenencia:      "" letra enye           "" conjunto vacio:
                            minuscula:
        xxx                                               x
       xx                                               xxx
      xx                      xxxx                     x x x
      xxxxx                                            x x x
      xx                      xxx                       xxx
       xx                     x  x                      x
        xxx                   x  x

  "": diferencia       "" negacion de una      "" equivalencia:
       simetrica:           proposicion:
                                                        xxxxxx
           x
          x x                                           xxxxxx
         x   x                 xxxxx
         xxxxx                     x                    xxxxxx

    (no es extendido,
     es DEL [127d])

  Para establecer la pagina 437 en MS-DOS:
  mode con cp prepare=((437) %windir%\command\ega.cpi)
  mode con cp select=437


INDICE:
-------

   Operaciones
      Operaciones sobre un operando
         Anulacion
         Totalidad
         Identidad
         Not
      Operaciones sobre dos operandos
         Anulacion
         Totalidad
         Identidad del primero
         Complementario del primero
         Identidad del segundo
         Complementario del segundo
         And
         Or
         XOr / equivalencia
         Diferencia logica del primero y el segundo
         Diferencia logica del segundo y el primero
         NAnd
         NOr
         XNOr
         Implicacion primero => segundo
         Implicacion segundo => primero
      Operaciones sobre mas de dos operandos
   Tabla de signos
   Nombres de las operaciones

   Propiedades
      Asociativa
      Conmutativa
      Idempotencia
      Elemento neutro
      Elemento inverso
      Distributiva
      leyes de De Morgan
      Leyes de absorcion
      Otras propiedades
      Propiedades de la implicacion

   Apendice: Tabla de operaciones

   Notas finales
   Referencias
   Despedida


El algebra de G. Boole se puede aplicar a distintos campos:

   - operaciones binarias a nivel de bits
   - logica de proposiciones
   - algebra de conjuntos (y probabilidad)


OPERACIONES:
------------

   Se definiran operaciones sobre uno y dos operandos cuyo resultado dependa
   de los operandos. Tambien se explicaran los resultados que no dependan de
   los operandos (resultados independientes).


   OPERACIONES SOBRE UN OPERANDO:
   ------------------------------

      Con un operando, podemos obtener cuatro resultados distintos, pero solo
      dos de ellos son operaciones que dependen del operando: identidad y not.
      Los otros dos resultados no dependen del operando, y no seran tratados
      como operaciones, sino como distintos valores que podemos obtener. Son:
      anulacion y totalidad.


      ANULACION:
      ----------

      Devuelve el valor nulo. El valor nulo es en cada caso:

      bitwise: El valor nulo es el numero cero, se representa por: 0. En
               lenguajes de programacion indica el valor 'falso'. Todos los
               bits del campo son 0.

      logica: El valor nulo es una asercion falsa (una proposicion siempre
              falsa, tambien llamada contradiccion o falacia).
              Ejemplo: P y no P, "Soy humano Y NO soy humano"

      conjuntos: Se llama conjunto vacio el conjunto que no contiene ningun
                 elemento. Esta incluido en cualquier conjunto (por la
                 definicion de inclusion). Se representa por: 


      TOTALIDAD:
      ----------

      El valor total depende del tamao con que lo hayamos definido. En cada
      caso es:

      bitwise: El valor total es un numero de todo unos, dependiendo del
               tamao que tenga el campo en que estemos trabajando; por
               ejemplo, en 16 bits el valor total es 65535d. Se representa por
               -1, que es el valor que toma un numero de todo unos en la
               aritmetica de complemento a dos. En lenguajes de programacion
               indica 'verdadero' (aunque en general, cualquier numero
               distinto de 0 es tratado como verdadero).

      logica: El valor total es una asercion verdadera (una proposicion
              siempre verdadera, o tautologia).
              Ejemplo: P o no P, "Estoy muerto O estoy vivo"

      conjuntos: El valor total es el conjunto total, que contiene a todos los
                 demas conjuntos. Es complementario del conjunto vacio. Se
                 suele representar por E.


      IDENTIDAD:
      ----------

      Esta operacion actua sobre un operando. Devuelve el propio operando.

      bitwise: Id x = x
               Ejemplo: Id 123d = 123d

      logica: (Id P) <=> P
              (la identidad de P es cierta si y solo si P es cierta)

      conjuntos: Id A = A
                 Ejemplo: x  Id A <=> x  A


      NOT:
      ----

      Esta operacion actua sobre un unico operando. Devuelve el complementario
      del operando; depende, pues, del valor total. En cada caso:

      bitwise: Modifica el valor de cada bit. Si un bit esta establecido, lo
               pone a 0 y si esta a 0 lo pone a 1. Su resultado depende del
               tamao del campo en que trabajemos.
               Ejemplos: not 5 (en 4 bits) = 10d
                         not 5 (en 8 bits) = not 101b (en 8 bits) = 11111010b
                         = 128d+64d+32d+16d+8+2 = 250d
               Si empleamos numeros con signo usando aritmetica de complemento
               a 2, entonces: not a = -a-1 (cualquiera que sea el tamao
               total, puesto que el cambio de signo es una operacion que ya
               depende del tamao total).
               Ejemplo: not 5 (en 8 bits con signo) = -6
                        not 5 (en 32d bits con signo) = -6

      logica: Opera sobre una unica asercion. Si la asercion es verdadera, el
              resultado es falso. Si la asercion es falsa, el resultado es
              verdadero.
              NO P es verdadera si y solo si P es falsa,
              NO P es falsa si y solo si P es verdadera.
              Ejemplo: "Estoy vivo Y estoy muerto" es falsa,
                       "NO (estoy vivo Y estoy muerto)" es verdadera, ya que
                       por las leyes de De Morgan, es equivalente a:
                       "NO estoy vivo O NO estoy muerto" <=>
                       "Estoy muerto O estoy vivo"... es verdadera.

      conjuntos: El complementario de un conjunto A es el conjunto de los
                 elementos de E que no pertenecen a A. El complementario se
                 representa por: C  A  o tambien: A'
                                  E


   OPERACIONES SOBRE DOS OPERANDOS:
   --------------------------------

      Sobre dos operandos podemos obtener 16 resultados, de los cuales:
         - dos no dependen de ningun operando: anulacion y totalidad
         - dos dependen solo del primer operando: 'identidad del primer
           operando' y 'complementario del primer operando'
         - dos dependen solo del segundo operando: 'identidad del segundo
           operando' y 'complementario del segundo operando'
         - diez dependen de ambos operandos: and, or, xor, 'diferencia del
           primero y el segundo', 'diferencia del segundo y el primero', nand,
           nor, xnor, 'primero implica segundo', y 'segundo implica primero'.


      ANULACION:
      ----------

      Recibe dos operandos, y devuelve el valor nulo, segun cada caso. Este
      resultado no depende de ninguno de sus dos operandos, y es independiente
      del valor total.


      TOTALIDAD:
      ----------

      Recibe dos operandos, y devuelve el valor total segun cada caso. Este
      resultado no depende de ninguno de sus dos operandos. Si depende del
      valor total que hayamos definido.


      IDENTIDAD DEL PRIMERO:
      ----------------------

      Toma dos operandos. Devuelve verdadero si y solo si el primer operando
      es verdadero. El resultado es independiente del segundo operando.

      bitwise: Compara dos numeros bit a bit. Devuelve 1 si y solo si el bit
               del primer operando es 1. No tiene en cuenta el segundo numero.
               Ejemplo: 127d * 7 = 127d
                        (donde "*" denota la identidad del primer numero)

      logica: El resultado sera verdadero si y solo si la primera asercion es
              verdadera. Es independiente de la segunda asercion.
              Ejemplo: (P * Q) <=> P
                       ("*" denota la identidad de la primera asercion)

      conjuntos: El resultado es el primer conjunto (primer operando), y es
                 independiente del segundo conjunto.
                 Ejemplo: xA*B <=> xA
                          ("*" denota la identidad del primer conjunto)


      COMPLEMENTARIO DEL PRIMERO:
      ---------------------------

      Recibe dos operandos, y devuelve el complementario del primero; es
      independiente del segundo operando. El resultado depende del valor
      total.

      bitwise: Compara los dos operandos bit a bit. Devuelve 0 si el bit del
               primero es 1, y devuelve 1 si el bit del primero es 0 (es
               independiente del segundo operando). Su resultado depende del
               tamao del campo en que trabajemos.
               Ejemplo: 15d * 5 (en 5 bits) = 10000b = -16
                        ("*" denota la operacion 'not primer operando')

      logica: La operacion devuelve verdadero si y solo si la primera asercion
              es falsa (es independiente de la segunda).
              Ejemplo: P * Q <=> no P
                       ("*" denota 'complementaria de la primera asercion')

      conjuntos: El resultado es el complementario del primer conjunto. Es
                 independiente del segundo conjunto. Su resultado depende del
                 conjunto total.
                 Ejemplo: A*B=A'
                          ("*" denota el complementario del primer conjunto)


      IDENTIDAD DEL SEGUNDO:
      ----------------------

      (Ver identidad del primero)


      COMPLEMENTARIO DEL SEGUNDO:
      ---------------------------

      (Ver complementario del primero)


      Se acabaron las operaciones absurdas (al menos habia que citarlas).


      AND:
      ----

      Trabaja con dos operandos. Devuelve verdadero si y solo si los dos
      operandos son verdaderos (falso en el resto de los casos). Por tanto, su
      resultado no depende del tamao del valor total.

      bitwise: Compara bit a bit, devolviendo un bit a 1 si y solo si los dos
               bits son 1. Se conoce tambien con el nombre de producto logico.
               Ejemplo: 1001b and 1100b = 1000b

      logica: La asercion resultante es verdadera si y solo si las dos
              aserciones son verdaderas. Se llama conjuncion de proposiciones.
              P Y Q es verdadera si y solo si P es verdadera y Q es verdadera
              Ejemplo: "Existo Y soy humano" <=> "Soy humano"
                                              ^
                                              por: "Soy humano" => "Existo"

      conjuntos: La interseccion de dos conjuntos es el conjunto de los
                 elementos que pertenecen a la vez a ambos conjuntos. Si la
                 interseccion de los conjuntos es el conjunto vacio, se dice
                 que son conjuntos disjuntos entre si (si no, decimos que los
                 conjuntos se encuentran o se cortan).
                 AnB = { x | xA Y xB }


      OR:
      ---

      Recibe dos operandos. Su resultado es verdadero si y solo si al menos
      uno de los operandos es verdadero. No depende del valor total. Es un 'o'
      con sentido inclusivo (un operando no excluye al otro).

      bitwise: Trabaja bit a bit. Devuelve 1 si y solo si al menos uno de los
               dos bits vale 1. Tambien conocido como suma logica.
               Ejemplo: 0101b or 1001b = 1101b

      logica: El resultado es verdadero si y solo si al menos una de las dos
              aserciones es verdadera. Es un O inclusivo (pueden ser ambas
              verdaderas). Se llama disyuncion/disjuncion de proposiciones. En
              el lenguaje cotidiano, a veces se utiliza: "y/o".
              P o Q <=> P es verdadera O Q es verdadera

      conjuntos: La union (o reunion) de dos conjuntos es el conjunto de los
                 elementos de ambos conjuntos.
                 AuB = { x | xA O xB }


      XOR:
      ----

      Recibe dos operandos, y devuelve verdadero si y solo si un unico
      operando es verdadero (y el otro es falso). Un operando excluye al otro,
      y para que el resultado sea verdadero, los operandos deben ser
      distintos. Es un 'o' con sentido exclusivo. Su resultado no depende del
      valor total. XOR es una doble diferencia logica (ver diferencia logica).

      bitwise: Opera bit a bit, y devuelve verdadero si y solo si un operando
               es 1 y el otro es 0. Se llama tambien suma logica exclusiva.
               Ejemplo: 1100b xor 0110b = 1010b

      logica: La asercion resultante es verdadera si y solo si una unica
              asercion es cierta (y la otra falsa). Una asercion excluye a la
              otra, y no pueden ser ambas verdaderas o ambas falsas.
              P O BIEN Q <=> (P es cierta Y Q es falsa) O
                             (P es falsa Y Q es cierta)
              Ejemplo: "Soy hombre O BIEN soy mujer" es una asercion cierta
                       (asumiendo que no hay puntos medios).

      conjuntos: Se llama diferencia simetrica de dos conjuntos al conjunto
                 formado por los elementos de ambos conjuntos que no
                 pertenecen a los dos conjuntos al mismo tiempo.
                 AB = { x | xA Y xB Y x(AnB)' }


      DIFERENCIA LOGICA DEL PRIMERO Y EL SEGUNDO:
      -------------------------------------------

      Es una operacion sobre dos operandos. Su resultado es verdadero si y
      solo si el primer operando es verdadero y el segundo es falso. Por lo
      tanto, su resultado es independiente del valor total. Esta operacion no
      es asociativa ni conmutativa.

      bitwise: Trabaja bit a bit. Devuelve 1 si y solo si el primer operando
               es 1 y el segundo 0. Se llama diferencia logica.
               Ejemplo: 0101b - 1100b = 0001b
                        ("-" denota la diferencia logica del 1o y el 2o)

      logica: La asercion resultado es verdadera si y solo si la primera
              asercion es verdadera y la segunda falsa.
              P - Q <=> P Y NO Q
              Ejemplo: "(x es primo) - (x es impar)" <=>
                       "x es primo" Y "x es par" <=> "x es 2"
                       ("-" denota la diferencia logica del 1o y el 2o)

      conjuntos: La diferencia de dos conjuntos es el conjunto formado por los
                 elementos pertenecientes al primer conjunto y no
                 pertenecientes al segundo conjunto.
                 A-B = { x | xA Y xB' }


      DIFERENCIA LOGICA DEL SEGUNDO Y EL PRIMERO:
      -------------------------------------------

      Esta operacion es la diferencia logica en el otro sentido, obteniendose
      resultados diferentes (ver diferencia logica del primero y el segundo).
      Tampoco cumple la propiedad asociativa ni la conmutativa (si fuese
      conmutativa, las dos diferencias serian la misma operacion).


      Ahora se explicaran las complementarias de estas cinco operaciones.


      NAND:
      -----

      Es la operacion complementaria de AND (el resultado de AND es negado).
      Recibe dos operandos, y devuelve verdadero si y solo si al menos uno de
      los operandos es falso. Su resultado depende del valor total. Esta
      operacion no se suele usar.

      bitwise: Compara bit a bit. Devuelve 1 si y solo si al menos uno de los
               operandos es 0 (devuelve 0 si ambos son 1).
               Ejemplo: 0011b nand 0110b (en 4 bits) = 1101b

      logica: Devuelve una asercion verdadera si y solo si al menos una de las
              aserciones es falsa.
              P NAND Q <=> NO (P Y Q) <=> (NO P) O NO Q (leyes de De Morgan)

      conjuntos: El conjunto resultante de esta operacion es el complementario
                 de la interserccion de los dos conjuntos operandos.
                 An'B = (AnB)' = { x | x(AnB)' } = { x | xA' O xB' }= A'uB'
                 ("n'" denota el complementario de la interseccion)


      NOR:
      ----

      Es la operacion complementaria de OR (el resultado de OR es negado).
      Trabaja con dos operandos. Devuelve verdadero si y solo si los dos
      operandos son falsos, por tanto, su resultado depende del valor total.
      Esta operacion tampoco se suele usar.

      bitwise: Trabaja bit a bit. Devuelve un bit a 1 si y solo si ambos
               operandos son 0 (devuelve 0 en el resto de casos).
               Ejemplo: 0101b nor 0011b (en 4 bits) = 1000b

      logica: La asercion resultante es cierta si y solo si ambas aserciones
              son falsas.
              P NOR Q <=> NO (P O Q) <=> (NO P) Y (NO Q)

      conjuntos: El conjunto resultante es el complementario de la union de
                 los conjuntos operandos.
                 Au'B = (AuB)' = { x | x(AuB)' } = { x | xA' Y xB' }= A'nB'
                 ("u'" denota el complementario de la union de conjuntos)


      XNOR / EQUIVALENCIA:
      --------------------

      Esta operacion es muy importante. Se trata de la negacion del resultado
      de XOR (es su operacion complementaria). Su resultado es verdadero si y
      solo si ambos resultados son verdaderos o ambos resultados son falsos.
      Por esta definicion, su resultado depende del valor total. Es una
      equivalencia, o implicacion en los dos sentidos.

      bitwise: Compara bit a bit. Devuelve 1 si y solo si los dos bits
               operandos son iguales (que sean ambos 1 o que sean ambos 0).
               A nivel de bits esta operacion se llama xnor.
               Ejemplo: 0011b xnor 1001b (en 4 bits) = 0101b

      logica: El resultado es una asercion verdadera si y solo si ambas
              aserciones son verdaderas o ambas aserciones son falsas. Se
              trata de la equivalencia tan usada en matematicas (tambien
              llamada doble implicacion o condicional).

              (P <=> Q) <=> (P => Q) Y (Q => P)

              'P <=> Q' se lee:
                 P es condicion necesaria y suficiente de Q
                 P si y solo si Q
                 P es equivalente logico de Q

              Ejemplo: "(x + 1 = 1) <=> (x = 0)" es una asercion verdadera.

      conjuntos: El resultado de operar dos conjuntos es el conjunto de los
                 elementos que pertenecen a la vez a ambos conjuntos o que no
                 pertenecen a ninguno. Depende del conjunto total.
                 x(A<=>B) <=> (xAnB O x(AuB)')
                 (en este caso, "<=>" denota la operacion 'equivalencia entre
                 conjuntos', aunque nunca se utiliza [se compone con las
                 operaciones basicas not, and y or]).


      IMPLICACION PRIMERO => SEGUNDO:
      -------------------------------

      Es la operacion complementaria de la diferencia logica del primero y el
      segundo. Devuelve verdadero si y solo si: el primer operando es cierto y
      el segundo tambien, o si el primero es falso. Esta es la definicion de
      implicacion, una operacion que depende del tamao del valor total.

      bitwise: No se suele utilizar directamente. Compara a nivel de bits, y
               devuelve 1 cuando el primer bit es 0, o cuando el primer bit es
               1 y el segundo es 1. Como ya he dicho, depende del tamao total
               del campo en que trabajemos.
               Ejemplo: (1100b => 0110b) (en 8 bits) = 11110111b
                        ("=>" denota la operacion implicacion a nivel de bits)

      logica: La asercion resultante es cierta si y solo si la primera
              asercion es cierta y la segunda tambien, o si la primera
              asercion es falsa. La implicacion simple tambien se utiliza
              mucho en demostraciones (sobretodo en demostraciones de un solo
              sentido).

              (P => Q) <=> [(P Y Q) O NO P] <=> (NO P) O Q

              'P => Q' se lee:
                 P es condicion suficiente de Q
                 Q es condicion necesaria de P
                 Si P, entonces Q
                 P solo si Q
                 Q si P
                 P implica Q
                 P entraa Q

              La proposicion P recibe el nombre de hipotesis, y Q tesis o
              conclusion. En una demostracion es posible que, al tomar la
              hipotesis como falsa, lleguemos a una contradiccion, por lo que
              la proposicion quedaria demostrada (por el principio del medio
              excluido).

              Ejemplo: "Si tengo pies, entonces tengo piernas" es una asercion
                       verdadera, y equivalente a: "NO tengo pies O tengo
                       piernas". Es posible que este ultimo enunciado te
                       confunda, lo veras mas claro si analizas los casos:

                          no tener pies ni piernas
                          no tener pies y tener piernas
                          tener pies y no tener piernas (imposible)
                          tener pies y piernas

      conjuntos: El resultado de esta operacion es el conjunto de los
                 elementos del conjunto total que no pertenecen al primer
                 conjunto o que pertenecen al segundo. El resultado depende
                 del conjunto total.
                 x(A=>B) <=> (xA' O xB) <=> [(xA O xA') Y (xA' O xB)]
                 <=> [xA' O (xA Y xB)]
                  ^
                  por las propiedades distributivas
                 ("=>" denota la implicacion entre conjuntos)


      IMPLICACION SEGUNDO => PRIMERO:
      -------------------------------

      Se trata de la implicacion en el otro sentido (primero <= segundo). (Ver
      implicacion primero => segundo).


   OPERACIONES SOBRE MAS DE DOS OPERANDOS:
   ---------------------------------------

      Sobre n operandos se pueden obtener 4^n resultados distintos. Habra
      algunos que no dependan de ningun operando, otras que dependan de
      algunos operandos, y otros que dependan de todos los operandos. Todas
      las operaciones sobre mas de dos operandos pueden ser compuestas
      mediante las operaciones ya descritas. Shannon lo demostro, y tambien
      probo que todas las operaciones pueden ser compuestas mediante {and,
      not}, {or, not}, etc


TABLA DE SIGNOS:
----------------

   Los distintos signos que se suelen usar para indicar las operaciones son:

   operacion:     bitwise               logica                      conjuntos
   -------------  --------------------  --------------------------  ---------
                  _                                                 _
   not            A      ~A   not A     no P        !P    P    ~P  A    A'
   and            A*B    A&B  A and B   P y Q       P&&Q  P/\Q      AnB
   or             A+B    A|B  A or B    P o Q       P||Q  P\/Q      AuB
   xor            A(+)B  A^B  A xor B   P o bien Q                  AB
   dif. logica    A-B                                               A-B
   nand                       A nand B
   xnor/equival.              A xnor B  P <=> Q
   implicacion                          P => Q

   No se recomienda usar la notacion de C o de otro lenguaje para evitar
   confusiones. El valor total y el valor nulo se suelen representar:

   bitwise   logica      conjuntos
   --------  ----------  ----------
   0         FALSO       
   -1        VERDADERO   E


NOMBRES DE LAS OPERACIONES:
---------------------------

   Cada operacion puede tener un nombre distinto segun el campo en que se
   utilice:

   nivel de bits         logica             conjuntos
   --------------------  -----------------  ---------------------

   not                   negacion           complementario

   and/producto logico   conjuncion         interseccion

   or/suma logica        disyuncion         union/reunion

   xor/suma logica       disyuncion         diferencia simetrica
   exclusiva             exclusiva???

   diferencia logica     ??? (P y no Q)     diferencia

   nand                  ??? (no (P y Q))   ??? ((AnB)')

   nor                   ??? (no (P o Q))   ??? ((AuB)')

   xnor                  equivalencia       ??? ((AB)')

   ??? (not dif. log.)   implicacion        ??? ((A-B)')


PROPIEDADES:
------------

   A continuacion se describen las propiedades de las operaciones descritas.
   No se demuestra ninguna, porque eso lo puede hacer el lector. La forma mas
   rapida es demostrarlas para todas las combinaciones posibles de operandos y
   los resultados que producen (puesto que estan definidas sobre conjuntos
   finitos).

   Para describir las operaciones se empleara notacion de nivel de bits, con
   algunas extensiones (ver tabla de signos). Se utilizara "=>" para la
   implicacion y "<=>" o "xnor" para la equivalencia. Se utilizara A' para
   indicar el complementario de A.

   Evidentemente, las propiedades son aplicables a los tres campos (nivel de
   bits, logica, y conjuntos). La igualdad debe ser sustituida solo en logica
   por la equivalencia ("<=>").


   ASOCIATIVA:
   -----------

   Definicion: Para cualesquiera x, y, z: x * (y * z) = (x * y) * z
               ("*" denota la operacion)

   Cumplen la propiedad asociativa: anulacion, and, identidad del primero,
   identidad del segundo, xor, or, nor, xnor, complementario del segundo,
   complementario del primero, nand, y totalidad.

      A * (B * C) = (A * B) * C = A * B * C               (and)

      A (+) (B (+) C) = (A (+) B) (+) C = A (+) B (+) C   (xor)

      A + (B + C) = (A + B) + C = A + B + C               (or)


   CONMUTATIVA:
   ------------

   Definicion: Para cualesquiera x, y: x * y = y * x

   Cumplen la conmutativa: anulacion, and, xor, or, nor, xnor, nand, y
   totalidad.

      A * B = B * A       (and)

      A (+) B = B (+) A   (xor)

      A + B = B + A       (or)


   IDEMPOTENCIA: (o fridegidez)
   -------------

   Definicion: Para todo x: x * x = x
               ("*" denota la operacion idempotente)

   Cumplen la idempotencia las operaciones: and, identidad del primero,
   identidad del segundo, y or.

      A * A = A   (and)

      A + A = A   (or)


   ELEMENTO NEUTRO:
   ----------------

   Definicion: Existe un elemento e tal que para todo x: e * x = x * e = x
               Es posible que exista elemento neutro sin que se de la
               propiedad conmutativa, aunque en estas operaciones no ocurre en
               ningun caso.

   Tienen elemento neutro: and, xor, or, xnor.

   El elemento neutro de and y xnor es el valor total (-1 en nivel de bits):

      A * -1 = -1 * A = A         (and)

      A xnor -1 = -1 xnor A = A   (xnor)

   El elemento neutro de xor y or es el valor nulo (0 a nivel de bits):

      A (+) 0 = 0 (+) A = A   (xor)

      A + 0 = 0 + A = A       (or)


   ELEMENTO INVERSO:
   -----------------

   Definicion: Para todo x existe un y tal que: x * y = y * x = e
               En otras palabras, todo elemento tiene simetrico. Tambien puede
               existir elemento neutro sin que se de la propiedad conmutativa
               para todos los elementos, aunque tampoco ocurre con ninguna
               operacion de las explicadas. Si es necesario que exista
               elemento neutro.

   Tienen elemento inverso la operaciones: xor y xnor.

   El elemento inverso de estas operaciones es el propio operado:

      A (+) A = 0     (xor)

      A xnor A = -1   (xnor)


   DISTRIBUTIVA:
   -------------

   Existen dos propiedades distributivas: por la izquierda y por la derecha,
   no es necesario que se de la propiedad conmutativa para que se cumplan
   ambas, aunque si se da, entonces se cumplen las dos.

   Definicion: por la izquierda:
               Para cualesquiera x, y, z: x * (y (*) z) = (x * y) (*) (x * z)
               ("*" denota una operacion, y "(*)" denota otra)

               por la derecha:
               Para cualesquiera x, y, z: (y (*) z) * x = (y * x) (*) (z * x)

   Se lee: "la operacion * es distributiva por la izquierda o por la derecha
   en relacion a la operacion (*)".

   Cumplen la propiedad distributiva solo por la izquierda los pares de
   operaciones siguientes:

      (diferencia segundo - primero, anulacion)
      (diferencia segundo - primero, and)
      (diferencia segundo - primero, diferencia primero - segundo)
      (diferencia segundo - primero, diferencia segundo - primero)
      (diferencia segundo - primero, xor)
      (diferencia segundo - primero, or)
      (identidad segundo, anulacion)
      (identidad segundo, diferencia primero - segundo)
      (identidad segundo, diferencia segundo - primero)
      (identidad segundo, xor)
      (identidad segundo, nor)
      (identidad segundo, xnor)
      (identidad segundo, complementario segundo)
      (identidad segundo, implicacion segundo => primero)
      (identidad segundo, complementario primero)
      (identidad segundo, implicacion primero => segundo)
      (identidad segundo, nand)
      (identidad segundo, totalidad)
      (complementario segundo, complementario segundo)
      (complementario segundo, complementario primero)
      (complementario primero, and)
      (complementario primero, or)
      (implicacion primero => segundo, and)
      (implicacion primero => segundo, or)
      (implicacion primero => segundo, xnor)
      (implicacion primero => segundo, implicacion segundo => primero)
      (implicacion primero => segundo, implicacion primero => segundo)
      (implicacion primero => segundo, totalidad)

   Cumplen la propiedad distributiva solo por la derecha los siguientes pares:

      (diferencia primero - segundo, anulacion)
      (diferencia primero - segundo, and)
      (diferencia primero - segundo, diferencia primero - segundo)
      (diferencia primero - segundo, diferencia segundo - primero)
      (diferencia primero - segundo, xor)
      (diferencia primero - segundo, or)
      (identidad primero, anulacion)
      (identidad primero, diferencia primero - segundo)
      (identidad primero, diferencia segundo - primero)
      (identidad primero, xor)
      (identidad primero, nor)
      (identidad primero, xnor)
      (identidad primero, complementario segundo)
      (identidad primero, implicacion segundo => primero)
      (identidad primero, complementario primero)
      (identidad primero, implicacion primero => segundo)
      (identidad primero, nand)
      (identidad primero, totalidad)
      (complementario segundo, and)
      (complementario segundo, or)
      (implicacion segundo => primero, and)
      (implicacion segundo => primero, or)
      (implicacion segundo => primero, xnor)
      (implicacion segundo => primero, implicacion segundo => primero)
      (implicacion segundo => primero, implicacion primero => segundo)
      (implicacion segundo => primero, totalidad)
      (complementario primero, complementario segundo)
      (complementario primero, complementario primero)

   Cumplen la propiedad distributiva (por la izquierda y por la derecha) los
   pares de operaciones:

      (anulacion, anulacion)
      (anulacion, and)
      (anulacion, diferencia primero - segundo)
      (anulacion, identidad primero)
      (anulacion, diferencia segundo - primero)
      (anulacion, identidad segundo)
      (anulacion, xor)
      (anulacion, or)
      (and, anulacion)
      (and, and)
      (and, diferencia primero - segundo)
      (and, identidad primero)
      (and, diferencia segundo - primero)
      (and, identidad segundo)
      (and, xor)
      (and, or)
      (diferencia primero - segundo, identidad primero)
      (diferencia primero - segundo, identidad segundo)
      (identidad primero, and)
      (identidad primero, identidad primero)
      (identidad primero, identidad segundo)
      (identidad primero, or)
      (diferencia segundo - primero, identidad primero)
      (diferencia segundo - primero, identidad segundo)
      (identidad segundo, and)
      (identidad segundo, identidad primero)
      (identidad segundo, identidad segundo)
      (identidad segundo, or)
      (xor, identidad primero)
      (xor, identidad segundo)
      (xor, complementario segundo)
      (xor, complementario primero)
      (or, and)
      (or, identidad primero)
      (or, identidad segundo)
      (or, or)
      (or, xnor)
      (or, implicacion segundo => primero)
      (or, implicacion primero => segundo)
      (or, totalidad)
      (nor, identidad primero)
      (nor, identidad segundo)
      (xnor, identidad primero)
      (xnor, identidad segundo)
      (xnor, complementario segundo)
      (xnor, complementario primero)
      (complementario segundo, identidad primero)
      (complementario segundo, identidad segundo)
      (implicacion segundo => primero, identidad primero)
      (implicacion segundo => primero, identidad segundo)
      (complementario primero, identidad primero)
      (complementario primero, identidad segundo)
      (implicacion primero => segundo, identidad primero)
      (implicacion primero => segundo, identidad segundo)
      (nand, identidad primero)
      (nand, identidad segundo)
      (totalidad, and)
      (totalidad, identidad primero)
      (totalidad, identidad segundo)
      (totalidad, or)
      (totalidad, xnor)
      (totalidad, implicacion segundo => primero)
      (totalidad, implicacion primero => segundo)
      (totalidad, totalidad)

   Los 16 pares de operaciones no citados no cumplen ninguna. Si alguien
   encuentra un error en esta lista, que me lo haga saber. He hecho la lista
   con un programa, y es posible que por algun error de implementacion sea
   incorrecta. Gracias.

   Las mas importantes son:

      A * (B - C) = (A * B) - (A * C)         (and, dif. primero - segundo)
      (B - C) * A = (B * A) - (C * A)

      A * (B + C) = (A * B) + (A * C)         (and, or)
      (B + C) * A = (B * A) + (C * A)

      A * (B (+) C) = (A * B) (+) (A * C)     (and, xor)
      (B (+) C) * A = (B * A) (+) (C * A)

      A + (B * C) = (A + B) * (A + C)         (or, and)
      (B * C) + A = (B + A) * (C + A)

      A + (B => C) = ((A + B) => (A + C))     (or, implic. primero => segundo)
      (B => C) + A = ((B + A) => (C + A))

      A + (B <=> C) = ((A + B) <=> (A + C))   (or, equivalencia/xnor)
      (B <=> C) + A = ((B + A) <=> (C + A))

   Observese que la suma logica es distributiva en relacion al producto
   logico; esto no ocurre en la suma y el producto aritmeticos.


   LEYES DE De Morgan:
   ------------------
 
   Definicion: Para cualesquiera x, y, se cumple: (x * y)' = x' (*) y'
               ("*" denota una operacion, y "(*)" denota otra)

   Cumplen las leyes de De Morgan los siguientes pares de operaciones:

      (anulacion, totalidad)
      (and, or)
      (diferencia primero - segundo, implicacion segundo => primero)
      (identidad primero, identidad primero)
      (diferencia segundo - primero, implicacion primero => segundo)
      (identidad segundo, identidad segundo)
      (xor, xnor)
      (or, and)
      (nor, nand)
      (xnor, xor)
      (complementario segundo, complementario segundo)
      (implicacion segundo => primero, diferencia primero - segundo)
      (complementario primero, complementario primero)
      (implicacion primero => segundo, diferencia segundo - primero)
      (nand, nor)
      (totalidad, anulacion)

   Las realmente importantes son:

      (A * B)' = A' + B'         (and, or)

      (A - B)' = (A' <= B')      (dif. prim. - seg., implic. seg. => prim.)

      (A (+) B)' = (A' <=> B')   (xor, equivalencia/xnor)

      (A + B)' = A' * B'         (or, and)

      (A <=> B)' = A' (+) B'     (equivalencia/xnor, xor)

      (A => B)' = B' - A'        (implic. prim. => seg., dif. seg. - prim.)
      (perdon por el cambio, pero no hay mas simbolos)


   LEYES DE ABSORCION:
   -------------------

   Las leyes de absorcion se dan entre dos operaciones. Existen cuatro tipos
   de leyes de absorcion.

   Definicion: por la izquierda-izquierda: (tiene que tener un nombre)
               para cualesquiera x, y: x * (x (*) y) = x

               por la izquierda-derecha:
               para cualesquiera x, y: x * (y (*) x) = x

               por la derecha-izquierda:
               para cualesquiera x, y: (x (*) y) * x = x

               por la derecha-derecha:
               para cualesquiera x, y: (y (*) x) * x = x

   Cumplen las leyes de absorcion solo por la izquierda-izquierda:

      (diferencia primero - segundo, diferencia segundo - primero)
      (diferencia primero - segundo, complementario primero)
      (complementario segundo, complementario primero)
      (implicacion segundo => primero, complementario primero)
      (implicacion segundo => primero, implicacion primero => segundo)

   Solo por la izquierda-derecha:

      (diferencia primero - segundo, diferencia primero - segundo)
      (diferencia primero - segundo, complementario segundo)
      (complementario segundo, complementario segundo)
      (implicacion segundo => primero, complementario segundo)
      (implicacion segundo => primero, implicacion segundo => primero)

   Solo por la derecha-izquierda:

      (diferencia segundo - primero, diferencia segundo - primero)
      (diferencia segundo - primero, complementario primero)
      (complementario primero, complementario primero)
      (implicacion primero => segundo, complementario primero)
      (implicacion primero => segundo, implicacion primero => segundo)

   Solo por la derecha-derecha:

      (diferencia segundo - primero, diferencia primero - segundo)
      (diferencia segundo - primero, complementario segundo)
      (complementario primero, complementario segundo)
      (implicacion primero => segundo, complementario segundo)
      (implicacion primero => segundo, implicacion segundo => primero)

   Solo por la izquierda-izquierda y por la izquierda-derecha:

      (diferencia primero - segundo, anulacion)
      (diferencia primero - segundo, nor)
      (identidad primero, anulacion)
      (identidad primero, and)
      (identidad primero, diferencia primero - segundo)
      (identidad primero, diferencia segundo - primero)
      (identidad primero, xor)
      (identidad primero, or)
      (identidad primero, nor)
      (identidad primero, xnor)
      (identidad primero, complementario segundo)
      (identidad primero, implicacion segundo => primero)
      (identidad primero, complementario primero)
      (identidad primero, implicacion primero => segundo)
      (identidad primero, nand)
      (identidad primero, totalidad)
      (implicacion segundo => primero, nand)
      (implicacion segundo => primero, totalidad)

   Solo por la izquierda-izquierda y por la derecha-izquierda:

      (and, identidad primero)
      (and, implicacion segundo => primero)
      (or, diferencia primero - segundo)
      (or, identidad primero)

   Solo por la izquierda-izquierda y por la derecha-derecha:

      [ninguna]

   Solo por la izquierda-derecha y por la derecha-izquierda:

      [ninguna]

   Solo por la izquierda-derecha y por la derecha-derecha:

      (and, identidad segundo)
      (and, implicacion primero => segundo)
      (or, diferencia segundo - primero)
      (or, identidad segundo)

   Solo por la derecha-izquierda y por la derecha-derecha:

      (diferencia segundo - primero, anulacion)
      (diferencia segundo - primero, nor)
      (identidad segundo, anulacion)
      (identidad segundo, and)
      (identidad segundo, diferencia primero - segundo)
      (identidad segundo, diferencia segundo - primero)
      (identidad segundo, xor)
      (identidad segundo, or)
      (identidad segundo, nor)
      (identidad segundo, xnor)
      (identidad segundo, complementario segundo)
      (identidad segundo, implicacion segundo => primero)
      (identidad segundo, complementario primero)
      (identidad segundo, implicacion primero => segundo)
      (identidad segundo, nand)
      (identidad segundo, totalidad)
      (implicacion primero => segundo, nand)
      (implicacion primero => segundo, totalidad)

   Solo por la izquierda-izquierda y por la izquierda-derecha y por la
   derecha-izquierda:

      (identidad primero, identidad primero)

   Solo por la izquierda-izquierda y por la izquierda-derecha y por la
   derecha-derecha:

      (identidad primero, identidad segundo)

   Solo por la izquierda-izquierda y por la derecha-izquierda y por la
   derecha-derecha:

      (identidad segundo, identidad primero)

   Solo por la izquierda-derecha y por la derecha-izquierda y por la
   derecha-derecha:

      (identidad segundo, identidad segundo)

   Cumplen las leyes de absorcion (las cuatro propiedades) los siguientes
   pares de operaciones:

      (and, or)
      (and, totalidad)
      (xor, anulacion)
      (or, anulacion)
      (or, and)
      (xnor, totalidad)

   Es posible que la lista contenga errores. Los pares no citados (182) no
   cumplen ninguna propiedad. Estos ultimos pares de operaciones son los mas
   importantes:

      A * (A + B) = A   (and, or)
      A * (B + A) = A
      (A + B) * A = A
      (B + A) * A = A

      A + (A * B) = A   (or, and)
      A + (B * A) = A
      (A * B) + A = A
      (B * A) + A = A


   OTRAS PROPIEDADES:
   ------------------

   Aqui solo se trataran las operaciones not, and, or, diferencia, y xor.
   Estas operaciones son todas conmutativas menos la diferencia, asi que no se
   indicaran todos los sentidos en las siguientes formulas. Se recuerda que 0
   representa el valor nulo y -1 el valor total.

   Propiedades del complementario:

      0' = -1
      -1' = 0

      (A')' = A

      A' = -1 - A

      A * A' = 0

      A + A' = -1

      A - A' = A
      A' - A = A'

      A (+) A' = -1

   Propiedades del valor nulo:

      A * 0 = 0

      A + 0 = A

      A - 0 = A
      0 - A = 0

      A (+) 0 = A

   Propiedades del valor total:

      A * -1 = A

      A + -1 = -1

      A - -1 = 0
      -1 - A = A'

      A (+) -1 = A'

   Propiedades que definen la diferencia y la suma exclusiva:

      A - B = A * B' = A - (A * B)

      A (+) B = (A + B) - (A * B) = (A - B) + (B - A)


   PROPIEDADES DE LA IMPLICACION:
   ------------------------------

   Estas propiedades son a lo que muchos reducen la logica. Son necesarias
   para demostraciones. Nota/ FALSO representa una contradiccion, VERDADERO
   representa una tautologia.

      NO NO P <=> P   (principio de no-contradiccion y del medio excluso)

      (P <=> Q) <=> [(P => Q) Y (Q => P)]

      [(P => Q) Y (Q => R)] <=> (P => R)   (demostracion directa)

      (P => Q) <=> (Q O NO P) <=> NO (P Y NO Q)
      
      NO P <=> (P => FALSO)

      P <=> (VERDADERO => P)

      (P => Q) <=> [(P Y NO Q) => FALSO]

      (P => Q) <=> (NO Q => NO P)   (contrapositivo)


APEDICE: TABLA DE OPERACIONES:
------------------------------


   OPERACIONES SOBRE UN SOLO OPERANDO:
   -----------------------------------

      NOP LDP TOT NOMBRE                          leyenda:
      --- --- --- ---------------------------     NOP: numero de operacion.
       0   n   n  anulacion                       LDP: resultado linealmente
       1   s   n  identidad del operando               dependiente del
       2   s   s  complementario del operando          operando.
       3   n   s  totalidad                       TOT: resultado dependiente
                                                       del tamao total.

      Nota sobre el numero de operacion:

         En operaciones sobre un operando, el numero de operacion en un valor
         de 2 bits que identifica el resultado de la operacion para todos los
         posibles operandos (0 o 1). Ver la siguiente tabla:

         NOP  0   1   la tabla muestra los resultados de la operacion para
         --- --- ---  cada operando. los resultados de cada operacion indican
          0   0   0   el numero de la operacion, por ejemplo, la operacion 3
          1   0   1   devuelve los resultados 1 y 1, el numero de 2 bits 11 es
          2   1   0   3. mediante el numero de operacion se pueden conocer
          3   1   1   todas las propiedades de una operacion.


   OPERACIONES SOBRE DOS OPERANDOS:
   --------------------------------

      Recuerda que combinando estas operaciones o las de un solo operando es
      posible obtener cualquier resultado para cualesquiera que sean los
      operandos (se entiende para mas de dos operandos). Sobre n operandos se
      pueden definir 4^n operaciones.

      NOP LD1 LD2 TOT ASO CON IDM EEN   EEI   NOMBRE
      --- --- --- --- --- --- --- ----- ----- -------------------------------
       0   n   n   n   s   s   n  n     n     anulacion
       1   s   s   n   s   s   s  s -1  n     and
       2   s   s   n   n   n   n  n     n     diferencia primero - segundo
       3   s   n   n   s   n   s  n     n     identidad primero
       4   s   s   n   n   n   n  n     n     diferencia segundo - primero
       5   n   s   n   s   n   s  n     n     identidad segundo
       6   s   s   n   s   s   n  s  0  s OP  xor
       7   s   s   n   s   s   s  s  0  n     or
       8   s   s   s   s   s   n  n     n     nor
       9   s   s   s   s   s   n  s -1  s OP  xnor / equivalencia
      10   n   s   s   s   n   n  n     n     complementario del segundo
      11   s   s   s   n   n   n  n     n     implicacion segundo => primero
      12   s   n   s   s   n   n  n     n     complementario del primero
      13   s   s   s   n   n   n  n     n     implicacion primero => segundo
      14   s   s   s   s   s   n  n     n     nand
      15   n   n   s   s   s   n  n     n     totalidad

      Leyenda:   NOP: numero de operacion.
                 LD1: linealmente dependiente del primer operando.
                 LD2: linealmente dependiente del segundo operando.
                 TOT: dependiente del tamao total.
                 ASO: cumple la propiedad asociativa (para cualesquiera x, y,
                      z, se cumple: x*(y*z)=(x*y)*z).
                 CON: cumple la propiedad conmutativa (para cualesquiera x e
                      y, se cumple: x*y=y*x).
                 IDM: cumple la idempotencia (para todo x, x*x=x)
                 EEN: existe elemento neutro (existe un elemento e tal que
                      para todo elemento x, se cumple: e*x=x*e=x. se puede
                      hablar de elemento neutro si no se de la conmutativa
                      para todos los elementos). se indica tambien cual es el
                      elemento neutro, -1 representa el valor total y 0 el
                      valor nulo.
                 EEI: exite elemento inverso (para todo x existe un y tal que:
                      x*y=y*x=e). se indica cual es este elemento inverso en
                      cada caso (OP indica el propio operando).

      Sobre el numero de operacion:

         Ocupa 4 bits, que corresponden a los distintos resultados de cada
         operacion con las 4 posibles combinaciones de operandos. Observese la
         siguiente tabla de resultados:

         NOP 0,0 0,1 1,0 1,1
         --- --- --- --- ---   por ejemplo, la operacion xor, de numero 6,
          0   0   0   0   0    produce los siguientes resultados:
          1   0   0   0   1
          2   0   0   1   0      0 xor 0 = 0
          3   0   0   1   1      0 xor 1 =  1
          4   0   1   0   0      1 xor 0 =   1
          5   0   1   0   1      1 xor 1 =    0
          6   0   1   1   0               ------
          7   0   1   1   1                0110 = 6 (numero de xor)
          8   1   0   0   0
          9   1   0   0   1    el numero de operacion define sus resultados,
         10   1   0   1   0    y, por tanto, sus propiedades, la dependencia
         11   1   0   1   1    de sus operandos, y la existencia de elementos
         12   1   1   0   0    neutro e inverso.
         13   1   1   0   1
         14   1   1   1   0
         15   1   1   1   1

         Sobre las operaciones complementarias: Las 8 primeras operaciones de
         la tabla (de numeros 0..7) son las que no dependen del tamao total,
         las 8 ultimas (8..15) son sus complementarias, y si dependen del
         tamao total del campo. Dos operaciones cuyos numeros suman 15 son
         complementarias. La dependencia lineal de sus operadores y las
         propiedades asociativa y conmutativa son las mismas para operaciones
         complementarias. Las operaciones 1 y 7 (and y or) tienen elemento
         neutro, sin embargo, sus complementarias no.


      OPERACIONES DISTRIBUTIVAS:
      --------------------------

         por la izquierda: para cualesquiera x, y, z: x*(y(*)z)=(x*y)(*)(x*z)
         por la derecha: para cualesquiera x, y, z: (y(*)z)*x=(y*x)(*)(z*x)

         Las siguientes listas indican las operaciones distributivas en un
         numero de 8 bits. Los 4 bits de mayor peso indican el numero de la
         primera operacion, y los 4 de menor peso el de la segunda operacion.
         La primera operacion es distributiva en relacion a la segunda. Los
         numeros estan indicados en hexadecimal para que sea mas facil la
         descodificacion.

         Por la izquierda:

            40 41 42 44 46 47 50 52 54 56 58 59 5A 5B
            5C 5D 5E 5F AA AC C1 C7 D1 D7 D9 DB DD DF

         Por la derecha:

            20 21 22 24 26 27 30 32 34 36 38 39 3A 3B
            3C 3D 3E 3F A1 A7 B1 B7 B9 BB BD BF CA CC

         Ambas (propiedad distributiva):

            00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17
            23 25 31 33 35 37 43 45 51 53 55 57 63 65 6A 6C
            71 73 75 77 79 7B 7D 7F 83 85 93 95 9A 9C A3 A5
            B3 B5 C3 C5 D3 D5 E3 E5 F1 F3 F5 F7 F9 FB FD FF


      leyes de De Morgan:
      ----------------

         para cualesquiera x, y: (x*y)'=x'(*)y'

         La siguiente lista incluye los pares de operaciones que cumplen las
         leyes de De Morgan. El formato es el mismo que el usado en las
         operaciones distributivas: los 4 bits de mayor peso indican la
         primera operacion, y los 4 bits de menor peso la segunda.

         Cumplen las leyes de De Morgan:

            0F 17 2B 33 4D 55 69 71 8E 96 AA B2 CC D4 E8 F0


      LEYES DE ABSORCION:
      -------------------

         El formato sigue siendo el mismo. Los 4 bits de mayor peso indican la
         primera operacion, y los 4 bits de menor peso la segunda operacion.

         Por la izquierda-izquierda:

            24 2C AC BC BD

         Por la izquierda-derecha:

            24 2C AC BC BD

         Por la derecha-izquierda:

            44 4C CC DC DD

         Por la derecha-derecha:

            42 4A CA DA DB

         Por la izquierda-izquierda y por la izquierda-derecha:

            20 28 30 31 32 34 36 37 38 39 3A 3B 3C 3D 3E 3F BE BF

         Por la izquierda-izquierda y por la derecha-izquierda:

            13 1B 72 73

         Por la izquierda-izquierda y por la derecha-derecha:

            [ninguna]

         Por la izquierda-derecha y por la derecha-izquierda:

            [ninguna]

         Por la izquierda-derecha y por la derecha-derecha:

            15 1D 74 75

         Por la derecha-izquierda y por la derecha-derecha:

            40 48 50 51 52 54 56 57 58 59 5A 5B 5C 5D 5E 5F DE DF

         Por la izquierda-izquierda y por la izquierda-derecha y por la
         derecha-izquierda:

            33

         Por la izquierda-izquierda y por la izquierda-derecha y por la
         derecha-derecha:

            35

         Por la izquierda-izquierda y por la derecha-izquierda y por la
         derecha-derecha:

            53

         Por la izquierda-derecha y por la derecha-izquierda y por la
         derecha-derecha:

            55

         Leyes de absorcion (las cuatro propiedades):

            17 1F 60 70 71 9F


NOTAS FINALES:
--------------

   - No abuses del lenguaje. Si puedes aprende latin, que es mas estricto, y
     te vale para entablar conversacion con las de letras (aunque, si haces
     matematicas, no echaras de menos a las de letras).

   - Como ya habras notado, en logica de aserciones solo existen dos posibles
     resultados: verdadero o falso, por lo que el tamao del valor total es de
     1 bit. Sin embargo, en conjuntos o nivel de bits, el valor total tiene un
     tamao variable (el numero de elementos del conjunto total, o el tamao
     en bits del campo en que trabajemos, respectivamente). No se si ha
     quedado claro, pero es muy importante entenderlo, porque la igualdad no
     debe aplicarse a la logica de proposiciones, sino la equivalencia.

   - La igualdad ("=") es un operador para formar proposiciones. Compara los
     dos miembros, siendo la proposicion resultante verdadera si y solo si son
     iguales. En logica no se utiliza "=", sino la equivalencia:

     "x + 5 = 7" <=> "x = 2"

     Tambien se puede indicar equivalencia logica entre proposiciones mediante
     el simbolo "":

     P  Q

   - En logica se ha trabajado con aserciones. Una asercion es una proposicion
     siempre cierta o siempre falsa. Una proposicion es un enunciado que puede
     ser o bien verdadero o bien falso (principio del medio excluido). Existen
     circunstancias en que la verdad de una proposicion excluye a la otra, por
     ejemplo: "(x > 3) Y (x < 2)" es una asercion falsa, aunque no podamos
     decir si cada proposicion por separado es siempre cierta o falsa (por
     separado no son aserciones, sino solamente proposiciones).

   - El significado de "y/o", que suele aparecer en la lista de ingredientes
     de las cajas de galletas, es el siguiente:

     "aceites y/o grasas" <=> (aceites Y grasas) O BIEN aceites O BIEN grasas

     Al menos es como yo lo entiendo. Esto es la definicion del O inclusivo:
     "aceites O grasas". Como ves, en el "y/o", el foreslash es un XOR, y 'o'
     es tambien XOR.

   - En espaol, normalmente interpretamos el 'o' (inclusivo) como exclusivo,
     y por esta razon surgio el 'y/o'. Parece que 'y/o' existe tambien en
     otros idiomas (en latin creo que no), asi que probablemente sea un error
     del lenguaje, que en muchos casos la lengua no soluciona.

   - El 'o' exclusivo en logica se suele emplear 'o bien P o bien Q', aunque
     en este texto se ha usado 'P o bien Q'. Asegurate de que sean correctos.

   - En nivel de bits, la suma modulo 2 bit a bit de dos numeros coincide con
     la diferencia modulo 2 bit a bit, y se suelen llamar XOR. Probablemente
     por esta razon, XOR sea conocido como diferencia simetrica o suma
     exclusiva. Lo de diferencia simetrica debe ser porque todo elemento es
     simetrizable.

   - Lo del numero de operacion me lo he inventado. Es probable que ya existan
     numeros asignados a cada operacion y que no correspondan a los que he
     dado yo (en orden de bits inverso). Tambien he llamado a la operacion 15
     totalidad, pero ahora pienso que habria quedado mejor completitud.

   - XOR y XNOR son muy usadas en criptologia, porque pueden invertirse.
     Operando el resultado con uno de los operandos se obtiene el otro
     operando. XNOR es una doble implicacion (equivalencia). XOR es una doble
     diferencia logica (la diferencia logica y la implicacion son operaciones
     complementarias, y ambas se pueden dar en los dos sentidos porque no son
     conmutativas).

   - Por que el conjunto vacio esta contenido en todo conjunto? La definicion
     de inclusion entre conjuntos es: AcB <=> (para todo xE) (xA => xB)
     Relee la definicion de implicacion si es necesario.

   - Creo que me he inventado muchas cosas en las leyes de absorcion. No me
     gusta la definicion. Si alguien sabe el nombre de cada una, que me lo
     diga. Tambien no he incluido algunas cosas, como elementos regulares,
     centrales, y algo mas.

   - Le dejo a otro/a lo que queda sobre otros tipos de logica y lo que yo no
     he escrito sobre logica basica (como cuantificadores). Tambien estaria
     muy bien aritmetica a nivel de bits.


REFERENCIAS:
------------

   [QUE79]   Michel Queysanne. Algebra basica. Editorial Vicens-Vives. Segunda
             edicion. ISBN: 84-316-1789-6. (ha sido una gran ayuda)

   [CL]      Manuel Castellet e Irene Llerena. Algebra lineal y geometria.
             Editorial Reverte. Primera edicion. ISBN: 84-291-5009-9.

   [BS]      Robert G. Bartle y Donald R. Sherbert. Introduccion al analisis
             matematico de una variable. Editorial Limusa Wiley. Segunda
             edicion. ISBN: 968-18-5191-9. (tiene un apendice de logica y
             demostraciones muy bueno)

   [BAR96]   Pablo Barron Ballesteros. Curso de ensamblador. Segunda edicion.
             Archivo: CURSOASM.ZIP / CURSOASM.TXT. (el origen de todo esto)


DESPEDIDA:
----------

   Probablemente este texto no te servira para mucho, y con conocer and, or,
   xor, y not te baste, pero he querido ir mas alla. Espero que, al menos,
   haya servido para modificar tu forma de razonar, y para que veas la logica
   desde un punto de vista mas real.

   Por que aprender el funcionamiento de las cosas creadas por el hombre
   cuando puedes descubrir por ti mismo la mas pura de todas las ciencias?
   Se diferente. No te engaes diciendote que haces un servicio a la sociedad,
   que pretendes concienciar al mundo, o que tus objetivos son simples retos
   intelectuales. Aspira, si puedes, a algo mas.

   La criptologia te espera.


         Aristoteles "El Filosofo Naturista"

         peakaboole@telepolis.com

*EOF*
madfran
