Skip to main content
IBM Quantum Platform

CDKMRippleCarryAdder

class qiskit.circuit.library.CDKMRippleCarryAdder(num_state_qubits, kind='full', name='CDKMRippleCarryAdder')

GitHub

Bases : Adder

Un circuit de transport d'ondulation pour effectuer une addition sur place sur deux registres de qubits.

A titre d'exemple, un circuit additionneur à portage ondulé qui effectue l'addition sur deux registres de 3 qubits avec un bit de portage (kind="full") est le suivant :

        ┌──────┐                                     ┌──────┐
 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 ├────────────────────────
                                └───┘

Les portes MAJ et UMA correspondent aux portes introduites en [1.] Notez que dans cette implémentation, les qubits du registre d'entrée sont ordonnés comme suit : tous les qubits du premier registre d'entrée, suivis de tous les qubits du deuxième registre d'entrée.

Deux types d'additionneurs différents sont pris en charge. En définissant l'argument kind , vous pouvez également choisir un demi-adder, qui n'a pas de carry-in, et un fixed-size-adder, qui n'a ni carry-in ni carry-out, et agit donc sur des registres de taille fixe. Contrairement à l'ordre complet, ces circuits ont besoin d'un qubit d'aide supplémentaire.

Le schéma du circuit de l'additionneur à virgule fixe (kind="fixed") pour des entrées de la taille de 3 qubits est le suivant

        ┌──────┐┌──────┐                ┌──────┐┌──────┐
   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     ├
        └──────┘                                └──────┘

Il a un qubit de moins que l'ordre complet puisqu'il n'a pas de report, mais il utilise un qubit d'aide à la place du report, de sorte qu'il n'a qu'un qubit de moins, et non deux.

Voir aussi

Les objets de porte génériques suivants effectuent des additions, comme cette classe de circuit, mais permettent au compilateur de sélectionner la décomposition optimale en fonction du contexte. Des implémentations spécifiques peuvent être définies via le site HLSConfigpar exemple, ce circuit peut être choisi via Adder=["ripple_c04"].

ModularAdderGate: Un additionneur générique inplace, modulo 2n2^n. Cette

est fonctionnellement équivalent à kind="fixed".

AdderGate: Un additionneur générique inplace. Ce

est fonctionnellement équivalent à kind="half".

FullAdderGate: Un additionneur générique inplace, avec un bit de report. Ce

est fonctionnellement équivalent à kind="full".

Références :

[1] Cuccaro et al, Un nouveau circuit quantique d'addition de l'ondulation de la charge, 2004. arXiv:quant-ph/0410184

[2] Vedral et al, Réseaux quantiques pour les opérations arithmétiques élémentaires, 1995. arXiv:quant-ph/9511018

Paramètres

  • num_state_qubits (int) – Le nombre de qubits dans l'un ou l'autre des registres d'entrée pour l'état a|a\rangle ou b|b\rangle. Les deux registres d'entrée doivent avoir le même nombre de qubits.
  • kind (str) – Le type d'additionneur peut être 'full' pour un additionneur complet, 'half' pour un demi-additionneur ou 'fixed' pour un additionneur de taille fixe. Un additionneur complet comprend à la fois l'entrée et la sortie, un demi-additionneur seulement l'entrée, et un additionneur de taille fixe ni l'entrée ni la sortie.
  • name (str) – Le nom de l'objet circuit.

Augmentations

ValueError - Si num_state_qubits est inférieur à 1.


Attributs

name

Type : str

Un nom lisible par l'homme pour le circuit.

Exemple

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.