
"Creo que podo dicir con seguridade que ninguén entende a mecánica cuántica." - Richard Feynman
O tema da computación cuántica sempre fascinou aos escritores e xornalistas de tecnoloxía. O seu potencial computacional e complexidade déronlle un certo aura mística. Con demasiada frecuencia, os artigos e infografías describen en detalle as diversas perspectivas desta industria, sen tocar apenas a súa aplicación práctica: isto pode enganar ao lector menos atento.
Os artigos científicos populares omiten as descricións dos sistemas cuánticos e fan afirmacións como:
Un bit normal pode ser un 1 ou un 0, pero un qubit pode ser un 1 e un 0 ao mesmo tempo.
Se tes moita sorte (do que non estou seguro), dirásche que:
O qubit está nunha superposición entre "1" e "0".
Ningunha destas explicacións parece plausible, xa que estamos tentando formular un fenómeno de mecánica cuántica utilizando unha linguaxe desenvolvida nun mundo moi tradicional. Para explicar claramente os principios da computación cuántica, é necesario empregar outra linguaxe - a matemática.
Neste tutorial, cubrirei as ferramentas matemáticas necesarias para modelar e comprender os sistemas de computación cuántica, así como como ilustrar e aplicar a lóxica da computación cuántica. Ademais, vou poñer un exemplo de algoritmo cuántico e dicirche cal é a súa vantaxe sobre un ordenador tradicional.
Farei todo o posible para explicar todo isto cunha linguaxe clara, pero aínda así espero que os lectores deste artigo teñan unha comprensión básica da álxebra lineal e da lóxica dixital (a álxebra , sobre a lóxica dixital - ).
En primeiro lugar, repasemos os principios da lóxica dixital. Baséase no uso de circuítos eléctricos para realizar cálculos. Para facer a nosa descrición máis abstracta, simplifiquemos o estado do cable eléctrico a "1" ou "0", que corresponderá aos estados "on" ou "off". Ao organizar os transistores nunha determinada secuencia, crearemos os chamados elementos lóxicos que toman un ou máis valores de sinal de entrada e convertelos nun sinal de saída baseado en determinadas regras da lóxica booleana.

Portas lóxicas comúns e as súas táboas de estado
A partir das cadeas de tales elementos básicos, pódense crear elementos máis complexos e, baseándonos nas cadeas de elementos máis complexos, podemos en definitiva, cun gran grao de abstracción, esperar obter un análogo do procesador central.
Como mencionei anteriormente, necesitamos un xeito de representar matemáticamente a lóxica dixital. En primeiro lugar, imos introducir a lóxica tradicional matemática. Usando álxebra lineal, os bits clásicos cos valores "1" e "0" pódense representar como dous vectores columnas:

onde están os números da esquerda vector. Ao representar os nosos bits deste xeito, podemos modelar operacións lóxicas sobre os bits mediante transformacións vectoriais. Teña en conta: aínda que o uso de dous bits nas portas lóxicas pode realizar moitas operacións (AND, NOT, XOR, etc.), ao usar un bit só se poden realizar catro operacións: conversión de identidade, negación, cálculo da constante “0” e cálculo da constante “1”. Cunha conversión de identidade, o bit permanece inalterado, cunha negación, o valor do bit cambia ao contrario (de "0" a "1" ou de "1" a "0") e o cálculo da constante "1" ou "0" establece o bit en "1" ou "0" independentemente do seu valor anterior.

| Identidade | Transformación da identidade |
| Negación | Negación |
| constante-0 | Cálculo da constante "0" |
| constante-1 | Cálculo da constante "1" |
Baseándose na nosa nova representación proposta dun bit, é bastante sinxelo realizar operacións sobre o bit correspondente usando unha transformación vectorial:

Antes de avanzar, vexamos o concepto , o que simplemente implica que, para garantir a reversibilidade dunha operación ou elemento lóxico, é necesario determinar unha lista de valores de sinal de entrada en función dos sinais de saída e dos nomes das operacións utilizadas. Así, podemos concluír que a transformación e negación da identidade son reversibles, pero as operacións para calcular as constantes "1" e "0" non o son. Grazas a mecánica cuántica, os ordenadores cuánticos usan operacións exclusivamente reversibles, así que niso nos centraremos. A continuación, convertemos os elementos irreversibles en elementos reversibles para que poidan ser utilizados por unha computadora cuántica.
Con bits individuais poden representarse por moitos bits:

