1#############################################################################
2##
3#W  affine.gd               Manuel Delgado <mdelgado@fc.up.pt>
4#W                          Pedro A. Garcia-Sanchez <pedro@ugr.es>
5##
6#Y  Copyright 2015-- Centro de Matemática da Universidade do Porto, Portugal and Universidad de Granada, Spain
7#############################################################################
8
9
10
11###############################################################################
12#O BelongsToAffineSemigroup
13# Determines if the vector v is in the affine semigroup a
14###########################################################################
15DeclareOperation("BelongsToAffineSemigroup",[IsHomogeneousList,IsAffineSemigroup]);
16
17###############################################################################
18#F BasisOfGroupGivenByEquations
19# Computes a basis of a subgroup of Z^n with defining equations
20# Ax =0 \in Z_m1\times\Z_mt \times Z^k, k is n-length(m),
21# m=[m1,...,mt]
22###########################################################################
23DeclareGlobalFunction("BasisOfGroupGivenByEquations");
24
25#############################################################
26###
27#F EquationsOfGroupGeneratedBy
28# Computes the defining equations of the group of Z^n
29# generated by M
30# the output is [A,m] such that Ax=0 mod m are the equations
31############################################################
32DeclareGlobalFunction("EquationsOfGroupGeneratedBy");
33
34
35##############################################################
36###
37#F GluingOfAffineSemigroups
38# Determines if there is a gluing of the two affine semigroups
39# if so, returns the gluin of them, and fail otherwise
40##############################################################
41DeclareGlobalFunction("GluingOfAffineSemigroups");
42
43################################################################
44###
45#F IsFullAffineSemigroup
46# Detects if the affine semigroup is full: the nonnegative
47# of the the group spanned by it coincides with the semigroup
48# itself; or in other words, if a,b\in S and a-b\in \mathbb N^n,
49# then a-b\in S
50################################################################
51## moved to affine-def
52#DeclareGlobalFunction("IsFullAffineSemigroup");
53
54
55###################### ContejeanDevieAlgorithm
56#DeclareGlobalFunction("ContejeanDevieAlgorithmForEquations");
57#DeclareGlobalFunction("ContejeanDevieAlgorithmForInequalities");
58
59
60###############################################################################
61#O FactorizationsVectorWRTList
62#
63# Computes the set of factorizations of v in terms of the elements of ls
64# That is, a Hilbert basis for ls*X=v
65# While using normaliz:
66# If ls contains vectors that generate a nonreduced monoid, then it
67# deprecates the infinite part of the solutions, or in other words, it
68# returns only the minimal solutions of the above system of equations
69# If not using nomaliz: then the above can cause an infinite loop
70########################################################################
71DeclareOperation("FactorizationsVectorWRTList",[IsHomogeneousList,IsMatrix]);
72
73###############################################################################
74#O Factorizations
75# Factorizations of a vector in terms of the minimal generating set of the
76# affine semigroup
77########################################################################
78DeclareOperation("Factorizations",[IsHomogeneousList,IsAffineSemigroup]);
79DeclareOperation("Factorizations",[IsAffineSemigroup,IsHomogeneousList]);
80
81
82###############################################################################
83#O BettiElementsOfAffineSemigroup
84# Computes the Betti elements of the affine semigroup a
85###########################################################################
86DeclareOperation("BettiElements",[IsAffineSemigroup]);
87DeclareSynonym("BettiElementsOfAffineSemigroup",BettiElements);
88
89############################################################
90#O GeneratorsOfKernelCongruence
91# computes a set of generators of the kernel congruence
92# of the monoid morphism associated to the matrix m
93############################################################
94DeclareOperation("GeneratorsOfKernelCongruence",[IsRectangularTable]);
95
96############################################################
97#O CanonicalBasisOfKernelCongruence
98# computes a canonical basis of the kernel congruence
99# of the monoid morphism associated to the matrix m with
100# nonnegative integer coefficients wrt the term ordering
101# the kernel is the pairs (x,y) such that xm=ym
102############################################################
103DeclareOperation("CanonicalBasisOfKernelCongruence",[IsRectangularTable, IsMonomialOrdering]);
104
105############################################################
106#O GraverBasis
107# computes the Graver basis of matrix with integer entries
108############################################################
109DeclareOperation("GraverBasis",[IsRectangularTable]);
110
111
112###############################################################################
113#O MinimalPresentationOfAffineSemigroup
114# Computes a minimal presentation of the affine semigroup a
115###########################################################################
116DeclareOperation("MinimalPresentationOfAffineSemigroup",[IsAffineSemigroup]);
117DeclareOperation("MinimalPresentation",[IsAffineSemigroup]);
118
119#############################################################################
120##
121#P  IsUniquelyPresentedAffineSemigroup(a)
122##
123##  For an affine semigroup s, checks it it has a unique minimal presentation
124##  Basado en GS-O
125##
126#############################################################################
127DeclareProperty("IsUniquelyPresented", IsAffineSemigroup);
128DeclareSynonymAttr("IsUniquelyPresentedAffineSemigroup", IsUniquelyPresented);
129
130
131#############################################################################
132##
133#P  IsGenericAffineSemigroup(a)
134##
135##  For an affine semigroup a, checks it it has a generic presentation,
136##  that is, in every relation all minimal generators appear. These semigroups are uniquely
137##  presented véase B-GS-G.
138##
139#############################################################################
140DeclareProperty("IsGeneric", IsAffineSemigroup);
141DeclareSynonymAttr("IsGenericAffineSemigroup", IsGeneric);
142
143#############################################################################
144##
145#F ShadedSetOfElementInAffineSemigroup(x,a)
146## computes the shading set of x in a as defined in
147##  -Székely, L. A.; Wormald, N. C. Generating functions for the Frobenius
148##    problem with 2 and 3 generators. Math. Chronicle 15 (1986), 49–57.
149#############################################################################
150DeclareGlobalFunction("ShadedSetOfElementInAffineSemigroup");
151
152
153###############################################################################
154#F CatenaryDegreeOfAffineSemigroup
155# Computes the catenary degree of the affine semigroup a
156###########################################################################
157DeclareGlobalFunction("CatenaryDegreeOfAffineSemigroup");
158DeclareOperation("CatenaryDegree",[IsAffineSemigroup]);
159
160###############################################################################
161#F DeltaSetOfAffineSemigroup
162# Computes the Delta set of the affine semigroup a
163###########################################################################
164DeclareGlobalFunction("DeltaSetOfAffineSemigroup");
165DeclareOperation("DeltaSet",[IsAffineSemigroup]);
166
167###############################################################################
168#F EqualCatenaryDegreeOfAffineSemigroup
169# Computes the equal catenary degree of the affine semigroup a
170# uses [GSOSN]
171###########################################################################
172DeclareGlobalFunction("EqualCatenaryDegreeOfAffineSemigroup");
173
174###############################################################################
175#F HomogeneousCatenaryDegreeOfAffineSemigroup
176# Computes the homogeneous catenary degree of the affine semigroup a
177# uses [GSOSN]
178###########################################################################
179DeclareGlobalFunction("HomogeneousCatenaryDegreeOfAffineSemigroup");
180
181###############################################################################
182#F MonotoneCatenaryDegreeOfAffineSemigroup
183# Computes the monotone catenary degree of the affine semigroup a
184# uses [PH]
185###########################################################################
186DeclareGlobalFunction("MonotoneCatenaryDegreeOfAffineSemigroup");
187
188#############################################################################
189##
190#O  HilbertBasisOfSystemOfHomogeneousEquations
191#
192# Computes the Hilbert basis of the system A X=0 mod md, where the rows
193# of A are the elements of ls.
194# md can be empty of have some modulus, if the length of md is smaller than
195# the lengths of the elements of ls, then the rest of equations are considered
196# to be homogeneous linear Diophantine equations
197##########################################################################
198DeclareOperation("HilbertBasisOfSystemOfHomogeneousEquations",[IsRectangularTable,IsHomogeneousList]);
199
200#############################################################################
201##
202#O  HilbertBasisOfSystemOfHomogeneousInequalities
203#
204# Computes the Hilbert basis of the system ls*X>=0 over the nonnegative
205# integers
206##########################################################################
207DeclareOperation("HilbertBasisOfSystemOfHomogeneousInequalities",[IsRectangularTable]);
208
209###############################################################################
210##
211#O OmegaPrimalityOfElementInAffineSemigroup
212#
213# Computes the omega-primality of v in the monoid a
214###########################################################################
215DeclareOperation("OmegaPrimalityOfElementInAffineSemigroup",[IsHomogeneousList,IsAffineSemigroup]);
216DeclareOperation("OmegaPrimality",[IsHomogeneousList,IsAffineSemigroup]);
217DeclareOperation("OmegaPrimality",[IsAffineSemigroup,IsHomogeneousList]);
218
219###############################################################################
220##
221#F OmegaPrimalityOfAffineSemigroup
222#
223# Computes the omega primality of the affine semigroup a
224###########################################################################
225DeclareGlobalFunction("OmegaPrimalityOfAffineSemigroup");
226DeclareOperation("OmegaPrimality",[IsAffineSemigroup]);
227
228#############################################################################
229##
230#F  ElasticityOfFactorizationsElementWRTAffineSemigroup(n,s)
231##
232##  Computes the quotient (maximum length)/(minimum lenght) of the
233##  factorizations of an element <n> as linear combinations
234##  with nonnegative coefficients of the minimal generators
235##  of the semigroup <s>.
236##
237#############################################################################
238DeclareGlobalFunction( "ElasticityOfFactorizationsElementWRTAffineSemigroup" );
239DeclareOperation("Elasticity",[IsHomogeneousList,IsAffineSemigroup]);
240DeclareOperation("Elasticity",[IsAffineSemigroup, IsHomogeneousList]);
241
242
243###############################################################################
244#F ElasticityOfAffineSemigroup
245# Computes the elasticity of the affine semigroup a
246###########################################################################
247DeclareGlobalFunction("ElasticityOfAffineSemigroup");
248DeclareOperation("Elasticity",[IsAffineSemigroup]);
249
250###############################################################################
251##
252#F Lawrence lifting of an affine semigroup
253##############################################################################
254DeclareGlobalFunction("LawrenceLiftingOfAffineSemigroup");
255
256
257###############################################################################
258##
259#O DegreesOfPrimitiveElementsOfAffineSemigroup_Normaliz
260# An implementation of DegreesOfPrimitiveElementsOfAffineSemigroup using
261# Normaliz
262#####################################################################
263DeclareOperation("DegreesOfPrimitiveElementsOfAffineSemigroup",[IsAffineSemigroup]);
264
265###############################################################################
266##
267#O TameDegreeOfAffineSemigroup
268# Computes the tame degree of the affine semigroup a
269###########################################################################
270DeclareOperation("TameDegreeOfAffineSemigroup",[IsAffineSemigroup]);
271DeclareOperation("TameDegree",[IsAffineSemigroup]);
272
273###############################################################################
274##
275###############################################################################
276
277##########################################################################
278##
279#F NumSgpsUseNormaliz
280#  Loads the package NormalizInterface and reads affine-extra-ni
281##########################################################################
282DeclareGlobalFunction("NumSgpsUseNormaliz");
283
284##########################################################################
285##
286#F NumSgpsUseSingular
287#  Loads the package singular and reads affine-extra-s
288##########################################################################
289DeclareGlobalFunction("NumSgpsUseSingular");
290
291##########################################################################
292##
293#F NumSgpsUseSingularInterface
294#  Loads the package SingularInterface and reads affine-extra-si
295##########################################################################
296DeclareGlobalFunction("NumSgpsUseSingularInterface");
297
298##########################################################################
299##
300#F NumSgpsUse4ti2
301#  Loads the package 4ti2Interface and reads affine-extra-4ti2
302##########################################################################
303DeclareGlobalFunction("NumSgpsUse4ti2");
304
305##########################################################################
306##
307#F NumSgpsUse4ti2gap
308#  Loads the package 4ti2Interface and reads affine-extra-4ti2gap
309##########################################################################
310DeclareGlobalFunction("NumSgpsUse4ti2gap");
311
312
313##########################################################################
314##
315#F NumSgpsUseGradedModules
316#  Loads the package GradedModules and reads affine-extra-gm
317##########################################################################
318DeclareGlobalFunction("NumSgpsUseGradedModules");
319