QCircuit を使用して順列ゲートを描く

QCircuit を使用して順列ゲートを描く

私は描く方法を探しています順列ゲート次の図のように Qcircuit を使用します (例: 赤いボックス内)。

順列ゲートを備えた量子回路

Qcircuit を使用してこれを (どのように) 実現できますか?

編集: これまでに達成したことの MWE を提供するよう求められたので、これが私のソース コードです。

\documentclass{article}
\usepackage{qcircuit}
 \begin{document}
 \mbox{
     \Qcircuit @C=0.5cm @R=.2cm {
         \lstick{x_1} & \multigate{1}{\ } & \rstick{x_1} \qw \\
         \lstick{x_2} & \ghost{\ }        & \rstick{x_2} \qw 
     }
 }
 \end{document}

これにより、次の図の左半分に見られるようなものが生成されますが、右側の赤で示されている斜めの線をどのように生成するかはまったくわかりません。

ここに画像の説明を入力してください

答え1

答えは「いいえ、不可能」だと思います。この\multigateコマンドは、適切な数の行に長方形を描画する以上のことはしません。必要な対角線は、完全に の範囲外だと思いますが、 (どの がを使用するか) を十分にQcircuit理解していないため、確実には言えません。xyQcircuit

ただし、このような順列操作は、異なるモード間のスワップ ゲートのシーケンスと同じです。この方法で回路を記述すると、同じ効果が得られ、より理にかなっていると言えます (実験では、量子ビットは固定されていることが多いため、このようなスワップ操作は、最初は空間的に分離された量子ビット間のマルチ量子ビット ゲートのより現実的な説明になります)。

さらに重要なのは、Qcircuitこのような操作が可能になることです。これは、別のパッケージに移動しない限り、問題に対する最善の解決策となります。強調表示された操作については、次の画像/コードは、7 -> 6、6 -> 5、5 -> 4、および 4 -> 7 の順序変更という別の説明です。

Qswap 順列回路の例

制作:

\documentclass{article}

\usepackage{qcircuit}

\begin{document}

\Qcircuit @C=.7em @R=1em @!R {
\lstick{x_1} & \qw & \qw & \qw & \qw & \qw & \rstick{y_1} \\
\lstick{x_2} & \qw & \qw & \qw & \qw & \qw & \rstick{y_2} \\
\lstick{x_3} & \qw & \qw & \qw & \qw & \qw & \rstick{y_3} \\
\lstick{x_4} & \qw & \qswap & \qswap & \qswap & \qw & \rstick{y_4} \\
\lstick{x_5} & \qw & \qw \qwx & \qw \qwx & \qswap \qwx & \qw & \rstick{y_5} \\
\lstick{x_6} & \qw & \qw \qwx & \qswap \qwx & \qw  & \qw & \rstick{y_6} \\
\lstick{x_7} & \qw & \qswap \qwx & \qw & \qw & \qw & \rstick{y_7} 
}

\end{document}

答え2

コマンドを使用すると、必要な角度の付いたワイヤを取得できます\link。私はスワップを表現するためによくこれを使用します。求めているようなものを取得する最も簡単な方法は、link コマンドを使用し、 コマンドで関心領域の周囲にボックスを作成することです\gategroup。次に例を示します。

ここに画像の説明を入力してください

これは次のコードでタイプセットされました:

\documentclass{standalone}
\input{Qcircuit}% using  qcircuit version 2
\begin{document}
\hspace{1em}
\begin{tabular}{c}
\vspace{-.6em}\\
     \Qcircuit @C=0.5cm @R=.5cm {
         \lstick{x_1} & \qw & \link{1}{-1} & \rstick{x_1} \qw \\
         \lstick{x_2} & \qw & \link{-1}{-1} & \rstick{x_2} \qw
         \gategroup{1}{2}{2}{3}{.8em}{-}
     }
\vspace{1.2em}\hspace{1.2em}
\\
\end{tabular}
\end{document}

ただし、ワイヤはボックスの端で正確に曲がるわけではありません。そのようにしたい場合は、、、を使用してハックすることができます\link\multigate、デフォルトの列間隔を 0 に設定し、 を実行して\ghostワイヤの長さを強制する必要があります。次に例を示します。\push\rule

ここに画像の説明を入力してください

これは次のコードでタイプセットされました:

\documentclass{standalone}
\input{Qcircuit}% using  qcircuit version 2
\begin{document}
\hspace{1em}
\begin{tabular}{c}
\vspace{-.6em}\\
     \Qcircuit @C=0cm @R=.2cm {
         \lstick{x_1} & \qw & \qw & \multigate{1}{\ \ \ } & \qw \link{1}{-2} & \qw & \rstick{x_1} \qw \\
         \lstick{x_2} & \qw & \qw & \ghost{\ \ \ } & \qw \link{-1}{-2} & \qw & \rstick{x_2} \qw \\
         & \push{\rule{1.2em}{0em}} & & & & \push{\rule{1.2em}{0em}}
     }
\vspace{.2em}\hspace{1.2em}
\\
\end{tabular}
\end{document}

あるいは、最初の例のボックス ( の最後から 2 番目のフィールド\gategroup) の余裕の長さを 0em に設定し、ボックスを前後の行まで拡張することもできますが、この場合、適切に表示されるように行間隔を調整する必要があります (おそらく\push垂直方向の罫線も調整する必要があります)。

関連情報