`dp_nf', `dp_nf_mod', `dp_true_nf', `dp_true_nf_mod'
----------------------------------------------------

dp_nf(INDEXLIST,DPOLY,DPOLYARRAY,FULLREDUCE)

dp_nf_mod(INDEXLIST,DPOLY,DPOLYARRAY,FULLREDUCE,MOD)
     :: 分散表現多項式の正規形を求める.
     (結果は定数倍されている可能性あり)

dp_true_nf(INDEXLIST,DPOLY,DPOLYARRAY,FULLREDUCE)

dp_true_nf_mod(INDEXLIST,DPOLY,DPOLYARRAY,FULLREDUCE,MOD)
     :: 分散表現多項式の正規形を求める. (真の結果を `[分子, 分母]'
     の形で返す)

RETURN
     `dp_nf()' : 分散表現多項式, `dp_true_nf()' : リスト

INDEXLIST
     リスト

DPOLY
     分散表現多項式

DPOLYARRAY
     配列

FULLREDUCE
     フラグ

MOD
     素数

   * 分散表現多項式 DPOLY の正規形を求める.

   * `dp_nf_mod()', `dp_true_nf_mod()' の入力は, `dp_mod()' など
     により, 有限体上の分散表現多項式になっていなければならない.

   * 結果に有理数, 有理式が含まれるのを避けるため, `dp_nf()' は
     真の値の定数倍の値を返す. 有理式係数の場合の `dp_nf_mod()' も同様
     であるが, 係数体が有限体の場合 `dp_nf_mod()' は真の値を返す.

   * `dp_true_nf()', `dp_true_nf_mod()' は, `[NM,DN]'
     なる形のリストを返す.  ただし, NM は係数に分数,
     有理式を含まない分散表現多項式, DN は 数または多項式で NM/DN
     が真の値となる.

   * DPOLYARRAY は分散表現多項式を要素とするベクトル, INDEXLIST
     は正規化計算に用いる DPOLYARRAY の要素のインデックス のリスト.

   * FULLREDUCE が 0 でないとき全ての項に対して簡約を行う. FULLREDUCE
     が 0 のとき頭項のみに対して簡約を行う.

   * INDEXLIST で指定された多項式は, 前の方のものが優先的に使われる.

   * 一般には INDEXLIST の与え方により函数の値は異なる可能性があるが,
     グレブナ基底に対しては一意的に定まる.

   *
     分散表現でない固定された多項式集合による正規形を多数求める必要がある場合
     に便利である. 単一の演算に関しては, `p_nf', `p_true_nf' を
     用いるとよい.

     [0] load("gr")$
     [64] load("katsura")$
     [69] K=katsura(4)$
     [70] dp_ord(2)$
     [71] V=[u0,u1,u2,u3,u4]$
     [72] DP1=newvect(length(K),map(dp_ptod,K,V))$
     [73] G=gr(K,V,2)$
     [74] DP2=newvect(length(G),map(dp_ptod,G,V))$
     [75] T=dp_ptod((u0-u1+u2-u3+u4)^2,V)$
     [76] dp_dtop(dp_nf([0,1,2,3,4],T,DP1,1),V);
     u4^2+(6*u3+2*u2+6*u1-2)*u4+9*u3^2+(6*u2+18*u1-6)*u3+u2^2
     +(6*u1-2)*u2+9*u1^2-6*u1+1
     [77] dp_dtop(dp_nf([4,3,2,1,0],T,DP1,1),V);
     -5*u4^2+(-4*u3-4*u2-4*u1)*u4-u3^2-3*u3-u2^2+(2*u1-1)*u2-2*u1^2-3*u1+1
     [78] dp_dtop(dp_nf([0,1,2,3,4],T,DP2,1),V);
     -11380879768451657780886122972730785203470970010204714556333530492210
     456775930005716505560062087150928400876150217079820311439477560587583
     488*u4^15+...
     [79] dp_dtop(dp_nf([4,3,2,1,0],T,DP2,1),V);
     -11380879768451657780886122972730785203470970010204714556333530492210
     456775930005716505560062087150928400876150217079820311439477560587583
     488*u4^15+...
     [80] @78==@79;
     1

参照
     *Note `dp_dtop': dp_dtop, *Note `dp_ord': dp_ord, *Note `dp_mod
     dp_rat': dp_mod dp_rat, *Note `p_nf p_nf_mod p_true_nf
     p_true_nf_mod': p_nf p_nf_mod p_true_nf p_true_nf_mod.

