概要
量子コンパイラを作る。
elixirで論理回路アセンブラをコンパイルして、qiskitな半加算器を生成した。
投入したソース
make 4
in 0 1
out 2 3
xor 0 1 2
and 0 1 3
生成したqiskit
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(4)
qc.h(0)
qc.h(1)
qc.cx(0, 2)
qc.cx(1, 2)
qc.ccx(0, 1, 3)
qc.measure_all()
print(qc)
sampler = StatevectorSampler()
job = sampler.run([qc], shots = 100)
result = job.result()
counts = result[0].data.meas.get_counts()
print(f" {counts}")
for ans, cnt in counts.items():
print(ans[3], " + ", ans[2], " = ", ans[1], ", carry = ", ans[0])
成果物
qiskitの実行結果
$ python3 test20.py
┌───┐ ░ ┌─┐
q_0: ┤ H ├──■─────────■────■────────░─┤M├─────────
├───┤ │ │ │ ░ └╥┘┌─┐
q_1: ┤ H ├──┼────■────■────┼────■───░──╫─┤M├──────
└───┘┌─┴─┐┌─┴─┐ │ │ │ ░ ║ └╥┘┌─┐
q_2: ─────┤ X ├┤ X ├──┼────┼────┼───░──╫──╫─┤M├───
└───┘└───┘┌─┴─┐┌─┴─┐┌─┴─┐ ░ ║ ║ └╥┘┌─┐
q_3: ───────────────┤ X ├┤ X ├┤ X ├─░──╫──╫──╫─┤M├
└───┘└───┘└───┘ ░ ║ ║ ║ └╥┘
meas: 4/══════════════════════════════════╩══╩══╩══╩═
0 1 2 3
{'0000': 29, '1011': 27, '1110': 21, '1101': 23}
0 + 0 = 0 , carry = 0
1 + 1 = 0 , carry = 1
0 + 1 = 1 , carry = 0
1 + 0 = 1 , carry = 0
以上。