Skip to main content
IBM Quantum Platform

SolovayKitaev

class qiskit.transpiler.passes.SolovayKitaev(*args, **kwargs)

GitHub

ベース: TransformationPass

Solovay-Kitaevアルゴリズムを使用して、 1q ゲートを離散ベースに約分解する。

Solovay-Kitaevの定理 [1は]、任意の単一量子ビットゲートは、その集合が SU(2)SU(2) において密な部分集合を生成する場合、固定された単一量子ビットゲートの集合によって任意の精度で近似できるというものである。これは、任意の単一量子ビットゲートを、フォールト・トレラントに実装する方法がわかっている離散的で普遍的なゲート集合で表現できることを意味するので、重要な結果です。 したがって、ソロベイ・キタエフ・アルゴリズムは、フォールトトレラントでない回路をフォールトトレラントに言い換えることを可能にする。

このソロヴェイ・キタエフ・アルゴリズムの実装は、 [2].

例えば、次のような回路である

     ┌─────────┐
q_0: ┤ RX(0.8) ├
     └─────────┘

に分解できる

global phase: 7π/8
     ┌───┐┌───┐┌───┐
q_0: ┤ H ├┤ T ├┤ H ├
     └───┘└───┘└───┘

L2-error は約 0.01 である。

デフォルトでは、ベーシスゲートセットは ["t", "tdg", "h"] である:

import numpy as np
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes.synthesis import SolovayKitaev
from qiskit.quantum_info import Operator

circuit = QuantumCircuit(1)
circuit.rx(0.8, 0)

print("Original circuit:")
print(circuit.draw())

skd = SolovayKitaev(recursion_degree=2)

discretized = skd(circuit)

print("Discretized circuit:")
print(discretized.draw())

print("Error:", np.linalg.norm(Operator(circuit).data - Operator(discretized).data))
Original circuit:
   ┌─────────┐
q: ┤ Rx(0.8) ├
   └─────────┘
Discretized circuit:
global phase: 7π/8
   ┌───┐┌───┐┌───┐
q: ┤ H ├┤ T ├┤ H ├
   └───┘└───┘└───┘
Error: 2.828408279166474

個々のベースゲートセットは初期化子で指定できます。

from qiskit.transpiler.passes import SolovayKitaev

basis = ["s", "sdg", "t", "tdg", "z", "h"]

skd = SolovayKitaev(recursion_degree=2, basis_gates=basis)

異なるインスタンス間で基本的な近似値を生成・保存するには、および save_basic_approximations()SolovayKitaevDecomposition そのメソッドを使用できます。

from qiskit.transpiler.passes import SolovayKitaev
from qiskit.synthesis import SolovayKitaevDecomposition

# generate basic approximations
basis = ["s", "sdg", "t", "tdg", "z", "h"]
decomp = SolovayKitaevDecomposition(basis_gates=basis, depth=5)

# store them in a local file
fname = "sk_approx.bin"
decomp.save_basic_approximations(fname)

# load them for running Solovay-Kitaev
skd = SolovayKitaev(recursion_degree=2, basic_approximations=fname)

参照資料:

[1] キタエフ, A Yu (1997). 量子計算:アルゴリズムと誤り訂正 ロシア数学調査 52 (6): 1191–1249. オンライン

[2] ダウソン、クリストファー・M; ニールセン, マイケル・A. (2005) 『ソロベイ=キタエフアルゴリズム』 arXiv:quant-ph/0505030.

パラメーター

  • recursion_degree - ソロヴェイ・キタエフ・アルゴリズムの再帰深度。 再帰の深さが大きいほど、分解の精度と長さが増す。
  • basic_approximations - 最良の離散分解を再帰のルートで見つけるための基本的な近似。 文字列の場合、近似値を読み込むファイルを指定します。 辞書の場合は、 {label: SO(3)-matrix} ペアが含まれる。 None の場合、深さ16までの HHTTTT^\dagger ゲートに基づくデフォルトが生成される。 basic_approximations が渡された場合、 basis_gatesdepth は設定できないことに注意。
  • basis_gates - 基本近似のネットを構築するために使用される基底ゲート。 デフォルトは ["h", "t", "tdg"]。 この引数は、 basic_approximations
  • depth - 基本近似で使用されるゲートの最大深度. この引数は、 basic_approximations

属性

is_analysis_pass

パスが分析パスかどうかをチェックする。

パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。

is_transformation_pass

パスが変形パスかどうかをチェックする。

パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。


方法

execute

execute(passmanager_ir, state, callback=None)

GitHub

入力Qiskit IRに対して最適化タスクを実行する。

パラメーター

  • passmanager_ir (Any) – Qiskit IRを最適化する。
  • state (PassManagerState) – パスマネージャー自身によるワークフロー実行に関連する状態。
  • callback (Callable | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。

戻り値

Qiskit IRとワークフローの状態を最適化。

戻りの型

タプル [ Any, PassManagerState ]

name

name()

GitHub

パスの名前

戻りの型

str

run

run(dag)

GitHub

ダグに SolovayKitaev

パラメーター

dag (DAGCircuit) – 入力ダグ。

戻り値

離散ターゲットベースで合成された 1q ゲートによる出力ダグ。

レイズ

TranspilerError – ゲートに_matrixが必要ない場合

戻りの型

DAGサーキット

update_status

update_status(state, run_state)

GitHub

ワークフローのステータスを更新する。

パラメーター

  • state (PassManagerState) – 更新するマネージャーの状態を渡す。
  • run_state (RunState) – 現在のタスクの完了状況。

戻り値

パスマネージャーの状態を更新。

戻りの型

PassManagerState

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。