[BACK]Return to noro_module_syz-ja.texi CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-contrib / packages / doc / noro_module_syz

File: [local] / OpenXM / src / asir-contrib / packages / doc / noro_module_syz / noro_module_syz-ja.texi (download)

Revision 1.5, Tue Sep 8 09:16:57 2020 UTC (3 years, 10 months ago) by noro
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +185 -29 lines

Updated the manual of noro_module_syz.
Added the description of module related functions in Asir manual.

%comment $OpenXM: OpenXM/src/asir-contrib/packages/doc/noro_module_syz/noro_module_syz-ja.texi,v 1.5 2020/09/08 09:16:57 noro Exp $
%comment --- おまじない ---
\input texinfo-ja
@iftex
@catcode`@#=6
@def@fref#1{@xrefX[#1,,@code{#1},,,]}
@def@b#1{{@bf@gt #1}}
@catcode`@#=@other
@end iftex
@overfullrule=0pt
@documentlanguage ja
@c -*-texinfo-*-
@comment %**start of header
@comment --- おまじない終り ---

@comment --- GNU info ファイルの名前 ---
@setfilename asir-contrib-noro_module_syz

@comment --- タイトル ---
@settitle noro_module_syz

@comment %**end of header
@comment %@setchapternewpage odd

@comment --- おまじない ---
@ifinfo
@macro fref{name}
@ref{\name\,,@code{\name\}}
@end macro
@end ifinfo

@iftex
@comment @finalout
@end iftex

@titlepage
@comment --- おまじない終り ---

@comment --- タイトル, バージョン, 著者名, 著作権表示 ---
@title noro_module_syz
@subtitle noro_module_syz User's Manual
@subtitle Edition 2.0
@subtitle Sep 2020

@author  by Masayuki Noro
@page
@vskip 0pt plus 1filll
Copyright @copyright{} Masayuki Noro
2016. All rights reserved.
@end titlepage

@comment --- おまじない ---
@synindex vr fn
@comment --- おまじない終り ---

@comment --- @node は GNU info, HTML 用 ---
@comment --- @node  の引数は node-name,  next,  previous,  up --- 
@node Top,, (dir), (dir)

@comment --- @menu は GNU info, HTML 用 ---
@comment --- chapter 名を正確に並べる ---
@menu
* noro_module_syz.rr ::
* Index::
@end menu

@comment --- chapter の開始 ---
@comment --- 親 chapter 名を正確に ---
@node noro_module_syz.rr ,,, Top
@chapter noro_module_syz.rr 
@comment --- section 名を正確に並べる ---
@menu
* 多項式環上の加群::
* 加群の syzygy::
* 加群の自由分解::
@end menu

このマニュアルでは, asir-contrib パッケージに収録されている,
加群の syzygy および自由分解を計算するパッケージ
@samp{noro_module_syz.rr} について解説する.
このパッケージを使うには, まず @samp{noro_module_syz.rr} をロードする.
@example
[...] load("noro_module_syz.rr");
@end example
@noindent
このパッケージの函数を呼び出すには, 全て @code{newsyz.} を先頭につける.

@comment --- section の開始 ---
@comment --- 書体指定について ---
@comment --- @code{} はタイプライタ体表示 ---
@comment --- @var{} は斜字体表示 ---
@comment --- @b{} はボールド表示 ---
@comment --- @samp{} はファイル名などの表示 ---

@node 多項式環上の加群,,, noro_module_syz.rr
@section 多項式環上の加群

多項式環上の自由加群の元は, 加群単項式 te_i の線型和として内部表現される.
ここで t は多項式環の単項式, e_i は自由加群の標準基底である. 加群単項式は, 多項式環の単項式
に位置 i を追加した @code{<<a,b,...,c:i>>} で表す. 加群多項式, すなわち加群単項式の線型和は,
設定されている加群項順序にしたがって降順に整列される. 加群項順序には以下の3種類がある.

@table @code
@item TOP 順序

