OpenQASM 構文の基本
量子プログラムの書き方を学ぶうえで、OpenQASM の構文を理解することは極めて重要です。OpenQASM は QASM の基盤の上に構築され、C やアセンブリのような古典的な言語から着想を得ているため、量子コンピュータの動作を定義するための構造化された規則の体系を持っています。この章では、OpenQASM の基本的な構文規則の紹介に焦点を当てます。
ステートメント:プログラムの構成要素
OpenQASM において、ステートメント とは、実行される特定の動作を指示する命令です。プログラムは本質的にステートメントの集まりであり、各ステートメントはその終わりを示すためにセミコロン(;)で終わらなければなりません。
ステートメントの整形
読みやすさを高めるために、一連のステートメントを別々の行に書くことができます:
statement1;
statement2;
statement3;
または同じ行に書くこともできます:
statement1; statement2; statement3; // Although valid, this is less readable
コードの明確さを高めるために、前者の方法を使用することが推奨されます。
実験:シンプルな OpenQASM プログラム
これは複数の OpenQASM ステートメントを示す完全なプログラムであり、各ステートメントはそれぞれ異なる量子操作を実行します。12345678
// PhotonQ Experiment: A Simple OpenQASM Program [^8]
OPENQASM 2.0; // Specifies the OpenQASM version [^1]
include "qelib1.inc"; // Includes the standard library [^2]
// Declaration of quantum and classical registers
qreg qubits[2]; // Defines a quantum register with two qubits [^3]
creg ans[2]; // Defines a classical register with two bits [^4]
// Quantum gate application
h qubits[0]; // Applies a Hadamard gate to the first qubit [^5]
x qubits[1]; // Applies a Pauli-X gate to the second qubit [^6]
// Measure the qubit and save the result in the classical bit
measure qubits[0] -> ans[0]; // Measurement command [^7]
measure qubits[1] -> ans[1]; // Measurement command [^7]
これらのステートメントが実行する動作については、後の章で詳しく説明します。
空白文字 では問題にならない
OpenQASM は、スペース、タブ、改行などのすべての空白文字を重要でないものとして扱います。つまり、量子操作は書式の影響を受けません。
空白文字の無視
これらのコード例は、空白文字がプログラムのロジックを変えないことを示しています:
qreg qubits[2]; h qubits[0]; // Compact but valid
qreg qubits[2]; h qubits[0]; // Spread out, and still valid
識別子 における命名
OpenQASM において、識別子 とは、変数、レジスタ、その他の実体に対してユーザーが定義する名前です。有効であるためには、いくつかの単純な規則に従わなければなりません:
- 小文字で始まること。
- 英数字とアンダースコア(
_)のみを含むこと。 - 予約語と一致しないこと。
有効な例:q、c、q0、q_、q_0。
無効な例:Q、C、Q0、_Q、0_q。
OpenQASM は大文字と小文字を区別することに留意してください。例えば、q_a と q_A のような識別子は異なる実体を表します。
このガイドを読み進めるにつれて、これらの構文の基礎は自然に身につき、やがて OpenQASM を駆使して複雑な量子アルゴリズムを表現できるようになるでしょう。