001    /*
002     * $Id: SolvableSyzygy.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.GenSolvablePolynomial;
010    import edu.jas.poly.ModuleList;
011    import edu.jas.poly.PolynomialList;
012    import edu.jas.structure.RingElem;
013    
014    
015    
016    /**
017     * Syzygy interface for solvable polynomials.
018     * Defines syzygy computations and tests.
019     * @param <C> coefficient type
020     * @author Heinz Kredel
021     */
022    
023    public interface SolvableSyzygy<C extends RingElem<C>> {
024    
025    
026        /**
027         * Left syzygy for left Groebner base.
028         * @param F a Groebner base.
029         * @return leftSyz(F), a basis for the left module of syzygies for F.
030         */
031        public List<List<GenSolvablePolynomial<C>>> 
032               leftZeroRelations(List<GenSolvablePolynomial<C>> F);
033    
034    
035        /**
036         * Left syzygy for left Groebner base.
037         * @param modv number of module variables.
038         * @param F a Groebner base.
039         * @return leftSyz(F), a basis for the left module of syzygies for F.
040         */
041        public List<List<GenSolvablePolynomial<C>>>
042               leftZeroRelations(int modv, 
043                                 List<GenSolvablePolynomial<C>> F);
044    
045    
046        /**
047         * Left syzygy for left module Groebner base.
048         * @param M a Groebner base.
049         * @return leftSyz(M), a basis for the left module of syzygies for M.
050         */
051        public ModuleList<C> 
052               leftZeroRelations(ModuleList<C> M);
053    
054    
055        /**
056         * Test if left syzygy.
057         * @param Z list of sysygies.
058         * @param F a polynomial list.
059         * @return true, if Z is a list of left syzygies for F, else false.
060         */
061        public boolean 
062               isLeftZeroRelation(List<List<GenSolvablePolynomial<C>>> Z, 
063                                  List<GenSolvablePolynomial<C>> F);
064    
065    
066        /**
067         * Test if right syzygy.
068         * @param Z list of sysygies.
069         * @param F a polynomial list.
070         * @return true, if Z is a list of right syzygies for F, else false.
071         */
072        public boolean 
073               isRightZeroRelation(List<List<GenSolvablePolynomial<C>>> Z, 
074                                   List<GenSolvablePolynomial<C>> F);
075    
076    
077        /**
078         * Test if left sysygy of modules
079         * @param Z list of sysygies.
080         * @param F a module list.
081         * @return true, if Z is a list of left syzygies for F, else false.
082         */
083        public boolean 
084               isLeftZeroRelation(ModuleList<C> Z, 
085                                  ModuleList<C> F);
086    
087    
088        /**
089         * Test if right sysygy of modules
090         * @param Z list of sysygies.
091         * @param F a module list.
092         * @return true, if Z is a list of right syzygies for F, else false.
093         */
094        public boolean 
095               isRightZeroRelation(ModuleList<C> Z, 
096                                   ModuleList<C> F);
097    
098    
099        /**
100         * Resolution of a module.
101         * Only with direct GBs.
102         * @param M a module list of a Groebner basis.
103         * @return a resolution of M.
104         */
105        public List<SolvResPart<C>> 
106               resolution(ModuleList<C> M);
107    
108    
109        /**
110         * Resolution of a polynomial list.
111         * Only with direct GBs.
112         * @param F a polynomial list of a Groebner basis.
113         * @return a resolution of F.
114         */
115        public List // <SolvResPart<C>|SolvResPolPart<C>> 
116               resolution(PolynomialList<C> F);
117    
118    
119        /**
120         * Resolution of a module.
121         * @param M a module list of an arbitrary basis.
122         * @return a resolution of M.
123         */
124        public List<SolvResPart<C>> 
125               resolutionArbitrary(ModuleList<C> M);
126    
127    
128        /**
129         * Resolution of a polynomial list.
130         * @param F a polynomial list of an arbitrary basis.
131         * @return a resolution of F.
132         */
133        public List // <SolvResPart<C>|SolvResPolPart<C>> 
134               resolutionArbitrary(PolynomialList<C> F);
135    
136    
137        /**
138         * Left syzygy module from arbitrary base.
139         * @param F a solvable polynomial list.
140         * @return syz(F), a basis for the module of left syzygies for F.
141         */
142        public List<List<GenSolvablePolynomial<C>>> 
143               leftZeroRelationsArbitrary(List<GenSolvablePolynomial<C>> F);
144    
145    
146        /**
147         * Left syzygy module from arbitrary base.
148         * @param modv number of module variables.
149         * @param F a solvable polynomial list.
150         * @return syz(F), a basis for the module of left syzygies for F.
151         */
152        public List<List<GenSolvablePolynomial<C>>> 
153               leftZeroRelationsArbitrary(int modv, List<GenSolvablePolynomial<C>> F);
154    
155    
156        /**
157         * Left syzygy for arbitrary left module base.
158         * @param M an arbitrary base.
159         * @return leftSyz(M), a basis for the left module of syzygies for M.
160         */
161        public ModuleList<C> 
162               leftZeroRelationsArbitrary(ModuleList<C> M);
163    
164    
165        /**
166         * Right syzygy module from arbitrary base.
167         * @param F a solvable polynomial list.
168         * @return syz(F), a basis for the module of right syzygies for F.
169         */
170        public List<List<GenSolvablePolynomial<C>>> 
171               rightZeroRelationsArbitrary(List<GenSolvablePolynomial<C>> F);
172    
173    
174        /**
175         * Right syzygy module from arbitrary base.
176         * @param modv number of module variables.
177         * @param F a solvable polynomial list.
178         * @return syz(F), a basis for the module of right syzygies for F.
179         */
180        public List<List<GenSolvablePolynomial<C>>> 
181               rightZeroRelationsArbitrary(int modv, List<GenSolvablePolynomial<C>> F);
182    
183    }