# Quil (arquitectura de conjunt d'instruccions)

Quil és una arquitectura de conjunt d'instruccions quàntiques que va introduir per primera vegada un model de memòria quàntica/clàssica compartida. Va ser presentat per Robert Smith, Michael Curtis i William Zeng a A Practical Quantum Instruction Set Architecture. Molts algorismes quàntics (incloent la teleportació quàntica, la correcció d'errors quàntics, la simulació, i els algorismes d'optimització) requereixen una arquitectura de memòria compartida. Quil s'està desenvolupant per als processadors quàntics superconductors desenvolupats per Rigetti Computing mitjançant l'API de programació quàntica Forest. Es va introduir una biblioteca Python anomenada pyQuil per desenvolupar programes Quil amb construccions de nivell superior. Un backend Quil també és compatible amb altres entorns de programació quàntica.

## Màquina abstracta quàntica subjacent

En el document presentat per Smith, Curtis i Zeng, Quil especifica el conjunt d'instruccions per a una màquina abstracta quàntica (QAM,) semblant a una màquina de Turing, però més pràctica per fer tasques del "món real". L'estat del QAM es pot representar com una tupla de 6 $(|\Psi \rangle ,C,G,G',P,\kappa )$ on:
* |Ψ⟩ és l'estat (quàntic) d'un nombre fix però arbitrari de qubits 𝑁𝑞 indexat mitjançant una indexació basada en 0.
* 𝐶 és una memòria clàssica d'un nombre 𝑁𝑐 de bits clàssics indexats mitjançant una indexació basada en 0.
* 𝐺 una llista fixa però arbitrària de portes estàtiques (portes quàntiques que no depenen de paràmetres, com la porta Hadamard).
* 𝐺' una llista fixa però arbitrària de portes paramètriques (portes que depenen d'una sèrie de paràmetres complexos com la porta de canvi de fase que requereix que un paràmetre d'angle estigui completament definit).
* 𝑃 una seqüència d'instruccions Quil a executar, que representen el programa. La longitud de 𝑃 es denota per |𝑃|
* 𝜅 un comptador de programa enter que apunta a la següent instrucció a executar.𝜅 sempre comença a 0 (assenyalant a la instrucció 0) i acaba a les |𝑃| indicant l'aturada del programa (tingueu en compte que l'última instrucció té l'índex |𝑃|−1. El comptador del programa s'incrementa després de cada instrucció, excepte les instruccions especials de flux de control (salts condicionals i incondicionals, i la instrucció especial HALT que atura el programa configurant 𝜅 a |𝑃|
La semàntica del QAM es defineix utilitzant productes tensorials dels espais de Hilbert i els mapes lineals entre ells.

## Característiques

Quil té suport per definir portes possiblement parametritzades en forma de matriu (el llenguatge no inclou una manera de verificar que les matrius són unitàries, que és una condició necessària per a la realització física de la porta definida) i la seva aplicació en qubits. El llenguatge també admet definicions de tipus macro de circuits quàntics possiblement parametritzats i la seva expansió, mesurament de qubits i enregistrament del resultat a la memòria clàssica, sincronització amb ordinadors clàssics amb la instrucció WAIT que atura l'execució d'un programa Quil fins que s'hagi acabat un programa clàssic. la seva execució, ramificació condicional i incondicional, suport pragma, així com la inclusió de fitxers per utilitzar-los com a biblioteques (es proporciona un conjunt estàndard de portes com a una de les biblioteques.)

## Rigetti QVM

Rigetti Computing va desenvolupar una màquina virtual quàntica en Common Lisp que simula la màquina abstracta quàntica definida en un ordinador clàssic i és capaç d'analitzar i executar programes Quil amb execució possiblement remota mitjançant HTTP.

## Exemple

L'exemple següent demostra el flux de control clàssic necessari per fer la teleportació quàntica del qubit del registre 2 al registre 1:
En el document es donen exemples de les implementacions de la transformada quàntica de Fourier i l'Eigensolver quàntic variacional.

## Referències

* ↑ McClean, Jarrod R.; Romero, Jonathan; Babbush, Ryan; Aspuru-Guzik, Alán New Journal of Physics, 18, 2, 04-02-2016, pàg. 023023. arXiv: 1509.04279. Bibcode: 2016NJPh...18b3023M. DOI: 10.1088/1367-2630/18/2/023023. ISSN: 1367-2630.
* ↑ «Rigetti Launches Full-Stack Quantum Computing Service and Quantum IC Fab» (en anglès). IEEE Spectrum: Technology, Engineering, and Science News, 26-06-2017. [Consulta: 6 juliol 2017].
* ↑ «Rigetti Quietly Releases Beta of Forest Platform for Quantum Programming in the Cloud | Quantum Computing Report» (en anglès americà). quantumcomputingreport.com, 08-03-2017. [Consulta: 6 juliol 2017].
* ↑ «XACC Rigetti Accelerator» (en anglès). ornl-qci.github.io. [Consulta: 6 juliol 2017].
* ↑ Nielsen, Michael A. Quantum Computation and Quantum Information (en anglès). Cambridge University Press, 2000, p. 27. ISBN 978-0-521-63503-5.
* ↑ Computing, Rigetti. «pyQuil Documentation» (en anglès). pyQuil Documentaion, 28-05-2019. [Consulta: 6 juny 2019].