6 votos

Encontrar la relación entre la identidad y las funciones idénticas

Considere la función $f(x,a,b,c,d) = (((x \oplus a) + b) \oplus c) + d$ definido en $\mathbb{Z}_ {2^n}$ , donde $\oplus$ denota bitwise exclusive-OR (XOR) y $+$ denota la adición en módulo $2^n$ .

Empecemos con dos definiciones:

  1. $f(\cdot,a,b,c,d)$ es una función de identidad en $\mathbb{Z}_{2^n}$ si $\forall x \in \mathbb{Z}_{2^n}, f(x,a,b,c,d) = x$ .
  2. $f(\cdot,a',b',c',d')$ es idéntica a $f(\cdot,a,b,c,d)$ si $\forall x \in \mathbb{Z}_{2^n}, f(x,a',b',c',d') = f(x,a,b,c,d)$ .

En respuesta a esta pregunta se ha demostrado que el número de funciones de identidad es igual a $n \times 2^{n+2}$ .

Además, al buscar en la práctica varios $n$ parece que $n \times 2^{n+2}$ es también el número de funciones idénticas para un determinado $(a,b,c,d) \in (\mathbb{Z}_{2^n})^4$ .

De hecho, las funciones de identidad son el caso específico en el que $(a,b,c,d) \in (\mathbb{Z}_{2^n})^4$ es tal que $f(x,a,b,c,d) = x$ .

¿Hay alguna forma de demostrar que el número de funciones identidad es igual al número de funciones idénticas? En otros términos, ¿cómo podemos extender la demostración para todas las $(a,b,c,d) \in (\mathbb{Z}_{2^n})^4$ ?

1voto

user326210 Puntos 26

En realidad, creo que esta conjetura es falsa: el número de funciones "idénticas" parece depender de la tupla concreta. $\newcommand{\blank}{\underline{\hspace{0.7em}}}$

Por ejemplo, cuando $n=3$ parece que la tupla $\langle 0,0,0,0\rangle$ (que da la función de identidad) pertenece a un grupo de 96 = $4n\cdot 2^n$ tuplas que dan la misma función, consistente con el resultado que ya has probado.

Pero para la tupla $\langle 0, 1, 1, 0\rangle$ Parece que sólo hay 32 tuplas de este tipo. Si esto es cierto, sospecho que será porque la colección de tuplas que dan la identidad tienen más simetrías disponibles que las tuplas que dan $\langle 0, 1, 1, 0\rangle$ . Este es un contraejemplo que establece un resultado negativo, mostrando que no todos los cosets de tuplas equivalentes tienen el mismo tamaño $4n\cdot 2^n$ .

He aquí una explicación parcial. Fijar una longitud de cadena de bits determinada $n$ . Para evitar escribir demasiados paréntesis, supongamos que todos los operadores son asociativos a la izquierda, de modo que $a\boxplus b\boxplus c \boxplus d$ significa $((a\boxplus b)\boxplus c)\boxplus d$ .

El número $h \equiv 2^{n-1}$ tiene varias propiedades especiales en este entorno:

  1. La función $(\blank\oplus h)$ se comporta de forma idéntica a la traducción $(\blank + h)$ . Añadiendo $h$ equivale a xorizar por $h$ .
  2. Visto como un xor, voltea el bit más alto de cada número. Visto como una traslación (considere los números $0\ldots (2^n-1)$ dispuestos en círculo para la aritmética modular), gira cada número media vuelta.
  3. A causa de esta media vuelta, la adición/extracción con $h$ provoca números más altos que $h$ para llegar a ser menos que $h$ y viceversa.
  4. Y de hecho, de todas las funciones xor posibles $(\blank \oplus a)$ y todas las posibles funciones de traducción $(\blank + b)$ el único xor que equivale a alguna traducción es $(\blank\oplus h)$ y la única traducción que equivale a algún xor es $(\blank + h)$ .
  5. Añadir/xortar $h$ dos veces no hace nada: $\blank + h + h = \blank \oplus h \oplus h = \blank + h \oplus h = \blank \oplus h + h = \blank$ .

Supongamos ahora que tenemos una función

$$\blank \oplus a + b$$

Sabemos que operar por $h$ dos veces no hace nada, por lo que esta función es equivalente a otra con la misma forma pero con diferentes parámetros $a^\prime$ y $b^\prime$ :

$$ \begin{align*} \blank \oplus a + b &= \blank \oplus a \oplus h + h + b\\ &= \blank \oplus (a\oplus h) + (h+b)\\ &= \blank \oplus a^\prime + b^\prime \end{align*} $$

Tomemos un ejemplo más complejo:

$$\blank \oplus a + b \oplus c + d$$

Utilizando el mismo truco que antes, podemos encontrar otras tuplas $\langle a^\prime, b^\prime, c^\prime, d^\prime\rangle$ que dan lugar a una función equivalente: Podemos insertar un par de $h$ s entre $a$ y $b$ o entre $b$ y $c$ o entre $c$ y $d$ o cualquier combinación de estos, todos ellos producen números diferentes.

Porque podemos insertar un par de $h$ s en tres lugares diferentes, y cada combinación de inserciones produce una tupla diferente, sabemos que hay $2^3=8$ combinaciones.

Como consecuencia de este truco, sabemos que para cada tupla $\langle a, b, c, d\rangle$ Hay al menos ocho tuplas (incluida ella misma) que dan lugar a la misma función.

Además, debido a la propiedad (3), siempre podemos aplicar una combinación adecuada para encontrar una tupla representativa donde $a,c < h$ (por ejemplo).


