=begin
[((<index-ja|URL:index-ja.html>))] 

= AlgebraicExtensionField
((*(代数拡大体)*))

代数拡大体を表現するクラス

== ファイル名:
* ((|algebraic-Extension-feild.rb|))

== スーパークラス:

* ((|ResidueClassRing|))

== インクルードしているモジュール:

なし。

== 関連するメソッド:

--- Algebra.AlgebraicExtensionField(field, obj){|x| ... }
    ((<::create>)) と同じ。

== クラスメソッド:

--- ::create(k, obj){|x| p(x) }
    体 ((|k|)) を、((|obj|)) で表される変数 ((|x|)) の多項式
    ((|p(x)|)) で拡大した環 ((|k[x]/(p(x))|))を返します。
    この環には、クラスメソッド ((<::var>))、((<::def_polys>))、
    ((<::env_ring>)) が定義されます。

    
    例: 有理数を方程式 (({x**2 + x + 1 == 0})) で拡大した体 F を作る。
      require "rational"
      require "algebraic-extension-field"
      F = Algebra::AlgebraicExtensionField.create(Rational, "x") {|x| x**2 + x + 1}
      x = F.var
      p( (x-1)** 3 / (x**2 - 1) ) #=> -3x - 3


--- ::var
    ((<::create>)) の返り値 ((|k[x]/(p(x))|)) に定義され、
    この剰余環における ((|x|)) で
    代表される剰余類を返します。

--- ::modulus
    ((<::create>)) の返り値 ((|k[x]/(p(x))|)) に定義され、((|k[x]|)) 
    の要素 ((|p(x)|))  を返します。

--- ::def_polys
    ((<::create>)) の返り値 ((|k[x]/(p(x))|)) に定義され、
    長さ ((|n|)) の各 ((<::modulus>)) の配列を返します。
    ここで、自身は、基礎体 ((|k0|)) 上高さ ((|n|)) の
    再帰的な ((|AlgebraicExtensionField|)) であるとします。


    例: 基礎体を有理数とし、2, 3, 5 の立方根による拡大体を作る
      require "algebra"
      # K0 == Rational
      K1 = AlgebraicExtensionField(Rational, "x1") { |x|
        x ** 3 - 2
      }
      K2 = AlgebraicExtensionField(K1, "x2") { |y|
        y ** 3 - 3
      }
      K3 = AlgebraicExtensionField(K2, "x3") { |z|
        z ** 3 - 5
      }

      p K3.def_polys #=> [x1^3 - 2, x2^3 - 3, x3^3 - 5]

      x1, x2, x3 = K1.var, K2.var, K3.var
      f = x1**2 + 2*x2**2 + 3*x3**2
      f0 = f.abs_lift

      p f0.type     #=> (Polynomial/(Polynomial/(Polynomial/Rational)))
      p f0.type == K3.env_ring #=> true

      p f #=> 3x3^2 + 2x2^2 + x1^2
      p f0.evaluate(x3.abs_lift, x2.abs_lift, x1.abs_lift)
          #=> x3^2 + 2x2^2 + 3x3^2


--- ::env_ring
    ((<::create>)) の返り値 ((|k[x]/(p(x))|)) に定義され、
    多変数多項式環 ((|k0[x1, x2,.., xn]|)) を返します。
    ここで、自身は、基礎体 ((|k0|)) 上高さ ((|n|)) の
    再帰的な ((|AlgebraicExtensionField|)) であるとします。

--- ::ground
    剰余環のもとになる多項式環 ((|k[x]|)) を返します。


== メソッド
--- abs_lift
    ((<::env_ring>)) すなわち基礎体 ((|k0|)) 上
    の多変数多項式環 ((|k0[x1, x2,.., xn]|))
    へのリフトを返します。

=end
