001/* 002 * $Id: Syzygy.java 5267 2015-07-27 17:57:50Z kredel $ 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}