Go to the first, previous, next, last section, table of contents.

## 分散多項式による代数的数の表現

前節で述べたように, `root` を含む代数的数に対する簡単化は ユーザの判断で行う必要がある. これに対し, ここで解説するもう一つの代数的数の 表現については, 加減乗除, ベキなどを行ったあと自動的に簡単化が行われる. この表現は, 逐次拡大の場合に特に効率よく計算が行われるよう設計されており, グレブナー基底関係の関数における係数体として用いることができる. この表現は 内部的には, `DAlg` と呼ばれるオブジェクトとして定義されている. `DAlg` は分数式の形で保持される. 分母は整数, 分子は整数係数の分散多項式である.

`DAlg` は，`set_field()` によりあらかじめ設定された代数体の 元として生成される. 生成方法は, `newalg()` で生成された代数的数を 含む数から `algtodalg()` で変換する, あるいは分散多項式から直接 `dptodalg()` で変換する，の 2 通りある. 一旦 `DAlg` 形式に変換されれば, 演算後に自動的に簡単化される.

    [0] A=newalg(x^2+1);
    (#0)
    [1] B=newalg(x^3+A*x+A);
    (#1)
    [2] set_field([B,A]);
    0
    [3] C=algtodalg(A+B);
    ((1)*<<1,0>>+(1)*<<0,1>>)
    [4] C^5;
    ((-11)*<<2,1>>+(5)*<<2,0>>+(10)*<<1,1>>+(9)*<<1,0>>+(11)*<<0,1>>
    +(-1)*<<0,0>>)
    [5] 1/C;
    ((2)*<<2,1>>+(-1)*<<2,0>>+(1)*<<1,1>>+(2)*<<1,0>>+(-3)*<<0,1>>
    +(-1)*<<0,0>>)/5

この例では, Q(a,b) (a^2+1=0, b^3+ab+b=0) において, (a+b)^5 および 1/(a+b) を 計算 (簡単化) している. 分子である分散多項式の表示は, 分散多項式の表示をそのまま流用している.

Go to the first, previous, next, last section, table of contents.