これは, te_i > se_j となるのは t>s または (t=s かつ i<j) となるような項順序である. ここで,
t, s の比較は多項式環に設定されている順序で行う.
この型の順序は, @code{dp_ord([0,Ord])} に
より設定する. ここで, @code{Ord} は多項式環の順序型である.

@item POT 順序

これは, te_i > se_j となるのは i<j または (i=j かつ t>s) となるような項順序である. ここで,
t, s の比較は多項式環に設定されている順序で行う.
この型の順序は, @code{dp_ord([1,Ord])} に
より設定する. ここで, @code{Ord} は多項式環の順序型である.

@item Schreyer 型順序

各標準基底 e_i に対し, 別の自由加群の加群単項式 T_i が与えられていて, te_i > se_j となるのは
tT_i > sT_j または (tT_i=sT_j かつ i<j) となるような項順序である. ここで tT_i, sT_j の
比較は, これらが所属する自由加群に設定されている順序で行う.
この型の順序は, 通常再帰的に設定される. すなわち, T_i が所属する自由加群の順序も Schreyer 型
であるか, またはボトムとなる TOP, POT などの項順序となる.
この型の順序は @code{dpm_set_schreyer([H_1,H_2,...])} により指定する. ここで,
@code{H_i=[T_1,T_2,...]} は加群単項式のリストで, @code{[H_2,...]} で定義される Schreyer 型項順序を
@code{tT_i} らに適用するという意味である.
@end table

加群多項式を入力する方法としては, @code{<<a,b,...:i>>} なる形式で直接入力する他に,
多項式リストを作り, @code{dpm_ltod()} により変換する方法もある.

@node 加群の syzygy,,, noro_module_syz.rr
@section 加群の syzygy

@menu
* noro_module_syz.modue_syz::
@end menu

@node newsyz.module_syz,,, 加群の syzygy

@subsection @code{newsyz.module_syz}
@findex newsyz.module_syz

@table @t
@item newsyz.module_syz(@var{f},@var{v},@var{h},@var{O}[|weyl=1,dp=1,f4=1])
syzygy の生成系 (グレブナー基底) を計算する.
@end table

@table @var
@item return
要素が3つのリスト, 各要素は多項式リストまたは加群多項式のリスト

@item f
多項式リスト, または多項式リストのリスト
@item v
変数リスト
@item h
非負整数
@item O
項順序
@end table

@itemize @bullet
@item 多項式
多項式列またが多項式ベクトル列に対する syzygy 加群のグレブナー基底を計算する.
@item @var{f=[f1,...,fm]} に対し, @var{h1*f1+...+hm*fm=0}を
満たす多項式ベクトル @var{(h1,...,hm)} 全体のなす加群のグレブナー基底を
計算する.
@item @var{fi} が多項式リストの場合, 自然に多項式ベクトルと見なす.
@item 返される結果は @var{[S,G,C]} の形のリストである. ここで 
@var{S}は,
与えられた項順序 @var{O} に対し, 加群の項順序 @var{[1,O]} すなわち
@var{O} で定まる POT (position over term) 項順序でのグレブナー基底である.
@var{G}は, 入力加群のPOT 項順序でのグレブナー基底である.
@var{C}は, 入力生成系から@var{G}の各元を生成する係数リストのリストである.

@item @var{h} が 0 のとき有理数体上で trace アルゴリズムにより計算する.
@var{h} が 1 のとき有理数体上で斉次化 trace アルゴリズムにより計算する.
@var{h} が 2 以上の素数のとき有限体上で計算する.

@item オプション @var{f4} が 1 のとき, F4 アルゴリズムにより計算する.
@item オプション @var{weyl} が 1 のとき Weyl 代数上で, 左イデアル (左加群) として計算する.
@item オプション @var{dp}l が 1 のとき, 返される結果は, 加群の要素を表す
多項式リストの代わりに加群単項式が用いられる.
@end itemize

