Today, I’m continuing with the next exercise from the algorithms track. The task is to build a number adder using the Fourier space.
Firstly, a Fourier transform is applied on the initial state, i.e. a state |0> or |1> in the computational basis is flipped into the X-Y-plane. The qubits are then rotated around the Z-axis, with an angle according to the number to add. Eventually, the state is transformed back from the Fourier space.
The transformation rule for the QFT reads
If you now want to add to a state in the Fourier space, you have to rotate the qubits accordingly. It is important to notice, that a rotation only effects the |1> portion, but not the |0> portion of a qubit’s state.
Having that in mind, it was relatively straight forward to come up with the solution…
def qfunc_adder(m, wires):
"""Quantum function capable of adding m units to a basic state given as input.
Args:
- m (int): units to add.
- wires (list(int)): list of wires in which the function will be executed on.
"""
qml.QFT(wires=wires)
for w, _ in enumerate(wires):
angle = m*np.pi/(2**w)
qml.RZ(angle, wires=w)
qml.QFT(wires=wires).inv()
… the tests check out, success!