Para uma apresentação dos primeiros princípios, gosto da resposta de Ryan O'Donnell . Mas para um tratamento algébrico de nível um pouco mais alto, eis como eu faria isso.
A principal característica de uma operação controlada , para qualquer U unitário , é que (coerentemente) realiza uma operação em alguns qubits, dependendo do valor de um único qubit. A maneira como podemos escrever isso explicitamente algebricamente (com o controle no primeiro qubit) é:
onde é uma matriz de identidade da mesma dimensão como . Aqui, e são projetores nos estados eUU1 U | 0 ⟩
CU=|0⟩⟨0|⊗1+|1⟩⟨1|⊗U
1U| 1 ⟩|0⟩⟨0|| 0 ⟩ | 1 ⟩|1⟩⟨1||0⟩|1⟩ do qubit de controle - mas não os estamos usando aqui como elementos de uma medição, mas para descrever o efeito nos outros qubits, dependendo de um ou outro subespaço do espaço de estados do primeiro qubit.
Podemos usar isso para derivar a matriz para o gate que executa uma operação no qubit 3, condicionado coerentemente ao estado do qubit 1, pensando nisso como um controle- nos qubits 2 e 3:
X( 1 2CX1,3XC X 1 , 3(12⊗X)
CX1,3=|0⟩⟨0|⊗14+|1⟩⟨1|⊗(12⊗X)=[140404(12⊗X)]=⎡⎣⎢⎢⎢12020202021202020202X02020202X⎤⎦⎥⎥⎥,
onde os dois últimos são representações da matriz de blocos para economizar espaço (e sanidade).
Melhor ainda: podemos reconhecer que - em algum nível matemático, nos permitimos perceber que a ordem dos fatores tensores não precisa estar em uma ordem fixa - o controle e o objetivo da operação podem estar em qualquer um dos dois tensores. fatores, e que podemos preencher a descrição do operador em todos os outros qubits com . Isso nos permitiria ir direto para a representação
C X 1 , 312
CX1,3==|0⟩⟨0|control⊗12uninvolved⊗12target⎡⎣⎢⎢⎢12020202021202020202020202020202⎤⎦⎥⎥⎥+|1⟩⟨1|control⊗12uninvolved⊗Xtarget+⎡⎣⎢⎢⎢02020202020202020202X02020202X⎤⎦⎥⎥⎥
e também nos permite ver imediatamente o que fazer se os papéis de controle e destino forem revertidos:
CX1,3=| 0⟩CX3,1===12target⊗12uninvolved⊗|0⟩⟨0|control⎡⎣⎢⎢⎢⎢⎢|0⟩⟨0||0⟩⟨0||0⟩⟨0||0⟩⟨0|⎤⎦⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢10000000000001000010000000000001+Xtarget⊗12uninvolved⊗|1⟩⟨1|control+⎡⎣⎢⎢⎢⎢⎢|1⟩⟨1||1⟩⟨1||1⟩⟨1||1⟩⟨1|⎤⎦⎥⎥⎥⎥⎥00001000010000000000001000010000⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥.
Mas o melhor de tudo: se você pode escrever esses operadores algebricamente, pode dar os primeiros passos para dispensar totalmente as matrizes gigantes, em vez de raciocinar sobre esses operadores algebricamente usando expressões como
e
CX1,3=|0⟩⟨0|⊗12⊗12+|1⟩⟨1|⊗12⊗XCX3,1=12⊗12⊗|0⟩⟨0|+X⊗12⊗|1⟩⟨1|. Haverá um limite para o quanto você pode fazer com isso, é claro - é improvável que uma simples mudança na representação torne um algoritmo quântico difícil solucionável com eficiência, muito menos tratável por cálculo manual - mas você pode raciocinar sobre circuitos simples com muito mais eficiência usando essas expressões do que com matrizes gigantes de comer espaço.