疑問

CNOTゲートは、制御ビットの状態を判断してターゲットビットにNOTをかける操作です。制御ビットとターゲットビットをそれぞれ単独のQubitに分離可能な場合は、簡単に理解できるのですが、Bell Basis\(\frac{1}{\sqrt{2}}\begin{bmatrix} 1 \\ 0 \\ 0 \\ 1 \end{bmatrix}\)のような分離不可能な状態にCNOTをかける場合どのように考えればいいのでしょう?
CNOTゲートの説明を見てるとEntangled(量子もつれ)状態のQubitにもCNOTをかけれると書いてありますが、考え方がよくわかりません。

Experiment with Q# QDK Simulator

とりあえず、Q# QDKのSimulatorを使ってどのように動くかを見てみます。
まず、2 Qubit用意し、ビット0にアダマール変換をかけて、ビット0を制御ビット、ビット1をターゲットビットにしてCNOTをかけることでBell Basisを作ります。

TestOperations.qs
namespace TestOperations
{
    open Microsoft.Quantum.Intrinsic;
    open Microsoft.Quantum.Diagnostics;

    operation EntangledCnot () : Unit {
        using (x = Qubit[2]){
            H(x[0]);
            CNOT(x[0],x[1]); 
	    // 2Qbits are Bell basis and entangled
            DumpRegister((), [x[0]]);
            DumpRegister((), [x[1]]);
            DumpMachine();
	    // 2Qbits are Bell basis and entangled
            CNOT(x[0],x[1]);
            DumpMachine();
            ResetAll(x);
        }
    }
}

最初のCNOTをかけた後に2つのQubitの状態をDumpRegister()とDumpMachineで見てみます。
DumpRegisterはQubitの状態を1ビットずつ見る機能で、DumpMachineは全体のQubitの状態を見る機能です。
この時点で2つのQubitはBell Basisになっており、Bell BasisはEntangled状態なのでDumpRegisterは1Qubitずつに分けて状態を見ることはできないと返ってきます。これは期待通りの動作です。
DumpMachineではBell Basisになっていることを確認できます。
-----DumpRegister---------------->
# wave function for qubits with ids (least to most significant): 0
## Qubits were entangled with an external qubit. Cannot dump corresponding wave function. ##
# wave function for qubits with ids (least to most significant): 1
## Qubits were entangled with an external qubit. Cannot dump corresponding wave function. ##
-----DumpMachine----------------->
# wave function for qubits with ids (least to most significant): 0;1
∣0❭:     0.707107 +  0.000000 i  ==     ***********          [ 0.500000 ]     --- [  0.00000 rad ]
∣1❭:     0.000000 +  0.000000 i  ==                          [ 0.000000 ]
∣2❭:     0.000000 +  0.000000 i  ==                          [ 0.000000 ]
∣3❭:     0.707107 +  0.000000 i  ==     ***********          [ 0.500000 ]     --- [  0.00000 rad ]


次にこの状態でさらにCNOTをかけてみます。
-----DumpRegister---------------->
# wave function for qubits with ids (least to most significant): 0
∣0❭:     0.707107 +  0.000000 i  ==     ***********          [ 0.500000 ]     --- [  0.00000 rad ]
∣1❭:     0.707107 +  0.000000 i  ==     ***********          [ 0.500000 ]     --- [  0.00000 rad ]
# wave function for qubits with ids (least to most significant): 1
∣0❭:     1.000000 +  0.000000 i  ==     ******************** [ 1.000000 ]     --- [  0.00000 rad ]
∣1❭:     0.000000 +  0.000000 i  ==                          [ 0.000000 ]
-----DumpMachine----------------->
# wave function for qubits with ids (least to most significant): 0;1 ∣0❭: 0.707107 + 0.000000 i == *********** [ 0.500000 ] --- [ 0.00000 rad ] ∣1❭: 0.707107 + 0.000000 i == *********** [ 0.500000 ] --- [ 0.00000 rad ] ∣2❭: 0.000000 + 0.000000 i == [ 0.000000 ] ∣3❭: 0.000000 + 0.000000 i == [ 0.000000 ]

そうすると、最初のCNOTをかける前の状態に戻りました。

基本的な考え方 

量子もつれ状態のQubitにCNOTをかける場合は、テンソル積に分解することを考える前にcomputationla basisの足し算に分解します。今回の場合Bell basisは下記のように表現できます。

\[|\psi\rangle = \frac{1}{\sqrt{2}}(|00\rangle + |11\rangle)\]
この状態にそれぞれCNOTをかけてやります。\(|00\rangle\)では何も起こらず\(|11\rangle\)にはNOTが働くので下記の結果になります。
\[CNOT(\frac{1}{\sqrt{2}}(|00\rangle + |11\rangle)) = \frac{1}{\sqrt{2}}(|00\rangle + |10\rangle) \]