class JAS::SolvIdeal
Represents a JAS solvable polynomial ideal.
Methods for left, right two-sided Groebner basees and others.
Attributes
the Java ordered polynomial list, polynomial ring, and polynomial list
the Java ordered polynomial list, polynomial ring, and polynomial list
the Java ordered polynomial list, polynomial ring, and polynomial list
Public Class Methods
Constructor for an ideal in a solvable polynomial ring.
# File examples/jas.rb, line 3973 def initialize(ring,ringstr="",list=nil) @ring = ring; if list == nil sr = StringReader.new( ringstr ); tok = GenPolynomialTokenizer.new(ring.ring,sr); @list = tok.nextSolvablePolynomialList(); else @list = rbarray2arraylist(list,rec=1); end @pset = OrderedPolynomialList.new(ring.ring,@list); #@ideal = SolvableIdeal.new(@pset); end
Public Instance Methods
Compare two ideals.
# File examples/jas.rb, line 3996 def <=>(other) s = SolvableIdeal.new(@pset); o = SolvableIdeal.new(other.pset); return s.compareTo(o); end
Test if two ideals are equal.
# File examples/jas.rb, line 4005 def ==(other) if not other.is_a? SolvIdeal return false; end s, o = self, other; return (s <=> o) == 0; end
Compute the intersection of this and the other ideal.
# File examples/jas.rb, line 4200 def intersect(other) s = SolvableIdeal.new(@pset); t = SolvableIdeal.new(other.pset); nn = s.intersect( t ); return SolvIdeal.new(@ring,"",nn.getList()); end
Compute the intersection of this and a polynomial ring.
# File examples/jas.rb, line 4191 def intersectRing(ring) s = SolvableIdeal.new(@pset); nn = s.intersect(ring.ring); return SolvIdeal.new(@ring,"",nn.getList()); end
Compute the inverse polynomial with respect to this twosided ideal.
# File examples/jas.rb, line 4258 def inverse(p) if p.is_a? RingElem p = p.elem; end s = SolvableIdeal.new(@pset); i = s.inverse(p); return RingElem.new(i); end
Test if this is a left Groebner base.
# File examples/jas.rb, line 4060 def isLeftGB() cofac = @ring.ring.coFac; ff = @pset.list; kind = ""; t = System.currentTimeMillis(); if cofac.is_a? GenPolynomialRing #and cofac.isCommutative() b = SolvableGroebnerBasePseudoRecSeq.new(cofac).isLeftGB(ff); kind = "pseudoRec" else if cofac.isField() or not cofac.isCommutative() b = SolvableGroebnerBaseSeq.new().isLeftGB(ff); kind = "field|nocom" else b = SolvableGroebnerBasePseudoSeq.new(cofac).isLeftGB(ff); kind = "pseudo" end end t = System.currentTimeMillis() - t; puts "isLeftGB(#{kind}) = #{b} executed in #{t} ms\n"; return b; end
Test if this is a left syzygy of the module in m.
# File examples/jas.rb, line 4354 def isLeftSyzygy(m) p = @pset; g = p.list; l = m.list; #puts "l = #{l}"; #puts "g = #{g}"; t = System.currentTimeMillis(); z = SolvableSyzygySeq.new(p.ring.coFac).isLeftZeroRelation( l, g ); t = System.currentTimeMillis() - t; puts "executed isLeftSyzygy in #{t} ms\n"; return z; end
Test if ideal is one.
# File examples/jas.rb, line 4016 def isONE() s = SolvableIdeal.new(@pset); return s.isONE(); end
Test if this is a right Groebner base.
# File examples/jas.rb, line 4166 def isRightGB() cofac = @ring.ring.coFac; ff = @pset.list; kind = ""; t = System.currentTimeMillis(); if cofac.is_a? GenPolynomialRing #and cofac.isCommutative() b = SolvableGroebnerBasePseudoRecSeq.new(cofac).isRightGB(ff); kind = "pseudoRec" else if cofac.isField() or not cofac.isCommutative() b = SolvableGroebnerBaseSeq.new().isRightGB(ff); kind = "field|nocom" else b = SolvableGroebnerBasePseudoSeq.new(cofac).isRightGB(ff); kind = "pseudo" end end t = System.currentTimeMillis() - t; puts "isRightGB(#{kind}) = #{b} executed in #{t} ms\n"; return b; end
Test if this is a right syzygy of the module in m.
# File examples/jas.rb, line 4370 def isRightSyzygy(m) p = @pset; g = p.list; l = m.list; #puts "l = #{l}"; #puts "g = #{g}"; t = System.currentTimeMillis(); z = SolvableSyzygySeq.new(p.ring.coFac).isRightZeroRelation( l, g ); t = System.currentTimeMillis() - t; puts "executed isRightSyzygy in #{t} ms\n"; return z; end
Test if this is a two-sided Groebner base.
# File examples/jas.rb, line 4116 def isTwosidedGB() cofac = @ring.ring.coFac; ff = @pset.list; kind = ""; t = System.currentTimeMillis(); if cofac.is_a? GenPolynomialRing #and cofac.isCommutative() b = SolvableGroebnerBasePseudoRecSeq.new(cofac).isTwosidedGB(ff); kind = "pseudoRec" else if cofac.isField() or not cofac.isCommutative() b = SolvableGroebnerBaseSeq.new().isTwosidedGB(ff); kind = "field|nocom" else b = SolvableGroebnerBasePseudoSeq.new(cofac).isTwosidedGB(ff); kind = "pseudo" end end t = System.currentTimeMillis() - t; puts "isTwosidedGB(#{kind}) = #{b} executed in #{t} ms\n"; return b; end
Test if ideal is zero.
# File examples/jas.rb, line 4024 def isZERO() s = SolvableIdeal.new(@pset); return s.isZERO(); end
Compute a left Groebner base.
# File examples/jas.rb, line 4032 def leftGB() #if ideal != nil # return SolvIdeal.new(@ring,"",@ideal.leftGB()); #end cofac = @ring.ring.coFac; ff = @pset.list; kind = ""; t = System.currentTimeMillis(); if cofac.is_a? GenPolynomialRing #and cofac.isCommutative() gg = SolvableGroebnerBasePseudoRecSeq.new(cofac).leftGB(ff); kind = "pseudoRec" else if cofac.isField() or not cofac.isCommutative() gg = SolvableGroebnerBaseSeq.new().leftGB(ff); kind = "field|nocom" else gg = SolvableGroebnerBasePseudoSeq.new(cofac).leftGB(ff); kind = "pseudo" end end t = System.currentTimeMillis() - t; puts "sequential(#{kind}) leftGB executed in #{t} ms\n"; return SolvIdeal.new(@ring,"",gg); end
Compute a left normal form of p with respect to this ideal.
# File examples/jas.rb, line 4270 def leftReduction(p) s = @pset; gg = s.list; if p.is_a? RingElem p = p.elem; end n = SolvableReductionSeq.new().leftNormalform(gg,p); return RingElem.new(n); end
Left Syzygy of generating polynomials.
# File examples/jas.rb, line 4326 def leftSyzygy() p = @pset; l = p.list; t = System.currentTimeMillis(); s = SolvableSyzygySeq.new(p.ring.coFac).leftZeroRelationsArbitrary( l ); m = SolvableModule.new("",p.ring); t = System.currentTimeMillis() - t; puts "executed leftSyzygy in #{t} ms\n"; return SolvableSubModule.new(m,"",s); end
Compute a left Groebner base in parallel.
# File examples/jas.rb, line 4296 def parLeftGB(th) s = @pset; ff = s.list; bbpar = SolvableGroebnerBaseParallel.new(th); t = System.currentTimeMillis(); gg = bbpar.leftGB(ff); t = System.currentTimeMillis() - t; bbpar.terminate(); puts "parallel #{th} leftGB executed in #{t} ms\n"; return SolvIdeal.new(@ring,"",gg); end
Compute a two-sided Groebner base in parallel.
# File examples/jas.rb, line 4311 def parTwosidedGB(th) s = @pset; ff = s.list; bbpar = SolvableGroebnerBaseParallel.new(th); t = System.currentTimeMillis(); gg = bbpar.twosidedGB(ff); t = System.currentTimeMillis() - t; bbpar.terminate(); puts "parallel #{th} twosidedGB executed in #{t} ms\n"; return SolvIdeal.new(@ring,"",gg); end
Compute a right Groebner base.
# File examples/jas.rb, line 4141 def rightGB() cofac = @ring.ring.coFac; ff = @pset.list; kind = ""; t = System.currentTimeMillis(); if cofac.is_a? GenPolynomialRing #and cofac.isCommutative() gg = SolvableGroebnerBasePseudoRecSeq.new(cofac).rightGB(ff); kind = "pseudoRec" else if cofac.isField() or not cofac.isCommutative() gg = SolvableGroebnerBaseSeq.new().rightGB(ff); kind = "field|nocom" else gg = SolvableGroebnerBasePseudoSeq.new(cofac).rightGB(ff); kind = "pseudo" end end t = System.currentTimeMillis() - t; puts "sequential(#{kind}) rightGB executed in #{t} ms\n"; return SolvIdeal.new(@ring,"",gg); end
Compute a right normal form of p with respect to this ideal.
# File examples/jas.rb, line 4283 def rightReduction(p) s = @pset; gg = s.list; if p.is_a? RingElem p = p.elem; end n = SolvableReductionSeq.new().rightNormalform(gg,p); return RingElem.new(n); end
Right Syzygy of generating polynomials.
# File examples/jas.rb, line 4340 def rightSyzygy() p = @pset; l = p.list; t = System.currentTimeMillis(); s = SolvableSyzygySeq.new(p.ring.coFac).rightZeroRelationsArbitrary( l ); m = SolvableModule.new("",p.ring); t = System.currentTimeMillis() - t; puts "executed rightSyzygy in #{t} ms\n"; return SolvableSubModule.new(m,"",s); end
Compute the sum of this and the other ideal.
# File examples/jas.rb, line 4210 def sum(other) s = SolvableIdeal.new(@pset); t = SolvableIdeal.new(other.pset); nn = s.sum( t ); return SolvIdeal.new(@ring,"",nn.getList()); end
Convert to polynomials with SolvableQuotient coefficients.
# File examples/jas.rb, line 4230 def toQuotientCoefficients() if @pset.ring.coFac.is_a? SolvableResidueRing cf = @pset.ring.coFac.ring; elsif @pset.ring.coFac.is_a? GenSolvablePolynomialRing cf = @pset.ring.coFac; #elsif @pset.ring.coFac.is_a? GenPolynomialRing # cf = @pset.ring.coFac; # puts "cf = " + cf.toScript(); else return self; end rrel = @pset.ring.table.relationList() + @pset.ring.polCoeff.coeffTable.relationList(); #puts "rrel = " + str(rrel); qf = SolvableQuotientRing.new(cf); qr = QuotSolvablePolynomialRing.new(qf,@pset.ring); #puts "qr = " + str(qr); qrel = rrel.map { |r| RingElem.new(qr.fromPolyCoefficients(r)) }; #puts "qrel = " + str(qrel); qring = SolvPolyRing.new(qf,@ring.ring.getVars(),@ring.ring.tord,qrel); #puts "qring = " + str(qring); qlist = @list.map { |r| qr.fromPolyCoefficients(@ring.ring.toPolyCoefficients(r)) }; qlist = qlist.map { |r| RingElem.new(r) }; return SolvIdeal.new(qring,"",qlist); end
Create a string representation.
# File examples/jas.rb, line 3989 def to_s() return @pset.toScript(); end
Compute a two-sided Groebner base.
# File examples/jas.rb, line 4085 def twosidedGB() cofac = @ring.ring.coFac; ff = @pset.list; kind = ""; t = System.currentTimeMillis(); if cofac.is_a? GenPolynomialRing #and cofac.isCommutative() gg = SolvableGroebnerBasePseudoRecSeq.new(cofac).twosidedGB(ff); kind = "pseudoRec" else #puts "two-sided: " + cofac.to_s if cofac.is_a? WordResidue #Ring gg = SolvableGroebnerBasePseudoSeq.new(cofac).twosidedGB(ff); kind = "pseudo" else if cofac.isField() or not cofac.isCommutative() gg = SolvableGroebnerBaseSeq.new().twosidedGB(ff); kind = "field|nocom" else gg = SolvableGroebnerBasePseudoSeq.new(cofac).twosidedGB(ff); kind = "pseudo" end end end t = System.currentTimeMillis() - t; puts "sequential(#{kind}) twosidedGB executed in #{t} ms\n"; return SolvIdeal.new(@ring,"",gg); end
Compute the univariate polynomials in each variable of this twosided ideal.
# File examples/jas.rb, line 4220 def univariates() s = SolvableIdeal.new(@pset); ll = s.constructUnivariate(); nn = ll.map {|e| RingElem.new(e) }; return nn; end