3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

量子コンパイラを作る。
elixirで論理回路アセンブラをコンパイルして、qiskitな3ビット加算器を生成した。

投入したソース

make 18
in 0 5
wire 6 13
xor 0 3 14
and 0 3 6
xor 1 4 7
and 1 4 8
xor 6 7 15
and 6 7 9
or 8 9 10
xor 2 5 11
and 2 5 12
xor 10 11 16
and 10 11 13
or 12 13 17
out 14 17

生成したqiskit



from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
def tow(s):
	if (s == "00"):
		return "0"
	if (s == "01"):
		return "1"
	if (s == "10"):
		return "2"
	if (s == "11"):
		return "3"

def eow(s):
	if (s == "000"):
		return "0"
	if (s == "001"):
		return "1"
	if (s == "010"):
		return "2"
	if (s == "011"):
		return "3"
	if (s == "100"):
		return "4"
	if (s == "101"):
		return "5"
	if (s == "110"):
		return "6"
	if (s == "111"):
		return "7"

def fow(s):
	if (s == "0000"):
		return "0"
	if (s == "0001"):
		return "1"
	if (s == "0010"):
		return "2"
	if (s == "0011"):
		return "3"
	if (s == "0100"):
		return "4"
	if (s == "0101"):
		return "5"
	if (s == "0110"):
		return "6"
	if (s == "0111"):
		return "7"
	if (s == "1000"):
		return "8"
	if (s == "1001"):
		return "9"
	if (s == "1010"):
		return "10"
	if (s == "1011"):
		return "11"
	if (s == "1100"):
		return "12"
	if (s == "1101"):
		return "13"
	if (s == "1110"):
		return "14"
	if (s == "1111"):
		return "15"

qc = QuantumCircuit(18)
qc.h(0)
qc.h(1)
qc.h(2)
qc.h(3)
qc.h(4)
qc.h(5)
qc.cx(0, 14)
qc.cx(3, 14)
qc.ccx(0, 3, 6)
qc.cx(1, 7)
qc.cx(4, 7)
qc.ccx(1, 4, 8)
qc.cx(6, 15)
qc.cx(7, 15)
qc.ccx(6, 7, 9)
qc.ccx(8, 9, 10)
qc.cx(8, 10)
qc.cx(9, 10)
qc.cx(2, 11)
qc.cx(5, 11)
qc.ccx(2, 5, 12)
qc.cx(10, 16)
qc.cx(11, 16)
qc.ccx(10, 11, 13)
qc.ccx(12, 13, 17)
qc.cx(12, 17)
qc.cx(13, 17)

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(eow(ans[15] + ans[16] + ans[17]), " + ", eow(ans[12] + ans[13] + ans[14]), " = ", fow(ans[0] + ans[1] + ans[2] + ans[3]))




成果物

qiskit実行結果

