001/*
002 * $Id$
003 */
004
005package edu.jas.gbufd;
006
007
008import java.util.List;
009
010import edu.jas.structure.RegularRingElem;
011
012import edu.jas.gb.Reduction;
013import edu.jas.poly.GenPolynomial;
014
015
016/**
017 * Polynomial R Reduction interface. Defines additionally boolean closure
018 * methods.
019 * @param <C> coefficient type
020 * @author Heinz Kredel
021 */
022
023public interface RReduction<C extends RegularRingElem<C>> extends Reduction<C> {
024
025
026    /**
027     * Is strong top reducible. Condition is idempotent(a) == idempotent(b), for
028     * a=ldcf(A) and b=ldcf(B) and lt(B) | lt(A) for some B in F.
029     * @param A polynomial.
030     * @param P polynomial list.
031     * @return true if A is string top reducible with respect to P.
032     */
033    public boolean isStrongTopReducible(List<GenPolynomial<C>> P, GenPolynomial<C> A);
034
035
036    /**
037     * Is boolean closed, test if A == idempotent(ldcf(A)) A.
038     * @param A polynomial.
039     * @return true if A is boolean closed, else false.
040     */
041    public boolean isBooleanClosed(GenPolynomial<C> A);
042
043
044    /**
045     * Is boolean closed, test if all A in F are boolean closed.
046     * @param F polynomial list.
047     * @return true if F is boolean closed, else false.
048     */
049    public boolean isBooleanClosed(List<GenPolynomial<C>> F);
050
051
052    /**
053     * Boolean closure, compute idempotent(ldcf(A)) A.
054     * @param A polynomial.
055     * @return bc(A).
056     */
057    public GenPolynomial<C> booleanClosure(GenPolynomial<C> A);
058
059
060    /**
061     * Boolean remainder, compute idemComplement(ldcf(A)) A.
062     * @param A polynomial.
063     * @return br(A) = A - bc(A).
064     */
065    public GenPolynomial<C> booleanRemainder(GenPolynomial<C> A);
066
067
068    /**
069     * Reduced boolean closure, compute BC(A) for all A in F.
070     * @param F polynomial list.
071     * @return red(bc(F)) = bc(red(F)).
072     */
073    public List<GenPolynomial<C>> reducedBooleanClosure(List<GenPolynomial<C>> F);
074
075
076    /**
077     * Reduced boolean closure, compute BC(A) modulo F.
078     * @param A polynomial.
079     * @param F polynomial list.
080     * @return red(bc(A)).
081     */
082    public List<GenPolynomial<C>> reducedBooleanClosure(List<GenPolynomial<C>> F,
083            GenPolynomial<C> A);
084
085
086}