@example
[0] load("noro_module_syz.rr")$
[43] load("cyclic")$
[53] F=cyclic(4);
[c3*c2*c1*c0-1,((c2+c3)*c1+c3*c2)*c0+c3*c2*c1,(c1+c3)*c0+c2*c1+c3*c2,
c0+c1+c2+c3]
[54] V=[c0,c1,c2,c3]$
[55] L=newsyz.module_syz(F,V,0,0)$
[56] L[0];
[[(-c2^2+c3^2)*c1-c3*c2^2+c3^3,-c3^2*c2^2+1,(c3*c2^3-c3^3*c2)*c1+...],
...,[0,0,c0+c1+c2+c3,(-c1-c3)*c0-c2*c1-c3*c2]]
[57] L[1];
[[(-c2+c3)*c1-c3^4*c2^2-c3*c2+2*c3^2],[-c3^2*c2^3-c3^3*c2^2+c2+c3],
...,[c1^2+2*c3*c1+c3^2],[c0+c1+c2+c3]]
[58] L[2];
[[(c2-c3)*c1+c3*c2-2*c3^2,c3^2*c2,(-c3*c2^2+c3^2*c2)*c1-c3*c2^3,...],
...,[0,0,-1,c1+c3],[0,0,0,1]]
[59] C0=L[2][0];
[(c2-c3)*c1+c3*c2-2*c3^2,c3^2*c2,(-c3*c2^2+c3^2*c2)*c1-c3*c2^3,
(c3*c2^3-c3^2*c2^2)*c1+c3^2*c2^3-c3^3*c2^2]
[60] L[1][0][0]-(C0[0]*F[0]+C0[1]*F[1]+C0[2]*F[2]+C0[3]*F[3]);
0
[61] M=newsuz.modules_syz(F,V,0,0dp=1)$
[62] M[0];
[(-1)*<<0,1,2,0:1>>+(-1)*<<0,0,2,1:1>>+(1)*<<0,1,0,2:1>>+...,
...,(1)*<<1,0,0,0:3>>+(1)*<<0,1,0,0:3>>+(1)*<<0,0,1,0:3>>+
...+(-1)*<<0,1,1,0:4>>+(-1)*<<1,0,0,1:4>>+(-1)*<<0,0,1,1:4>>]
@end example

@node 加群の自由分解,,, noro_module_syz.rr
@section 加群の自由分解

@menu
* newsyz.fres newsyz.minres::
* newsyz.lres newsyz.sres newsyz.minsres::
@end menu

R を多項式環とし. F_i を R 上の自由加群, n_i を F_i のランクとする.
本節の関数は, F_0 の部分加群 I に対し, F_0/I の自由分解
@iftex
@tex
$$0\to F_l\to \cdots \to F_0 \to F_0/I \to 0$$
@end tex
@end iftex
@ifnottex
0->F_l->...->F_0->F_0/I->0
@end ifnottex
を与える関数について解説する.
この自由分解において phi_i:F_i->F_(i-1) とする.

@node newsyz.fres newsyz.minres,,,加群の自由分解
@subsection @code{newsyz.fres}, @code{newsyz.minres}
@findex newsyz.fres
@findex newsyz.minres

@table @t
@item newsyz.fres(@var{f},@var{v},@var{h},@var{O}[|weyl=1])
@itemx newsyz.minres(@var{f},@var{v},@var{h},@var{O}[|weyl=1])
加群の自由分解を計算する.
@end table

@table @var
@item return
多項式リストのリストのリスト

@item f
多項式リスト, または多項式リストのリスト
@item v
変数リスト
@item h
非負整数
@item O
項順序
@end table