En cuanto a la identidad, sabemos que $\blank \oplus 0 + 0 \oplus 0$ es una función de identidad. ¿Cuántas otras tuplas de este tipo dan también la función identidad?

  • Si consideramos las tuplas sin componente xor $(a=c=0)$ Hay $2^n$ tuplas $\langle 0, b, 0, -b\rangle$ equivalente a la identidad.
  • Si consideramos las tuplas sin componente de traducción $(b=d=0)$ Hay $2^n$ tuplas $\langle a, 0, \overline{a}, 0\rangle$ equivalente a la identidad.
  • Si aplicamos nuestro truco de la multiplicidad a las tuplas anteriores, multiplicamos el número de resultados aproximadamente por ocho, porque cada uno de los ejemplos anteriores es independiente de los demás.

No se trata de un recuento exhaustivo de las posibilidades (y de hecho, hemos contado $\langle 0,0,0,0\rangle$ más de una vez) pero deja clara una aparente ventaja de la función identidad. En particular, podemos hacer que sus componentes de traslación y xor independientemente cero lo que significa que podemos obtener muchos prototipos diferentes e independientes.

En cambio, otras tuplas como $\langle 0, 1, 1, 0\rangle$ no tienen tantos prototipos independientes, porque cada posición está más estrechamente acoplada a las demás; no hay forma de "eliminar" la interacción.


Las tuplas que encuentro en particular son:

FOR THE IDENTITY
(0, 0, 0, 0)
(0, 0, 4, 4)
(0, 1, 0, 7)
(0, 1, 4, 3)
(0, 2, 0, 6)
(0, 2, 4, 2)
(0, 3, 0, 5)
(0, 3, 4, 1)
(0, 4, 0, 4)
(0, 4, 4, 0)
(0, 5, 0, 3)
(0, 5, 4, 7)
(0, 6, 0, 2)
(0, 6, 4, 6)
(0, 7, 0, 1)
(0, 7, 4, 5)
(1, 0, 1, 0)
(1, 0, 5, 4)
(1, 2, 1, 6)
(1, 2, 5, 2)
(1, 4, 1, 4)
(1, 4, 5, 0)
(1, 6, 1, 2)
(1, 6, 5, 6)
(2, 0, 2, 0)
(2, 0, 6, 4)
(2, 2, 2, 2)
(2, 2, 6, 6)
(2, 4, 2, 4)
(2, 4, 6, 0)
(2, 6, 2, 6)
(2, 6, 6, 2)
(3, 0, 3, 0)
(3, 0, 7, 4)
(3, 1, 3, 1)
(3, 1, 7, 5)
(3, 2, 3, 2)
(3, 2, 7, 6)
(3, 3, 3, 3)
(3, 3, 7, 7)
(3, 4, 3, 4)
(3, 4, 7, 0)
(3, 5, 3, 5)
(3, 5, 7, 1)
(3, 6, 3, 6)
(3, 6, 7, 2)
(3, 7, 3, 7)
(3, 7, 7, 3)
(4, 0, 0, 4)
(4, 0, 4, 0)
(4, 1, 0, 3)
(4, 1, 4, 7)
(4, 2, 0, 2)
(4, 2, 4, 6)
(4, 3, 0, 1)
(4, 3, 4, 5)
(4, 4, 0, 0)
(4, 4, 4, 4)
(4, 5, 0, 7)
(4, 5, 4, 3)
(4, 6, 0, 6)
(4, 6, 4, 2)
(4, 7, 0, 5)
(4, 7, 4, 1)
(5, 0, 1, 4)
(5, 0, 5, 0)
(5, 2, 1, 2)
(5, 2, 5, 6)
(5, 4, 1, 0)
(5, 4, 5, 4)
(5, 6, 1, 6)
(5, 6, 5, 2)
(6, 0, 2, 4)
(6, 0, 6, 0)
(6, 2, 2, 6)
(6, 2, 6, 2)
(6, 4, 2, 0)
(6, 4, 6, 4)
(6, 6, 2, 2)
(6, 6, 6, 6)
(7, 0, 3, 4)
(7, 0, 7, 0)
(7, 1, 3, 5)
(7, 1, 7, 1)
(7, 2, 3, 6)
(7, 2, 7, 2)
(7, 3, 3, 7)
(7, 3, 7, 3)
(7, 4, 3, 0)
(7, 4, 7, 4)
(7, 5, 3, 1)
(7, 5, 7, 5)
(7, 6, 3, 2)
(7, 6, 7, 6)
(7, 7, 3, 3)
(7, 7, 7, 7)

------------------------
FOR TRANSLATE 1, XOR 1

(0, 1, 1, 0)
(0, 1, 5, 4)
(0, 3, 1, 6)
(0, 3, 5, 2)
(0, 5, 1, 4)
(0, 5, 5, 0)
(0, 7, 1, 2)
(0, 7, 5, 6)
(3, 1, 2, 2)
(3, 1, 6, 6)
(3, 3, 2, 4)
(3, 3, 6, 0)
(3, 5, 2, 6)
(3, 5, 6, 2)
(3, 7, 2, 0)
(3, 7, 6, 4)
(4, 1, 1, 4)
(4, 1, 5, 0)
(4, 3, 1, 2)
(4, 3, 5, 6)
(4, 5, 1, 0)
(4, 5, 5, 4)
(4, 7, 1, 6)
(4, 7, 5, 2)
(7, 1, 2, 6)
(7, 1, 6, 2)
(7, 3, 2, 0)
(7, 3, 6, 4)
(7, 5, 2, 2)
(7, 5, 6, 6)
(7, 7, 2, 4)
(7, 7, 6, 0)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X