Per una presentazione dai primi principi, mi piace la risposta di Ryan O'Donnell . Ma per un trattamento algebrico di livello leggermente superiore, ecco come lo farei.
La caratteristica principale di un'operazione controllata , per qualsiasi U unitaria , è che (coerentemente) esegue un'operazione su alcuni qubit a seconda del valore di un singolo qubit. Il modo in cui possiamo scrivere esplicitamente algebricamente (con il controllo sul primo qubit) è:
dove è una matrice identità della stessa dimensione come . Qui, e sono proiettori sugli stati eUU1 U | 0 ⟩
CU=|0⟩⟨0|⊗1+|1⟩⟨1|⊗U
1U| 1 ⟩|0⟩⟨0|| 0 ⟩ | 1 ⟩|1⟩⟨1||0⟩|1⟩ del qubit di controllo - ma non li stiamo usando qui come elementi di una misurazione, ma per descrivere l'effetto sugli altri qubit a seconda dell'uno o dell'altro sottospazio dello spazio degli stati del primo qubit.
Possiamo usarlo per derivare la matrice per il gate che esegue un'operazione su qubit 3, coerentemente condizionata sullo stato di qubit 1, pensando a questo come un controllo- operazione sui qubit 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⎤⎦⎥⎥⎥,
dove gli ultimi due sono rappresentazioni di matrici a blocchi per risparmiare spazio (e sanità mentale).
Meglio ancora: possiamo riconoscere che - a un certo livello matematico in cui ci permettiamo di renderci conto che l'ordine dei fattori tensoriali non deve essere in un ordine fisso - il controllo e l'obiettivo dell'operazione possono essere su due tensori e che possiamo compilare la descrizione dell'operatore su tutti gli altri qubit con . Ciò ci consentirebbe di passare direttamente alla rappresentazione
C X 1 , 312C X 3 , 1
CX1,3==|0⟩⟨0|control⊗12uninvolved⊗12target⎡⎣⎢⎢⎢12020202021202020202020202020202⎤⎦⎥⎥⎥+|1⟩⟨1|control⊗12uninvolved⊗Xtarget+⎡⎣⎢⎢⎢02020202020202020202X02020202X⎤⎦⎥⎥⎥
e ci permette anche di vedere immediatamente cosa fare se i ruoli di controllo e target sono invertiti:
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⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥.
Ma soprattutto: se riesci a scrivere questi operatori algebricamente, puoi fare i primi passi per dispensare interamente con le matrici giganti, invece ragionando su questi operatori algebricamente usando espressioni come
e
C X 3 , 1 = 1 2CX1,3=|0⟩⟨0|⊗12⊗12+|1⟩⟨1|⊗12⊗XCX3,1=12⊗12⊗|0⟩⟨0|+X⊗12⊗|1⟩⟨1|. Ci sarà un limite a quanto puoi fare con questi, ovviamente - è improbabile che un semplice cambiamento nella rappresentazione renda un algoritmo quantico difficile risolvibile in modo efficiente, figuriamoci trattabile mediante calcolo manuale - ma puoi ragionare su circuiti semplici in modo molto più efficace usando queste espressioni che con gigantesche matrici spaziali.