\documentclass[11pt,leqno]{article}
\usepackage{amssymb, amsmath} 
\usepackage{latexsym} 
%\usepackage{graphics} 
\usepackage{graphicx} 
\usepackage[hyphens]{url}
%\def\UrlBreaks{\do\/\do-}
\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks% save the current one
  \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j%
  \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t%
  \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D%
  \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N%
  \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
  \do\Y\do\Z\do\*\do\-\do\~\do\'\do\"\do\-}%

\usepackage{color}
\usepackage{hyperref} 

\usepackage[braket,qm]{qcircuit}


%\usepackage[notcite,notref,color]{showkeys}


%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% 	SPANISH
%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[spanish]{babel}
\usepackage[latin1]{inputenc}
%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% 	FORMAT
%%%%%%%%%%%%%%%%%%%%%%%%%%
%\setlength{\textheight}{23.0cm}
\setlength{\textwidth}{15.75cm}
\setlength{\oddsidemargin}{0.5cm}
\setlength{\evensidemargin}{0.5cm}
%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% 	COUNTERS
%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcounter{ejeno}
\setcounter{ejeno}{1}


%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% 	MACROS
%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\R}{{\mathbb R}} 
\newcommand{\C}{{\mathbb C}} 
\newcommand{\N}{{\mathbb N}} 
\newcommand{\Z}{{\mathbb Z}} 
\newcommand{\Q}{{\mathbb Q}} 

\newcommand{\ccero}{|0\rangle} 
\newcommand{\uuno}{|1\rangle} 


\newcommand{\ejer}{\ \par\vspace{-7pt}{\bf\number\value{ejeno})\ }\addtocounter{ejeno}{1}}



\begin{document}
\pagestyle{myheadings}
\markboth{}{\rm\textsf{\jobname}\qquad\hfill}

{\sl Antes de comenzar, hay una cuestión técnica importante. Necesitas tener en \LaTeX{} un paquete para representar circuitos cuánticos. Hasta donde yo sé, hay dos principales y me he decidido por \texttt{qcircuit} que es el más simple (y, al parecer, menos poderoso) por la sencilla razón de que es el único que me funcionaba. Entonces en la cabecera de este documento verás:
\begin{verbatim}
 \usepackage[braket,qm]{qcircuit}
\end{verbatim}
En realidad las opciones \verb![braket,qm]! no son estrictamente necesarias, pero te las recomiendo porque permiten escribir, por ejemplo $\ket{\Psi}$ con \verb!\ket{\Psi}! o 
$\ip{\Psi}{\Phi}$ con \verb!\ip{\Psi}{\Phi}!, que es más simple que lo que veníamos haciendo hasta ahora (al menos yo). Si quieres copiar código de la fuente de esta hoja, debes tener instalado \texttt{qcircuit} en tu distribución. En \cite{EaFl} hay documentación breve y clara. La filosofía subyacente es que, con este paquete, un circuito se escribe en \LaTeX{} como una especie de matriz dada por sus componentes.}

\


Una vez que has adquirido los rudimentos teóricos necesarios en la hoja anterior y has practicado con el concepto de \emph{qubit}, en esta hoja vamos a entrar por fin en la computación cuántica definiendo las operaciones que un ordenador cuántico puede llevar a cabo.
\medskip


Recordemos que un registro de $n$ qubits, es un elemento de $\C^{2^n}\cong \C^2\otimes\overset{\text{$n$ veces}}{\cdots\cdots}\otimes \C^2$, el espacio de Hilbert subyacente, y se representa como 
\[
 |\Psi\rangle
 =
 \sum_{b\in\mathcal{B}_n}
 a_b|b\rangle 
 \qquad\text{con}\quad
 \sum_{b\in\mathcal{B}_n}|a_{b}|^2=1
\]
donde $\mathcal{B}_n$ son las cadenas de ceros y unos de longitud $n$. 
Abusando de la notación, cuando está claro cuál es $n$, a veces se identifica cada cadena con el entero en $[0,2^n)$ que expresa en binario. Por ejemplo, si $n=3$, 
$\ket{0}=\ket{000}$,
$\ket{3}=\ket{011}$
y
$\ket{4}=\ket{100}$.

