OpenQASM

linguagem de programação para descrever circuitos e algoritmos quânticos

Open Quantum Assembly Language (OpenQASM) é uma linguagem de programação projetada para descrever circuitos e algoritmos quânticos para execução em computadores quânticos. Ela é projetada para ser uma representação intermediária que pode ser usada por compiladores de nível superior para se comunicar com hardware quântico, e permite a descrição de uma ampla gama de operações quânticas, bem como controle de fluxo clássico baseado em resultados de medição.

A linguagem inclui um mecanismo para descrever explicitamente o tempo de instruções e permite a vinculação de definições de baixo nível aos portões para tarefas como calibração. OpenQASM não é destinado à computação clássica de propósito geral, e implementações de hardware da linguagem podem não suportar a gama completa de manipulação de dados descrita na especificação. Compiladores para OpenQASM devem oferecer suporte a uma ampla gama de operações clássicas para constantes de tempo de compilação, mas o suporte para essas operações em valores de tempo de execução pode variar entre as implementações.[1]

A linguagem foi primeiramente descrita em um artigo publicado em julho de 2017, e uma implementação de código-fonte de referência foi lançada como parte do Kit de Software de Informações Quânticas da IBM (Qiskit) para uso com sua plataforma de computação quântica em nuvem, a IBM Quantum Experience.[2] A linguagem possui qualidades semelhantes às tradicionais linguagens de descrição de hardware como Verilog.

OpenQASM define sua versão no início de um arquivo fonte como um número, como na declaração:

OPENQASM 3;

O nível das implementações originais publicadas do OpenQASM é OpenQASM 2.0. A versão 3.0 da especificação é a atual e pode ser visualizada no repositório OpenQASM no GitHub.

Exemplos editar

A seguir está um exemplo de código-fonte OpenQASM da biblioteca oficial. O programa adiciona dois números de quatro bits.[3]

/*
 * somador quântico de carry em cascata
 * Cuccaro et al, quant-ph/0410184
 */
OPENQASM 3;
include "stdgates.inc";

porta maioria a, b, c {
    cx c, b;
    cx c, a;
    ccx a, b, c;
}

porta desmaioria a, b, c {
    ccx a, b, c;
    cx c, a;
    cx a, b;
}

qubit[1] cin;
qubit[4] a;
qubit[4] b;
qubit[1] cout;
bit[5] ans;
uint[4] a_in = 1;  // a = 0001
uint[4] b_in = 15; // b = 1111
// inicializar qubits
reset cin;
reset a;
reset b;
reset cout;

// definir estados de entrada
para i de [0: 3] {
  se(bool(a_in[i])) x a[i];
  se(bool(b_in[i])) x b[i];
}
// adicionar a a b, armazenando o resultado em b
maioria cin[0], b[0], a[0];
para i de [0: 2] { maioria a[i], b[i + 1], a[i + 1]; }
cx a[3], cout[0];
para i de [2: -1: 0] { desmaioria a[i],b[i+1],a[i+1]; }
desmaioria cin[0], b[0], a[0];
medir b[0:3] -> ans[0:3];
medir cout[0] -> ans[4];

Referências

  1. «OpenQASM Live Specification». Consultado em Dezembro 26, 2022 
  2. qiskit-openqasm: OpenQASM specification, International Business Machines, 4 de julho de 2017, consultado em 6 de julho de 2017 
  3. «openqasm/adder.qasm at master · openqasm/openqasm · GitHub». GitHub. 29 Janeiro 2022 

Ligações externas editar