001/*
002 * $Id: Syzygy.java 3445 2010-12-25 17:24:04Z kredel $
003 */
004
005package edu.jas.gbmod;
006
007import java.util.List;
008
009import edu.jas.poly.GenPolynomial;
010import edu.jas.poly.ModuleList;
011import edu.jas.poly.PolynomialList;
012import edu.jas.structure.RingElem;
013
014import edu.jas.vector.GenVector;
015
016/**
017 * Syzygy interface.
018 * Defines Syzygy computations and tests.
019 * @param <C> coefficient type
020 * @author Heinz Kredel
021 */
022
023public interface Syzygy<C extends RingElem<C>>  {
024
025
026    /**
027     * Syzygy module from Groebner base.
028     * F must be a Groebner base.
029     * @param F a Groebner base.
030     * @return syz(F), a basis for the module of syzygies for F.
031     */
032    public List<List<GenPolynomial<C>>> 
033           zeroRelations(List<GenPolynomial<C>> F);
034
035
036    /**
037     * Syzygy module from Groebner base.
038     * F must be a Groebner base.
039     * @param modv number of module variables.
040     * @param F a Groebner base.
041     * @return syz(F), a basis for the module of syzygies for F.
042     */
043    public List<List<GenPolynomial<C>>> 
044           zeroRelations(int modv, List<GenPolynomial<C>> F);
045
046
047    /**
048     * Syzygy module from Groebner base.
049     * v must be a Groebner base.
050     * @param modv number of module variables.
051     * @param v a Groebner base.
052     * @return syz(v), a basis for the module of syzygies for v.
053     */
054    public List<List<GenPolynomial<C>>> 
055           zeroRelations(int modv, GenVector<GenPolynomial<C>> v);
056
057
058    /**
059     * Syzygy module from module Groebner base.
060     * M must be a module Groebner base.
061     * @param M a module Groebner base.
062     * @return syz(M), a basis for the module of syzygies for M.
063     */
064    public ModuleList<C> 
065          zeroRelations(ModuleList<C> M);
066
067
068    /**
069     * Test if sysygy.
070     * @param Z list of sysygies.
071     * @param F a polynomial list.
072     * @return true, if Z is a list of syzygies for F, else false.
073     */
074    public boolean 
075           isZeroRelation(List<List<GenPolynomial<C>>> Z, 
076                          List<GenPolynomial<C>> F);
077
078
079    /**
080     * Test if sysygy of modules.
081     * @param Z list of sysygies.
082     * @param F a module list.
083     * @return true, if Z is a list of syzygies for F, else false.
084     */
085    public boolean 
086           isZeroRelation(ModuleList<C> Z, ModuleList<C> F);
087
088
089    /**
090     * Resolution of a module.
091     * Only with direct GBs.
092     * @param M a module list of a Groebner basis.
093     * @return a resolution of M.
094     */
095    public List<ResPart<C>>
096           resolution(ModuleList<C> M);
097
098
099    /**
100     * Resolution of a polynomial list.
101     * Only with direct GBs.
102     * @param F a polynomial list of a Groebner basis.
103     * @return a resolution of F.
104     */
105    public List // <ResPart<C>|ResPolPart<C>>
106           resolution(PolynomialList<C> F);
107
108
109    /**
110     * Resolution of a polynomial list.
111     * @param F a polynomial list of an arbitrary basis.
112     * @return a resolution of F.
113     */
114    public List // <ResPart<C>|ResPolPart<C>>
115           resolutionArbitrary(PolynomialList<C> F);
116
117
118    /**
119     * Resolution of a module.
120     * @param M a module list of an arbitrary basis.
121     * @return a resolution of M.
122     */
123    public List<ResPart<C>>
124           resolutionArbitrary(ModuleList<C> M);
125
126
127    /**
128     * Syzygy module from arbitrary base.
129     * @param F a polynomial list.
130     * @return syz(F), a basis for the module of syzygies for F.
131     */
132    public List<List<GenPolynomial<C>>> 
133           zeroRelationsArbitrary(List<GenPolynomial<C>> F);
134
135
136    /**
137     * Syzygy module from arbitrary base.
138     * @param modv number of module variables.
139     * @param F a polynomial list.
140     * @return syz(F), a basis for the module of syzygies for F.
141     */
142    public List<List<GenPolynomial<C>>> 
143           zeroRelationsArbitrary(int modv, List<GenPolynomial<C>> F);
144
145
146    /**
147     * Syzygy module from arbitrary module base.
148     * @param M an arbitrary module base.
149     * @return syz(M), a basis for the module of syzygies for M.
150     */
151    public ModuleList<C> 
152           zeroRelationsArbitrary(ModuleList<C> M); 
153
154}