Quil

Origem: Wikipédia, a enciclopédia livre.

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

  1. 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.03355Acessível livremente [quant-ph] 
  2. 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.04279Acessível livremente. doi:10.1088/1367-2630/18/2/023023 
  3. 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.06910Acessível livremente [quant-ph] 
  4. Farhi, Edward; Goldstone, Jeffrey; Gutmann, Sam (14 de novembro de 2014). «A Quantum Approximate Optimization Algorithm». arXiv:1411.4028Acessível livremente [quant-ph] 
  5. «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 
  6. «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 
  7. «XACC Rigetti Accelerator». ornl-qci.github.io. Consultado em 6 de julho de 2017 
  8. Doiron, Nick (7 de março de 2017), jsquil: Quantum computer instructions for JavaScript developers, consultado em 6 de julho de 2017 
  9. The @rigetti high-performance quantum virtual machine.: rigetti/qvm, Rigetti Computing, 26 de abril de 2019, consultado em 28 de abril de 2019 
  10. 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 
  11. Computing, Rigetti (28 de maio de 2019). «pyQuil Documentation» (PDF). pyQuil Documentaion. Consultado em 6 de junho de 2019