Quil
Quil é uma arquitetura de conjunto de instruções quântica que introduziu pela primeira vez um modelo de memória quântica/clássica compartilhada. Foi introduzido por Robert Smith, Michael Curtis e William Zeng em A Practical Quantum Instruction Set Architecture.[1]
Muitos algoritmo quânticos (incluindo teleporte quântico, correção de erro quântico, simulação,[2][3] e algoritmos de otimização[4]) requer uma arquitetura de memória compartilhada. Quil está sendo desenvolvido para os processadores quânticos supercondutores desenvolvidos pela Rigetti Computing através da API de programação quântica Forest na nuvem.[5][6] Uma biblioteca Python chamada pyQuil
foi introduzida para desenvolver programas Quil com construções de nível mais alto. Um backend Quil também é suportado por outros ambientes de programação quântica.[7][8]
Máquina abstrata quântica subjacente
[editar | editar código-fonte]No artigo apresentado por Smith, Curtis e Zeng, Quil especifica o conjunto de instruções para uma Máquina Abstrata Quântica (MAQ), semelhante a uma máquina de Turing, porém mais prática para realizar tarefas "do mundo real".[1] O estado da MAQ pode ser representado como uma 6-tupla onde:
- é o estado (quântico) de um número fixo, porém arbitrário de qubits indexados usando uma indexação de base zero.
- é uma memória clássica de um número de bits clássicos indexados usando uma indexação de base zero.
- é uma lista fixa, porém arbitrária, de portas estáticas (portas quânticas que não dependem de parâmetros, como a porta Hadamard.)
- é uma lista fixa, porém arbitrária, de portas paramétricas (portas que dependem de um número de parâmetros complexos, como a porta de deslocamento de fase que requer um parâmetro de ângulo para ser completamente definida.)
- é uma sequência de instruções Quil a serem executadas, representando o programa. O comprimento de é denotado por .
- é um contador de programa inteiro apontando para a próxima instrução a ser executada. sempre começa em 0 (apontando para a instrução) e termina em indicando a parada do programa (observe que a última instrução tem o índice .) O contador de programa é incrementado após cada instrução, exceto por instruções especiais de fluxo de controle (saltos condicionais e incondicionais saltos, e a instrução especial
HALT
que interrompe o programa definindo para .
A semântica da MAQ é definida usando produto tensorial de espaços de Hilbert e os mapa linear entre eles.[1]
Recursos
[editar | editar código-fonte]Quil tem suporte para definir portas possivelmente parametrizadas em forma de matriz (a linguagem não inclui uma maneira de verificar se as matrizes são unitárias, o que é uma condição necessária para a realizabilidade física da porta definida) e sua aplicação em qubits. A linguagem também suporta definições semelhantes a macro de possivelmente circuitos quânticos parametrizados e sua expansão, medição de qubits e registro do resultado na memória clássica, sincronização com computadores clássicos com a instrução WAIT
que pausa a execução de um programa Quil até que um programa clássico tenha terminado sua execução, ramificação condicional e incondicional, suporte de diretiva, bem como inclusão de arquivos para uso como bibliotecas (um conjunto padrão de portas é fornecido como uma das bibliotecas.)
Rigetti QVM
[editar | editar código-fonte]A Rigetti Computing desenvolveu uma Máquina Virtual Quântica em Common Lisp que simula a Máquina Abstrata Quântica definida em um computador clássico e é capaz de analisar e executar programas Quil com possibilidade de execução remota via HTTP.[9]
Exemplo
[editar | editar código-fonte]O exemplo a seguir demonstra o fluxo de controle clássico necessário para fazer a teletransportação quântica do qubit no registro do processador 2 para o registro 1:[10][11]
# Declarar memória clássica
DECLARE ro BIT[2]
# Criar par de Bell
H 0
CNOT 0 1
# Teleportar
CNOT 2 0
H 2
MEASURE 2 ro[0]
MEASURE 0 ro[1]
# Comunicar medidas de forma clássica
JUMP-UNLESS @SKIP ro[1]
X 1
LABEL @SKIP
JUMP-UNLESS @END ro[0]
Z 1
LABEL @END
Exemplos das implementações da transformada de Fourier quântica e do solucionador quântico variacional são dados no artigo.
Referências
- ↑ a b c Smith, Robert S.; Curtis, Michael J.; Zeng, William J. (10 de agosto de 2016). «A Practical Quantum Instruction Set Architecture». arXiv:1608.03355 [quant-ph]
- ↑ McClean, Jarrod R.; Romero, Jonathan; Babbush, Ryan; Aspuru-Guzik, Alán (4 de fevereiro de 2016). «The theory of variational hybrid quantum-classical algorithms». New Journal of Physics. 18 (2). 023023 páginas. Bibcode:2016NJPh...18b3023M. ISSN 1367-2630. arXiv:1509.04279. doi:10.1088/1367-2630/18/2/023023
- ↑ Rubin, Nicholas C. (21 de outubro de 2016). «A Hybrid Classical/Quantum Approach for Large-Scale Studies of Quantum Systems with Density Matrix Embedding Theory». arXiv:1610.06910 [quant-ph]
- ↑ Farhi, Edward; Goldstone, Jeffrey; Gutmann, Sam (14 de novembro de 2014). «A Quantum Approximate Optimization Algorithm». arXiv:1411.4028 [quant-ph]
- ↑ «Rigetti Launches Full-Stack Quantum Computing Service and Quantum IC Fab». IEEE Spectrum: Technology, Engineering, and Science News (em inglês). 26 de junho de 2017. Consultado em 6 de julho de 2017
- ↑ «Rigetti Quietly Releases Beta of Forest Platform for Quantum Programming in the Cloud | Quantum Computing Report». quantumcomputingreport.com (em inglês). 8 de março de 2017. Consultado em 6 de julho de 2017
- ↑ «XACC Rigetti Accelerator». ornl-qci.github.io. Consultado em 6 de julho de 2017
- ↑ Doiron, Nick (7 de março de 2017), jsquil: Quantum computer instructions for JavaScript developers, consultado em 6 de julho de 2017
- ↑ The @rigetti high-performance quantum virtual machine.: rigetti/qvm, Rigetti Computing, 26 de abril de 2019, consultado em 28 de abril de 2019
- ↑ Nielsen, Michael A.; Chuang, Isaac L. (2000). Quantum Computation and Quantum Information. [S.l.]: Cambridge University Press. p. 27. ISBN 978-0-521-63503-5
- ↑ Computing, Rigetti (28 de maio de 2019). «pyQuil Documentation» (PDF). pyQuil Documentaion. Consultado em 6 de junho de 2019