CDKMRippleCarryAdder
class qiskit.circuit.library.CDKMRippleCarryAdder(num_state_qubits, kind='full', name='CDKMRippleCarryAdder')
Basi: Adder
Un circuito di ripple-carry per eseguire l'addizione in-place su due registri di qubit.
A titolo di esempio, un circuito sommatore a ripple-carry che esegue l'addizione su due registri di dimensioni pari a 3 qubit con un bit di riporto (kind="full") è il seguente:
┌──────┐ ┌──────┐
cin_0: ┤2 ├─────────────────────────────────────┤2 ├
│ │┌──────┐ ┌──────┐│ │
a_0: ┤0 ├┤2 ├─────────────────────┤2 ├┤0 ├
│ ││ │┌──────┐ ┌──────┐│ ││ │
a_1: ┤ MAJ ├┤0 ├┤2 ├─────┤2 ├┤0 ├┤ UMA ├
│ ││ ││ │ │ ││ ││ │
a_2: ┤ ├┤ MAJ ├┤0 ├──■──┤0 ├┤ UMA ├┤ ├
│ ││ ││ │ │ │ ││ ││ │
b_0: ┤1 ├┤ ├┤ MAJ ├──┼──┤ UMA ├┤ ├┤1 ├
└──────┘│ ││ │ │ │ ││ │└──────┘
b_1: ────────┤1 ├┤ ├──┼──┤ ├┤1 ├────────
└──────┘│ │ │ │ │└──────┘
b_2: ────────────────┤1 ├──┼──┤1 ├────────────────
└──────┘┌─┴─┐└──────┘
cout_0: ────────────────────────┤ X ├────────────────────────
└───┘Qui le porte MAJ e UMA corrispondono alle porte introdotte in [1]. Si noti che in questa implementazione i qubit del registro di ingresso sono ordinati come tutti i qubit del primo registro di ingresso, seguiti da tutti i qubit del secondo registro di ingresso.
Sono supportati due diversi tipi di sommatori. Impostando l'argomento kind , è possibile scegliere anche un half-adder, che non ha un carry-in, e un fixed-sized-adder, che non ha né carry-in né carry-out e quindi agisce su registri di dimensioni fisse. A differenza del full-adder, questi circuiti necessitano di un qubit di aiuto aggiuntivo.
Lo schema del circuito per l'addizionatore a virgola fissa (kind="fixed") su ingressi di dimensioni pari a 3 qubit è
┌──────┐┌──────┐ ┌──────┐┌──────┐
a_0: ┤0 ├┤2 ├────────────────┤2 ├┤0 ├
│ ││ │┌──────┐┌──────┐│ ││ │
a_1: ┤ ├┤0 ├┤2 ├┤2 ├┤0 ├┤ ├
│ ││ ││ ││ ││ ││ │
a_2: ┤ ├┤ MAJ ├┤0 ├┤0 ├┤ UMA ├┤ ├
│ ││ ││ ││ ││ ││ │
b_0: ┤1 MAJ ├┤ ├┤ MAJ ├┤ UMA ├┤ ├┤1 UMA ├
│ ││ ││ ││ ││ ││ │
b_1: ┤ ├┤1 ├┤ ├┤ ├┤1 ├┤ ├
│ │└──────┘│ ││ │└──────┘│ │
b_2: ┤ ├────────┤1 ├┤1 ├────────┤ ├
│ │ └──────┘└──────┘ │ │
help_0: ┤2 ├────────────────────────────────┤2 ├
└──────┘ └──────┘Ha un qubit in meno rispetto al full-adder perché non ha il carry-out, ma usa un qubit di aiuto al posto del carry-in, quindi ha solo un qubit in meno, non due.
I seguenti oggetti gate generici eseguono addizioni, come questa classe di circuiti, ma consentono al compilatore di selezionare la decomposizione ottimale in base al contesto. Le implementazioni specifiche possono essere impostate tramite il sito HLSConfig, ad esempio questo circuito può essere scelto tramite Adder=["ripple_c04"].
ModularAdderGate: Un generico sommatore inplace, modulo . Questo
è funzionalmente equivalente a kind="fixed".
AdderGate: Un generico sommatore inplace. Questa serie di webinar
è funzionalmente equivalente a kind="half".
FullAdderGate: Un generico sommatore inplace, con un bit di riporto. Questa serie di webinar
è funzionalmente equivalente a kind="full".
Riferimenti:
[1] Cuccaro et al, Un nuovo circuito di addizione quantistica ripple-carry, 2004. arXiv:quant-ph/0410184
[2] Vedral et al, Reti quantistiche per operazioni aritmetiche elementari, 1995. arXiv:quant-ph/9511018
Parametri
- num_state_qubits (int) – Il numero di qubit in uno dei due registri di ingresso per lo stato o . I due registri di ingresso devono avere lo stesso numero di qubit.
- kind (str) – Il tipo di sommatore può essere
'full'per un sommatore completo,'half'per un mezzo sommatore o'fixed'per un sommatore a dimensione fissa. Un sommatore completo include sia il carry-in che il carry-out, un sommatore dimezzato solo il carry-out e un sommatore di dimensioni fisse né il carry-in né il carry-out. - name (str) – Il nome dell'oggetto circuito.
Aumenti
ValueError - Se num_state_qubits è inferiore a 1.
Attributi
name
Tipo: str
Un nome leggibile per il circuito.
Esempio
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit