De acordo com a pergunta vinculada, a solução mais simples é conseguir que o processador clássico execute essas operações, se possível . Obviamente, isso pode não ser possível, então queremos criar um somador .
Existem dois tipos de somador de um bit - o meio e o total . A meia-adicionador leva as entradas e e gera a 'soma' (operação XOR) e o 'carry' (E operação) . Um somador completo também tem o 'carregar em' de entrada e o 'efectuar' a saída , substituindo . Isso retorna e .B S = A ⊕ B C = A ⋅ B C i n C o u t C S = A ⊕ B ⊕ C i n C o u t = C i n ⋅ ( A + B ) + A ⋅ BUMABS= A ⊕ BC= A ⋅ BCeu nCo u tCS= A ⊕ B ⊕ Ceu nCo u t= Ceu n⋅ ( A + B ) + A ⋅ B
Versão quântica do semi-somador
Observando o portão CNOT no registro qubit registro de controle : que dá imediatamente a saída do registo como . No entanto, ainda temos que computar o carry e o estado doB CNOT A → B | 0 ⟩ A | 0 ⟩ BUMAB BUma⊕B=SBAB(C)| 0⟩Um⋅B=CABCABBC
CNOTA → B| 0 ⟩UMA| 0 ⟩BCNOTA → B| 0 ⟩UMA| 1 ⟩BCNOTA → B| 1 ⟩UMA| 0 ⟩BCNOTA → B| 1 ⟩UMA| 1 ⟩B= | 0 ⟩UMA| 0 ⟩B= | 0 ⟩UMA| 1 ⟩B= | 1 ⟩UMA| 1 ⟩B= | 1 ⟩UMA| 0 ⟩B,
BA⊕B=SBO registro mudou, então também precisamos executar a operação AND. Isso pode ser feito usando a porta Toffoli de 3 qubit (CNOT / CCNOT controlado). Isso pode ser feito usando registros e como registros de controle e inicializar o terceiro registo no estado , dando a saída do terceiro registo como . A implementação de Toffoli nos registradores e controlam o registro seguido de CNOT com controla fornece a saída do registro como a soma e a saída do registro
AB(C)|0⟩A⋅B=CABCABBCcomo o transporte. Um diagrama de circuito quântico do semi-somador é mostrado na figura 1.
Figura 1: Diagrama do circuito de um semi-somador, consistindo de Toffoli seguido de CNOT. Os bits de entrada são e , dando a soma com transportar para fora .B S CABSC
Versão quântica do somador completo
Mostrado na figura 2, uma maneira simples de fazer isso para bits únicos é usando registros de qubit, aqui rotulados como , , e , onde começa no estado , portanto, o inicial estado é :A B C i n 1 1 | 0 ⟩ | A ⟩ | B ⟩ | C i n ⟩ | 0 ⟩4ABCin11|0⟩|A⟩|B⟩|Cin⟩|0⟩
- Aplique Toffoli usando e para controlar :B 1 | A ⟩ | B ⟩ | C i n ⟩ | Um ⋅ B ⟩AB1|A⟩|B⟩|Cin⟩|A⋅B⟩
- CNOT com controlando :B | A ⟩ | A ⊕ B ⟩ | C i n ⟩ | Um ⋅ B ⟩AB|A⟩|A⊕B⟩|Cin⟩|A⋅B⟩
- Toffoli com e controlando :C i n 1 | A ⟩ | A ⊕ B ⟩ | C i n ⟩ | Um ⋅ B ⊕ ( Um ⊕ B ) ⋅ C i N = C o u t ⟩BCin1|A⟩|A⊕B⟩|Cin⟩|A⋅B⊕(A⊕B)⋅Cin=Cout⟩
- CNOT com controlando :C i n | A ⟩ | A ⊕ B ⟩ | Um ⊕ B ⊕ C i n = S ⟩ | C O u t ⟩BCin|A⟩|A⊕B⟩|A⊕B⊕Cin=S⟩|Cout⟩
Uma etapa final para recuperar as entradas e é aplicar um CNOT com o registro controla o registro , fornecendo o estado final de saída comoABAB
|ψout⟩ = | A ⟩ | B ⟩|S⟩ |Cout⟩
Isso fornece a saída do registro como a soma e a saída do registro como executada.Ceu n2
Figura 2: Diagrama do circuito de um somador completo. Os bits de entrada são e junto com um carry , fornecendo a soma com o carry .UMABCeu nSCo u t
Versão quântica do somador de transporte de ondulação
Uma extensão simples do adicionador completo é um transportador de ondulação, denominado como 'ondula' o transporte para se tornar o transporte do próximo adicionador em uma série de adicionadores, permitindo somas de tamanho arbitrário (se lento). Uma versão quântica de um somador pode ser encontrada, por exemplo, aqui
Implementação real de um meio adicionador
Para muitos sistemas, implementar um portão Toffoli está longe de ser tão simples quanto implementar um único portão de qubit (ou mesmo dois qubit). Essa resposta fornece uma maneira de decompor Toffoli em vários portões menores. No entanto, em sistemas reais, como IBMQX , também pode haver problemas nos quais os qubits podem ser usados como destinos. Assim, uma implementação da vida real no IBMQX2 se parece com isso:
Figura 3: Implementação de um meio adicionador no IBMQX2. Além de decompor o portão de Toffoli em vários portões menores, são necessários portões adicionais, pois nem todos os registros de qubit podem ser usados como alvos. Os registros q [0] e q [1] são adicionados para obter a soma em q [1] e o carry em q [2]. Nesse caso, o resultado q [2] q [1] deve ser 10. A execução no processador deu o resultado correto com uma probabilidade de 42,8% (embora ainda fosse o resultado mais provável).