Sembra che tu voglia un "Hello World" quantico. La versione quantistica più semplice di ciò sarebbe solo quella di scrivere una versione binaria del testo Hello World
in un registro di qubit. Ma ciò richiederebbe ~ 100 qubit ed essere più lungo del limite massimo per la lunghezza del codice.
Quindi scriviamo una porzione di testo più breve. Scriviamo ;)
, abbiamo bisogno di una stringa di bit di lunghezza 16. In particolare, utilizzando la codifica ASCII
;) = 00111011 00101001
Usando QISKit, lo faresti usando il seguente codice.
from qiskit import QuantumProgram
import Qconfig
qp = QuantumProgram()
qp.set_api(Qconfig.APItoken, Qconfig.config["url"]) # set the APIToken and API url
# set up registers and program
qr = qp.create_quantum_register('qr', 16)
cr = qp.create_classical_register('cr', 16)
qc = qp.create_circuit('smiley_writer', [qr], [cr])
# rightmost eight (qu)bits have ')' = 00101001
qc.x(qr[0])
qc.x(qr[3])
qc.x(qr[5])
# second eight (qu)bits have 00111011
# these differ only on the rightmost two bits
qc.x(qr[9])
qc.x(qr[8])
qc.x(qr[11])
qc.x(qr[12])
qc.x(qr[13])
# measure
for j in range(16):
qc.measure(qr[j], cr[j])
# run and get results
results = qp.execute(["smiley_writer"], backend='ibmqx5', shots=1024)
stats = results.get_counts("smiley_writer")
Certo, questo non è molto quantico. Quindi potresti invece sovrapporre due diverse emoticon. L'esempio più semplice è sovrapporre;) con 8), poiché le stringhe di bit per queste differiscono solo per i qubit 8 e 9.
;) = 00111011 00101001
8) = 00111000 00101001
Quindi puoi semplicemente sostituire le linee
qc.x(qr[9])
qc.x(qr[8])
da quanto sopra con
qc.h(qr[9]) # create superposition on 9
qc.cx(qr[9],qr[8]) # spread it to 8 with a cnot
Hadamard crea una sovrapposizione di 0
e 1
, e il cnot lo trasforma in una sovrapposizione di 00
e 11
su due qubit. Questa è l'unica sovrapposizione richiesta per ;)
e 8)
.
Se vuoi vedere una reale implementazione di questo, puoi trovarlo nel tutorial di QISKit (divulgazione completa: è stato scritto da me).