Según el postulado~2, la evolución de un sistema cuántico viene dada por un operador unitario y según el postulado~3, el resultado de una medición es una proyección ortogonal que colapsa el estado con cierta probabilidad. En nuestro contexto de dimensión finita, se traduce en que una \emph{computación cuántica} es una serie de aplicaciones de matrices unitarias y proyecciones sobre elementos de $\mathcal{B}_n$. También se usa el término \emph{circuito cuántico} en vez de computación cuántica, sobre todo para referirse a su representación mediante un esquema. 

Recuerda de la asignatura de Álgebra Lineal que las aplicaciones que conservan la norma
en $\C^N$ son necesariamente lineales y sus matrices son exactamente las matrices unitarias.
En nuestro caso estas matrices tienen dimensión  $\dim \C^{2^n}=2^n$. Aunque no hay una definición precisa, cuando son sencillas, o bien porque $n$ es pequeño o porque tienen una estructura especial, se llaman \emph{puertas cuánticas} a las aplicaciones que corresponden a las matrices debido a que guardan cierta analogía con las puertas lógicas en la teoría de la arquitectura de los ordenadores convencionales. Nota que $2^n$ crece exponencialmente, por eso en computación cuántica no se escriben demasiadas matrices completas, más bien se indica cómo construirlas a partir de otras más sencillas. 

El caso más simple es $n=1$, el de un solo qubit, con matrices de dimensión~$2^1=2$.
Por ejemplo, se llama \emph{matriz de Hadamard} a la que tiene como matriz en la base $\big\{\ket{0},\ket{1}\big\}$
\[
 H 
 =
 \frac{1}{\sqrt{2}}
 \begin{pmatrix}
  1&1 \\ 1&-1
 \end{pmatrix}.
\]

Este primer ejercicio es solo para que practiques con la definición. Tú verás si lo reflejas en tu trabajo. 

\ejer
Verifica que $H$ es una matriz unitaria y aplícala a 
$\ket{\Psi}=\frac{5+i}{6}\ket{0}+\frac{1-3i}{6}\ket{1}$ comprobando que realmente preserva su norma. 
\medskip


Las puertas cuánticas que actúan sobre un solo qubit se representan mediante un rectángulo que encierra el nombre de la matriz unitaria con una línea a la derecha y otra a la izquierda que representan los ``cables'' de entrada y de salida. A las matrices de Pauli en computación cuántica se les cambia el nombre a $X$, $Y$ y $Z$. 
Así,  las representaciones pictóricas de las puertas cuánticas asociadas a ellas y a $H$, esta última llamada \emph{puerta de Hadamard}, serían:
\[
 \Qcircuit @C=1em @R=.7em {
 & \gate{X} & \qw
 }
 \qquad
 \Qcircuit @C=1em @R=.7em {
 & \gate{Y} & \qw
 }
 \qquad
 \Qcircuit @C=1em @R=.7em {
 & \gate{Z} & \qw
 }
 \qquad\text{y}\qquad
 \Qcircuit @C=1em @R=.7em {
 & \gate{H} & \qw
 }
\]
La primera, la correspondiente a la primera matriz de Pauli $\sigma_1$, también se representa con el símbolo
 \raisebox{2\lineskip}{\Qcircuit @C=1em @R=.7em {
 & \targ & \qw
 }}
y a veces se dice que es la puerta NOT. 

\ejer
Estudia la acción de $\sigma_1$ sobre los elementos de la base y explica de dónde viene  el nombre NOT y por qué a veces se representa con 
\[
 \Qcircuit @C=1em @R=.7em {
 & \gate{\sqrt{\neg}} & \qw
 }
 \quad\text{a la puerta cuántica con matriz}\quad
 \frac 12 
 \begin{pmatrix}
  1+i& 1-i
  \\
  1-i& 1+i
 \end{pmatrix}.
\]
Comprueba que esta matriz es realmente unitaria. 
\medskip


