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.

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. 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 A seguir está um exemplo de código-fonte OpenQASM da biblioteca oficial. O programa adiciona dois números de quatro bits.

/* * 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 cin; qubit a; qubit b; qubit cout; bit ans; uint a_in = 1; // a = 0001 uint 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, b, a; para i de [0: 2] { maioria a[i], b[i + 1], a[i + 1]; } cx a, cout; para i de [2: -1: 0] { desmaioria a[i],b[i+1],a[i+1]; } desmaioria cin, b, a; medir b[0:3] -> ans[0:3]; medir cout -> ans;

Ligações externas

Categoria:Computação quântica