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 }