braket.cpp running notation (x,y) is complex number x+iy vectors are printed vec[j] = (x,y) matrices are printed mat[i][j] = (x,y) kets are printed (x,y)|0> + (p,q)|1> bras are printed (x,y)<0| + (p,q)<1| to be a valid physical qubit, ket notation a|0> + b|1> abs(a^2 + b^2) must equal 1 to be a valid physical qubit, bra notation a<0| + b<1| abs(a^2 + b^2) must equal 1 a and b are shown as (x,y) x real part, y imaginary part a is first element of vector, b is second element of vector From math we know e^i theta is a complex number with magnitude 1 From Euler's formula e^i theta = cos(theta) + i sin(theta) Thus a qubit can be written as two angles, theta and phi: cos(theta) |0> + e^-i phi sin(theta) |1>) (not used in this simulation) In computer code and printout: vector = matrix * vector ketout = matvec(mat, ketin) state vector |0>|1> = |01> = ket01 = outp(ket0,ket1) outer product, outp, result is four complex numbers |a>|b>|c> = |abc> is a state vector having 8 complex numbers a ket represents a qubit, stored as a vector of two complex numbers logical zero = |0> = ket0 = a column vector vec[0] = (1,0) vec[1] = (0,0) logical one = |1> = ket1 = vec[0] = (0,0) vec[1] = (1,0) logical zero bra = <0| = bra0 = row vector bra0 <0| =(1,0)(0,0) logical one bra = <1| = bra1 = row vector bra1 <0| =(0,0)(1,0) a braket is the inner=dot product producing a complex number <0||0> = (1,0) <0||1> = (0,0) <1||0> = (0,0) <1||1> = (1,0) state of qubits are kets combined with tensor product=outer product A two qubit system will be on the surface of Bloch unit sphere |x> = a|0> + b|1> , |y> = c|0> + d|1>, a,b,c,d complex then |x>|y> = |xy> = four entry vector = using complex conjugate of c and d ac|00> + ad|01> + bc|10> + bd|11> written as a vector = | ac ad bc bd | just four complex numbers, a 'state' mathematically, complex tensor product of |a b| with |c d| many examples are shown both in bra ket notation and as vectors |0>|0> tensor product resulting in a vector, outp() |0>|0> = |00> = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) |0>|1> = |01> = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (0,0) |1>|0> = |10> = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) |1>|1> = |11> = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (1,0) Note: reading state |011> binary as 3, subscript [3] is (1,0) outer product, outp function is general |0>|0>|0> outp(outp(ket0, ket0), ket0)=|000> vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) |0>|0>|1> outp(outp(ket0, ket0), ket1)=|001> vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) |0>|1>|0> outp(outp(ket0, ket1), ket0)=|010> vec[0] = (0,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) |0>|1>|1> outp(outp(ket0, ket1), ket1)=|011> vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (1,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) |1>|0>|0> outp(outp(ket1, ket0), ket0)=|100> vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (1,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) |1>|0>|1> outp(outp(ket1, ket0), ket1)=|101> vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (1,0) vec[6] = (0,0) vec[7] = (0,0) |1>|1>|0> outp(outp(ket1, ket1), ket0)=|110> vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (1,0) vec[7] = (0,0) |1>|1>|1> outp(outp(ket1, ket1), ket1)=|111> vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (1,0) tensor product to make matrix operator |0> tensor |0> mat[0][0] = (1,0) mat[0][1] = (0,0) mat[1][0] = (0,0) mat[1][1] = (0,0) operator |0> tensor |1> mat[0][0] = (0,0) mat[0][1] = (1,0) mat[1][0] = (0,0) mat[1][1] = (0,0) operator |1> tensor |0> mat[0][0] = (0,0) mat[0][1] = (0,0) mat[1][0] = (1,0) mat[1][1] = (0,0) operator |1> tensor |1> mat[0][0] = (0,0) mat[0][1] = (0,0) mat[1][0] = (0,0) mat[1][1] = (1,0) a=ket0+ket1 = vec[0] = (1,0) vec[1] = (1,0) should be a|0> + b|1> where a^2+b^2=1 a=0.7071, b=0.7071 or scale sum vec[0] = (0.7071,0) vec[1] = (0.7071,0) included ket00 is |00>, etc included ket000 is |000>, etc haramard operator ket out = |H| ket in mat[0][0] = (0.707107,0) mat[0][1] = (0.707107,0) mat[1][0] = (0.707107,0) mat[1][1] = (-0.707107,0) keth = |H||0> vec[0] = (0.707107,0) vec[1] = (0.707107,0) keth = |H||1> vec[0] = (0.707107,0) vec[1] = (-0.707107,0) Pauli-X is a single qubit logical not operator Pauli-X operator ket out = |PX| ket in mat[0][0] = (0,0) mat[0][1] = (1,0) mat[1][0] = (1,0) mat[1][1] = (0,0) keth = |PX||0> vec[0] = (0,0) vec[1] = (1,0) keth = |PX||1> vec[0] = (1,0) vec[1] = (0,0) Pauli-Y operator ket out = |PY| ket in mat[0][0] = (0,0) mat[0][1] = (0,-1) mat[1][0] = (0,1) mat[1][1] = (0,0) keth = |PY||0> vec[0] = (0,0) vec[1] = (0,1) keth = |PY||1> vec[0] = (0,-1) vec[1] = (0,0) Pauli-Z operator ket out = |PZ| ket in mat[0][0] = (1,0) mat[0][1] = (0,0) mat[1][0] = (0,0) mat[1][1] = (0,-1) keth = |PZ||0> vec[0] = (1,0) vec[1] = (0,0) keth = |PZ||1> vec[0] = (0,0) vec[1] = (0,-1) cnot operator two input, two output the first entry in ket is the control mat[0][0] = (1,0) mat[0][1] = (0,0) mat[0][2] = (0,0) mat[0][3] = (0,0) mat[1][0] = (0,0) mat[1][1] = (1,0) mat[1][2] = (0,0) mat[1][3] = (0,0) mat[2][0] = (0,0) mat[2][1] = (0,0) mat[2][2] = (0,0) mat[2][3] = (1,0) mat[3][0] = (0,0) mat[3][1] = (0,0) mat[3][2] = (1,0) mat[3][3] = (0,0) cnot |00> ket00 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) check |00> cnot |01> ket01 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (0,0) check |01> cnot |10> ket10 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (1,0) check |11> cnot |11> ket11 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) check |10> Now Repeat using cnot2 function cnot |0>|0> = vec[0] = (1,-0) vec[1] = (0,-0) check |0> cnot |0>|1> = vec[0] = (0,-0) vec[1] = (1,-0) check |1> cnot |1>|0> = vec[0] = (0,-0) vec[1] = (1,-0) check |1> cnot |1>|1> = vec[0] = (1,-0) vec[1] = (0,-0) check |0> Now Repeat using register, pair of kets |0>,|1> rather than |0>|1> = |01> reg00 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) reg01 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (1,0) reg10 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (1,0) vec[3] = (0,0) reg11 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (1,0) cnot |0>,|0> reg00 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (1,0) reg[0]= |0> reg[1]= |1> cnot |0>,|1> reg01 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) reg[0]= |0> reg[1]= |0> cnot |1>,|0> reg10 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (1,0) reg[0]= |1> reg[1]= |1> cnot |1>,|1> reg11 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (1,0) vec[3] = (0,0) reg[0]= |1> reg[1]= |0> ccnot is also known as Toffoli ccnot operator three input, three output the first two ket are the control mat[0][0] = (1,0) mat[0][1] = (0,0) mat[0][2] = (0,0) mat[0][3] = (0,0) mat[0][4] = (0,0) mat[0][5] = (0,0) mat[0][6] = (0,0) mat[0][7] = (0,0) mat[1][0] = (0,0) mat[1][1] = (1,0) mat[1][2] = (0,0) mat[1][3] = (0,0) mat[1][4] = (0,0) mat[1][5] = (0,0) mat[1][6] = (0,0) mat[1][7] = (0,0) mat[2][0] = (0,0) mat[2][1] = (0,0) mat[2][2] = (1,0) mat[2][3] = (0,0) mat[2][4] = (0,0) mat[2][5] = (0,0) mat[2][6] = (0,0) mat[2][7] = (0,0) mat[3][0] = (0,0) mat[3][1] = (0,0) mat[3][2] = (0,0) mat[3][3] = (1,0) mat[3][4] = (0,0) mat[3][5] = (0,0) mat[3][6] = (0,0) mat[3][7] = (0,0) mat[4][0] = (0,0) mat[4][1] = (0,0) mat[4][2] = (0,0) mat[4][3] = (0,0) mat[4][4] = (1,0) mat[4][5] = (0,0) mat[4][6] = (0,0) mat[4][7] = (0,0) mat[5][0] = (0,0) mat[5][1] = (0,0) mat[5][2] = (0,0) mat[5][3] = (0,0) mat[5][4] = (0,0) mat[5][5] = (1,0) mat[5][6] = (0,0) mat[5][7] = (0,0) mat[6][0] = (0,0) mat[6][1] = (0,0) mat[6][2] = (0,0) mat[6][3] = (0,0) mat[6][4] = (0,0) mat[6][5] = (0,0) mat[6][6] = (0,0) mat[6][7] = (1,0) mat[7][0] = (0,0) mat[7][1] = (0,0) mat[7][2] = (0,0) mat[7][3] = (0,0) mat[7][4] = (0,0) mat[7][5] = (0,0) mat[7][6] = (1,0) mat[7][7] = (0,0) ccnot |0>|0>|0> ket000 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) check |000> ccnot |0>|0>|1> ket001 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) check |001> ccnot |0>|1>|0> ket010 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) check |010> ccnot |0>|1>|1> ket011 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (1,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) check |011> ccnot |1>|0>|0> ket100 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (1,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) check |100> ccnot |1>|0>|1> ket101 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (1,0) vec[6] = (0,0) vec[7] = (0,0) check |101> ccnot |1>|1>|0> ket110 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (1,0) check |111> ccnot |1>|1>|1> ket111 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (1,0) vec[7] = (0,0) check |110> swap2 operator two input, two output mat[0][0] = (1,0) mat[0][1] = (0,0) mat[0][2] = (0,0) mat[0][3] = (0,0) mat[1][0] = (0,0) mat[1][1] = (0,0) mat[1][2] = (1,0) mat[1][3] = (0,0) mat[2][0] = (0,0) mat[2][1] = (1,0) mat[2][2] = (0,0) mat[2][3] = (0,0) mat[3][0] = (0,0) mat[3][1] = (0,0) mat[3][2] = (0,0) mat[3][3] = (1,0) swap2 |0>|0> ket00 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) check |00> swap2 |0>|1> ket01 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) check |10> swap2 |1>|0> ket10 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (0,0) check |01> swap2 |1>|1> ket11 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (1,0) check |11> cswap operator three input, three output the first ket is the control mat[0][0] = (1,0) mat[0][1] = (0,0) mat[0][2] = (0,0) mat[0][3] = (0,0) mat[0][4] = (0,0) mat[0][5] = (0,0) mat[0][6] = (0,0) mat[0][7] = (0,0) mat[1][0] = (0,0) mat[1][1] = (1,0) mat[1][2] = (0,0) mat[1][3] = (0,0) mat[1][4] = (0,0) mat[1][5] = (0,0) mat[1][6] = (0,0) mat[1][7] = (0,0) mat[2][0] = (0,0) mat[2][1] = (0,0) mat[2][2] = (1,0) mat[2][3] = (0,0) mat[2][4] = (0,0) mat[2][5] = (0,0) mat[2][6] = (0,0) mat[2][7] = (0,0) mat[3][0] = (0,0) mat[3][1] = (0,0) mat[3][2] = (0,0) mat[3][3] = (1,0) mat[3][4] = (0,0) mat[3][5] = (0,0) mat[3][6] = (0,0) mat[3][7] = (0,0) mat[4][0] = (0,0) mat[4][1] = (0,0) mat[4][2] = (0,0) mat[4][3] = (0,0) mat[4][4] = (1,0) mat[4][5] = (0,0) mat[4][6] = (0,0) mat[4][7] = (0,0) mat[5][0] = (0,0) mat[5][1] = (0,0) mat[5][2] = (0,0) mat[5][3] = (0,0) mat[5][4] = (0,0) mat[5][5] = (0,0) mat[5][6] = (1,0) mat[5][7] = (0,0) mat[6][0] = (0,0) mat[6][1] = (0,0) mat[6][2] = (0,0) mat[6][3] = (0,0) mat[6][4] = (0,0) mat[6][5] = (1,0) mat[6][6] = (0,0) mat[6][7] = (0,0) mat[7][0] = (0,0) mat[7][1] = (0,0) mat[7][2] = (0,0) mat[7][3] = (0,0) mat[7][4] = (0,0) mat[7][5] = (0,0) mat[7][6] = (0,0) mat[7][7] = (1,0) cswap |0>|0>|0> = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) check |000> cswap |0>|0>|1> = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) check |001> cswap |0>|1>|0> = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) check |010> cswap |0>|1>|1> = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (1,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) check |011> cswap |1>|0>|0> = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (1,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (0,0) check |100> cswap |1>|0>|1> = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (1,0) vec[7] = (0,0) check |110> cswap |1>|1>|0> = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (1,0) vec[6] = (0,0) vec[7] = (0,0) check |101> cswap |1>|1>|1> = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[4] = (0,0) vec[5] = (0,0) vec[6] = (0,0) vec[7] = (1,0) check |111> rotation Rk, c_mat = Rk_make(k) p=4, x=(0,1.5708), exp(x)=(6.12323e-17,1) Rk2 = mat[0][0] = (1,0) mat[0][1] = (0,0) mat[1][0] = (0,0) mat[1][1] = (6.12323e-17,1) keta = |Rk2||0> vec[0] = (1,0) vec[1] = (0,0) keta = |Rk2||1> vec[0] = (0,0) vec[1] = (6.12323e-17,1) p=8, x=(0,0.785398), exp(x)=(0.707107,0.707107) Rk3 = mat[0][0] = (1,0) mat[0][1] = (0,0) mat[1][0] = (0,0) mat[1][1] = (0.707107,0.707107) keta = |Rk3||0> vec[0] = (1,0) vec[1] = (0,0) keta = |Rk3||1> vec[0] = (0,0) vec[1] = (0.707107,0.707107) p=16, x=(0,0.392699), exp(x)=(0.92388,0.382683) Rk4 = mat[0][0] = (1,0) mat[0][1] = (0,0) mat[1][0] = (0,0) mat[1][1] = (0.92388,0.382683) keta = |Rk4||0> vec[0] = (1,0) vec[1] = (0,0) keta = |Rk4||1> vec[0] = (0,0) vec[1] = (0.92388,0.382683) controlled Rk, cRk(k) cRk4 = mat[0][0] = (1,0) mat[0][1] = (0,0) mat[0][2] = (0,0) mat[0][3] = (0,0) mat[1][0] = (0,0) mat[1][1] = (1,0) mat[1][2] = (0,0) mat[1][3] = (0,0) mat[2][0] = (0,0) mat[2][1] = (0,0) mat[2][2] = (1,0) mat[2][3] = (0,0) mat[3][0] = (0,0) mat[3][1] = (0,0) mat[3][2] = (0,0) mat[3][3] = (0.92388,0.382683) reg = |cRk4||0>|0> vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) reg = |cRk4||0>|1> vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (0,0) reg = |cRk4||1>|0> vec[0] = (0,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) reg = |cRk4||1>|1> vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0.92388,0.382683) get_ket(0, ket000) = vec[0] = (1,0) vec[1] = (0,0) get_ket(1, ket000) = vec[0] = (0,0) vec[1] = (0,0) get_ket(2, ket000) = vec[0] = (0,0) vec[1] = (0,0) get_ket(0, ket010) = vec[0] = (0,0) vec[1] = (0,0) get_ket(1, ket010) = vec[0] = (1,0) vec[1] = (0,0) get_ket(2, ket010) = vec[0] = (0,0) vec[1] = (0,0) get_ket(0, ket111) = vec[0] = (0,0) vec[1] = (0,0) get_ket(1, ket111) = vec[0] = (0,0) vec[1] = (0,0) get_ket(2, ket111) = vec[0] = (0,0) vec[1] = (0,0) root sigma x operator two input, two output the first entry in ket is the control mat[0][0] = (1,0) mat[0][1] = (0,0) mat[0][2] = (0,0) mat[0][3] = (0,0) mat[1][0] = (0,0) mat[1][1] = (1,0) mat[1][2] = (0,0) mat[1][3] = (0,0) mat[2][0] = (0,0) mat[2][1] = (0,0) mat[2][2] = (0.5,0.5) mat[2][3] = (0.5,-0.5) mat[3][0] = (0,0) mat[3][1] = (0,0) mat[3][2] = (0.5,-0.5) mat[3][3] = (0.5,0.5) rsx |00> ket00 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) rsx |01> ket01 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (0,0) rsx |10> ket10 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0.5,0.5) vec[3] = (0.5,-0.5) rsx |11> ket11 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0.5,-0.5) vec[3] = (0.5,0.5) root sigma x transpose operator two input, two output the first entry in ket is the control mat[0][0] = (1,0) mat[0][1] = (0,0) mat[0][2] = (0,0) mat[0][3] = (0,0) mat[1][0] = (0,0) mat[1][1] = (1,0) mat[1][2] = (0,0) mat[1][3] = (0,0) mat[2][0] = (0,0) mat[2][1] = (0,0) mat[2][2] = (0.5,-0.5) mat[2][3] = (0.5,0.5) mat[3][0] = (0,0) mat[3][1] = (0,0) mat[3][2] = (0.5,0.5) mat[3][3] = (0.5,-0.5) rsxt |00> ket00 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) rsxt |01> ket01 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (0,0) rsxt |10> ket10 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0.5,-0.5) vec[3] = (0.5,0.5) rsxt |11> ket11 = vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0.5,0.5) vec[3] = (0.5,-0.5) Now Repeat using register, pair of kets |0>,|1> rather than |0>|1> = |01> reg00 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) reg01 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (1,0) reg10 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (1,0) vec[3] = (0,0) reg11 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (1,0) cnot |0>,|0> reg00 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0.5,-0.5) vec[3] = (0.5,0.5) cnot |0>,|1> reg01 = vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0.5,0.5) vec[3] = (0.5,-0.5) cnot |1>,|0> reg10 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0.5,-0.5) vec[3] = (0.5,0.5) cnot |1>,|1> reg11 = vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0.5,0.5) vec[3] = (0.5,-0.5) keta = vec[0] = (0,0) vec[1] = (1,0) ketb = vec[0] = (0.5,0.5) vec[1] = (0.5,-0.5) check that ket00, ket01, ket10, ket11 are still OK vec[0] = (1,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (0,0) vec[0] = (0,0) vec[1] = (1,0) vec[2] = (0,0) vec[3] = (0,0) vec[0] = (0,0) vec[1] = (0,0) vec[2] = (1,0) vec[3] = (0,0) vec[0] = (0,0) vec[1] = (0,0) vec[2] = (0,0) vec[3] = (1,0) braket.cpp finished