Cirq icon indicating copy to clipboard operation
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

Open Strilanc opened this issue 2 years ago • 5 comments

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.

Strilanc avatar Jul 08 '22 18:07 Strilanc

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.

dabacon avatar Jul 12 '22 05:07 dabacon

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".

Strilanc avatar Jul 16 '22 19:07 Strilanc

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.)

daxfohl avatar Jul 16 '22 19:07 daxfohl

From Cirq sync - biggest question is whether changing text diagram output would be considered a breaking change.

verult avatar Aug 10 '22 18:08 verult

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

seunomonije avatar Aug 17 '22 17:08 seunomonije