Como seria um programa quântico muito simples?

15

Depois de ler o " primeiro chip fotônico quântico programável ". Eu estava imaginando como seria um software para um computador que usa emaranhamento quântico.

Existe algum exemplo de código para programação quântica específica? Como pseudocódigo ou linguagem de alto nível? Especificamente, qual é o programa mais curto que pode ser usado para criar um estado de Bell a partir de um estado inicializado parausando tanto uma simulação e um dos da IBMQuantum Experiênciaprocessadores, como oibmqx4?

|ψ=12(|00+|11)
|ψ0 0=|00

Fazer o salto conceitual da programação tradicional para o emaranhamento não é tão fácil.


Eu encontrei de C libquantum também.

DIDIx13
fonte

Respostas:

12

Supondo que você esteja considerando um computador quântico baseado em portas, a maneira mais fácil de produzir um estado enredado é produzir um dos estados de Bell. O circuito a seguir mostra o estado de Bell .|Φ+

Bellstate

Examinando , | ψ 1 e | ψ 2 podemos determinar o estado Entagled após a aplicação de todas as portas;|ψ0 0|ψ1|ψ2

1. :|ψ0 0

|ψ0 0=|0 00 0

|ψ1

O Hadamard-Gate se aplica ao primeiro qubit, o que resulta no seguinte:

|ψ1=(HEu)|0 00 0=H|0 0|0 0=12(|0 0+|1)|0 0=12(|0 00 0+|10 0)

|ψ2

Agora, uma porta CNOT é aplicada e vira o segundo qubit, mas apenas onde o primeiro tem o valor 1. O resultado é

|ψ2=12(|0 00 0+|11)

|ψ2

Embora a abordagem acima possa não parecer programação para você no sentido usual, aplicar portas aos estados é basicamente como funciona a programação de um computador quântico baseado em portas. Existem camadas de abstração que permitem executar a programação de alto nível, mas traduzem os comandos para a aplicação de portas. A interface do IBM Quantum Experience fornece esses recursos.

Em um idioma como o Q # da Microsoft, o exemplo acima pode ser semelhante a este:

operation BellTest () : ()
{
    body
    {
        // Use two qubits
        using (qubits = Qubit[2])
        {
            Set (One, qubits[0]);
            Set (Zero, qubits[1]);

            // Apply Hadamard gate to the first qubit
            H(qubits[0]);

            // Apply CNOT gate
            CNOT(qubits[0],qubits[1]);
         }
     }
}

Uma versão mais detalhada (incluindo medição) pode ser encontrada aqui: Microsoft: Escrevendo um programa Quantum .

dtell
fonte
14

Uma maneira de escrever programas quânticos é com o QISKit. Isso pode ser usado para executar os programas nos dispositivos da IBM. O site do QISKit sugere o seguinte snippet de código para você começar, que é um circuito emaranhado conforme desejado. É também o mesmo processo que na resposta por datell. Vou comentar linha por linha.

# import and initialize the method used to store quantum programs
from qiskit import QuantumProgram
qp = QuantumProgram()
# initialize a quantum register of two qubits
qr = qp.create_quantum_register('qr',2) 
# and a classical register of two bits
cr = qp.create_classical_register('cr',2) 
# create a circuit with them which we call 'Bell'
qc = qp.create_circuit('Bell',[qr],[cr]) 
# apply a Hadamard to the first qubit
qc.h(qr[0]) 
# apply a controlled not with the first qubit as control
qc.cx(qr[0], qr[1]) 
# measure the first qubit and store its result on the first bit
qc.measure(qr[0], cr[0]) 
# the same for the second qubit and bit
qc.measure(qr[1], cr[1]) 
# run the circuit
result = qp.execute('Bell') 
# extract the results
print(result.get_counts('Bell')) 

Observe que o comando 'execute' aqui especifica apenas o programa a ser executado. Todas as outras configurações, como o dispositivo que você deseja usar, o número de vezes que você deseja repeti-lo para obter estatísticas, etc. são definidas com seus valores padrão. Para executar no ibmqx4 para 1024 fotos, você pode usar

results = qp.execute(['Bell'], backend='ibmqx4', shots=1024)
James Wootton
fonte
4

O programa quântico mais simples que consigo pensar é um gerador de números aleatórios verdadeiro (1 bit). Como um circuito quântico, fica assim:

Você primeiro prepara um qubit no estado |0 022(|0 0+|1)que você então medir na base computacional. O resultado da medição é|0 0ou|1

pirâmides
fonte