La operación más básica con dos bit es la puerta CNOT (que abrevia \emph{controlled} NOT). Su representación pictórica habitual es la siguiente:
\[
 \Qcircuit @C=1em @R=.7em {
 & \ctrl{1} & \qw
 \\
 &\targ &\qw
 }
\]
Su efecto sobre los elementos de la base usual $\big\{\ket{00},\ket{01},\ket{10},\ket{11}\big\}$ es que si el primer qubit es $0$, entonces se comporta como la identidad y si es $1$, entonces preserva el primer qubit y aplica NOT al segundo. 


\ejer
Halla razonadamente la matriz unitaria $4\times 4$ que corresponde a la puerta CNOT en la base indicada. ¿Ves claro que es unitaria?
\medskip

Por supuesto, cuando la puerta CNOT  se aplica a elementos que no son de la base, se procede por linealidad. 
Por ejemplo, aplicaría 
$\frac 35\ket{10}+\frac 45\ket{11}$
en
$\frac 35\ket{11}+\frac 45\ket{10}$
y 
$\frac 35\ket{01}+\frac 45\ket{11}$
en
$\frac 35\ket{01}+\frac 45\ket{10}$, lo que podríamos representar como:
\[
 \Qcircuit @C=0.90em @R=.5em {
 \lstick{\ket{1}}& \ctrl{2} & \rstick{\ket{1}}\qw
 &&
 \lstick{\frac 35\ket{0}+\frac 45\ket{1}}& \ctrl{2} & \qw &
 \\
 &&&&&&&\rstick{\frac 35\ket{01}+\frac 45\ket{10}}\gategroup{1}{7}{3}{7}{16pt}{\}}&&
 \\
 \lstick{\frac 35\ket{0}+\frac 45\ket{1}}&\targ & \rstick{\frac 35\ket{1}+\frac 45\ket{0}}\qw
 &\push{\hspace{0.3\textwidth}}&
 \lstick{\ket{1}}&\targ & \qw
}
\]

En el siguiente ejercicio te pido que muestres que la puerta CNOT es ``nueva'', no puede construirse a partir de operaciones sobre cada qubit\footnote{Esto tiene que ver con un tema llamado \emph{universalidad}. En pocas palabras la pregunta es qué puertas cuánticas debemos diseñar para conseguir todas las matrices unitarias. Un análogo matemático sería, por ejemplo, que todas las matrices ortogonales se pueden obtener como productos de giros por los ejes y simetrías por el plano $z=0$. Si tienes curiosidad, mira \cite[\S4.6]{NaOh}, \cite[\S4.5.2]{NiCh} y \cite{barenco}.}. 

\ejer
Demuestra $\text{CNOT}\ne U\otimes V$ con $U$ y $V$ operadores unitarios actuando sobre un qubit. 


\ejer
Muestra que para $b\in\mathcal{B}_2$ se cumple lo que se afirma en el siguiente circuito:
\[
 \Qcircuit @C=1em @R=.4em {
 & \ctrl{2}  &\gate{H}&\ctrl{2}&\qw
 \\
 \lstick{\ket{b}}&&&&\rstick{\ket{\Phi_b}}
 \\
 &\targ &\qw&\targ&\qw
% \inputgroup{1}{2}{1em}{\ket{b}}
 }
\]
donde $\ket{\Phi_b}$ son los estados de Bell salvo por una constante multiplicativa global en $\Phi_2$ y  hacemos la identificación de $b$ con su valor en binario. 
\medskip


