# Problema de Simon

En álgebra abstracta y computación cuántica, el problema planteado por Daniel R. Simon (conocido como problema de Simon) es un caso particular del problema del subgrupo oculto (Hidden Subgroup Problem, HSP), el cual ha sido útil para el planteamiento de algoritmos cuánticos que son eficientes, a diferencia de sus homólogos clásicos, permitiendo resolver problemas teóricos propuestos en las últimas décadas cuyas soluciones son de vital importancia en el campo de la computación cuántica.
Para resolver el problema de Simon se han desarrollado algoritmos clásicos que utilizan fuerza bruta, de los cuales se sabe que su complejidad es exponencial. Para encontrar una solución eficiente se ha recurrido a algoritmos cuánticos, como el propuesto por el mismo Simon, cuya complejidad es polinomial, reduciendo así el tiempo de cómputo de forma significativa.
Se han desarrollado algoritmos cuánticos para otros casos particulares del problema del subgrupo oculto, pero solo son eficientes aquellos que trabajan sobre grupos abelianos (como el de Simon). Para los grupos no abelianos aún no se han encontrado algoritmos cuánticos eficientes, de hecho estos no llegan a tener mejor desempeño que las soluciones clásicas.

## Conceptos previos
### Relación de equivalencia

Una relación de equivalencia sobre un grupo $G$ es una relación $E\subseteq G\times G$ que cumple las propiedades:
* Reflexiva: $gEg$ para cada $g$ que pertenece a $G$.
* Simétrica: Si $gEt$ entonces $tEg$.
* Transitiva: Si $gEt$ y $tEu$ entonces $gEu$.
Los elementos $g,t$ y $u$ son elementos de $G$; note que cada elemento de $G$ está envuelto en un requerimiento 1,2 o 3.

### Congruencia entre conjuntos
#### Congruencia por izquierda

Sea $H$ un subgrupo de $G$, entonces dos elementos $g_{i}$ y $g_{j}$ de $G$ son congruentes módulo $H$ si hay un elemento $h_{k}$ para el cual $g_{i}=g_{j}h_{k}.$

#### Congruencia por derecha

Sea $H$ un subgrupo de $G$, entonces dos elementos $g_{i}$y $g_{j}$ de $G$ son congruentes módulo $H$ si hay un elemento $h_{k}$ para el cual $g_{i}=h_{k}g_{j}.$
Suponiendo que $H$ es un subgrupo de $G$, la congruencia módulo $H$ es una relación de equivalencia en $G$. La congruencia módulo $H$ particiona a $G$ en una colección de clases de equivalencia que son disyuntas 2 a 2. Cada clase está formada por elementos que son congruentes entre sí.

### Cosets

Sea $H$ un subgrupo de $G$, y sea $g\in G$. El coset por izquierda de $g$ respecto a $H$ es el conjunto $gH=\{gh_{1},gh_{2},...,gh_{k},...\}$ siendo $H=\{h_{1},h_{2},...,h_{k},...\}$. Así mismo se define el coset por derecha como el conjunto $Hg=\{h_{1}g,h_{2}g,...,h_{k}g,...\}$ siendo $H=\{h_{1},h_{2},...,h_{k},...\}$.
Note que $g_{i}\equiv$$g_{j}$(mod $H$), si y sólo si, sus respectivas clases de equivalencia o cosets son iguales, es decir, $g_{i}H=g_{j}H$. Para obtener distintos cosets, se usarán elementos $g_{i}$y $g_{j}$que sean incongruentes módulo $H$.

### Periodicidad de funciones que actúan sobre grupos
#### Definición

Una función f se dice periódica si, para alguna constante P diferente de cero, se tiene que:
    $f(x+P)=f(x)$
Para todos los valores de x en el dominio de f. Una constante P distinta de cero para la cual se cumpla la propiedad anterior se denomina período de la función. La menor constante positiva P con esta propiedad, se denomina período fundamental (también período primitivo, período básico o período primo). A menudo, el "período" de una función se utiliza para indicar su período fundamental. Una función con período P se repetirá en intervalos de longitud P, y estos intervalos a veces también se conocen como períodos de la función.

#### Importancia

Aunque en principio pueda no parecerlo, lo cierto es que las funciones periódicas se relacionan de manera directa con uno de los problemas más difíciles de resolver hasta el momento: la descomposición de un número entero en factores primos.
Aun cuando cualquier número entero tiene una descomposición única en un producto de números primos, encontrar dichos factores primos es un problema difícil. De hecho, la seguridad de las transacciones en línea se basa en el criptosistema de clave pública RSA, cuya fuerza reside en la dificultad de factorizar números grandes. En la práctica factorizar enteros con cientos de dígitos es prácticamente imposible, el número más grande factorizado hasta la fecha es RSA-768, un número de 232 cifras decimales, el cual fue factorizado en 2009. En la actualidad RSA usa números primos del orden de $10^{300}$ y $10^{600}$.
Desde la década de los 70’s es conocido por los matemáticos que factorizar se hace más fácil si se puede resolver otro problema difícil: encontrar el periodo de la función exponencial modular. El problema de Simon está estrechamente relacionado con este problema, ya que el algoritmo de Simon, un algoritmo cuántico probabilístico con una complejidad polinomial, resuelve el problema de la determinación del periodo de una función periódica $f:\{0,1\}^{n}\rightarrow \{0,1\}^{n}$ (el problema de la factorización se puede reducir a este último). En contraste, el algoritmo clásico tiene una complejidad exponencial. La implicación del uso de estas técnicas teóricas es la vulnerabilidad de la información protegida en la actualidad por métodos tipo RSA.

