Как будет выглядеть очень простая квантовая программа?

15

После прочтения « первого программируемого квантового фотонного чипа ». Мне было интересно, каким будет программное обеспечение для компьютера, использующего квантовую запутанность.

Есть ли пример кода для конкретного квантового программирования? Как псевдокод или язык высокого уровня? В частности, какая самая короткая программа, которую можно использовать для создания состояния Белла начиная с состояния, инициализированного в используя симуляцию и один из процессоров IBM Quantum Experience , например ibmqx4 ?

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

Осуществить концептуальный переход от традиционного программирования к путанице не так просто.


Я также нашел libquantum Си .

DIDIx13
источник

Ответы:

12

Предполагая, что вы рассматриваете квантовый компьютер на основе затвора, самый простой способ создать запутанное состояние - это создать одно из состояний Белла. Следующая схема показывает состояние Bell .|Φ+

Bellstate

Изучив , и мы можем определить состояние entagled после применения всех ворот:|ψ0|ψ1|ψ2

|ψ0

|ψ0знак равно|00

|ψ1

Ворота Адамара применяются к первому кубиту, что приводит к следующему:

|ψ1знак равно(ЧАСя)|00знак равноЧАС|0|0знак равно12(|0+|1)|0знак равно12(|00+|10)

|ψ2

Теперь применяется вентиль CNOT, который переворачивает второй кубит, но только там, где первый имеет значение 1. Результат

|ψ2знак равно12(|00+|11)

|ψ2

Хотя описанный выше подход может показаться вам не обычным программированием, применение стробирования к состояниям - это, в основном, то, как работает программирование квантового компьютера на базе гейта. Существуют уровни абстракции, которые позволяют выполнять высокоуровневое программирование, но переводить команды в приложение ворот. Интерфейс IBM Quantum Experience предоставляет такие функции.

На языке, подобном Q # от Microsoft, приведенный выше пример может выглядеть примерно так:

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]);
         }
     }
}

Более подробную версию (включая измерение) можно найти здесь: Microsoft: Написание квантовой программы .

dtell
источник
14

Одним из способов написания квантовых программ является использование QISKit. Это можно использовать для запуска программ на устройствах IBM. Сайт QISKit предлагает следующий фрагмент код , чтобы вы собираетесь, которая является запутанной цепью , как вы хотите. Это также тот же процесс, что и в ответе по datell. Я прокомментирую это построчно.

# 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')) 

Обратите внимание, что здесь команда «execute» указывает только программу для запуска. Все остальные настройки, такие как устройство, которое вы хотите использовать, количество раз, которое вы хотите повторить, чтобы получить статистику и т. Д., Установлены на значения по умолчанию. Чтобы запустить на ibmqx4 для 1024 снимков, вы можете вместо этого использовать

results = qp.execute(['Bell'], backend='ibmqx4', shots=1024)
Джеймс Вуттон
источник
4

Самая простая квантовая программа, которую я могу придумать, - это (1-битный) генератор истинных случайных чисел. Как квантовая схема, это выглядит так:

|022(|0+|1)|0|1

пирамиды
источник