001 /*
002 * $Id: SolvableExtendedGB.java 3451 2010-12-27 12:45:18Z kredel $
003 */
004
005 package edu.jas.gb;
006
007 import java.util.List;
008
009 import edu.jas.poly.GenSolvablePolynomial;
010 import edu.jas.poly.GenSolvablePolynomialRing;
011 import edu.jas.poly.ModuleList;
012 import edu.jas.poly.PolynomialList;
013 import edu.jas.structure.RingElem;
014
015
016 /**
017 * Container for a GB and transformation matrices.
018 * A container for F, G, calG and calF.
019 * Immutable objects.
020 * @param <C> coefficient type
021 * @param F an ideal base.
022 * @param G a Groebner base of F.
023 * @param F2G a transformation matrix from F to G.
024 * @param G2F a transformation matrix from G to F.
025 */
026 public class SolvableExtendedGB<C extends RingElem<C>> {
027
028 public final List<GenSolvablePolynomial<C>> F;
029 public final List<GenSolvablePolynomial<C>> G;
030 public final List<List<GenSolvablePolynomial<C>>> F2G;
031 public final List<List<GenSolvablePolynomial<C>>> G2F;
032 public final GenSolvablePolynomialRing<C> ring;
033
034
035 public SolvableExtendedGB( List<GenSolvablePolynomial<C>> F,
036 List<GenSolvablePolynomial<C>> G,
037 List<List<GenSolvablePolynomial<C>>> F2G,
038 List<List<GenSolvablePolynomial<C>>> G2F) {
039 this.F = F;
040 this.G = G;
041 this.F2G = F2G;
042 this.G2F = G2F;
043 GenSolvablePolynomialRing<C> r = null;
044 if ( G != null ) {
045 for ( GenSolvablePolynomial<C> p : G ) {
046 if ( p != null ) {
047 r = p.ring;
048 break;
049 }
050 }
051 if ( r != null && r.getVars() == null ) {
052 r.setVars( r.newVars("y") );
053 }
054 }
055 this.ring = r;
056 }
057
058
059 /** Get the String representation.
060 * @see java.lang.Object#toString()
061 */
062 @Override
063 public String toString() {
064 PolynomialList<C> P;
065 ModuleList<C> M;
066 StringBuffer s = new StringBuffer("SolvableExtendedGB: \n\n");
067 P = new PolynomialList<C>( ring, F );
068 s.append("F = " + P + "\n\n");
069 P = new PolynomialList<C>( ring, G );
070 s.append("G = " + P + "\n\n");
071 M = new ModuleList<C>( ring, F2G );
072 s.append("F2G = " + M + "\n\n");
073 M = new ModuleList<C>( ring, G2F );
074 s.append("G2F = " + M + "\n");
075 return s.toString();
076 }
077
078 }