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 }