## Problema del subgrupo oculto
### Historia

El problema del subgrupo oculto surge en 1994, cuando Peter Shor Williston, profesor estadounidense de matemáticas aplicadas, basándose en el trabajo de David Elieser Deutsch, profesor israelí y pionero de la computación cuántica, y Daniel R. Simon, master en ciencias de la computación de la Universidad de Toronto, encontró un algoritmo cuántico que podía factorizar enteros exponencialmente más rápido que los métodos clásicos conocidos. Alexei Kitaev, un profesor de física ruso-estadounidense, concluyó que estos algoritmos encajan en un marco para encontrar generadores de subgrupos que son ocultados mediante una función.

### Definición

La definición formal del problema del subgrupo oculto (HSP) es:
Input: Sea $(G,f)$, donde $G$ es un grupo y $f$ una función. $f:G\rightarrow X$, entonces existe $H\subseteq G$ tal que $f$ es constante sobre los cosets de $H$.
Problema: Encontrar $H$.

### Eficiencia cuántica

Si $G$ es un grupo Abeliano finito, la determinación del problema del subgrupo oculto puede ser teóricamente resuelta mediante un algoritmo cuántico de manera eficiente, es decir con un orden de complejidad $O[poly{\bigl\log \mid G\mid {\bigr )}]$. Sin embargo, no se tiene conocimiento de una solución cuántica eficiente que se pueda implementar cuando se trata con grupos finitos no-Abelianos.

#### Ejemplo

Definiendo el tamaño de un circuito cuántico como el número mínimo de operaciones elementales que deben componerse para obtener el circuito, y definiendo un Qubit como un vector de módulo unidad en un espacio vectorial complejo bidimensional; suponga que se quiere determinar el orden de un grupo finito Abeliano dado un conjunto generador. Dado un grupo $G$ es posible representar cada elemento del grupo utilizando aproximadamente $\log \mid G\mid$ Qubits.
Para resolver de manera eficiente este problema mediante un algoritmo cuántico es necesario que el tamaño del circuito cuántico que va a computar el orden de $G$ sea de tamaño polinomial en $\log \mid G\mid$, dado que $G$ varía en toda la familia de grupos Abelianos finitos. Finalmente se requiere una “Clase uniforme de algoritmos”, la cual afirma que para un problema de tamaño $n$, existe una máquina de Turing que dado $n$, puede producir la descripción del circuito en un número de pasos igual a un polinomio en $n$. Esto permite asegurar que (en teoría) es posible construir una máquina explícita para resolver cada problema con un tiempo polinomial en el tamaño del problema.

## Definición del problema de Simon

Daniel R. Simon propuso en 1994 un problema en el que se demuestra el poder de la computación cuántica. Éste se presenta de la siguiente manera:
Input: $f:\{0,1\}^{n}\rightarrow \{0,1\}^{n}$, donde la función cumple alguna de las siguientes condiciones:
* $f$ es 1 a 1, es decir, la función es inyectiva.
* Existe una cadena $s$ no trivial tal que $\forall x,y\in \{0,1\}^{n},\,f(x)=f(y)\leftrightarrow y=x\oplus s$, donde el símbolo denota la operación binaria XOR (O exclusivo)
Problema: Determinar cuál de las condiciones prevalece para $f$ y en caso de ser la segunda, determinar cuál es la cadena $s$.

## Relación del problema del subgrupo oculto con el problema de Simon

La relación entre los problemas de Simon y del subgrupo oculto no es evidente, pero de hecho, es posible definirlo utilizando las herramientas que brinda la teoría de grupos. Esto puede resultar útil al momento de buscar similitudes entre este y otros problemas, que en principio no tienen relación aparente, así como similitudes en sus posibles soluciones.

### Buscando la estructura de grupo en el problema de Simon

Lo primero que se debe buscar para formar un grupo es un conjunto y una operación binaria sobre dicho conjunto. En el caso del problema de Simon, se trabaja sobre el conjunto de cadenas de bits de tamaño $n$, donde $n$ es un entero positivo. El problema de Simon también involucra la operación binaria XOR, definida de la siguiente manera:
Sean $a$ y $b$ bits
$a\oplus b=0$ si $a=b$
$a\oplus b=1$ si $a\neq b$
El problema de Simon se refiere al grupo $G=(\{0,1\}^{n},\oplus )$, que resulta ser abeliano.

### Aplicando el problema del subgrupo oculto al grupo de Simon

