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