Skip to main content
IBM Quantum Platform

CDKMRippleCarryAdder

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

GitHub

Bases: Adder

Un circuito ripple-carry para realizar sumas in-place en dos registros qubit.

Como ejemplo, un circuito sumador de acarreo de ondulación que realiza la suma en dos registros de 3 qubits de tamaño con un bit de acarreo (kind="full") es como sigue:

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

Aquí las puertas MAJ y UMA corresponden a las puertas introducidas en [1]. Nótese que en esta implementación los qubits del registro de entrada se ordenan como todos los qubits del primer registro de entrada, seguidos de todos los qubits del segundo registro de entrada.

Se admiten dos tipos diferentes de sumadores. Estableciendo el argumento kind , también puede elegir una media escalera, que no tiene carry-in, y una escalera de tamaño fijo, que no tiene ni carry-in ni carry-out, y por lo tanto actúa sobre tamaños de registro fijos. A diferencia de la escalera completa, estos circuitos necesitan un qubit auxiliar adicional.

El diagrama de circuito para el sumador de punto fijo (kind="fixed") en entradas de tamaño 3qubit es

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

Tiene un qubit menos que la escalera completa, ya que no tiene el carry-out, pero utiliza un qubit de ayuda en lugar del carry-in, por lo que sólo tiene un qubit menos, no dos.

Consulte también

Los siguientes objetos puerta genéricos realizan adiciones, como esta clase de circuito, pero permiten al compilador seleccionar la descomposición óptima basada en el contexto. Las implementaciones específicas pueden establecerse a través de HLSConfigpor ejemplo, este circuito puede elegirse a través de Adder=["ripple_c04"].

ModularAdderGate: Un sumador genérico, módulo 2n2^n. Este

es funcionalmente equivalente a kind="fixed".

AdderGate: Un sumador inplace genérico. Este

es funcionalmente equivalente a kind="half".

FullAdderGate: Sumador inplace genérico, con un bit de arrastre. Este

es funcionalmente equivalente a kind="full".

Referencias:

[1] Cuccaro et al., Un nuevo circuito cuántico de adición por ondulación, 2004. arXiv:quant-ph/0410184

[2] Vedral et al., Redes cuánticas para operaciones aritméticas elementales, 1995. arXiv:quant-ph/9511018

Parámetros

  • num_state_qubits (int) – El número de qubits en cualquiera de los registros de entrada para el estado a|a\rangle o b|b\rangle. Los dos registros de entrada deben tener el mismo número de qubits.
  • kind (str) – El tipo de sumador, puede ser 'full' para un sumador completo, 'half' para un medio sumador, o 'fixed' para un sumador de tamaño fijo. Un sumador completo incluye tanto carry-in como carry-out, un medio sólo carry-out, y un sumador de tamaño fijo ni carry-in ni carry-out.
  • name (str) – El nombre del objeto circuito.

Eleva

ValueError - Si num_state_qubits es inferior a 1.


Atributos

name

Tipo: str

Un nombre legible para el circuito.

Ejemplo

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.