Qiskit / qiskit

Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.
https://www.ibm.com/quantum/qiskit
Apache License 2.0
5.1k stars 2.34k forks source link

Organize the synthesis library of multi-controlled gates #12863

Open ShellyGarion opened 2 months ago

ShellyGarion commented 2 months ago

What should we add?

Currently the synthesis methods of the multi-controlled gates are part of their definition. We would like to have a single MCXGate() class, and an HLS plugin that checks the number of clean or dirty ancillas, and chooses the optimal synthesis method (see https://github.com/Qiskit/qiskit/pull/12729).

The synthesis library will therefore include a new section Multi-controlled gates synthesis which will include the following functions:

The following classes will be deprecated in Qiskit 2.0:

The following classes will remain in the circuit library (including synthesis methods with ancillas when applicable):

Question: Should we add the gates MCRX, MCRY and MCRZ to the circuit library? See the discussion in https://github.com/Qiskit/qiskit/issues/12048

### Tasks
- [ ] https://github.com/Qiskit/qiskit/pull/12904
- [ ] https://github.com/Qiskit/qiskit/pull/12961
- [ ] https://github.com/Qiskit/qiskit/pull/13150
Cryoris commented 2 months ago

Regarding naming: Since there could be multiple methods that use no ancillas, would it make sense to use unique names for the methods, like in e.g. the linear function synthesis?

Regarding MCRX/Y/Z classes: I'd say no, since that opens the door to having a class for each multi-controlled gate. Instead I think we should just have AnnotatedOperations that the high-level synthesis calls the correct synthesis function for.

ShellyGarion commented 2 months ago

Since there could be multiple methods that use no ancillas, would it make sense to use unique names for the methods, like in e.g. the linear function synthesis?

Yes. we could add the initials of the author names to the synthesis methods (also relevant for methods that use ancillas)

ShellyGarion commented 2 months ago

Regarding the mcrx, mcry and mcrz methods (copying the relevant paragraph of #12048):

  1. The angles should be of type ParameterValueType (not only float).
  2. Add ctrl_state parameter (like in MCXGate or mcx method).
  3. The control method of the rx, ry and rz gates, should call the relevant synthesis methods of mcrx, mcry and mcrz.