class Algebra::ResidueClassRing
def AlgebraicExtensionField(field, var)
ring = Polynomial(field, var) k = ResidueClassRing(ring, yield(ring.var)) def k.var; self[ground.var]; end k
end module_function :ResidueClassRing, :AlgebraicExtensionField
Attributes
x[R]
Public Class Methods
**(elem)
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 41 def self.**(elem) #elem: Polynomial, ResidueClassRing elem.convert_to(self) end
[](m)
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 35 def self.[](m); new(m); end
create(ground, mod)
click to toggle source
Calls superclass method
# File lib/algebra/residue-class-ring.rb, line 140 def self.create(ground, mod) klass = super(ground) klass.sysvar(:modulus, mod) if mod.is_a?(Integer) && (ground <= Integer || defined?(Rational) && ground <= Rational) klass.class_eval <<__END_OF_CLASS_DEFINITION__ # @@modulus = #{mod} @@inverse = [nil] + (1...@@modulus).collect{|x| d, a, = x.gcd_coeff(@@modulus) (y = a % @@modulus / d).zero? ? nil : y } require "algebra/prime-gen" def self.field?; Primes.include?(@@modulus); end def self.char; @@modulus; end def self.inverse(k); @@inverse[k]; end def self.to_ary; (0...@@modulus).collect{|x| self[x]}; end __END_OF_CLASS_DEFINITION__ end klass end
indeterminate(obj)
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 37 def self.indeterminate(obj) new(ground.indeterminate(obj)) end
new(x)
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 46 def initialize(x) @x = x % modulus end
Public Instance Methods
*(other)
click to toggle source
Calls superclass method
Algebra::AlgebraBase#*
# File lib/algebra/residue-class-ring.rb, line 102 def *(other) super{ |o| self.class[@x * o.x] } end
+(other)
click to toggle source
Calls superclass method
Algebra::AlgebraBase#+
# File lib/algebra/residue-class-ring.rb, line 90 def +(other) super{ |o| self.class[@x + o.x] } end
-(other)
click to toggle source
Calls superclass method
Algebra::AlgebraBase#-
# File lib/algebra/residue-class-ring.rb, line 96 def -(other) super{ |o| self.class[@x - o.x] } end
/(other)
click to toggle source
Calls superclass method
Algebra::AlgebraBase#/
# File lib/algebra/residue-class-ring.rb, line 115 def /(other) if other.is_a?(self.class) self * other.inverse else super{ |o| self.class[@x / o.x] } end end
==(other)
click to toggle source
Calls superclass method
Algebra::AlgebraBase#==
# File lib/algebra/residue-class-ring.rb, line 84 def ==(other) super{ |o| ((@x - o.x) % modulus).zero? } end
convert_to(k)
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 78 def convert_to(k) b = lift c = b.evaluate(k.ground.var) k[c] end
evaluate(*a)
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 65 def evaluate(*a) #p [333, @x, @x.class, a[0], a[0].class] #b = a[0].lift #c = b.evaluate(@x) #p [c, c.class] #d = self.class[c] #p [d, d.class] #k = @x.evaluate(*a) #p [444, k, k.class, k.lift, k.lift.class] self.class[@x.evaluate(*a)] #d end
inverse()
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 108 def inverse return self.class.inverse(@x) if self.class.respond_to? :inverse return self.class[@x.inverse] if @x.respond_to? :inverse d, a, = @x.gcd_coeff(modulus) self.class.new(a / d) end
lift()
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 33 def lift; @x; end
modulus()
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 137 def modulus; self.class.modulus; end
modulus=(var)
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 138 def modulus=(var); self.class.modulus = var; end
monomial?()
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 50 def monomial? !@x.respond_to?(:monomial?) || @x.monomial? #^^^^^^^^^ numeric ^^^^^^^^^ end
need_paren_in_coeff?()
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 55 def need_paren_in_coeff? if @x.respond_to?(:need_paren_in_coeff?) @x.need_paren_in_coeff? elsif @x.is_a?(Numeric) false else true end end
pdivmod(other)
click to toggle source
# File lib/algebra/residue-class-ring.rb, line 125 def pdivmod(other); [self / other, zero]; end
to_s()
click to toggle source
def unit?
inverse
end
# File lib/algebra/residue-class-ring.rb, line 131 def to_s (@x % modulus).to_s end
Also aliased as: inspect