Predicado BIT

En matemáticas y ciencias de la computación, el predicado BIT, a veces escrito , es un concepto en matemáticas, lógica e informática. Es un tipo de predicado que comprueba si el -ésimo bit del número (contando desde el bit menos significativo) es 1 cuando se escribe como número binario. Entre sus aplicaciones matemáticas figuran el modelado de la relación de pertenencia de los conjuntos finitos hereditariamente y la definición de la relación de adyacencia del grafo de Rado. En ciencias de la computación se utiliza para representar de forma eficiente estructuras de datos de conjuntos mediante vectores de bits, para definir el problema de la recuperación privada de información en la complejidad de la comunicación y, en la teoría de la complejidad descriptiva, para formular descripciones lógicas de clases de complejidad.

Historia

El predicado BIT aparece en 1937 en la obra de Wilhelm Ackermann, que lo utilizó para definir la codificación de Ackermann, con la que los conjuntos finitos hereditariamente se codifican como números naturales. El predicado BIT permite comprobar la pertenencia entre los conjuntos codificados: es verdadero si y solo si el conjunto codificado por es elemento del conjunto codificado por .

Ackermann denotó el predicado como , con una tipografía Fraktur para distinguirlo de la notación que empleaba para la pertenencia a un conjunto (que se lee « es elemento de »). El nombre «predicado BIT» aparece en la obra de Neil Immerman, que aplicó este predicado en la teoría de la complejidad computacional a finales de la década de 1980.

Descripción e implementación

La representación binaria de un número es una expresión de como suma de potencias de dos distintas: donde cada bit de esta expresión vale 0 o 1. En notación binaria se suele escribir simplemente como la sucesión de estos bits, . Dado este desarrollo de , el predicado BIT se define como igual a . Puede calcularse mediante la fórmula donde es la función suelo y mod es la operación módulo. Como relación binaria (que produce los valores verdadero y falso en lugar de 1 y 0, respectivamente), el predicado BIT es asimétrico: no existen dos números y para los que y sean ambos verdaderos.

En lenguajes de programación como C, C++, Java o Python, que disponen de un operador de desplazamiento a la derecha >> y de un operador booleano AND bit a bit &, el predicado BIT puede implementarse mediante la expresión (i>>j)&1. La subexpresión i>>j desplaza los bits de la representación binaria de de modo que el bit pasa a la posición 0, y la subexpresión &1 enmascara los bits restantes y deja solo el bit de la posición 0. Al igual que con la fórmula de aritmética modular anterior, el valor de la expresión es 1 o 0 según que el valor de sea verdadero o falso, respectivamente.

Aplicaciones

Estructuras de datos de conjuntos

Para un conjunto representado como vector de bits, el predicado BIT puede utilizarse para comprobar la pertenencia al conjunto. Por ejemplo, los subconjuntos de los enteros no negativos pueden representarse mediante un vector de bits con un uno en la posición cuando pertenece al subconjunto, y un cero en esa posición cuando no pertenece. Si un vector de bits así se interpreta como un número binario, el conjunto , con distintos, queda representado por el número binario . Si es un conjunto representado de esta forma e es un número que puede pertenecer o no a , entonces devuelve un valor no nulo cuando es elemento de y cero cuando no lo es.

La misma técnica puede emplearse para comprobar la pertenencia en subconjuntos de cualquier sucesión de valores distintos, codificados mediante potencias de dos cuyos exponentes son las posiciones de los elementos en esta sucesión, en lugar de sus valores. Por ejemplo, en el marco de colecciones de Java, java.util.EnumSet utiliza esta técnica para implementar una estructura de datos de conjuntos para tipos enumerados. La codificación de Ackermann de los conjuntos finitos hereditariamente es un ejemplo de esta técnica, aplicada a la sucesión, generada recursivamente, de los conjuntos finitos hereditariamente.

Recuperación privada de información

En el estudio matemático de la seguridad informática, el problema de la recuperación privada de información puede modelarse como uno en el que un cliente, que se comunica con un conjunto de servidores que almacenan un número binario , desea conocer el resultado de un predicado BIT sin revelar a los servidores el valor de . Chor et al. (1998) describen un método para replicar en dos servidores de tal forma que el cliente pueda resolver el problema de la recuperación privada de información con una cantidad de comunicación sustancialmente menor que la necesaria para recuperar el valor completo de .

Complejidad y lógica

El predicado BIT se estudia a menudo en el contexto de la lógica de primer orden, donde se obtienen sistemas lógicos al añadirle el predicado BIT. En la complejidad descriptiva, la clase de complejidad FO describe la clase de los lenguajes formales que pueden describirse mediante una fórmula de la lógica de primer orden con una operación de comparación sobre variables totalmente ordenadas (interpretadas como los índices de los caracteres de una cadena de caracteres) y con predicados que comprueban si esa cadena tiene un carácter dado en un índice numérico dado. Una fórmula de esta lógica define un lenguaje formado por sus modelos finitos. Sin embargo, con estas operaciones solo puede describirse una clase muy restringida de lenguajes, los lenguajes regulares sin estrella. Al añadir el predicado BIT al repertorio de operaciones empleadas en estas fórmulas lógicas se obtiene la clase de complejidad FO[BIT].

