{"id":988,"date":"2021-03-08T19:34:13","date_gmt":"2021-03-08T18:34:13","guid":{"rendered":"https:\/\/intsight.com\/?p=988"},"modified":"2023-05-30T12:32:44","modified_gmt":"2023-05-30T10:32:44","slug":"cuatro-gatos","status":"publish","type":"post","link":"https:\/\/intsight.com\/index.php\/2021\/03\/08\/cuatro-gatos\/","title":{"rendered":"Cuatro gatos"},"content":{"rendered":"<p><span style=\"font-variant:small-caps; font-size: 105%;\">Vamos a probar<\/span> fortuna ahora con un circuito mucho m\u00e1s interesante, que a la larga utilizaremos con cierta frecuencia. Este es el circuito:<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/intsight.com\/wp-content\/uploads\/2021\/03\/circuit02.png?resize=286%2C188&#038;ssl=1\" alt=\"\" width=\"286\" height=\"188\" class=\"aligncenter size-full wp-image-1000\" \/>Las compuertas $H$, naturalmente, corresponden a transformadas de Hadamard aplicadas a qubits individuales.<\/p>\n<h4>SuperHadamard<\/h4>\n<p>A modo de recordatorio, esta es la definici\u00f3n de la matriz de Hadamard:<\/p>\n<p>$$H = \\frac{1}{\\sqrt2} \\pmatrix{<br \/>\n1&amp;1\\cr 1&amp;-1<br \/>\n}$$El coeficiente $\\frac{1}{\\sqrt2}$ se incluye para que el determinante de la matriz sea la unidad.<\/p>\n<p>Cuando la transformada de Hadamard se aplica a un qubit que est\u00e1 en el estado inicial $\\vert0\\rangle$, lo lleva al estado $\\vert+\\rangle$ de la base de Hadamard, que se expresa en la base computacional como $\\frac{1}{\\sqrt2}(\\vert0\\rangle + \\vert1\\rangle)$. Este es un estado superpuesto, un gato de Schr\u00f6dinger, que cuando se mide, va a alternar entre ceros y unos con la misma probabilidad. Si nos ponemos solemnes, podr\u00edamos decir que acabamos de implementar un generador aleatorio de valores binarios.<\/p>\n<p>\u00bfQu\u00e9 pasa si tengo dos qubits y le aplico Hadamard a cada uno de ellos? Ya sabemos que para tener una respuesta exacta tenemos que multiplicar tensorialmente dos matrices de Hadamard. Este es el c\u00e1lculo:<\/p>\n<p>$$\\eqalign{<br \/>\nH \\otimes H &amp;= \\frac{1}{2} \\pmatrix{1&amp;1\\cr 1&amp;-1} \\otimes \\pmatrix{1&amp;1\\cr 1&amp;-1}\\cr<br \/>\n&amp;= \\frac{1}{2}\\pmatrix{1&amp;1&amp;1&amp;1\\cr 1&amp;-1&amp;1&amp;-1\\cr 1&amp;1&amp;-1&amp;-1\\cr 1&amp;-1&amp;-1&amp;1 }<br \/>\n}$$Ahora queremos saber qu\u00e9 pasa si aplicamos esta matriz al estado inicial del circuito, $\\vert00\\rangle$:<\/p>\n<p>$$(H\\otimes H)\\vert00\\rangle = \\frac{1}{2}\\pmatrix{1&amp;1&amp;1&amp;1\\cr 1&amp;-1&amp;1&amp;-1\\cr 1&amp;1&amp;-1&amp;-1\\cr 1&amp;-1&amp;-1&amp;1 } \\pmatrix{1\\cr0\\cr0\\cr0} = \\frac{1}{2} \\pmatrix{1\\cr1\\cr1\\cr1}<br \/>\n$$Vamos a entender mejor el resultado si lo representamos en notaci\u00f3n de Dirac:<br \/>\n$$\\frac{1}{2}\\vert0\\rangle + \\frac{1}{2}\\vert1\\rangle + \\frac{1}{2}\\vert2\\rangle + \\frac{1}{2}\\vert3\\rangle<br \/>\n$$Esta es una superposici\u00f3n uniforme de los cuatro vectores de la base de dos qubits. Es decir: un gato de Schr\u00f6dinger simult\u00e1neamente en cuatro estados. Tambi\u00e9n podemos interpretarlo como una superposici\u00f3n uniforme de todos los n\u00fameros enteros del cero al tres.<\/p>\n<p>Si aplicamos una medici\u00f3n a este estado, el resultado puede ser cualquiera de los n\u00fameros del cero al tres, con la misma probabilidad para cada uno de ellos (un cuarto). De vuelta a la solemnidad: hemos programado un generador aleatorio que escupe n\u00fameros del $0$ al $3$.<\/p>\n<h4>Los goces de la linealidad<\/h4>\n<p>Imaginemos que hemos dise\u00f1ado un circuito multiqubits, que recibe un n\u00famero entero de entrada y que hace alg\u00fan c\u00e1lculo m\u00e1gico y genera un valor entero muy interesante por el otro extremo. No voy a complicar la fiesta ahora recordando que ese circuito debe implementar una transformaci\u00f3n unitaria. Si lo tuvi\u00e9semos en cuenta, tendr\u00edamos que introducir qubits adicionales para mantener la reversibilidad del circuito. Pero vamos a olvidarnos ahora de ese problema, y aceptemos que tenemos un algoritmo m\u00e1gico que transforma un n\u00famero en otro n\u00famero m\u00e1s interesante.<\/p>\n<p>Supongamos ahora que, en vez de pasarle un n\u00famero al algoritmo, le pasamos de golpe una superposici\u00f3n uniforme de todos los n\u00fameros representables en el n\u00famero de qubits de los que disponemos. \u00bfQu\u00e9 calcular\u00e1 el algoritmo? Como el \u00abalgoritmo\u00bb es una matriz, es decir, una transformaci\u00f3n lineal, lo que obtendremos es una superposici\u00f3n uniforme de todos los resultados. Es como si hubi\u00e9semos aplicado el algoritmo en paralelo a todos los n\u00fameros enteros que podemos representar en nuestro ordenador:<\/p>\n<p>$$A\\times \\sum_i { \\alpha_i \\hat{e}_i } = \\sum_i { \\alpha_i (A\\times \\hat{e}_i) }<br \/>\n$$Esta propiedad se conoce como <em>paralelismo cu\u00e1ntico<\/em>, y no es tan \u00fatil como parece a primera vista. No lo es porque, cuando midamos, colapsaremos el estado en un \u00fanico vector propio, y perderemos toda esa informaci\u00f3n. De todos modos, pronto veremos c\u00f3mo sacar partido de esta situaci\u00f3n.<\/p>\n<h4 id=\"ninja-trick\">Algebra lineal, nivel Dios<\/h4>\n<p>Termino esta entrada con una nota t\u00e9cnica sobre \u00e1lgebra lineal, que nos va a ser muy \u00fatil para obtener el grado de ninja. A todos nos han contado, en un momento u otro de nuestras vidas, que el mundo est\u00e1 lleno de vectores que pastan por los prados y de matrices cuya obsesi\u00f3n en la vida es transformar cada vector que se le ponga a tiro:<\/p>\n<p>$$Ax$$Vamos a plantearnos esta relaci\u00f3n desde otro punto de vista. \u00bfY si realmente es el vector quien est\u00e1 actuando sobre la matriz para generar otro vector? Podemos hacerlo, siempre que consideremos que una matriz es una colecci\u00f3n de columnas, en vez de una colecci\u00f3n de filas, que es la forma m\u00e1s habitual de verlas. Observe c\u00f3mo un vector parasita a una matriz y genera un vector combinando linealmente las columnas de la misma:<\/p>\n<p>$$\\pmatrix{a_1&amp;b_1&amp;c_1\\cr a_2&amp;b_2&amp;c_2\\cr a_3&amp;b_3&amp;c_3} \\pmatrix{x_1\\cr x_2\\cr x_3} = x_1\\pmatrix{a_1\\cr a_2\\cr a_3} + x_2\\pmatrix{b_1\\cr b_2\\cr b_3} + x_3\\pmatrix{c_1\\cr c_2\\cr c_3}<br \/>\n$$Esta intuici\u00f3n nos sirve, si estamos implementando una librer\u00eda de matrices con aceleraci\u00f3n por hardware, para representar las matrices como vectores de columnas. Lo he probado en C++, usando funciones intr\u00ednsecas y, efectivamente, es m\u00e1s eficiente implementar la multiplicaci\u00f3n de matrices por vectores usando SIMD como una combinaci\u00f3n lineal de las columnas de la matriz. De hecho, el convenio de FORTRAN siempre ha sido almacenar las matrices por columnas, no por filas.<\/p>\n<p>Pero no es esto lo que quiero mostrarle exactamente. Imaginemos que el vector $x$ pertenece a la base. En ese caso, uno de sus componentes ser\u00e1 un $1$, y el resto, $0$. Veamos c\u00f3mo transformar\u00eda nuestra matriz de Hadamard de $4\\times4$ el estado $\\vert10\\rangle$:<\/p>\n<p>$$(H\\otimes H)\\vert10\\rangle = \\frac{1}{2}\\pmatrix{1&amp;1&amp;1&amp;1\\cr 1&amp;-1&amp;1&amp;-1\\cr 1&amp;1&amp;-1&amp;-1\\cr 1&amp;-1&amp;-1&amp;1 } \\pmatrix{0\\cr0\\cr1\\cr0} = \\frac{1}{2} \\pmatrix{1\\cr1\\cr-1\\cr-1}<br \/>\n$$Si observamos bien, vemos que lo que ha hecho el vector es seleccionar directamente la tercera columna de la matriz. \u00bfPor qu\u00e9? Pues porque $\\vert10\\rangle$ es el tercer vector de la base: dos ceros, un uno y otro cero. Una combinaci\u00f3n lineal de las columnas, en este caso, va directamente a por la tercera columna.<\/p>\n<p>Esto tiene una segunda consecuencia: ya hemos visto que en un ordenador cu\u00e1ntico, el vector de estado siempre se inicializa con ceros: $\\vert000\\cdots0\\rangle$. Este es el primer vector de la base computacional: un $1$ en el primer componente, seguido de un mont\u00f3n de ceros. \u00bfQu\u00e9 le va a hacer este astuto vector a una inocente matriz? \u00a1Pues seleccionar la primera columna!<\/p>\n<p>Esto es un truco muy \u00fatil. Si tenemos una matriz de $2^N\\times2^N$ que representa a todo un circuito, en realidad s\u00f3lo necesitamos las $2^N$ celdas de la primera columna, porque sabemos a ciencia cierta c\u00f3mo funciona la inicializaci\u00f3n del ordenador cu\u00e1ntico.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vamos a probar fortuna ahora con un circuito mucho m\u00e1s interesante, que a la larga utilizaremos con cierta frecuencia. Este es el circuito: Las compuertas $H$, naturalmente, corresponden a transformadas de Hadamard aplicadas a qubits individuales. SuperHadamard A modo de recordatorio, esta es la definici\u00f3n de la matriz de Hadamard: $$H = \\frac{1}{\\sqrt2} \\pmatrix{ 1&amp;1\\cr [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":989,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[33],"tags":[44,54,34,50,46],"class_list":["post-988","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-quantum","tag-hadamard","tag-parallelism","tag-quantum","tag-superposition","tag-tensor"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/intsight.com\/wp-content\/uploads\/2021\/03\/erwincat.png?fit=300%2C300&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/posts\/988","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/comments?post=988"}],"version-history":[{"count":43,"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/posts\/988\/revisions"}],"predecessor-version":[{"id":1184,"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/posts\/988\/revisions\/1184"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/media\/989"}],"wp:attachment":[{"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/media?parent=988"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/categories?post=988"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/intsight.com\/index.php\/wp-json\/wp\/v2\/tags?post=988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}