メインコンテンツへスキップ
このプロジェクトはベータ版です。バグを見つけましたか?GitHub Issueを開く。質問やアイデアがありますか?Discussionsで質問する — フィードバックをお待ちしています!
このページの翻訳品質はいかがですか?

OpenQASM 3 機能テーブル

以下は OpenQASM 3 の言語機能のリストです。

これらの機能の詳細については、OpenQASM 3.X Live Specification を参照してください。

キー:

  • ❌ サポートなし

  • 🟡 部分的サポート

  • ✅ サポート済み

「サポート済み」マークの意味は列によって異なります:

  • Qiskit SDK: この機能は qiskit.qasm3.loads(qiskit-qasm3-import 拡張機能を使用)でパースでき、QuantumCircuit で表現でき、 qiskit.qasm3.dumps で OpenQASM 3 にエクスポートできます。

  • IBM Quantum Compute Service:対応する Qiskit 機能を含む Circuit を、IBM Quantum Compute Service を通じてハードウェア上で正常に実行できます。

「部分的サポート」の意味は、通常、リンクされた注釈に依存します。

備考

IBM Quantum Compute Service に Circuit を送信する最も一般的な方法は、Qiskit SDK の Python インターフェースで Circuit を作成することです。 この方法で作成・送信された Circuit は、OpenQASM 3 ファイルから Qiskit SDK に読み込む必要はありません。

OpenQASM 3 を直接使用しない場合は、Qiskit SDK での表現、OpenQASM 3 へのエクスポート、IBM Quantum Compute Service への送信がサポートされている機能を安全に使用できます。 これには、Qiskit SDK が OpenQASM 3 から読み込めない機能も含まれます。

OpenQASM 3 FeatureQiskit SDK featureQiskit SDKIBM Quantum Compute ServiceNotes
comments✅✅1
QASM vstring✅✅1
include🟡❌1, 7
unicode names✅✅
qubitQubit and QuantumRegister✅🟡2
bitClbit and ClassicalRegister✅✅3
boolexpr.Var and classical expressions🟡✅4
int❌✅4
uintexpr.Var and classical expressions🟡✅4
floatexpr.Var and classical expressions🟡🟡4
angleImplicit, as gate parameters❌🟡4
complex❌❌4
const❌❌4
pi/π/tau/τ/euler/ℇConstant-folded into gate parameters✅✅
Aliasing: letQuantum and classical registers🟡❌5
register concatenationQuantum and classical registers🟡❌5
castingexpr.Cast classical expressions🟡🟡4
duration❌❌
durationof❌❌
ns/µs/us/ms/s/dtDurations of delay and box✅✅6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay✅✅6
barrierBarrier/QuantumCircuit.barrier✅✅
boxBoxOp/QuantumCircuit.box✅❌6
Built-in UUGate/QuantumCircuit.u✅✅
gate🟡🟡7
gphaseQuantumCircuit.global_phase🟡❌7
ctrl @/ negctrl @AnnotatedOperation🟡❌7
inv @AnnotatedOperation🟡❌7
pow(k) @AnnotatedOperation🟡❌7
resetReset/QuantumCircuit.reset✅✅
measureMeasure/QuantumCircuit.measure✅✅
bit operations🟡✅4
boolean operations🟡✅4
arithmetic expressions🟡🟡4
comparisons🟡✅4
ifQuantumCircuit.if_test✅✅8
elseQuantumCircuit.if_test✅✅8
else ifQuantumCircuit.if_test✅❌8
for loopsQuantumCircuit.for_loop🟡❌8
while loopsQuantumCircuit.while_loop✅❌8
continueQuantumCircuit.continue_loop🟡❌8
breakQuantumCircuit.break_loop🟡❌8
return❌❌
extern❌❌
def subroutines (classical)❌❌
def subroutines (quantum)❌❌
inputQuantumCircuit.add_input✅🟡4, 9
output❌❌

