変数の定義と式の作成
PyQBPPのインストール
PyQBPPを使用するには、pipでインストールしてください:
pip install pyqbpp
ライブラリのインポート
PyQBPPを使用するには、pyqbppモジュールから必要な関数をインポートします:
import pyqbpp as qbpp
変数と式の定義
変数はvar("name")を使って定義できます。 指定したnameは変数を表示する際に使用されます。
式は+、-、*などの標準的な算術演算子を使って構築します。
以下のプログラムは、3つの変数a、b、cと式fを定義し、表示します:
import pyqbpp as qbpp
a = qbpp.var("a")
b = qbpp.var("b")
c = qbpp.var("c")
f = (a + b - 1) * (b + c - 1)
print("f =", f)
式(a + b - 1) * (b + c - 1)は自動的に展開され、fに格納されます。
このプログラムでは、変数a、b、cはクラスVarのオブジェクトであり、式fはクラスExprのオブジェクトです。
プログラムを実行すると、展開された式が表示されます:
f = 1 +a*b +b*b +a*c +b*c -a -b -b -c
NOTE
var()の変数名は省略可能です。 省略した場合、{0}、{1}、…のようなデフォルト名が自動的に割り当てられます。
WARNING 式のテキスト出力は安定性が保証されておらず、今後のリリースで形式が変更される可能性があるため、後続の計算への入力として使用しないでください。
式の簡約化
Exprオブジェクトに格納された式は、simplify()メンバ関数を呼び出すことで簡約化できます:
print("f =", f.simplify())
この変更により、プログラムの出力は以下のようになります:
f = 1 -a -2*b -c +a*b +a*c +b*b +b*c
メンバ関数呼び出しf.simplify()は式fをその場で簡約化し、自身を返します。
すべての変数がバイナリ値(0または1)を取ると仮定すると、恒等式 $b^2=b$を使って式をさらに簡約化できます。 この目的には、代わりにsimplify_as_binary()を使用します:
print("f =", f.simplify_as_binary())
すると出力は以下のようになります:
f = 1 -a -b -c +a*b +a*c +b*c
スピン変数での式の簡約化
変数がスピン値 -1/+1を取ると仮定する場合、恒等式$b^2 = 1$を使って式をさらに簡約化できます。 この場合、simplify_as_spin()メンバ関数を使って式を簡約化できます:
print("f =", f.simplify_as_spin())
すると出力は以下のようになります:
f = 2 -a -2*b -c +a*b +a*c +b*c
簡約化のグローバル関数
メンバ関数は式をその場で更新します。 fを変更したくない場合は、代わりにグローバル関数 simplify(f)、simplify_as_binary(f)、simplify_as_spin(f)を使用できます。これらはfを変更せずに簡約化された式を返します。
import pyqbpp as qbpp
g = qbpp.simplify_as_binary(f) # fは変更されず、gは新しい簡約化された式
NOTE PyQBPPでは、ほとんどのメンバ関数は可能な場合にオブジェクトをその場で更新しますが、グローバル関数は元のオブジェクトを変更せずに新しい値を返します。