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 }