La clase FO[BIT] coincide con la clase FO[+,×], de la lógica de primer orden con predicados de suma y multiplicación. También coincide con la clase de complejidad de circuitos AC0 uniforme en DLOGTIME. Aquí, AC0 describe los problemas que pueden calcularse mediante circuitos de puertas AND y puertas OR de tamaño polinómico, altura acotada y abanico de entrada no acotado. «Uniforme» significa que los circuitos de todos los tamaños de problema deben estar descritos por un único algoritmo. Más concretamente, debe ser posible indexar las puertas de cada circuito con números de tal forma que el tipo de cada puerta y la adyacencia entre dos puertas cualesquiera puedan calcularse mediante un algoritmo determinista cuyo tiempo sea logarítmico en el tamaño del circuito (DLOGTIME).

Construcción del grafo de Rado

Véase la leyenda
El grafo de Rado, construido a partir del predicado BIT. Por ejemplo, una arista une el 0 con el 3 porque el bit 0 de 3 no es nulo.

En 1964, el matemático germano-británico Richard Rado utilizó el predicado BIT para construir el grafo infinito de Rado. La construcción de Rado es simplemente la simetrización de la construcción de Ackermann de 1937 de los conjuntos finitos hereditariamente a partir del predicado BIT: dos vértices numerados y son adyacentes en el grafo de Rado cuando o no es nulo.

El grafo resultante tiene muchas propiedades importantes: contiene todo grafo finito no dirigido como subgrafo inducido, y todo isomorfismo entre subgrafos inducidos finitos puede extenderse a una simetría del grafo completo.

Notas

  1. ↑ Sobre la asimetría de la relación de pertenencia a conjuntos que codifica el predicado BIT, véase Cameron (2001).
  2. ↑ Arndt (2011). Arndt implementa el predicado BIT mediante S&(1<<i) en lugar de (S>>i)&1, pero el resultado es cero o distinto de cero en ambas implementaciones por igual.

Referencias

  1. 1 2 3 Ackermann, Wilhelm (1937). «Die Widerspruchsfreiheit der allgemeinen Mengenlehre» [La consistencia de la teoría general de conjuntos]. Mathematische Annalen (en alemán) 114: 305-315. doi:10.1007/bf01594179. Consultado el 30 de octubre de 2026.
  2. ↑ Immerman, Neil (1989). «Expressibility and parallel complexity» [Expresabilidad y complejidad paralela]. SIAM Journal on Computing (en inglés) 18 (3): 625-638. MR 996841. doi:10.1137/0218043.
  3. 1 2 Lindell, Steven (1992). A purely logical characterization of circuit uniformity [Una caracterización puramente lógica de la uniformidad de circuitos]. Proceedings of the Seventh Annual Structure in Complexity Theory Conference, Boston, Massachusetts, USA, June 22-25, 1992 (en inglés). IEEE Computer Society. pp. 185-192. doi:10.1109/SCT.1992.215393. Archivado desde el original el 30 de agosto de 2017. Consultado el 30 de octubre de 2026.
  4. 1 2 3 4 Cameron, Peter J. (2001). The random graph revisited [El grafo aleatorio revisitado]. European Congress of Mathematics, Vol. I (Barcelona, 2000). Progr. Math. (en inglés) 201. Basilea: Birkhäuser. pp. 267-274. MR 1905324. doi:10.1007/978-3-0348-8268-2_15.
  5. 1 2 Arndt, Jörg (2011). «1.9.2: Testing whether an element is in a given set». Matters Computational: Ideas, Algorithms, Source Code [Cuestiones computacionales: ideas, algoritmos, código fuente] (en inglés). Springer. p. 24.
  6. ↑ «EnumSet (Java Platform SE 8)» [EnumSet (Plataforma Java SE 8)] (en inglés). Oracle. Consultado el 30 de octubre de 2026.
  7. ↑ Tarau, Paul (2010). Autexier, Serge; Calmet, Jacques; Delahaye, David; Ion, Patrick D. F.; Rideau, Laurence; Rioboo, Renaud; Sexton, Alan P., eds. A unified formal description of arithmetic and set theoretical data types [Una descripción formal unificada de los tipos de datos aritméticos y conjuntistas]. Intelligent Computer Mathematics, 10th International Conference, AISC 2010, 17th Symposium, Calculemus 2010, and 9th International Conference, MKM 2010, Paris, France, July 5–10, 2010, Proceedings. Lecture Notes in Computer Science (en inglés) 6167. Springer. pp. 247-261. arXiv:1006.5768. doi:10.1007/978-3-642-14128-7_21.
  8. 1 2 Chor, Benny; Kushilevitz, Eyal; Goldreich, Oded; Sudan, Madhu (1998). «Private information retrieval» [Recuperación privada de información]. Journal of the ACM (en inglés) 45 (6): 965-981. doi:10.1145/293347.293350.
  9. ↑ Perrin, Dominique; Pin, Jean-Éric (1986). «First-order logic and star-free sets» [Lógica de primer orden y conjuntos sin estrella]. Journal of Computer and System Sciences (en inglés) 32 (3): 393-406. MR 858236. doi:10.1016/0022-0000(86)90037-1.
  10. 1 2 Mix Barrington, David A.; Immerman, Neil; Straubing, Howard (1990). «On uniformity within NC1» [Sobre la uniformidad dentro de NC1]. Journal of Computer and System Sciences (en inglés) 41 (3): 274-306. MR 1079468. doi:10.1016/0022-0000(90)90022-D.
  11. 1 2 Schweikardt, Nicole; Schwentick, Thomas (2011). «A note on the expressive power of linear orders» [Una nota sobre el poder expresivo de los órdenes lineales]. Logical Methods in Computer Science (en inglés) 7 (4): 1-13. arXiv:1111.5901. doi:10.2168/LMCS-7(4:7)2011.