001/*
002 * $Id$
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}