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