001    /*
002     * $Id: Syzygy.java 3445 2010-12-25 17:24:04Z kredel $
003     */
004    
005    package edu.jas.gbmod;
006    
007    import java.util.List;
008    
009    import edu.jas.poly.GenPolynomial;
010    import edu.jas.poly.ModuleList;
011    import edu.jas.poly.PolynomialList;
012    import edu.jas.structure.RingElem;
013    
014    import 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    
023    public 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    }