Generalizando lo visto para $n=1$ y para la puerta CNOT, cuando una matriz unitaria actúa en $\mathcal{B}_n$ (por tanto tiene dimensión $2^n$), se representa mediante una caja con~$n$ cables de entrada y de salida. Además, un punto relleno en un cable unido a la caja de una matriz significa que si el qubit que pasa por ese cable es $0$, el bloque actúa como la identidad y si es~$1$, conserva ese $1$ y al registro correspondiente a los cables que pasan por la caja le aplica la matriz. Se dice que el primer qubit \emph{controla} la puerta cuántica asociada a la matriz.  Para~$U$ unitaria de dimensión $8=2^3$, la puerta correspondiente y dicha puerta controlada por un qubit situado en la primera posición, se representarían mediante:
\[
 \begin{array}{c}
	\Qcircuit @C=1em @R=1pt {
	\\
	&\multigate{2}{U} &\qw
	\\
	&\ghost{U} &\qw
	\\
	&\ghost{U} &\qw
	}
 \end{array}
 \qquad\text{y}\qquad
 \begin{array}{c}
	\Qcircuit @C=1em @R=1pt {
	\push{\rule{0pt}{16pt}}&\ctrl{1} & \qw
	\\ 
	&\multigate{2}{U} &\qw
	\\
	&\ghost{U} &\qw
	\\
	&\ghost{U} &\qw
	}
 \end{array}
\]

\ejer
Explica por qué la puerta controlada corresponde al operador $P_{\ket{0}}\otimes I+P_{\ket{1}}\otimes U$
donde $P_{\ket{j}}$ es la proyección ortogonal sobre $\ket{j}$, $j=0,1$. 
\medskip

Para terminar con la representación esquemática básica de circuitos cuánticos, quedan las mediciones. Estas se indican con una especie de dial con una aguja, a veces con un cable de entrada y sin el de salida: $\Qcircuit @C=1em @R=1em {
	&\meter
	}$
y, 
si no se especifica otra cosa, se supone que lo que se mide es si el qubit que pasa por el cables es $\ket{0}$ o $\ket{1}$. Es decir, en el postulado~3 se están usando las proyecciones 
$\big\{P_{\ket{0}},P_{\ket{1}}\big\}$.
Cuando se dibuja un cable de salida, muchas veces se pone duplicado, $\Qcircuit @C=1em @R=1em {
	&\meter&\cw
	}$. 
Los cables duplicados se usan para indicar ``bits clásicos''. Una vez que el estado ha colapsado a $\ket{0}$ o a $\ket{1}$, ya está totalmente determinado y ulteriores mediciones del mismo tipo no están afectadas por probabilidades, darán el mismo resultado. Estos bits clásicos no dejan de ser estados especiales de qubits y por consiguiente se pueden seguir usando dentro de una computación cuántica, para controlar una puerta o para servir de entrada a ella. 

\ejer
Comprueba que 
\[
 \begin{array}{c}
  \Qcircuit @C=0.8em @R=0.6em {
  &\ctrl{1}&\meter
  \\
  &\gate{U}&\qw&\qw
  }
 \end{array}
 \qquad\text{y}\qquad
 \begin{array}{c}
  \Qcircuit @C=0.8em @R=0.6em {
  &\meter&\cctrl{1}
  \\
  &\qw&\gate{U}&\qw
  }
 \end{array}
\]
son equivalentes. Es decir, que actuando sobre un estado genérico $\sum_{b=0}^3 a_b\ket{b}$, con $n=2$, dan los mismos resultados con las mismas probabilidades en el cable de salida. 
Habitualmente se representa la segunda figura uniendo directamente con una línea vertical doble el medidor con la caja de la $U$. 







\bigskip

Por fin vamos a ver un algoritmo que implementado en un ordenador cuántico teóricamente resolvería un problema mucho más rápido de lo que sabemos hacer con un ordenador clásico, esto es lo que se llama \emph{supremacía cuántica} \cite{wiki_supremacy} sobre todo cuando se lleva a la práctica (lo cual no está claro en este caso). 
Seguro que cuando lo leas pensarás que es un problema muy raro. Considéralo una primera constatación de que la computación cuántica puede tener sentido ofreciendo resultados deterministas. Es solo un ejemplo académico, sin aplicaciones. 
Por cierto, a día de hoy no está nada claro que en un futuro cercano puedan construirse ordenadores cuánticos de propósito general, esto es, que hagan las mismas cosas que nuestros portátiles y más rápido
(mira el apartado ``Engineering'' de \cite{wiki_qc}, especialmente ``Skepticism'', y \cite{hoefler}). 

