001/* 002 * $Id: SolvableReduction.java 5301 2015-08-16 14:26:02Z kredel $ 003 */ 004 005package edu.jas.gb; 006 007 008import java.io.Serializable; 009import java.util.List; 010 011import edu.jas.poly.GenSolvablePolynomial; 012import edu.jas.structure.RingElem; 013 014 015/** 016 * Solvable polynomial Reduction interface. Defines S-Polynomial, normalform and 017 * irreducible set. 018 * @param <C> coefficient type 019 * @author Heinz Kredel 020 */ 021 022public interface SolvableReduction<C extends RingElem<C>> extends Serializable { 023 024 025 /** 026 * Left S-Polynomial. 027 * @param Ap solvable polynomial. 028 * @param Bp solvable polynomial. 029 * @return left-spol(Ap,Bp) the left S-polynomial of Ap and Bp. 030 */ 031 public GenSolvablePolynomial<C> leftSPolynomial(GenSolvablePolynomial<C> Ap, GenSolvablePolynomial<C> Bp); 032 033 034 /** 035 * S-Polynomial with recording. 036 * @param S recording matrix, is modified. 037 * @param i index of Ap in basis list. 038 * @param Ap a polynomial. 039 * @param j index of Bp in basis list. 040 * @param Bp a polynomial. 041 * @return leftSpol(Ap, Bp), the left S-Polynomial for Ap and Bp. 042 */ 043 public GenSolvablePolynomial<C> leftSPolynomial(List<GenSolvablePolynomial<C>> S, int i, 044 GenSolvablePolynomial<C> Ap, int j, GenSolvablePolynomial<C> Bp); 045 046 047 /** 048 * Left Normalform. 049 * @param Ap solvable polynomial. 050 * @param Pp solvable polynomial list. 051 * @return left-nf(Ap) with respect to Pp. 052 */ 053 public GenSolvablePolynomial<C> leftNormalform(List<GenSolvablePolynomial<C>> Pp, 054 GenSolvablePolynomial<C> Ap); 055 056 057 /** 058 * LeftNormalform with recording. 059 * @param row recording matrix, is modified. 060 * @param Pp a polynomial list for reduction. 061 * @param Ap a polynomial. 062 * @return nf(Pp,Ap), the left normal form of Ap wrt. Pp. 063 */ 064 public GenSolvablePolynomial<C> leftNormalform(List<GenSolvablePolynomial<C>> row, 065 List<GenSolvablePolynomial<C>> Pp, GenSolvablePolynomial<C> Ap); 066 067 068 /** 069 * Left Normalform Set. 070 * @param Ap solvable polynomial list. 071 * @param Pp solvable polynomial list. 072 * @return list of left-nf(a) with respect to Pp for all a in Ap. 073 */ 074 public List<GenSolvablePolynomial<C>> leftNormalform(List<GenSolvablePolynomial<C>> Pp, 075 List<GenSolvablePolynomial<C>> Ap); 076 077 078 /** 079 * Left irreducible set. 080 * @param Pp solvable polynomial list. 081 * @return a list P of solvable polynomials which are in normalform wrt. P. 082 */ 083 public List<GenSolvablePolynomial<C>> leftIrreducibleSet(List<GenSolvablePolynomial<C>> Pp); 084 085 086 /** 087 * Is reduction of normal form. 088 * @param row recording matrix, is modified. 089 * @param Pp a solvable polynomial list for reduction. 090 * @param Ap a solvable polynomial. 091 * @param Np nf(Pp,Ap), a left normal form of Ap wrt. Pp. 092 * @return true, if Np + sum( row[i]*Pp[i] ) == Ap, else false. 093 */ 094 095 public boolean isLeftReductionNF(List<GenSolvablePolynomial<C>> row, List<GenSolvablePolynomial<C>> Pp, 096 GenSolvablePolynomial<C> Ap, GenSolvablePolynomial<C> Np); 097 098 099 /** 100 * Right S-Polynomial. 101 * @param Ap solvable polynomial. 102 * @param Bp solvable polynomial. 103 * @return right-spol(Ap,Bp) the right S-polynomial of Ap and Bp. 104 */ 105 public GenSolvablePolynomial<C> rightSPolynomial(GenSolvablePolynomial<C> Ap, GenSolvablePolynomial<C> Bp); 106 107 108 /** 109 * Right Normalform. 110 * @param Ap solvable polynomial. 111 * @param Pp solvable polynomial list. 112 * @return right-nf(Ap) with respect to Pp. 113 */ 114 public GenSolvablePolynomial<C> rightNormalform(List<GenSolvablePolynomial<C>> Pp, 115 GenSolvablePolynomial<C> Ap); 116 117 118 /** 119 * RightNormalform with recording. 120 * @param row recording matrix, is modified. 121 * @param Pp a polynomial list for reduction. 122 * @param Ap a polynomial. 123 * @return nf(Pp,Ap), the right normal form of Ap wrt. Pp. 124 */ 125 public GenSolvablePolynomial<C> rightNormalform(List<GenSolvablePolynomial<C>> row, 126 List<GenSolvablePolynomial<C>> Pp, GenSolvablePolynomial<C> Ap); 127 128 129 /** 130 * Is top reducible. Condition is lt(B) | lt(A) for some B in F. 131 * Is left right symetric. 132 * @param A polynomial. 133 * @param P polynomial list. 134 * @return true if A is top reducible with respect to P. 135 */ 136 public boolean isTopReducible(List<GenSolvablePolynomial<C>> P, GenSolvablePolynomial<C> A); 137 138 139 /** 140 * Is reducible. Is left right symetric. 141 * @param A polynomial. 142 * @param P polynomial list. 143 * @return true if A is reducible with respect to P. 144 */ 145 public boolean isReducible(List<GenSolvablePolynomial<C>> P, GenSolvablePolynomial<C> A); 146 147 148 /** 149 * Is in normalform. Is left right symetric. 150 * @param A polynomial. 151 * @param P polynomial list. 152 * @return true if A is in normalform with respect to P. 153 */ 154 public boolean isNormalform(List<GenSolvablePolynomial<C>> P, GenSolvablePolynomial<C> A); 155 156 157 /** 158 * Two-sided Normalform. 159 * @param Ap solvable polynomial. 160 * @param Pp solvable polynomial list. 161 * @return two-sided-nf(Ap) with respect to Pp. 162 */ 163 public GenSolvablePolynomial<C> normalform(List<GenSolvablePolynomial<C>> Pp, 164 GenSolvablePolynomial<C> Ap); 165 166}