Simon function periodicity

from qlasskit import qlassf, Qint


@qlassf
def f(a: Qint[4]) -> Qint[4]:
    return (a >> 3) + 1
f.export("qiskit").draw("mpl")
_images/ec9965bd7d0c71c06ce5f6f6e31df82662d9c3d48a942e121eea3d0a720de38d.png
from qlasskit.algorithms import Simon

q_algo = Simon(f)
qc = q_algo.export("qiskit")
qc.draw("mpl")
_images/682307956e1d0d64ef7602b583e7cd7345e2f10d98efec908d1774ab8cfedb5e.png
from qiskit import QuantumCircuit, transpile
from qiskit.visualization import plot_histogram
from qiskit_aer import AerSimulator

qc.measure_all()
simulator = AerSimulator()
circ = transpile(qc, simulator)
result = simulator.run(circ).result()
counts = result.get_counts(circ)

counts_readable = q_algo.decode_counts(counts)
plot_histogram(counts_readable)
_images/3f429e13d17042fd5bc1f43ab4ac7bd8256a8c786864cea43be2564c0bce6e20.png