\medskip 

Supongamos que tenemos una función $f:\mathcal{B}_n\longrightarrow\{0,1\}$. Es decir, a cada cadena de lo que podríamos considerar $n$ bits clásicos, $f$ les asigna un cero o un uno. 
Imaginemos que por alguna ignota razón sabemos que $f$ cumple una de estas dos propiedades y queremos saber cuál de ellas es:
\begin{enumerate}\setlength{\itemsep}{0pt}
 \item 
 $\# f^{-1}(\{0\})=\# f^{-1}(\{1\})$, se dice que $f$ es \emph{equilibrada} ({\sl balanced}, en inglés).
 \item 
 $\#f(\mathcal{B}_n)=1$, esto es, la función es constante. 
\end{enumerate}

Por ejemplo, para $n=2$ la función $f(\ket{00})=f(\ket{11})=1$, $f(\ket{01})=f(\ket{10})=0$ es equilibrada y la función  $f(\ket{00})=1$, $f(\ket{01})=f(\ket{10})=f(\ket{11})=0$ no entra en el problema porque estamos dando por supuesto que conocemos de antemano que la función es de uno de los dos tipos indicados. 

Para resolver este problema mediante computación cuántica vamos a introducir el \emph{algoritmo de Deutsch-Jozsa} que responde a un esquema de la forma:
\[
 \begin{array}{c}
	\Qcircuit @C=1em @R=1em {
	\\
	\lstick{\ket{0}}&\gate{H}&\multigate{4}{U} &\gate{H}&\meter
	\\
	\lstick{\ket{0}}&\gate{H}&\ghost{U} &\gate{H}&\meter
	\\
	\cdots&\cdots & &\cdots&\cdots
	\\
	\lstick{\ket{0}}&\gate{H}&\ghost{U} &\gate{H}&\meter
	\\
	\lstick{\ket{1}}&\gate{H}&\ghost{U} &\qw&\qw
	}
 \end{array}
\]
En la entrada hay $n+1$ qubits. El efecto de la primera columna de puertas de Hadamard es
\[
 \ket{\psi_1}
 =
 (H\otimes \overset{\text{$n$ veces}}{\cdots\cdots}\otimes H)
 \ket{0\overset{\text{\,$n$ veces\,}}{\cdots\cdots}0}
 \otimes H\ket{1}
\]
que, con la notación obvia, escribimos $H^{\otimes n}\ket{0}^{\otimes n}\otimes H\ket{1}$.

El operador $H^{\otimes n}$ aparece en varios algoritmos (incluso recibe un nombre, \emph{transformada de Hadamard} o de \emph{Walsh-Hadamard}), esta es la razón principal por la que la puerta de Hadamard es importante. Su acción sobre $\ket{0}^{\otimes n}$ es especialmente sencilla. Es posible que el siguiente ejercicio te parezca una obviedad. Incluso si es así, intenta explicarlo. 

\ejer
Prueba 
$H^{\otimes n}\ket{0}^{\otimes n}
=
2^{-n/2}\sum_{b\in\mathcal{B}_n}\ket{b}$. Escribe con ello una fórmula para 
$\ket{\psi_1}$.
\medskip

Ahora vamos con la definición de $U$. Si $b\in\mathcal{B}_n$ y $c\in\{0,1\}$, la acción de $U$ sobre $\ket{bc}=\ket{b}\otimes\ket{c}$ viene dada por
\[
 U\ket{bc}=\ket{b}\otimes \ket{c\oplus f(b)}
\]
donde $\oplus$ representa la suma módulo $2$, por si te suena, es lo que en informática se llama la operación XOR. Esto es, 
$U\ket{b0}=\ket{b\, f(b)}$
y
$U\ket{b1}=\ket{b\, f^*(b)}$
con $f^*=1-f$. 

