Pour une présentation des premiers principes, j'aime la réponse de Ryan O'Donnell . Mais pour un traitement algébrique de niveau légèrement supérieur, voici comment je le ferais.
La caractéristique principale d'une opération contrôlée , pour tout U unitaire , est qu'elle effectue (de manière cohérente) une opération sur certains qubits en fonction de la valeur d'un qubit unique. La façon dont nous pouvons écrire explicitement algébriquement (avec le contrôle sur le premier qubit) est:
où est une matrice d'identité de la même dimension que . Ici, et sont des projecteurs sur les états etUU1 U | 0 ⟩
CU=|0⟩⟨0|⊗1+|1⟩⟨1|⊗U
1U| 1 ⟩|0⟩⟨0|| 0 ⟩ | 1 ⟩|1⟩⟨1||0⟩|1⟩ du qubit de contrôle - mais nous ne les utilisons pas ici comme éléments d'une mesure, mais pour décrire l'effet sur les autres qubits en fonction de l'un ou l'autre sous-espace de l'espace d'état du premier qubit.
Nous pouvons l'utiliser pour dériver la matrice de la porte qui effectue une opération sur le qubit 3, conditionnée de manière cohérente sur l'état du qubit 1, en pensant à cela comme un contrôle opération sur les qubits 2 et 3:
X( 1 2CX1,3XC X 1 , 3(12⊗X)
CX1,3=|0⟩⟨0|⊗14+|1⟩⟨1|⊗(12⊗X)=[140404(12⊗X)]=⎡⎣⎢⎢⎢12020202021202020202X02020202X⎤⎦⎥⎥⎥,
où les deux derniers sont des représentations de matrice de bloc pour économiser de l'espace (et de la raison).
Mieux encore: nous pouvons reconnaître que - à un certain niveau mathématique où nous nous permettons de réaliser que l'ordre des facteurs tensoriels n'a pas besoin d'être dans un ordre fixe - le contrôle et la cible de l'opération peuvent être sur deux tenseurs quelconques facteurs, et que nous pouvons remplir la description de l'opérateur sur tous les autres qubits avec . Cela nous permettrait de passer directement à la représentation
C X 1 , 312C X 3 , 1
CX1,3==|0⟩⟨0|control⊗12uninvolved⊗12target⎡⎣⎢⎢⎢12020202021202020202020202020202⎤⎦⎥⎥⎥+|1⟩⟨1|control⊗12uninvolved⊗Xtarget+⎡⎣⎢⎢⎢02020202020202020202X02020202X⎤⎦⎥⎥⎥
et nous permet également de voir immédiatement quoi faire si les rôles de contrôle et de cible sont inversés:
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⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥.
Mais le meilleur de tous: si vous pouvez écrire ces opérateurs algébriquement, vous pouvez faire les premiers pas vers la suppression des matrices géantes entièrement, au lieu de cela raisonner algébriquement ces opérateurs en utilisant des expressions telles que
et
C X 3 , 1 = 1 2CX1,3=|0⟩⟨0|⊗12⊗12+|1⟩⟨1|⊗12⊗XCX3,1=12⊗12⊗|0⟩⟨0|+X⊗12⊗|1⟩⟨1|. Il y aura bien sûr une limite à ce que vous pouvez faire avec ces derniers - un simple changement de représentation est peu susceptible de rendre un algorithme quantique difficile à résoudre efficacement, et encore moins traitable par calcul manuel - mais vous pouvez raisonner sur des circuits simples beaucoup plus efficacement en utilisant ces expressions qu'avec des matrices géantes mangeuses d'espace.