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 }