
|
Go to the first, previous, next, last section, table of contents.
Asir においては, 代数体という対象は定義されない.
独立した対象として定義されるのは, 代数的数である.
代数体は, 有理数体に, 代数的数を有限個
順次添加した体として仮想的に定義される. 新たな代数的数は, 有理数および
これまで定義された代数的数の多項式を係数とする 1 変数多項式
を定義多項式として定義される. 以下, ある定義多項式の根として
定義された代数的数を, root と呼ぶことにする.
[0] A0=newalg(x^2+1);
(#0)
[1] A1=newalg(x^3+A0*x+A0);
(#1)
[2] [type(A0),ntype(A0)];
[1,2]
この例では, A0 は x^2+1=0 の根, A1 は, その A0
を係数に含む x^3+A0*x+A0=0 の根として定義されている.
newalg() の引数すなわち定義多項式には次のような制限がある.
-
定義多項式は 1 変数多項式でなければならない.
-
newalg() の引数である定義多項式は, 代数的数を含む式の簡単化のた
めに用いられる. この簡単化は, 組み込み函数 srem() に相当する内
部ルーチンを用いて行われる. このため, 定義多項式の主係数は, 有理数に
なっている必要がある.
-
定義多項式の係数は すでに定義されている
root の有理数係数多項式
でなければならない.
-
定義多項式は, その係数に含まれる全ての
root を有理数に添加した
体上で既約でなければならない.
newalg() が行う引数チェックは, 1 および 2 のみである.
特に, 引数の定義多項式の既約性は全くチェックされない. これは
既約性のチェックが多大な計算量を必要とするためで, この点に関しては,
ユーザの責任に任されている.
一旦 newalg() によって定義された代数的数は, 数としての識別子を持ち,
また, 数の中では代数的数としての識別子を持つ. (type() , vtype()
参照.) さらに, 有理数と, root の有理式も同様に代数的数となる.
[87] N=(A0^2+A1)/(A1^2-A0-1);
((#1+#0^2)/(#1^2-#0-1))
[88] [type(N),ntype(N)];
[1,2]
例からわかるように, root は #n
と表示される. しかし, ユーザはこの形では入力できない. root は
変数に格納して用いるか, あるいは alg(n) により取り出す.
また, 効率は落ちるが, 全く同じ引数 (変数は異なっていてもよい) により
newalg() を呼べば, 新しい代数的数は定義されずに既に定義された
ものが得られる.
[90] alg(0);
(#0)
[91] newalg(t^2+1);
(#0)
root の定義多項式は, defpoly() により取り出せる.
[96] defpoly(A0);
t#0^2+1
[97] defpoly(A1);
t#1^3+t#0*t#1+t#0
ここで現れた, t#0 , t#1 はそれぞれ #0 , #1 に
対応する不定元である. これらもユーザが入力することはできない.
var() で取り出すか, あるいは algv(n) により取り出す.
[98] var(@);
t#1
[99] algv(0);
t#0
[100]
Go to the first, previous, next, last section, table of contents.
|