Una vez que el operador asociado a $U$ está definido sobre los elementos de la base, por linealidad su definición se extiende a cualquier estado. Si lo piensas un poco, $U$ permuta los elementos de la base y por tanto, esta extensión da lugar a un operador unitario. 

\ejer
Escribe para tu trabajo una explicación muy breve que extienda un poco más la justificación de que $U$ es una matriz unitaria dada en el párrafo anterior.
\medskip

La gracia de $U$ es que asigna al estado de entrada coeficientes que determinan si $f$ toma el valor $0$ o $1$ en los elementos de $\mathcal{B}_n$. 

\ejer
Sea $\ket{\psi_2}=U\ket{\psi_1}$. Muestra la fórmula
$\ket{\psi_2}
=
2^{-n/2}\sum_{b\in\mathcal{B}_n}(-1)^{f(b)}\ket{b}\otimes H\ket{1}$. 
\medskip

Toda la información sobre los valores de $f(b)$ para cualquier $b\in\mathcal{B}_n$ está contenida en~$\ket{\psi_2}$. Esto puede parecer espectacular porque usando $n+1$ qubits, de hecho bastan los $n$ primeros, tenemos un estado que si lo conociéramos, nos daría los $2^n$ valores posibles de la función en los elementos de la base. En el contexto clásico, con una entrada de $n$ bits fijados, solo determinamos un número entre $0$ y $2^n-1$ y por tanto solo podríamos codificar uno de los valores de la función. Sin embargo la ventaja cuántica es por ahora ilusoria porque no podemos recuperar valores específicos $f(b)$ ya que proyectar sobre $\ket{b}$, hacer una medición, nos llevaría a un resultado probabilista, según el tercer postulado. El truco está en aplicar una transformación que acumule toda la probabilidad de que sea constante o equilibrada en un solo coeficiente.

\ejer
Sea $\ket{\psi_3}$ el estado justo antes de las mediciones en el circuito. Es decir, 
$\ket{\psi_3}=\big( H^{\otimes n}\otimes I)\ket{\psi_2}$. Demuestra la fórmula:
\[
 \ket{\psi_3}
 =
 2^{-n}
 \sum_{b_1\in\mathcal{B}_n}
 \sum_{b_2\in\mathcal{B}_n}
 (-1)^{b_1\cdot b_2+f(b_1)}\ket{b_2}
 \otimes H\ket{1}
\]
donde $b_1\cdot b_2$ indica el producto escalar al identificar $b_1$ y $b_2$  con vectores de ceros y unos. 
\medskip 

En la línea de lo mencionado cuando introdujimos el símbolo, cada una de las mediciones corresponde a las proyecciones 
$\big\{P_{\ket{0}},P_{\ket{1}}\big\}$.
De este modo, el resultado de las $n$ mediciones dará cierto $b_0\in\mathcal{B}_n$ con una probabilidad asociada. Si esa probabilidad es~$1$ tendremos certeza absoluta pues $\mathcal{B}_n$ es finito. 

\ejer
Con la notación anterior, muestra que si $f$ es constante 
$\ket{b_0}=\ket{0}^{\otimes n}$ con probabilidad~1 y si $f$ es equilibrada, $\ket{b_0}=\ket{0}^{\otimes n}$ con probabilidad~0. 
\medskip

Así pues, como por hipótesis $f$ es constante o equilibrada, no hay otros casos, el resultado de la medición será $\ket{0}^{\otimes n}$ si y solo si $f$ es constante. 

\bigskip

Los valores ordenados de la función $f$ se pueden considerar como una lista de $2^n$ ceros y unos. Para estar totalmente seguros de que $f$ es constante hay que extraer $2^{n-1}+1$ valores iguales. Sin embargo, en la práctica cuando no sea constante terminaremos mucho antes. Todavía más, si escogemos al azar~$11$ valores de la $f$ y decretamos que es constante si y solo si son iguales, nos equivocaremos con probabilidad menor que $0.001$. 

