001 /* 002 * $Id: Reduction.java 3187 2010-06-16 22:07:38Z kredel $ 003 */ 004 005 package edu.jas.gb; 006 007 import java.util.List; 008 009 import java.io.Serializable; 010 011 import edu.jas.poly.ExpVector; 012 import edu.jas.poly.GenPolynomial; 013 import edu.jas.structure.RingElem; 014 015 016 /** 017 * Polynomial Reduction interface. 018 * Defines S-Polynomial, normalform, criterion 4, module criterion 019 * and irreducible set. 020 * @param <C> coefficient type 021 * @author Heinz Kredel 022 */ 023 024 public interface Reduction<C extends RingElem<C>> 025 extends Serializable { 026 027 028 /** 029 * S-Polynomial. 030 * @param Ap polynomial. 031 * @param Bp polynomial. 032 * @return spol(Ap,Bp) the S-polynomial of Ap and Bp. 033 */ 034 public GenPolynomial<C> SPolynomial(GenPolynomial<C> Ap, 035 GenPolynomial<C> Bp); 036 037 038 /** 039 * S-Polynomial with recording. 040 * @param S recording matrix, is modified. 041 * @param i index of Ap in basis list. 042 * @param Ap a polynomial. 043 * @param j index of Bp in basis list. 044 * @param Bp a polynomial. 045 * @return Spol(Ap, Bp), the S-Polynomial for Ap and Bp. 046 */ 047 public GenPolynomial<C> 048 SPolynomial(List<GenPolynomial<C>> S, 049 int i, 050 GenPolynomial<C> Ap, 051 int j, 052 GenPolynomial<C> Bp); 053 054 055 /** 056 * Module criterium. 057 * @param modv number of module variables. 058 * @param A polynomial. 059 * @param B polynomial. 060 * @return true if the module S-polynomial(i,j) is required. 061 */ 062 public boolean moduleCriterion(int modv, 063 GenPolynomial<C> A, 064 GenPolynomial<C> B); 065 066 067 /** 068 * Module criterium. 069 * @param modv number of module variables. 070 * @param ei ExpVector. 071 * @param ej ExpVector. 072 * @return true if the module S-polynomial(i,j) is required. 073 */ 074 public boolean moduleCriterion(int modv, ExpVector ei, ExpVector ej); 075 076 077 /** 078 * GB criterium 4. 079 * Use only for commutative polynomial rings. 080 * @param A polynomial. 081 * @param B polynomial. 082 * @param e = lcm(ht(A),ht(B)) 083 * @return true if the S-polynomial(i,j) is required, else false. 084 */ 085 public boolean criterion4(GenPolynomial<C> A, 086 GenPolynomial<C> B, 087 ExpVector e); 088 089 090 /** 091 * GB criterium 4. 092 * Use only for commutative polynomial rings. 093 * @param A polynomial. 094 * @param B polynomial. 095 * @return true if the S-polynomial(i,j) is required, else false. 096 */ 097 public boolean criterion4(GenPolynomial<C> A, 098 GenPolynomial<C> B); 099 100 101 /** 102 * Is top reducible. 103 * Condition is lt(B) | lt(A) for some B in F. 104 * @param A polynomial. 105 * @param P polynomial list. 106 * @return true if A is top reducible with respect to P. 107 */ 108 public boolean isTopReducible(List<GenPolynomial<C>> P, 109 GenPolynomial<C> A); 110 111 112 /** 113 * Is reducible. 114 * @param A polynomial. 115 * @param P polynomial list. 116 * @return true if A is reducible with respect to P. 117 */ 118 public boolean isReducible(List<GenPolynomial<C>> P, 119 GenPolynomial<C> A); 120 121 122 /** 123 * Is in Normalform. 124 * @param A polynomial. 125 * @param P polynomial list. 126 * @return true if A is in normalform with respect to P. 127 */ 128 public boolean isNormalform(List<GenPolynomial<C>> P, 129 GenPolynomial<C> A); 130 131 132 /** 133 * Is in Normalform. 134 * @param Pp polynomial list. 135 * @return true if each A in Pp is in normalform with respect to Pp\{A}. 136 */ 137 public boolean isNormalform( List<GenPolynomial<C>> Pp ); 138 139 140 /** 141 * Normalform. 142 * @param A polynomial. 143 * @param P polynomial list. 144 * @return nf(A) with respect to P. 145 */ 146 public GenPolynomial<C> normalform(List<GenPolynomial<C>> P, 147 GenPolynomial<C> A); 148 149 150 /** 151 * Normalform Set. 152 * @param Ap polynomial list. 153 * @param Pp polynomial list. 154 * @return list of nf(a) with respect to Pp for all a in Ap. 155 */ 156 public List<GenPolynomial<C>> normalform(List<GenPolynomial<C>> Pp, 157 List<GenPolynomial<C>> Ap); 158 159 160 /** 161 * Normalform with recording. 162 * @param row recording matrix, is modified. 163 * @param Pp a polynomial list for reduction. 164 * @param Ap a polynomial. 165 * @return nf(Pp,Ap), the normal form of Ap wrt. Pp. 166 */ 167 public GenPolynomial<C> 168 normalform(List<GenPolynomial<C>> row, 169 List<GenPolynomial<C>> Pp, 170 GenPolynomial<C> Ap); 171 172 173 /** 174 * Irreducible set. 175 * @param Pp polynomial list. 176 * @return a list P of polynomials which are in normalform wrt. P and with ideal(Pp) = ideal(P). 177 */ 178 public List<GenPolynomial<C>> irreducibleSet(List<GenPolynomial<C>> Pp); 179 180 181 182 /** 183 * Is reduction of normal form. 184 * @param row recording matrix, is modified. 185 * @param Pp a polynomial list for reduction. 186 * @param Ap a polynomial. 187 * @param Np nf(Pp,Ap), a normal form of Ap wrt. Pp. 188 * @return true, if Np + sum( row[i]*Pp[i] ) == Ap, else false. 189 */ 190 191 public boolean 192 isReductionNF(List<GenPolynomial<C>> row, 193 List<GenPolynomial<C>> Pp, 194 GenPolynomial<C> Ap, 195 GenPolynomial<C> Np); 196 197 }