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
inspect()
Alias for: to_s
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