Skip to content

In text diagrams, writing a classical bit is shown as a control while using it as a control is not shown as a control #5688

Open
@Strilanc

Description

@Strilanc
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.

Activity

changed the title [-]In text diagrams, writing a classical bit is shown as a control and using it is not shown as a control[/-] [+]In text diagrams, writing a classical bit is shown as a control while using it as a control is not shown as a control[/+] on Jul 8, 2022
dabacon

dabacon commented on Jul 12, 2022

@dabacon
Collaborator

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.

Strilanc

Strilanc commented on Jul 16, 2022

@Strilanc
ContributorAuthor

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

daxfohl

daxfohl commented on Jul 16, 2022

@daxfohl
Collaborator

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

verult

verult commented on Aug 10, 2022

@verult
Collaborator

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

added
triage/acceptedA consensus emerged that this bug report, feature request, or other action should be worked on
and removed
triage/discussNeeds decision / discussion, bring these up during Cirq Cynque
on Aug 17, 2022
seunomonije

seunomonije commented on Aug 17, 2022

@seunomonije
Contributor

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

linked a pull request that will close this issue on Apr 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/circuitsarea/visualizationkind/bug-reportSomething doesn't seem to work.triage/acceptedA consensus emerged that this bug report, feature request, or other action should be worked on

    Type

    No type

    Projects

    Status

    No status

    Relationships

    None yet

      Participants

      @Strilanc@dabacon@daxfohl@mhucka@verult

      Issue actions

        In text diagrams, writing a classical bit is shown as a control while using it as a control is not shown as a control · Issue #5688 · quantumlib/Cirq