По одному положительному повороту
Полностью выключите оба Z-выхода, используя ровно один Ry(π/4) на каждом кубите. Доступные X или Z позволяют обратить действие поворота.
Начальное состояние:
$$|\psi_{\mathrm{start}}\rangle=\big(\cos(\pi/8)|0\rangle+\sin(\pi/8)|1\rangle\big)_{q_0}\otimes\big(\cos(\pi/8)|0\rangle+\sin(\pi/8)|1\rangle\big)_{q_1}.$$
Разрешённые действия: включить изображение Блоха для q0 — любое число раз; Z на q0 — любое число раз; Ry(π/4) на q0 — ровно 1 раз; включить изображение Блоха для q1 — любое число раз; X на q1 — любое число раз; Ry(π/4) на q1 — ровно 1 раз; вернуться к раздельным линиям — любое число раз.
Точные цели исходного вызова:
$$\langle ZI\rangle=1.0,\quad \langle IZ\rangle=1.0.$$
Здесь q0 — левый кубит игрового поля, q1 — правый. В формулах этой задачи порядок множителей — q0,q1; исходный Qiskit при печати двоичных строк использует обратный порядок.
X- и Z-выходы означают результаты соответствующих измерений с битовыми значениями 0 или 1. Для состояний $|\pm\rangle=(|0\rangle\pm|1\rangle)/\sqrt2$ X-выход достоверно равен 0 или 1 соответственно. В круглой визуализации чёрный круг — достоверный 0, белый — достоверная 1, серый — равные вероятности; промежуточные оттенки передают промежуточные вероятности. В линейной визуализации белая линия означает 0, чёрная —1; bloch только объединяет линии в изображение, состояние кубита не меняет.
Двухбуквенные обозначения описывают средние значения измерений: первая буква относится к q0, вторая — к q1; I означает, что этот кубит не измеряется. Например, ZI — Z-выход q0, IX — X-выход q1, XZ — их совместная корреляция. Для одного выхода значение p даёт вероятность 1, равную (1−p)/2. Для корреляции оно даёт такую же вероятность различия двух битов. Поэтому+1 означает достоверный 0 или согласие, −1 — достоверную 1 или различие,0 — равные вероятности.
Действия вентилей заданы однозначно: X инвертирует Z-выход, Z инвертирует X-выход, H меняет X- и Z-выходы местами. На векторах состояния:
$$X=\begin{bmatrix}0&1\\1&0\end{bmatrix},\quad Z=\begin{bmatrix}1&0\\0&-1\end{bmatrix},\quad H=\frac1{\sqrt2}\begin{bmatrix}1&1\\1&-1\end{bmatrix}.$$
$$R_y(\theta)=\begin{bmatrix}\cos(\theta/2)&-\sin(\theta/2)\\\sin(\theta/2)&\cos(\theta/2)\end{bmatrix}.$$
CNOT применяет X к цели при управляющем 1, CZ применяет Z при управляющем 1; на суперпозициях эти действия продолжаются линейно.
Все ограничения на число ходов указаны ниже: положительное число требует ровно столько применений,0 в исходном allowed_gates означает любое число. Неуказанные операции запрещены. CNOT в игровом вызове принимает выбранный целевой кубит; второй кубит управляет. CZ симметричен, но отдельные ограничения на его кнопки сохраняются. Исходная проверка принимает отклонение каждого среднего от заданного значения меньше 0.1.
Полный исходный вызов:
print('Set up started...')
from qiskit_textbook.games import hello_quantum
print('Set up complete!')
initialize = [['ry(pi/4)','0'],['ry(pi/4)','1']]
success_condition = {'ZI': 1.0,'IZ': 1.0}
allowed_gates = {'0': {'bloch':0, 'z':0, 'ry(pi/4)': 1}, '1': {'bloch':0, 'x':0, 'ry(pi/4)': 1}, 'both': {'unbloch':0}}
vi = [[], True, True]
qubit_names = {'0':'q[0]', '1':'q[1]'}
puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='line')