Квантовые схемы и сфера Блоха

Ранее я рассказывал о построении простых квантовых схем и мышлении квантовых вентилей как матричных операторов. Также с помощью суперпозиции кубитов мы научились создавать запутанные состояния. Если вы вдруг окажетесь здесь, в этом посте, не прочитав два предыдущих поста, вам может быть немного сложно следить за ним. Прежде чем углубиться в важную концепцию, известную как фазовый откат, в этом посте я опишу различные квантовые схемы и то, как развить интуицию, чтобы начать работу с несколькими кубитами и квантовыми вентилями. Поскольку сфера Блоха часто используется для визуализации квантовых состояний, мы также научимся визуализировать и понимать квантовые состояния. Вступаем!!

1-й контур:

В последнем посте я описал, как создать запутанное состояние, используя один вентиль Адамара и один вентиль CNOT (CX). Сначала мы создаем состояние суперпозиции, применяя вентиль Адамара, затем применяем вентиль CX. Вместо того, чтобы использовать один вентиль Адамара, что произойдет, если мы применим 2 вентиля Адамара? Давайте сначала построим схему -

import qiskit as q
import matplotlib.pyplot as plt
qr = q.QuantumRegister(2)
cr = q.ClassicalRegister(2)
circuit = q.QuantumCircuit(qr, cr)
circuit.h(qr[0]) 
# apply hadamard gate on first qubit.
circuit.h(qr[1]) 
# apply hadamard gate on second qubit.
# apply cnot gate.
circuit.cx(qr[0], qr[1]) 
display(circuit.draw())

Применяя два вентиля Адамара, а затем вентиль CX с битом управления на первом кубите, мы можем получить следующую принципиальную схему:

Чего мы ожидаем на данном этапе? Начальные этапы кубитов всегда равны нулю, если они не инициализированы в другое состояние. Таким образом, вентиль H, действующий на стадии |0⟩, даст нам |+⟩. Поскольку на этапе |0⟩ действует 2 H вентиля, мы получим на выходе тензорное произведение |+⟩ ⊗ |+⟩. |+⟩ ⊗ |+⟩ = (|00⟩ + |01⟩ + |10⟩ + |11⟩), и работа вентиля CX на этом этапе ничего не изменит. Таким образом, если мы смоделируем эту схему на нашей рабочей станции, мы запустим все 4 этапа с почти равной вероятностью.

circuit.measure(qr, cr)
simulator = q.Aer.get_backend(name=’qasm_simulator’)
results = q.execute(circuit, backend=simulator, ).result()
q.visualization.plot_histogram(results.get_counts(circuit))

Мы также можем построить векторы состояния для отдельных кубитов. Давайте сделаем это с помощью следующего блока кода:

statevec = q.Aer.get_backend(‘statevector_simulator’)
final_state = q.execute(circuit,statevec).result().get_statevector()
q.visualization.plot_bloch_multivector(final_state)

Как мы обсуждали непосредственно перед измерением, применяющим вентили Адамара к обоим кубитам, они переключились на базис X из Z (|0⟩, |1⟩), и вентиль CNOT не изменяет это состояние. Это может объяснить сюжет ниже —

Давайте немного изменим эту схему, чтобы лучше понять.

2-й контур:

Теперь давайте добавим ворота X перед одними воротами Адамара, как показано ниже:

Как мы узнали ранее, X-гейт меняет состояние с |0⟩ на |1⟩. Теперь один вентиль H действует в состоянии |0⟩, а другой действует в состоянии |1⟩. Теперь вы можете подумать о результате по сравнению с предыдущей схемой. Тензорное произведение между состоянием |+⟩ (результатом H|0⟩) и |-⟩ (результатом H|1⟩) будет (|+⟩ ⊗ |-⟩ = |00⟩ -|01⟩+|10⟩ -|11⟩). Применение вентиля CX к этому этапу изменит этап |00⟩ -|01⟩-|10⟩+|11⟩, что эквивалентно |-⟩ ⊗ |-⟩. Измерение вероятности даст нам тот же результат, что и раньше, но мы сможем заметить разницу, если нанесем векторы состояния. На сфере Блоха векторы состояния будут такими, как показано ниже:

3-й контур:

Чтобы понять представление сферы Блоха и схемы с несколькими кубитами еще более подробно, давайте немного изменим схему 2. Вместо применения вентиля X к 1-му кубиту мы применим его к 0-му кубиту. Давайте построим цепь

qr2 = q.QuantumRegister(2)
cr2 = q.ClassicalRegister(2)
circuit2 = q.QuantumCircuit(qr2, cr2)
circuit2.x(qr2[0]) # X-gate applied to 0th qubit 
circuit2.h(qr2[0])
circuit2.h(qr2[1])
circuit2.cx(qr2[0], qr2[1])
circuit2.draw()

Как мы видим здесь, по сравнению с предыдущей схемой (схема 2), ворота X поменялись местами. Вентиль H, действующий в состоянии |0⟩ и |1⟩, даст тот же результат. Но тензорное произведение будет другим |-⟩ ⊗ |+⟩ = |-+⟩ = (|00⟩ + |01⟩ -|10⟩-|11⟩). Здесь мы применяем вентиль CX, и он ни на что не повлияет. Построение блоховской сферы векторов состояния после выполнения схемы должно привести к тому, что кубит 0 окажется в состоянии |-⟩, а кубит 1 — в состоянии |+⟩. Посмотрим -

Моделирование схемы на нашей рабочей станции приведет к тому, что показано на рис. 2, где все 4 состояния присутствуют с равной вероятностью.

4-й контур:

Давайте добавим еще несколько ворот, чтобы лучше понять наше понимание. По сравнению с 1-й схемой мы добавим еще один вентиль Адамара после вентиля CX, как показано ниже:

qr3 = q.QuantumRegister(2)
cr3 = q.ClassicalRegister(2)
circuit3 = q.QuantumCircuit(qr3, cr3)
circuit3.h(qr3[0])
circuit3.h(qr3[1])
circuit3.cx(qr3[0], qr3[1])
## till this is first circuit. Now we add one more H gate.
circuit3.h(qr3[0])
circuit3.draw()

Можете ли вы угадать/рассчитать конечное состояние кубитов? Мы уже видели ответ до ворот CX раньше. Ворота CX применялись к состоянию |++⟩, и состояние системы оставалось неизменным. Теперь мы добавили еще один H-гейт. Этот вентиль H добавляется к 0-му кубиту. H|++⟩ = |+0⟩ , потому что применение вентиля H к состоянию |+⟩ вернет его обратно в |0⟩. Еще раз мы можем увидеть это, построив векторы конечного состояния.

Тензорное произведение |+⟩ ⊗ |0⟩ даст нам |00⟩ + |10⟩, и это также можно проверить, смоделировав схему на нашем локальном компьютере и построив график распределения, как мы сделали для схемы 1.

5-й контур:

Наконец, мы заканчиваем еще одним вариантом предыдущей схемы. Вместо добавления последнего вентиля Адамара к 0-му кубиту мы добавляем его к 1-му кубиту. Таким образом, схема будет выглядеть так, как показано ниже:

По сравнению с предыдущей схемой тензорное произведение будет таким, как показано ниже — |0+⟩, и мы можем видеть, что с помощью визуализации сферы Блоха

Конечные состояния при моделировании на локальном компьютере дадут вероятность 50% для каждого из состояний |00⟩ и |01⟩.

Вывод:

Таким образом, чтобы улучшить наше понимание простых схем с несколькими кубитами, мы обсудили различные схемы и проверили наше понимание, смоделировав эти схемы на нашем локальном компьютере и визуализировав векторы состояния в сфере Блоха. В предыдущих двух постах мы рассмотрели строительные блоки квантовых схем — матричные представления квантовых вентилей, запутанность, состояние Белла и т. д. Обсуждаемые здесь схемы являются расширением предыдущих и будут важны позже для создания необходимой концепции. называемый Phase Kickback, который обеспечит основу для понимания многих основных алгоритмов, например: алгоритма Шора, алгоритма Дойча и т. д.

Блокнот Python, используемый здесь, доступен на моем GitHub.

Держись, Ура!!