@itemize @bullet
f=[f_1,...,f_m] を部分加群 I の生成系とするとき,
の生成系とする.  この関数は, F_0/I の自由分解を計算する.
@item 結果は [M_1,...,M_l] なるリストで, M_i は [phi_i(e_1),...,phi_i(e_(n_i)]
なるベクトルのリストで, syz M_(i-1) の, O 上の POT 順序に関するグレブナー基底である.
@item @code{newsyz.module_syz} を逐次的に実行する. 
@code{newsyz.minres} では, 得られた syzygy の生成系のうち, 定数を成分に持つものがある限り簡約を行う.
@item @code{newsyz.minres} は, f が斉次の場合, 極小自由分解を得る. 
@item h, O, オプション weyl については @code{newsyz.module_syz} と同様である.
@end itemize

@example
[0] load("noro_module_syz.rr")$
[43] load("katsura")$
[47] F=hkatsura(4)$
[48] V=[t,u0,u1,u2,u3,u4]$
[49] R=newsyz.fres(F,V,0,0)$
[51] map(length,R);
[5,22,28,12,2]
[52] S=newsyz.minres(F,V,0,0)$
[5,10,10,5,1]
@end example

@node newsyz.lres newsyz.sres newsyz.minsres,,,加群の自由分解
@subsection @code{newsyz.lres}, @code{newsyz.sres}, @code{newsyz.minsres}, 
@findex newsyz.lres
@findex newsyz.sres
@findex newsyz.minsres

@table @t
@item newsyz.lres(@var{f},@var{v},@var{h},@var{O}[|dp=1,top=1])
@itemx newsyz.sres(@var{f},@var{v},@var{h},@var{O}[|dp=1])
@itemx newsyz.minsres(@var{f},@var{v},@var{h},@var{O}[|dp=1])
加群の自由分解を計算する.
@end table

@table @var
@item return
多項式リストのリストのリスト

@item f
多項式リスト, または多項式リストのリスト
@item v
変数リスト
@item h
0 または 1
@item O
項順序
@end table

@itemize @bullet
@item
f=[f_1,...,f_m] を部分加群 I の生成系とするとき,
@code{newsyz.lres} は F_0/I の自由分解を La Scala-Stillman アルゴリズムにより計算する.
@code{newsyz.sres}, @code{newsyz.minsres} は F_0/I の自由分解を Schreyer アルゴリズムにより計算する.
@item
有理数体上の多項式環上の加群に対してのみ実装されている.
@item 結果は [M_1,...,M_l] なるリストで, M_i は syz M_(i-1) の, Schreyer 順序に関する
グレブナー基底である.
@item h=1 のとき, 最初のグレブナー基底計算が斉次化経由で行われる.
@item dp=1 のとき, 結果を加群多項式で返す.
@item @code{newsyz.lres} において top=1 のとき, S-多項式の剰余計算は, 先頭項が簡約できなかった時点で修了する.
@item f が斉次の場合, @code{newsyz.lres} および @code{newsyz.minsres} は極小自由分解を得る. 
@end itemize

@example
[0] load("noro_module_syz.rr")$
[43] F=[x00*x11-x01*x10,x01*x12-x02*x11,x02*x13-x03*x12,-x11*x20+x21*x10,
-x21*x12+x22*x11,-x22*x13+x23*x12,x31*x20-x30*x21,x32*x21-x31*x22,x33*x22-x32*x23]$
[44] V=[x00,x01,x02,x03,x10,x11,x12,x13,x20,x21,x22,x23,x30,x31,x32,x33]$
[45] cputime(1)$
1.8e-05sec(1.502e-05sec)
[46] R=newsyz.minres(F,V,0,0)$
333.4sec(339.6sec)
[47] S=newsyz.lres(F,V,0,0)$
85.34sec(85.56sec)
[48] T=newsyz.minsres(F,V,0,0)$
241.2sec(250.3sec)
[49] cputime(0)$
[50] map(length,R);
[9,75,456,1602,3391,4680,4388,2849,1290,393,72,6]
[51] map(length,S);
[9,75,456,1602,3391,4680,4388,2849,1290,393,72,6,0]
[52] map(length,T);
[9,75,456,1602,3391,4680,4388,2849,1290,393,72,6,0]

@end example

@comment --- おまじない ---
@node Index,,, Top
@unnumbered Index
@printindex fn
@printindex cp
@iftex
@vfill @eject
@end iftex
@summarycontents
@contents
@bye
@comment --- おまじない終り ---