  
  [1X5 Constructing numerical semigroups from others[0X
  
  
  [1X5.1 Adding and removing elements of a numerical semigroup[0X
  
  In  this  section  we  show how to construct new numerical semigroups from a
  given  numerical semigroup. Two dual operations are presented. The first one
  removes  a  minimal  generator from a numerical semigroup. The second adds a
  special gap to a semigroup (see [GJ03]).
  
  [1X5.1-1 RemoveMinimalGeneratorFromNumericalSemigroup[0m
  
  [2X> RemoveMinimalGeneratorFromNumericalSemigroup( [0X[3Xn, S[0X[2X ) _____________[0Xfunction
  
  [3XS[0m is a numerical semigroup and [3Xn[0m is one if its minimal generators.
  
  The  output  is  the  numerical  semigroup  [3XS[0m  \{[3Xn[0m}  (see [GJ03]; S\{n} is a
  numerical semigroup if and only if n is a minimal generator of S).
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> s:=NumericalSemigroup(3,5,7);[0X
    [4X<Numerical semigroup with 3 generators>[0X
    [4Xgap> RemoveMinimalGeneratorFromNumericalSemigroup(7,s);[0X
    [4X<Numerical semigroup with 3 generators>[0X
    [4Xgap> MinimalGeneratingSystemOfNumericalSemigroup(last);[0X
    [4X[ 3, 5 ][0X
    [4X[0X
    [4X                        [0X
  [4X------------------------------------------------------------------[0X
  
  [1X5.1-2 AddSpecialGapOfNumericalSemigroup[0m
  
  [2X> AddSpecialGapOfNumericalSemigroup( [0X[3Xg, S[0X[2X ) ________________________[0Xfunction
  
  [3XS[0m is a numerical semigroup and [3Xg[0m is a special gap of [3XS[0m
  
  The  output  is  the  numerical  semigroup [3XS[0m cup{[3Xg[0m} (see [GJ03], where it is
  explained why this set is a numerical semigroup).
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> s:=NumericalSemigroup(3,5,7);[0X
    [4X<Numerical semigroup with 3 generators>[0X
    [4Xgap> s2:=RemoveMinimalGeneratorFromNumericalSemigroup(5,s);[0X
    [4X<Numerical semigroup with 3 generators>[0X
    [4Xgap> s3:=AddSpecialGapOfNumericalSemigroup(5,s2);[0X
    [4X<Numerical semigroup>[0X
    [4Xgap> SmallElementsOfNumericalSemigroup(s) =[0X
    [4X> SmallElementsOfNumericalSemigroup(s3);[0X
    [4Xtrue                [0X
    [4Xgap> s=s3;[0X
    [4Xtrue[0X
    [4X[0X
    [4X                        [0X
  [4X------------------------------------------------------------------[0X
  
  [1X5.1-3 IntersectionOfNumericalSemigroups[0m
  
  [2X> IntersectionOfNumericalSemigroups( [0X[3XS, T[0X[2X ) ________________________[0Xfunction
  
  [3XS[0m  and  [3XT[0m  are  numerical  semigroups.  Computes the intersection of [3XS[0m and [3XT[0m
  (which is a numerical semigroup).
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> S := NumericalSemigroup("modular", 5,53);[0X
    [4X<Modular numerical semigroup satisfying 5x mod 53 <= x >[0X
    [4Xgap> T := NumericalSemigroup(2,17);[0X
    [4X<Numerical semigroup with 2 generators>[0X
    [4Xgap> SmallElementsOfNumericalSemigroup(S);[0X
    [4X[ 0, 11, 12, 13, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36, 37, 38, 39, 43 ][0X
    [4Xgap> SmallElementsOfNumericalSemigroup(T);[0X
    [4X[ 0, 2, 4, 6, 8, 10, 12, 14, 16 ][0X
    [4Xgap> IntersectionOfNumericalSemigroups(S,T);[0X
    [4X<Numerical semigroup>[0X
    [4Xgap> SmallElementsOfNumericalSemigroup(last);[0X
    [4X[ 0, 12, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36, 37, 38, 39, 43 ][0X
  [4X------------------------------------------------------------------[0X
  
  [1X5.1-4 QuotientOfNumericalSemigroup[0m
  
  [2X> QuotientOfNumericalSemigroup( [0X[3XS, n[0X[2X ) _____________________________[0Xfunction
  
  [3XS[0m  is  a numerical semigroup and [3Xn[0m is an integer. Computes the quotient of [3XS[0m
  by  [3Xn[0m,  that  is,  the  set  {  xin N | nx in S}, which is again a numerical
  semigroup.  [10XS / n[0m may be used as a short for [10XQuotientOfNumericalSemigroup(S,
  n)[0m.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> s:=NumericalSemigroup(3,29);[0X
    [4X<Numerical semigroup with 2 generators>[0X
    [4Xgap> SmallElementsOfNumericalSemigroup(s);[0X
    [4X[ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 29, 30, 32, 33, 35, 36, 38, [0X
    [4X  39, 41, 42, 44, 45, 47, 48, 50, 51, 53, 54, 56 ][0X
    [4Xgap> t:=QuotientOfNumericalSemigroup(s,7);[0X
    [4X<Numerical semigroup>[0X
    [4Xgap> SmallElementsOfNumericalSemigroup(t);[0X
    [4X[ 0, 3, 5, 6, 8 ][0X
    [4Xgap> u := s / 7;[0X
    [4X<Numerical semigroup>[0X
    [4Xgap> SmallElementsOfNumericalSemigroup(u);[0X
    [4X[ 0, 3, 5, 6, 8 ][0X
  [4X------------------------------------------------------------------[0X
  
  
  [1X5.2  Constructing  the  set  of  all numerical semigroups containing a given[0X
  [1Xnumerical semigroup[0X
  
  In  order  to  construct  the set of numerical semigroups containing a fixed
  numerical  semigroup S, one first constructs its unitary extensions, that is
  to  say,  the  sets  Scup{g} that are numerical semigroups with g a positive
  integer. This is achieved by constructing the special gaps of the semigroup,
  and  then adding each of them to the numerical semigroup. Then we repeat the
  process for each of this new numerical semigroups until we reach N.
  
  These procedures are described in [GJ03].
  
  [1X5.2-1 OverSemigroupsNumericalSemigroup[0m
  
  [2X> OverSemigroupsNumericalSemigroup( [0X[3Xs[0X[2X ) ____________________________[0Xfunction
  
  [3Xs[0m  is  a  numerical semigroup. The output is the set of numerical semigroups
  containing it.
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> OverSemigroupsNumericalSemigroup(NumericalSemigroup(3,5,7));[0X
    [4X[ <Numerical semigroup with 1 generators>, <Numerical semigroup>,[0X
    [4X  <Numerical semigroup>, <Numerical semigroup with 3 generators> ][0X
    [4Xgap> List(last,s->MinimalGeneratingSystemOfNumericalSemigroup(s));[0X
    [4X[ [ 1 ], [ 3, 4, 5 ], [ 2, 3 ], [ 3, 5, 7 ] ][0X
  [4X------------------------------------------------------------------[0X
  
  [1X5.2-2 NumericalSemigroupsWithFrobeniusNumber[0m
  
  [2X> NumericalSemigroupsWithFrobeniusNumber( [0X[3Xf[0X[2X ) ______________________[0Xfunction
  
  [3Xf[0m  is an non zero integer greater than or equal to -1. The output is the set
  of  numerical  semigroups with Frobenius number [3Xf[0m. The algorithm implemented
  is given in [GM04].
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> Length(NumericalSemigroupsWithFrobeniusNumber(20));[0X
    [4X900[0X
    [4X[0X
    [4X                        [0X
  [4X------------------------------------------------------------------[0X
  
  Given  a  numerical  semigroup  of genus g, removing minimal generators, one
  obtains numerical semigroups of genus g+1. In order to avoid repetitions, we
  only  remove  minimal  generators  greater  than the frobenius number of the
  numerical semigroup (this is accomplished with the local function sons).
  
  These procedures are described in [GB03] and [Bra08].
  
  [1X5.2-3 NumericalSemigroupsWithGenus[0m
  
  [2X> NumericalSemigroupsWithGenus( [0X[3Xg[0X[2X ) ________________________________[0Xfunction
  
  [3Xg[0m  is  a  nonnegative integer. The output is the set of numerical semigroups
  with genus[3Xg[0m .
  
  [4X---------------------------  Example  ----------------------------[0X
    [4Xgap> NumericalSemigroupsWithGenus(5);[0X
    [4X[ <Numerical semigroup with 6 generators>, [0X
    [4X  <Numerical semigroup with 5 generators>, [0X
    [4X  <Numerical semigroup with 5 generators>, [0X
    [4X  <Numerical semigroup with 5 generators>, [0X
    [4X  <Numerical semigroup with 5 generators>, [0X
    [4X  <Numerical semigroup with 4 generators>, [0X
    [4X  <Numerical semigroup with 4 generators>, [0X
    [4X  <Numerical semigroup with 4 generators>, [0X
    [4X  <Numerical semigroup with 4 generators>, [0X
    [4X  <Numerical semigroup with 3 generators>, [0X
    [4X  <Numerical semigroup with 3 generators>, [0X
    [4X  <Numerical semigroup with 2 generators> ][0X
    [4Xgap> List(last,s->MinimalGeneratingSystemOfNumericalSemigroup(s));[0X
    [4X[ [ 6, 7, 8, 9, 10, 11 ], [ 5, 7, 8, 9, 11 ], [ 5, 6, 8, 9 ], [ 5, 6, 7, 9 ], [0X
    [4X  [ 5, 6, 7, 8 ], [ 4, 6, 7 ], [ 4, 7, 9, 10 ], [ 4, 6, 9, 11 ], [0X
    [4X  [ 4, 5, 11 ], [ 3, 8, 10 ], [ 3, 7, 11 ], [ 2, 11 ] ][0X
  [4X------------------------------------------------------------------[0X
  