注釈​

  1. これらの OpenQASM 3 プログラム機能は実行に影響を与えず、Qiskit はファイルのパース時にこれらを 除去します。これらを使用するファイルは送信できますが、効果はありません。include ファイルについては、 stdgates.inc が現在 Qiskit への入力としてサポートされており、Backend での実行では常に Circuit が Backend の命令セットアーキテクチャ(ISA)にコンパイルされている必要があり、 include ファイルは関係ありません。
  1. Qiskit SDK は、任意の qubit 宣言を含む OpenQASM 3 ファイルのパースとダンプをサポートしています。 ハードウェアでの実行には、ハードウェア qubit(例: $0)で定義された Circuit のみが有効です。 Qiskit SDK は、Circuit がレイアウト情報を持つ Backend 向けにトランスパイルされた場合、 サポートされているハードウェア qubit 識別子で OpenQASM 3 を自動的に出力します。
  1. Qiskit SDK での bit 型および bit[n] 型の変数宣言は、Clbit および ClassicalRegister の宣言に対応します。
  1. 2025年7月時点で、Qiskit SDK は制限された型のセットのローカル変数を表現でき、 これらのオブジェクトに対する多くのランタイム操作を表現でき、OpenQASM 3 への出力をサポートしています。 ただし、Qiskit SDK(qiskit-qasm3-import v0.6.0 を通じて)は変数宣言を含む OpenQASM 3 ファイルのパースをサポートしておらず、変数式のパースに対するサポートは非常に限られています。 一般的に、Qiskit が式システムで表現できるものの大部分は、式がまだ Qiskit SDK でパースできない場合でも、 適切な動的 Circuit ハードウェアで実行できます。最新の情報については、 Qiskit の qiskit.circuit.classical モジュールのドキュメントを参照してください。
  1. Qiskit SDK は量子レジスタと古典レジスタの両方でレジスタのエイリアシングを表現できますが、 古典レジスタのエイリアシングの使用は強く非推奨です。古典レジスタに対するほとんどの式は エイリアスでは機能せず、エイリアスされた古典レジスタは、ハードウェア上での実行ではサポートされていません。 Qiskit の OpenQASM 3 パーサーは、レジスタの連結結果をバインドする let エイリアス文を解決できます。
  1. Qiskit SDK は QuantumCircuit.delay による明示的な遅延をサポートしており、回路のボックス (QuantumCircuit.box)にも明示的な持続時間を設定できます。これらの持続時間には stretch 変数の 古典式を含めることができます。Qiskit SDK(2025年7月時点、qiskit-qasm3-import v0.6.0 を通じて)は、OpenQASM 3 ファイルからの duration 型または stretch 型の宣言のパースを サポートしていません。ハードウェアは stretch を含む持続時間に対して限定的なサポートがあります。
  1. IBM ハードウェアで実行するには、Circuit を Backend の ISA にトランスパイルする必要があります。これにより、 カスタム gate 定義や Gate 修飾子(inv @ など)のような高レベルの構造は ハードウェア上でそのまま実行することはできませんが、transpile プロセスがこれらを 有効な ISA Circuit に解決します。Qiskit SDK(2025年7月時点、qiskit-qasm3-import v0.6.0 を通じて)はパース時に Gate 修飾子を即座に評価するため、結果の QuantumCircuit には 表示されず、実行時のコストが発生する可能性があります。
  1. Qiskit SDK は構造化された制御フローを表現し、OpenQASM 3 にエクスポートできます。continue 文と break 文は技術的に Qiskit で表現できますが、Qiskit SDK 内でも十分にサポートされていません。 Qiskit v2.1.0 の for ループは 十分にサポートされていません。ネストされた制御フロー (別の if 内の if や else if 文など)はハードウェアでの実行の対象外です。
  1. Qiskit SDK は、サポートされている任意の古典型を Circuit の input 変数として宣言することをサポートしています。 このような変数は現在ハードウェアでの実行の対象外であり、Qiskit の OpenQASM 3 インポーターで読み込むことも できません。QuantumCircuit に存在する未バインドの Parameter オブジェクトは input float[64] 変数としてエクスポートされます。特定のランタイム設定オプションにより、一部の Backend でこのような Circuit を実行できる場合があります。

次のステップ​

推奨事項