Desenhe portas de permutação usando QCircuit

Desenhe portas de permutação usando QCircuit

Estou procurando uma maneira de desenhar umportão de permutaçãousando Qcircuit da maneira como é feito na figura a seguir (por exemplo, dentro da caixa vermelha):

Circuito Quântico com portas de permutação

(Como) Isso pode ser conseguido usando Qcircuit?

Editar: como me pediram para fornecer um MWE do que consegui até agora, este é o meu código-fonte:

\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}

O que produz o que pode ser visto na metade esquerda da imagem a seguir, porém não tenho a menor ideia de como produzir as linhas diagonais mostradas em vermelho no lado direito:

insira a descrição da imagem aqui

Responder1

Acredito que a resposta é não, não é possível. O \multigatecomando não faz muito mais do que desenhar um retângulo sobre o número apropriado de linhas. Acho que as linhas diagonais que você deseja estão Qcircuittotalmente fora do escopo - embora eu não saiba xy(qual Qcircuitusa) bem o suficiente para ter certeza.

No entanto, tal operação de permutação é igual a uma sequência de portas de troca entre modos diferentes. Escrever o circuito dessa maneira tem o mesmo efeito e sem dúvida faz mais sentido (no experimento, os qubits são frequentemente fixados no lugar, portanto, tais operações de troca são descrições mais realistas de portas multi-qubit entre qubits inicialmente separados espacialmente).

Mais significativamente, Qcircuitpermite operações que seriam a melhor resolução para o seu problema (exceto mudar para um pacote diferente). Para a operação que você destacou, a seguinte imagem/código é uma descrição alternativa, ou seja, permutando 7 -> 6, 6-> 5, 5 -> 4 e 4 -> 7.

Exemplo de circuito de permutação Qswap

Produzido com

\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}

Responder2

Você pode obter o tipo de fio angular desejado usando o \linkcomando. Costumo usá-los para representar trocas. A maneira mais simples de obter algo parecido com o que você está pedindo é usar o comando link e fazer uma caixa ao redor da região de interesse com o \gategroupcomando. Aqui está um exemplo:

insira a descrição da imagem aqui

Isso foi escrito com o seguinte código:

\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}

Os fios, entretanto, não dobram exatamente na borda da caixa. Se você quiser isso, você pode hackear usando \link, \multigate, e \ghost, mas você deve definir o espaçamento padrão da coluna como zero e forçar os comprimentos dos fios usando \pusha \rule. Aqui está um exemplo disso:

insira a descrição da imagem aqui

Isso foi escrito com o seguinte código:

\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}

Como alternativa, você pode definir o comprimento da folga na caixa (penúltimo campo em \gategroup) no primeiro exemplo como 0em e estender a caixa para a linha anterior e seguinte, mas isso exigirá mexer no espaçamento entre linhas para que pareça correto (e muito provavelmente \pushusando regras verticais).

informação relacionada