Cirq
Cirq copied to clipboard
In text diagrams, writing a classical bit is shown as a control while using it as a control is not shown as a control
import cirq
print(cirq.Circuit(
cirq.measure(cirq.LineQubit(0), key="abc"),
cirq.X(cirq.LineQubit(0)).with_classical_controls("abc"),
))
0: ─────M───X───
║ ║
abc: ═══@═══^═══
The @
means control elsewhere in diagrams. The character below the M
isn't a control it's an output; it should probably be an X
. And the ^
for the control on the NOT gate should be an @
since that means control.
Would making the second one an "@" would be confusing, since it might make someone think it actually is a CNOT? Similarly for the first making it an "X" would also be slightly misleading in that people could think this means a measurement is a someone an "X" gate.
Would making the second one an "@" would be confusing, since it might make someone think it actually is a CNOT?
But it is a controlled not. It's a classically controlled not. They wouldn't be confused about that, they would be right. In any case, the double lines on the vertical bar is a dead giveaway that it's classically controlled.
people could think this means a measurement is a someone an "X" gate.
A measurement kinda is a NOT gate on a classical bit, controlled by a quantum bit. I don't think there's any physical experiment you can do that distinguishes "measurement" from "CNOT from qubit to bit where bit is promised to be initially OFF".
I agree with changing the control to @
. For changing the target to X
, my main concern is that now that we allow multiple writes to the same measurement key, X
looks like an XOR, when it's actually just a write. Otherwise I agree here as well.
(I had also been thinking that we might want to add an "op" param to measure
, allowing things like cirq.measure(q, key=m, op=XOR)
, which would XOR the current measurement with the previous one, and I kind of wanted to reserve X
for that.)
From Cirq sync - biggest question is whether changing text diagram output would be considered a breaking change.
From Cirq sync:
- Maybe the choice that we made to display classical control is not the best design choice, may not really be a bug
- More of a behavior change to something that is obscure. Current behavior is awkward and questionable whether or not it’s intended.
- Maybe we should introduce a new tag for issues like this
Consensus: We should accept this as a bug and get fixed