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()
の引数すなわち定義多項式には次のような制限がある.
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.