Singularで環 代数統計ソフトウェア

  • ソフトウェアのインストールが済んで、簡単なことができるようになったので、環を扱ってみよう
> ring myring = 32003,(x,y,z),(dp,C); 
  • のように"myring"という名前の環を定義する
  • 以下が定義の3要素 coefficients, names_of_ring_variables,ordering
ring name = ( coefficients ), ( names_of_ring_variables ), ( ordering ); 
  • 3変数 x,yからなって標数0で、変数の並べ方の順序をlpで取り扱うような環r1を作ってみる
    • グレブナー基底の計算には斉次逆辞書式をよく使う、とか、連立方程式を解くときには「辞書式順序の斉次逆辞書式順序にはない特殊性を使う」とか、使いまわしのルールもあるようだ(参考こちら)
ring r1 = 0,(x,y),lp;
    • 標数は、ぐるっと回って「0扱いする」もの
      • 例えば、標数3とすると…
> ring rr = 3,(x,y,z),dp;
> setring rr;
> poly f = x+2y+3z+4xy+5yz+6zx+7x2y+8y2z+9z2x;
> f;
x2y-y2z+xy-yz+x-y
      • となる。3は0のことなので、3z,6zx,9z2xの項は消え(係数が0)ている。また、3で割って余りが2の項は-1をその係数として取っている
  • 変数の並べ方の順序は色々なルールが入れられるが、lpは辞書式順序で、rpというのは逆辞書式順序なので、それをr2として作ってみる
ring r2 = 0,(x,y),rp;
  • この二つの体を「環境」に設定した上で、多項式を登録してみる
>setring r1;
>poly f = (x-y)^3;
>f;
x3-3x2y+3xy2-y3
  • (x-y)^3x^3-3x^2y+3xy^2-y^3に書き換えて登録された
  • 環境で使う体をr2に変えてやってみる
>setring r2;
poly f = (x-y)^3;
f;
-y3+3y^2x-3yx2+x3
  • x,yの優先順位が入れ替わって-y^3+3y^2x-3yx^2+x^3として登録されていることがわかる
  • さて、標数0の3変数の環をlpで作って環境の環に指定しよう
>ring r = 0,(x,y,z),lp;
>setring r;
  • x^2+y^2+z^2-1=0の球を考えて、さらに(x^2+y^2+z^2-1)(z-2)=0というような球とz=2という平面の合わさった面とを考える
>poly f = x2+y2+z2-1;
>poly g = f*(z-2);
>ideal I = f,g;
>I;
I[1]=x2+y2+z2-1
I[2]=x2z-2x2+y2z-2y2+z3-2z2-z+2
>
  • このイデアルを操作して点(0,1,0)がfとgの両方の交わり?上にあることを確認するのには次のようにするそうだ
>ideal J = subst(I,var(1),0)
>J;
J[1]=y2+z2-1
J[2]=y2z-2y2+z3-2z2-z+2
  • f,gについてx=0を代入したものになっている
  • 引き続いて第二変数yの値が1である部分を取り出す
>J = subst(J,var(2),1)
>J;
J[1]=z2
J[2]=z3-2z2
>
  • x=0,y=1の部分が取り出されている
  • さらにz=0を指定する
>J = subst(J,var(3),0);
>J;
J[1]=0
J[2]=0
>
  • どちらも0担っているので、(0,1,0)はf,gで定まる多様体の上、ということ(らしい)
  • コマンドをいつも手打ちするのは面倒
    • テキストファイルに書いたものを読み込ませるには
> < "test.txt"
  • 逆にオブジェクトを描き出すには(output.txtファイルにオブジェクトpを書き出す)
> write("output.txt",p)
exit;