Sea $f:\{0,1\}^{n}\rightarrow A$ y sea $H$ subgrupo de $G$, se dice que $f$ es H-periódica si y sólo si se cumple:
$\forall x\forall h_{i}\forall h_{j}(h_{i},h_{j}\in xH\Rightarrow f(h_{i})=f(h_{j})=f(x))$
$\forall h\in xH\forall g\notin xH(f(h)\neq f(g))$
En otras palabras, la función $f$ es constante solo para elementos de un mismo coset.

### Problema de Simon en términos del problema del subgrupo oculto

El problema de Simon define una función $f:\{0,1\}^{n}\rightarrow \{0,1\}^{n}$ que resulta ser H-periódica para un subgrupo $H=\langle s\rangle$ de $G$ donde $s$ pertenece a $G$.
En $G$ la inversa de cualquier elemento perteneciente al grupo es ella misma, entonces el orden de $s$ es 2. Por lo tanto $H$ es un subgrupo de dos elementos; $s$, y la identidad.
$H=(\{e,s\},\oplus )$
Se puede entender la condición $\forall x\in G(f(x)=f(x\oplus s))$ planteada en el problema de Simon como la condición planteada en el problema del subgrupo oculto, formando el coset $xH$.
Según la definición dada para $H$, se sabe que $h$ puede ser $s$ o $e$.
En estos términos, el problema de Simon consiste en encontrar el elemento generador del subgrupo oculto $H$, o dicho en otras palabras, encontrar el periodo de la función $f$ que oculta dicho subgrupo.
A partir de las condiciones que presenta la función puede suponerse que no existe una relación entre ellas pero lo cierto es que independientemente del caso que aplique para la función a estudiar, la segunda condición es parcialmente verdadera y gracias a la estructura que el grupo $G=(\{0,1\}^{n},\oplus )$ presenta se puede establecer la siguiente observación:
Se sabe del grupo $G$ que su identidad es la cadena $e=0^{n}$ y por teoría de grupos es válido afirmar que para toda cadena $a$ que pertenezca al grupo, $a*e=e*a=a$. Entonces, si se aplica la segunda condición haciendo una excepción a la condición de que $s$ es diferente a la cadena trivial, se obtiene que $f(x)=f(y)\leftrightarrow y=x\oplus 0^{n}$, lo que es equivalente a decir que $f(x)=f(y)\leftrightarrow 0^{n}=x\oplus y$. Por definición de la operación XOR se sabe que al operar dos elementos se obtiene como respuesta 0 si los elementos son iguales, por lo que se puede que concluir que $x=y$, lo que implica que la función envía a un elemento en sí mismo si $s=0^{n}$ así que la función estudiada corresponde a la función identidad la cual es 1 a 1, por lo que las condiciones (1) y (2) sobre la función están relacionadas y según el valor de $s$, se obtiene (2) para una cadena no trivial o (1) en caso contrario.

## Soluciones al problema de Simon
### Solución clásica

Para solucionar el problema primero es necesario encontrar el valor adecuado de $s$ diferente al trivial, o en su defecto, $s=0^{n}$; por lo tanto, se deben revisar todos los valores que pueda tomar $s$. Como hay $2^{n}$ posibles elecciones de $s$, la complejidad sería de $O(2^{n})$. Luego se evalúa la función “q” veces:
Si la función es 2 a 1, entonces, como mucho, q tiene que ser la mitad de entradas para encontrar una repetición.
Si se tienen que evaluar más, entonces, la función es 1 a 1 y $s=0^{n}$.
En definitiva, el número de evaluaciones en el peor de los casos será ${\frac {2^{n}}{2}}+1$, es decir que la complejidad es de $O(2^{n-1}+1)$, la cual es mayor a la que se registraría en la solución cuántica al problema de Simon, la cual es polinomial.

### Solución cuántica

Simon propone en su escrito la siguiente rutina para resolver el problema con complejidad polinomial:
Se llevan a cabo $O(n)$ repeticiones de la Rutina Doble de Fourier:
* Realizar la transformación $F$ en una cadena de $n$ ceros, produciendo $2^{-n/2}\sum _{x}|x\rangle$.
* Calcular $f(x)$, concatenando la respuesta a $x$, esto produce $2^{-n/2}\sum _{x}|(x,f(x))\rangle$.
* Ejecutar $F$ sobre $x$, produciendo $2^{-n}\sum _{y}\sum _{x}(-1)^{x*y}|(y,f(x))\rangle$
Fin de la rutina doble de Fourier
Luego de estas $O(n)$ repeticiones, se obtienen suficientes valores linealmente independientes de $y$ que permiten determinar el valor de la cadena $s$ al resolver el sistema de ecuaciones lineales definido por los valores de $y$.
Por lo tanto, la complejidad de todo el algoritmo es $O(nT_{f}(n)+G(n))$, donde $T_{f}(n)$ es el tiempo requerido para calcular $f$ en inputs de tamaño $n$, y $G(n)$ es el tiempo requerido para resolver el sistema lineal de ecuaciones de $n$x$n$.