Estado entrelazado bipartito múltiple en Cirq

Oct 22 2020

Estoy tratando de crear este estado: rho = = q. rho_ {1,2} + r. rho_ {2,3} + s. rho {1,3} + (1 cuarto). rho_separable

Y escribí este código:

   import random
import numpy as np
import cirq

circuit, circuit2, circuit3   = cirq.Circuit()
p = 0.2
q = 0.1
r = 0.3
alice, bob, charlie = cirq.LineQubit.range(1, 4)
rho_12 = circuit.append([cirq.H(alice), cirq.CNOT(alice, bob)]) 
#circuit.append([cirq.H(alice), cirq.CNOT(alice, bob)]) 
rho_23 = circuit.append([cirq.H(bob), cirq.CNOT(bob, charlie)]) 
rho_13 = circuit.append([cirq.H(alice), cirq.CNOT(alice, charlie)]) 
circuit = rho_12 + rho_23 + rho_13
print(circuit)

Aquí tengo 2 problemas:

1) Esta línea no funciona: circuit = rho_12 + rho_23 + rho_13

2) No puedo multiplicar el estado con p o q o r. Lo que quiero decir es que no puedo escribir esta línea:

rho_12 = circuit.append([cirq.H(alice), cirq.CNOT(alice, bob)]) * q 

¿Podría mostrarme cómo puedo escribir este estado?

Respuestas

CraigGidney Oct 22 2020 at 04:28

Parece pensar que appendestá devolviendo un circuito, en lugar de modificar el circuito al que lo llamó. circuit.append(op)no devuelve nada, agrega una operación a circuit.

alice, bob, charlie = cirq.LineQubit.range(1, 4)
circuit = cirq.Circuit()
circuit.append([cirq.H(alice), cirq.CNOT(alice, bob)])
circuit.append([cirq.H(bob), cirq.CNOT(bob, charlie)]) 
...

Alternativamente, puede hacer un nuevo circuito para cada una de las piezas y luego sumarlas:

rho_12 = cirq.Circuit(
    cirq.H(alice),
    cirq.CNOT(alice, bob),
)
...
circuit = rho_12 + rho_23 + rho_13