De todas formas, ¿cómo es posible que necesitemos hasta $2^{n-1}+1$ ``operaciones'' en un ordenador convencional y solo~$4$ pasos por puertas cuánticas y mediciones? La respuesta es que~$U$ está tratando simultáneamente con los $2^n$ valores de $f$, como indica la fórmula para~$\ket{\psi_2}$, y, de hecho, depende de ellos. Es lo que se llama \emph{paralelismo cuántico} y sugiere un choque con la realidad: quizá ni sea fácil construir $U$ en la práctica ni tenga mucho sentido porque alberga toda la información sobre $f$ y si uno conoce ya bien $f$ no se plantea el problema original. En la literatura de computación cuántica se dice que $U$ es un \emph{oráculo}, una caja negra de implementación desconocida que cumple cierta tarea. Para que te hagas una idea hasta el año~2015 no se había superado $n=4$ en la construcción real de $U$ y me sorprendería que hubiera habido avances espectaculares en ese sentido. 


\



\begin{center}
\noindent\rule{0.95\textwidth}{1.1pt}
\end{center}


\paragraph{Tarea a entregar.}
Debes escribir un documento que combine las soluciones de los ejercicios anteriores. 
De nuevo, trata de ajustarte a 7 páginas. Mi sensación es que he puesto algunos ejercicios que son demasiado simples o que constituyen pasos muy pequeños. Tienes permiso para abreviar drásticamente (incluso suprimir) lo que te parezca insustancial. 
El documento debe dar lugar a un tercer capítulo de tu TFG  llamado {\sl Circuitos y algoritmos cuánticos} o alguna variante que te parezca adecuada.

Ya ves que he escrito muchas explicaciones generales con palabras y también alguna cosa de repaso (a la postre he escrito más sobre los enunciados de lo que espero sobre las soluciones). Decide lo que prefieras acerca de incluir o no comentarios en este sentido.

\begin{center}
\noindent\rule{0.95\textwidth}{1.1pt}
\end{center}

\begin{thebibliography}{1}

\bibitem{barenco}
A.~Barenco.
\newblock A universal two-bit gate for quantum computation.
\newblock {\em Proc. Roy. Soc. London Ser. A}, 449(1937):679--683, 1995.

\bibitem{EaFl}
B.~Eastin and S.~T. Flammia.
\newblock qcircuit 2.6.0 {T}utorial.
\newblock {\small\url{https://tug.org/docs/latex/qcircuit/qcircuit.pdf}}, 2018.

\bibitem{hoefler}
T.~Hoefler, T.~H\"{a}ner, and M.~Troyer.
\newblock Disentangling hype from practicality: {O}n realistically achieving
  quantum advantage.
\newblock {\em Commun. ACM}, 66(5):82--87, apr 2023.

\bibitem{NaOh}
M.~Nakahara and T.~Ohmi.
\newblock {\em Quantum computing}.
\newblock CRC Press, Boca Raton, FL, 2008.
\newblock From linear algebra to physical realizations.

\bibitem{NiCh}
M.~A. Nielsen and I.~L. Chuang.
\newblock {\em Quantum computation and quantum information}.
\newblock Cambridge University Press, Cambridge, 2000.

\bibitem{wiki_qc}
{Wikipedia contributors}.
\newblock Quantum computing --- {Wikipedia}{,} the free encyclopedia.
\newblock
  \small\url{https://en.wikipedia.org/w/index.php?title=Quantum_computing&oldid=1190931617},
  2023.
\newblock [Online; accessed 21-December-2023].

\bibitem{wiki_supremacy}
{Wikipedia contributors}.
\newblock Quantum supremacy --- {Wikipedia}{,} the free encyclopedia.
\newblock
  \small\url{https://en.wikipedia.org/w/index.php?title=Quantum_supremacy&oldid=1183187134},
  2023.
\newblock [Online; accessed 21-December-2023].

\end{thebibliography}


%\bibliography{bibtfg23CM}
%\bibliographystyle{plain}

\end{document}