$ python3 test23.py
         ┌───┐                                                                                                         »
    q_0: ┤ H ├──■─────────────────────────────■────────────────────────────────────────────────────────────────────────»
         ├───┤  │                             │                                                                        »
    q_1: ┤ H ├──┼────■────────────────────────┼────■───────────────────────────────────────────────────────────────────»
         ├───┤  │    │                        │    │                                                                   »
    q_2: ┤ H ├──┼────┼────■───────────────────┼────┼────■──────────────────────────────────────────────────────────────»
         ├───┤  │    │    │                   │    │    │                                                              »
    q_3: ┤ H ├──┼────┼────┼────■──────────────■────┼────┼──────────────────────────────────────────────────────────────»
         ├───┤  │    │    │    │              │    │    │                                                              »
    q_4: ┤ H ├──┼────┼────┼────┼────■─────────┼────■────┼──────────────────────────────────────────────────────────────»
         ├───┤  │    │    │    │    │         │    │    │                                                              »
    q_5: ┤ H ├──┼────┼────┼────┼────┼────■────┼────┼────■──────────────────────────────────────────────────────────────»
         └───┘  │    │    │    │    │    │  ┌─┴─┐  │    │                                                              »
    q_6: ───────┼────┼────┼────┼────┼────┼──┤ X ├──┼────┼────■─────────■───────────────────────────────────────────────»
                │  ┌─┴─┐  │    │  ┌─┴─┐  │  └───┘  │    │    │         │                                               »
    q_7: ───────┼──┤ X ├──┼────┼──┤ X ├──┼─────────┼────┼────┼────■────■───────────────────────────────────────────────»
                │  └───┘  │    │  └───┘  │       ┌─┴─┐  │    │    │    │                                               »
    q_8: ───────┼─────────┼────┼─────────┼───────┤ X ├──┼────┼────┼────┼────■────■─────────────────────────────────────»
                │         │    │         │       └───┘  │    │    │  ┌─┴─┐  │    │                                     »
    q_9: ───────┼─────────┼────┼─────────┼──────────────┼────┼────┼──┤ X ├──■────┼────■────────────────────────────────»
                │         │    │         │              │    │    │  └───┘┌─┴─┐┌─┴─┐┌─┴─┐                              »
   q_10: ───────┼─────────┼────┼─────────┼──────────────┼────┼────┼───────┤ X ├┤ X ├┤ X ├──■─────────■─────────────────»
                │       ┌─┴─┐  │       ┌─┴─┐            │    │    │       └───┘└───┘└───┘  │         │                 »
   q_11: ───────┼───────┤ X ├──┼───────┤ X ├────────────┼────┼────┼────────────────────────┼────■────■─────────────────»
                │       └───┘  │       └───┘          ┌─┴─┐  │    │                        │    │    │                 »
   q_12: ───────┼──────────────┼──────────────────────┤ X ├──┼────┼────────────────────────┼────┼────┼────■────■───────»
                │              │                      └───┘  │    │                        │    │  ┌─┴─┐  │    │       »
   q_13: ───────┼──────────────┼─────────────────────────────┼────┼────────────────────────┼────┼──┤ X ├──■────┼────■──»
              ┌─┴─┐          ┌─┴─┐                           │    │                        │    │  └───┘  │    │    │  »
   q_14: ─────┤ X ├──────────┤ X ├───────────────────────────┼────┼────────────────────────┼────┼─────────┼────┼────┼──»
              └───┘          └───┘                         ┌─┴─┐┌─┴─┐                      │    │         │    │    │  »
   q_15: ──────────────────────────────────────────────────┤ X ├┤ X ├──────────────────────┼────┼─────────┼────┼────┼──»
                                                           └───┘└───┘                    ┌─┴─┐┌─┴─┐       │    │    │  »
   q_16: ────────────────────────────────────────────────────────────────────────────────┤ X ├┤ X ├───────┼────┼────┼──»
                                                                                         └───┘└───┘     ┌─┴─┐┌─┴─┐┌─┴─┐»
   q_17: ───────────────────────────────────────────────────────────────────────────────────────────────┤ X ├┤ X ├┤ X ├»
                                                                                                        └───┘└───┘└───┘»
meas: 18/══════════════════════════════════════════════════════════════════════════════════════════════════════════════»
                                                                                                                       »