Agora que temos case todos os conceptos matemáticos necesarios, pasemos á nosa primeira porta de lóxica cuántica. Este é o operador , ou Controlled Not (NOT), que é de gran importancia na computación reversible e cuántica. O elemento CNOT aplícase a dous bits e devolve dous bits. O primeiro bit desígnase como o bit de "control" e o segundo como o bit de "control". Se o bit de control está configurado en "1", o bit de control cambia o seu valor; Se o bit de control está configurado en "0", o bit de control non se modifica.

Este operador pódese representar como o seguinte vector de transformación:

Para demostrar todo o que cubrimos ata agora, mostrarei como usar o elemento CNOT en varios bits:

Para resumir o que xa se dixo: no primeiro exemplo descompoñemos |10⟩ en partes do seu produto tensor e utilizamos a matriz CNOT para obter un novo estado correspondente do produto; entón factorímolo a |11⟩ segundo a táboa de valores CNOT dada anteriormente.
Entón, lembramos todas as regras matemáticas que nos axudarán a comprender a informática tradicional e os bits ordinarios, e finalmente podemos pasar á computación cuántica moderna e aos qubits.
Se leches ata aquí, teño unha boa noticia para ti: os qubits pódense expresar matemáticamente facilmente. En xeral, se un bit clásico (cbit) pode establecerse en |1⟩ ou |0⟩, o qubit está simplemente en superposición e pode ser tanto |0⟩ como |1⟩ antes da medición. Despois da medición, colapsa en |0⟩ ou |1⟩. Noutras palabras, un qubit pódese representar como unha combinación lineal de |0⟩ e |1⟩ segundo a seguinte fórmula:

onde a₀ и a₁ representan, respectivamente, as amplitudes |0⟩ e |1⟩. Estas poden considerarse "probabilidades cuánticas", que representan a probabilidade de que un qubit colapse nun dos estados despois de medilo, xa que en mecánica cuántica un obxecto en superposición colapsa nun dos estados despois de ser fixado. Imos ampliar esta expresión e obter o seguinte:

Para simplificar a miña explicación, esta é a representación que vou usar neste artigo.
Para este qubit, a posibilidade de colapsar ao valor a₀ despois da medida é igual a |a₀|², e a posibilidade de contraer o valor a₁ é igual a |a₁|². Por exemplo, para o seguinte qubit:

a probabilidade de colapsar en “1” é igual a |1/ √2|², ou ½, é dicir, 50/50.
Dado que no sistema clásico todas as probabilidades deben sumar un (para unha distribución de probabilidades completa), podemos concluír que os cadrados dos valores absolutos das amplitudes |0⟩ e |1⟩ deben sumar un. A partir desta información podemos formular a seguinte ecuación:

Se estás familiarizado coa trigonometría, notarás que esta ecuación corresponde ao teorema de Pitágoras (a²+b²=c²), é dicir, podemos representar graficamente os posibles estados do qubit como puntos do círculo unitario, a saber:

Os operadores e elementos lóxicos aplícanse aos qubits do mesmo xeito que na situación cos bits clásicos, baseados nunha transformación matricial. Todos os operadores de matriz invertible que recordamos ata agora, en particular CNOT, pódense usar para traballar con qubits. Tales operadores de matriz permítenche usar cada unha das amplitudes do qubit sen medilo e contraer. Permíteme darche un exemplo de uso do operador de negación nun qubit:

Antes de continuar, permíteme recordarche que os valores de amplitude a₀ e a₁ son en realidade , polo que o estado dun qubit pódese mapear con máis precisión nunha esfera unitaria tridimensional, tamén coñecida como :

Non obstante, para simplificar a explicación, limitarémonos aquí aos números reais.
Parece hora de discutir algúns elementos lóxicos que só teñen sentido no contexto da computación cuántica.
Un dos operadores máis importantes é o "elemento Hadamard": leva un pouco nun estado "0" ou "1" e colócao na superposición adecuada cun 50% de posibilidades de colapsar nun "1" ou "0". despois da medición.

Teña en conta que hai un número negativo na parte inferior dereita do operador Hadamard. Isto débese a que o resultado da aplicación do operador depende do valor do sinal de entrada: - |1⟩ ou |0⟩, polo que o cálculo é reversible.
Outro punto importante sobre o elemento Hadamard é a súa invertibilidade, o que significa que pode tomar un qubit na superposición adecuada e transformalo en |0⟩ ou |1⟩.

Isto é moi importante porque nos dá a capacidade de transformarnos a partir dun estado cuántico sen determinar o estado do qubit e, en consecuencia, sen colapsalo. Así, podemos estruturar a computación cuántica baseándose nun principio determinista e non probabilístico.
Os operadores cuánticos que conteñen só números reais son o seu propio oposto, polo que podemos representar o resultado de aplicar o operador a un qubit como unha transformación dentro do círculo unitario en forma de máquina de estados:

