001/* 002 * $Id: SigReduction.java 5476 2016-03-25 17:57:05Z kredel $ 003 */ 004 005package edu.jas.gb; 006 007 008import java.io.Serializable; 009import java.util.List; 010 011import edu.jas.poly.GenPolynomial; 012import edu.jas.structure.RingElem; 013 014 015/** 016 * Polynomial SigReduction interface. Defines S-Polynomial, normalform with 017 * respect to signatures. 018 * @param <C> coefficient type 019 * @author Heinz Kredel 020 */ 021 022public interface SigReduction<C extends RingElem<C>> extends Serializable { 023 024 025 /** 026 * S-Polynomial. 027 * @param Ap polynomial. 028 * @param Bp polynomial. 029 * @return spol(Ap,Bp) the S-polynomial of Ap and Bp. 030 */ 031 public GenPolynomial<C> SPolynomial(SigPoly<C> Ap, SigPoly<C> Bp); 032 033 034 /** 035 * Is top reducible. Condition is lt(B) | lt(A) for some B in F or G. 036 * @param A polynomial. 037 * @param F polynomial list. 038 * @param G polynomial list. 039 * @return true if A is top reducible with respect to P. 040 */ 041 public boolean isSigReducible(List<SigPoly<C>> F, List<SigPoly<C>> G, SigPoly<C> A); 042 043 044 /** 045 * Is in Normalform. 046 * @param A polynomial. 047 * @param F polynomial list. 048 * @param G polynomial list. 049 * @return true if A is in normalform with respect to F and G. 050 */ 051 public boolean isSigNormalform(List<SigPoly<C>> F, List<SigPoly<C>> G, SigPoly<C> A); 052 053 054 /** 055 * Normalform. 056 * @param A polynomial. 057 * @param F polynomial list. 058 * @param G polynomial list. 059 * @return nf(A) with respect to F and G. 060 */ 061 public SigPoly<C> sigNormalform(List<GenPolynomial<C>> F, List<SigPoly<C>> G, SigPoly<C> A); 062 063}