
[index-ja]

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] ؤΥ
    Ȥ֤ޤ
   