Así, o qubit, cuxo estado se presenta no diagrama anterior, despois de aplicar a operación Hadamard, transfórmase no estado indicado pola frecha correspondente. Do mesmo xeito, podemos construír outra máquina de estados que ilustrará a transformación dun qubit usando o operador de negación como se mostra arriba (tamén coñecido como operador de negación de Pauli ou inversión de bits), como se mostra a continuación:

Para realizar operacións máis complexas no noso qubit, podemos encadear varios operadores ou aplicar elementos varias veces. Exemplo de transformación en serie baseada en parece así:

É dicir, se comezamos polo bit |0⟩, aplicamos unha inversión de bits, e despois unha operación de Hadamard, despois outra inversión de bits e de novo unha operación de Hadamard, seguida dunha inversión de bits final, acabamos co vector dado por on o lado dereito da cadea. Ao colocar en capas diferentes máquinas de estado unhas sobre outras, podemos comezar en |0⟩ e trazar as frechas de cores correspondentes a cada unha das transformacións para entender como funciona todo.

Xa que chegamos ata aquí, é hora de considerar un dos tipos de algoritmos cuánticos, a saber: , e mostrar a súa vantaxe sobre un ordenador clásico. Cabe destacar que o algoritmo Deutsch-Jozsa é completamente determinista, é dicir, devolve a resposta correcta o 100% das veces (a diferenza de moitos outros algoritmos cuánticos baseados na definición probabilística de qubits).
Imaxinemos que tes unha caixa negra que contén unha función/operador nun bit (lembra que cun bit só se poden realizar catro operacións: conversión de identidade, negación, avaliación da constante "0" e avaliación da constante "1". "). Cal é exactamente a función que se realiza na caixa? Non sabe cal, pero pode pasar por tantas variantes de valores de entrada como queira e avaliar os resultados de saída.

Cantas entradas e saídas terías que pasar pola caixa negra para descubrir que función se está a utilizar? Pense nisto por un segundo.
No caso dun ordenador clásico, terás que facer 2 consultas para determinar a función a utilizar. Por exemplo, se a entrada "1" produce unha saída "0", queda claro que se usa a función de cálculo da constante "0" ou a función de negación, despois de que terás que cambiar o valor do sinal de entrada. a "0" e mira o que pasa na saída.
No caso dunha computadora cuántica, tamén serán necesarias dúas consultas, xa que aínda necesitas dous valores de saída diferentes para definir con precisión a función a aplicar ao valor de entrada. Porén, se reformulas un pouco a pregunta, resulta que os ordenadores cuánticos aínda teñen unha gran vantaxe: se quixeses saber se a función que se utiliza é constante ou variable, os ordenadores cuánticos terían a vantaxe.
A función utilizada na caixa é variable se os diferentes valores do sinal de entrada producen resultados diferentes na saída (por exemplo, conversión de identidade e inversión de bits), e se o valor de saída non cambia independentemente do valor de entrada, entón o función é constante (por exemplo, calculando unha constante "1" ou calculando a constante "0").
Usando un algoritmo cuántico, pode determinar se unha función nunha caixa negra é constante ou variable en función dunha soa consulta. Pero antes de ver como facelo en detalle, necesitamos atopar unha forma de estruturar cada unha destas funcións nun ordenador cuántico. Dado que calquera operador cuántico debe ser invertible, inmediatamente enfrontámonos a un problema: as funcións para calcular as constantes "1" e "0" non o son.
Unha solución común empregada na computación cuántica é engadir un qubit de saída adicional que devolva o valor de entrada que reciba a función.
| Para: | Despois: |
![]() | ![]() |
Deste xeito, podemos determinar os valores de entrada só en función do valor de saída, e a función faise invertible. A estrutura dos circuítos cuánticos crea a necesidade dun bit de entrada adicional. Para desenvolver os operadores correspondentes, asumiremos que o qubit de entrada adicional está configurado en |0⟩.
Usando a mesma representación de circuíto cuántico que usamos anteriormente, vexamos como se pode implementar cada un dos catro elementos (transformación de identidade, negación, avaliación da constante "0" e avaliación da constante "1") mediante operadores cuánticos.
Por exemplo, así podes implementar a función para calcular a constante "0":
Cálculo da constante "0":

Aquí non necesitamos operadores en absoluto. O primeiro qubit de entrada (que asumimos que era |0⟩) volve co mesmo valor e o segundo valor de entrada volve por si mesmo, como é habitual.
Coa función para calcular a constante "1" a situación é un pouco diferente:
Cálculo da constante "1":

Dado que supuxemos que o primeiro qubit de entrada está sempre configurado en |0⟩, o resultado de aplicar o operador de inversión de bits é que sempre produce un un na saída. E como é habitual, o segundo qubit dá o seu propio valor na saída.
Ao mapear o operador de transformación de identidade, a tarefa comeza a complicarse. Aquí tes como facelo:
Transformación idéntica:

O símbolo usado aquí denota o elemento CNOT: a liña superior indica o bit de control e a liña inferior indica o bit de control. Permíteme lembrarlle que ao usar o operador CNOT, o valor do bit de control cambia se o bit de control é igual a |1⟩, pero permanece inalterado se o bit de control é igual a |0⟩. Dado que asumimos que o valor da liña superior é sempre igual a |0⟩, o seu valor sempre se asigna á liña inferior.
Procedemos de xeito similar co operador de negación:
Negación:

Simplemente invertimos o bit ao final da liña de saída.
Agora que temos esa comprensión preliminar fóra do camiño, vexamos as vantaxes específicas dunha computadora cuántica fronte a unha computadora tradicional á hora de determinar a constancia ou a variabilidade dunha función oculta nunha caixa negra usando só unha consulta.
Para resolver este problema usando computación cuántica nunha única solicitude, é necesario poñer os qubits de entrada nunha superposición antes de pasalos á función, como se mostra a continuación:

O elemento Hadamard aplícase de novo ao resultado da función para romper os qubits da superposición e facer que o algoritmo sexa determinista. Iniciamos o sistema no estado |00⟩ e, por razóns que explicarei en breve, obtemos o resultado |11⟩ se a función aplicada é constante. Se a función dentro da caixa negra é variable, despois da medición o sistema devolve o resultado |01⟩.
Para entender o resto do artigo, vexamos a ilustración que mostrei anteriormente:

Usando o operador de inversión de bits e despois aplicando o elemento Hadamard a ambos os valores de entrada iguais a |0⟩, garantimos que se traducen na mesma superposición de |0⟩ e |1⟩, como segue:

Usando o exemplo de pasar este valor a unha función de caixa negra, é fácil demostrar que ambas funcións de valor constante saen |11⟩.
Cálculo da constante "0":

Do mesmo xeito, vemos que a función para calcular a constante "1" tamén produce |11⟩ como saída, é dicir:
Cálculo da constante "1":

Teña en conta que a saída será |1⟩, xa que -1² = 1.
Polo mesmo principio, podemos demostrar que ao usar ambas as funcións variables, sempre obteremos |01⟩ na saída (sempre que usemos o mesmo método), aínda que todo é un pouco máis complicado.
Transformación idéntica:

Dado que CNOT é un operador de dous qubits, non se pode representar como unha máquina de estado simple e, polo tanto, é necesario definir dous sinais de saída baseados no produto tensor de ambos os qubits de entrada e a multiplicación pola matriz CNOT como se describiu anteriormente:

Con este método tamén podemos confirmar que se recibe o valor de saída |01⟩ se a función de negación está oculta na caixa negra:
Negación:

Así, acabamos de demostrar unha situación na que un ordenador cuántico é claramente máis eficiente que un ordenador convencional.
Que despois?
Suxiro que rematemos aquí. Xa fixemos un gran traballo. Se entendes todo o que comentei, creo que agora tes unha boa comprensión dos conceptos básicos da computación cuántica e da lóxica cuántica, e por que os algoritmos cuánticos poden ser máis eficientes que a computación tradicional en determinadas situacións.
A miña descrición dificilmente pode chamarse unha guía completa para a computación cuántica e os algoritmos; é, máis ben, unha breve introdución ás matemáticas e á notación, deseñada para disipar as ideas dos lectores sobre o tema impostas polas fontes científicas populares (en serio, moitos realmente non poden entender a situación!). Non tiven tempo para tocar moitos temas importantes, como , a complexidade dos valores de amplitude |0⟩ e |1⟩ e o funcionamento de varios elementos de lóxica cuántica durante a transformación pola esfera de Bloch.
Se queres sistematizar e estruturar o teu coñecemento sobre as computadoras cuánticas, urxentemente Recomendo que leas Emma Strubel: a pesar da abundancia de fórmulas matemáticas, este libro trata os algoritmos cuánticos con moito máis detalle.
Fonte: www.habr.com