«          ░ ┌─┐
«    q_0: ─░─┤M├───────────────────────────────────────────────────
«          ░ └╥┘┌─┐
«    q_1: ─░──╫─┤M├────────────────────────────────────────────────
«          ░  ║ └╥┘┌─┐
«    q_2: ─░──╫──╫─┤M├─────────────────────────────────────────────
«          ░  ║  ║ └╥┘┌─┐
«    q_3: ─░──╫──╫──╫─┤M├──────────────────────────────────────────
«          ░  ║  ║  ║ └╥┘┌─┐
«    q_4: ─░──╫──╫──╫──╫─┤M├───────────────────────────────────────
«          ░  ║  ║  ║  ║ └╥┘┌─┐
«    q_5: ─░──╫──╫──╫──╫──╫─┤M├────────────────────────────────────
«          ░  ║  ║  ║  ║  ║ └╥┘┌─┐
«    q_6: ─░──╫──╫──╫──╫──╫──╫─┤M├─────────────────────────────────
«          ░  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«    q_7: ─░──╫──╫──╫──╫──╫──╫──╫─┤M├──────────────────────────────
«          ░  ║  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«    q_8: ─░──╫──╫──╫──╫──╫──╫──╫──╫─┤M├───────────────────────────
«          ░  ║  ║  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«    q_9: ─░──╫──╫──╫──╫──╫──╫──╫──╫──╫─┤M├────────────────────────
«          ░  ║  ║  ║  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«   q_10: ─░──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫─┤M├─────────────────────
«          ░  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«   q_11: ─░──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫─┤M├──────────────────
«          ░  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«   q_12: ─░──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫─┤M├───────────────
«          ░  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«   q_13: ─░──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫─┤M├────────────
«          ░  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«   q_14: ─░──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫─┤M├─────────
«          ░  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«   q_15: ─░──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫─┤M├──────
«          ░  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«   q_16: ─░──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫─┤M├───
«          ░  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║ └╥┘┌─┐
«   q_17: ─░──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫──╫─┤M├
«          ░  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║  ║ └╥┘
«meas: 18/════╩══╩══╩══╩══╩══╩══╩══╩══╩══╩══╩══╩══╩══╩══╩══╩══╩══╩═
«             0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17
 {'011100100010011100': 2, '010100010100010011': 4, '011100100010010101': 2, '001000000001001001': 3, '001100000010001010': 4, '011000100010110000': 1, '001100000010011000': 1, '111001010101111111': 3, '011000100010010100': 2, '010100100000101000': 2, '101001000001101101': 1, '011100100010111000': 4, '101010110101111011': 4, '100110110100011110': 4, '011000010101011011': 1, '100110110100110011': 2, '101101000010111100': 3, '100010111011111001': 1, '101001000010100110': 3, '100010111011001111': 4, '100101000000100101': 3, '101101000010110101': 2, '001000000010010000': 1, '100110110100111010': 2, '001100000010000011': 2, '010000011011011001': 3, '010000100000100000': 2, '010100010100011010': 2, '101001000010110100': 4, '100010111011101011': 1, '011100100010001110': 1, '000000000000000000': 2, '001000000010000010': 1, '000100000000000001': 1, '100110110100010111': 1, '010000011011001011': 2, '100001000000100100': 2, '110101010100110111': 1, '001100000010010001': 3, '011000100001001101': 1, '011000100010000110': 1, '110001011011101111': 1, '011100100010101010': 2, '010100100000100001': 1, '011100100010000111': 2, '100010111011011101': 3, '010000010100010010': 1, '110001011011111101': 1}
4  +  3  =  7
3  +  2  =  5
5  +  2  =  7
1  +  1  =  2
2  +  1  =  3
0  +  6  =  6
0  +  3  =  3
7  +  7  =  14
4  +  2  =  6
0  +  5  =  5
5  +  5  =  10
0  +  7  =  7
3  +  7  =  10
6  +  3  =  9
3  +  3  =  6
3  +  6  =  9
4  +  7  =  11
1  +  7  =  8
6  +  4  =  10
7  +  1  =  8
5  +  4  =  9
5  +  6  =  11
0  +  2  =  2
2  +  7  =  9
3  +  0  =  3
1  +  3  =  4
0  +  4  =  4
2  +  3  =  5
4  +  6  =  10
3  +  5  =  8
6  +  1  =  7
0  +  0  =  0
2  +  0  =  2
1  +  0  =  1
7  +  2  =  9
3  +  1  =  4
4  +  4  =  8
7  +  6  =  13
1  +  2  =  3
5  +  1  =  6
6  +  0  =  6
7  +  5  =  12
2  +  5  =  7
1  +  4  =  5
7  +  0  =  7
5  +  3  =  8
2  +  2  =  4
5  +  7  =  12

以上。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?