Multiple of a numerical semigroup
Definition
Let \(T\) and \(S\) be numerical semigroups and \(a,b\) positive integers. It is said that \(T\) is a multiple of \(S\) if \(T = aS \cup \{b, \rightarrow\}\), where
\[ aS = \{a \cdot s ~ | ~ s \in S\}. \]
It can be proven that \(aS \cup \{b, \rightarrow\}\) is always a numerical semigroup.
Examples
\(\circ\) Let \(S = \langle 3, 7 \rangle = \{0, 3, 6, 7, 9, 10, 12, \rightarrow \}\) and \(T = \langle 6, 14, 31, 33, 35 \rangle\). Computing the first elements of \(T\), we have that
\[ T = \{0, 6, 12, 14, 18, 20, 24, 26, 28, 30, \rightarrow \} = 2 \cdot \{0, 3, 6, 7, 9, 10, 12, 13, 14, 15\} \cup \{31, \rightarrow\} = 2 \cdot S \cup \{31, \rightarrow\}, \]
where the last inequality is due to the fact that \(2 \cdot S \setminus \{0, 3, 6, 7, 9, 10, 12, 13, 14, 15\} \subseteq \{31, \rightarrow\}\). Therefore, \(T = 2 \cdot S \cup \{31, \rightarrow\}\) and \(T\) is multiple of \(S\) with \(a = 2\) and \(b = 31\).
Examples with GAP
The following example is made with the package NumericalSgps in GAP.
\(\diamond\) Let \(S = \langle 29, 33, 43, 44 \rangle\), in GAP:
gap> S := NumericalSemigroup(29, 33, 43, 44);
<Numerical semigroup with 4 generators>
Given a numerical semigroup \(S\) and \(a,b\) positive integers, the function MultipleOfNumericalSemigroup
returns the multiple the numerical semigroup \(aS \cup \{b, \rightarrow\}\).
gap> a := 4;
4
gap> b := 910;
910
gap> T := MultipleOfNumericalSemigroup(S, a, b);
<Numerical semigroup>
gap> L := MinimalGenerators(T);
116, 132, 172, 176, 910, 911, 913, 914, 915, 917, 918, 919, 921, 922,
[ 923, 925, 926, 927, 929, 930, 931, 933, 934, 935, 937, 938, 939, 941,
942, 943, 945, 946, 947, 949, 950, 951, 953, 954, 955, 957, 958, 959,
961, 962, 963, 965, 966, 967, 969, 970, 971, 973, 974, 975, 977, 978,
979, 981, 982, 983, 985, 986, 987, 989, 990, 991, 993, 994, 995, 997,
998, 999, 1001, 1002, 1003, 1005, 1006, 1007, 1009, 1010, 1011, 1013,
1014, 1015, 1017, 1018, 1019, 1021, 1022, 1023, 1025 ]
The function MinimalGenerators
returns the minimal set of generators of the given numerical semigroup. Then, \(T = 4 \cdot S \cup \{910, \rightarrow\}\) is minimally generated by \(L\).
\(\diamond\) Given two numerical semigroups \(T\) and \(S\), the following function returns true if \(T\) is a multiple of \(S\) and false otherwise.
gap> IsMultipleOfNumericalSemigroup := function(T,S)
> local m_S, c_T, a, lim, i;
> if not IsNumericalSemigroup(T) then
> Error("The first argument must be a Numerical Semigroup");
> fi;
> if not IsNumericalSemigroup(S) then
> Error("The second argument must be a Numerical Semigroup");
> fi;
>
> if IsOrdinary(T) then
> return true;
> fi;
>
> m_S := Multiplicity(S);
> c_T := Conductor(T);
> a := 1;
> while a*m_S < c_T do
> i := 1;
> while a*S[i] < c_T do
> i := i + 1;
> od;
> i := i - 1;
> if Difference(SmallElements(T), [c_T])/a = S{[1..i]} then
> return true;
> fi;
> a := a + 1;
> od;
> return false;
> end;
function( T, S ) ... end
Moreover, if \(T\) is a multiple of \(S\), the following function returns the integers \(a,b\) such that \(T = aS \cup \{b, \rightarrow\}\). If \(T\) is not multiple, it returns fail
.
gap> WhichIsMultipleOfNumericalSemigroup := function(T,S)
> local m_S, c_T, a, lim, i;
> if not IsNumericalSemigroup(T) then
> Error("The first argument must be a Numerical Semigroup");
> fi;
> if not IsNumericalSemigroup(S) then
> Error("The second argument must be a Numerical Semigroup");
> fi;
>
> if IsOrdinary(T) then
> c_T := Conductor(T);
> return [QuoInt(c_T, Multiplicity(S)) + 1, c_T];
> fi;
>
> m_S := Multiplicity(S);
> c_T := Conductor(T);
> a := 1;
> while a*m_S < c_T do
> i := 1;
> while a*S[i] < c_T do
> i := i + 1;
> od;
> i := i - 1;
> if Difference(SmallElements(T), [c_T])/a = S{[1..i]} then
> return [a, Conductor(T)];
> fi;
> a := a + 1;
> od;
> return fail;
> end;
function( T, S ) ... end
Let \(S = \langle 32, 52, 56, 76, 82, 113 \rangle\), in GAP:
gap> S := NumericalSemigroup(32, 52, 56, 76, 82, 113);
<Numerical semigroup with 6 generators>
Let us consider the following numerical semigroup.
gap> L := [ 160, 260, 280, 380, 410, 565, 1736, 1737, 1738, 1739, 1741, 1742, 1743, 1744, 1746, 1747, 1748, 1749, 1751, 1752, 1753, 1754, 1756, 1757, 1758, 1759, 1761, 1762, 1763, 1764, 1766, 1767, 1768, 1769, 1771, 1772, 1773, 1774, 1776, 1777, 1778, 1779, 1781, 1782, 1783, 1784, 1786, 1787, 1788, 1789, 1791, 1792, 1793, 1794, 1796, 1797, 1798, 1799, 1801, 1802, 1803, 1804, 1806, 1807, 1808, 1809, 1811, 1812, 1813, 1814, 1816, 1817, 1818, 1819, 1821, 1822, 1823, 1824, 1826, 1827, 1828, 1829, 1831, 1832, 1833, 1834, 1836, 1837, 1838, 1839, 1841, 1842, 1843, 1844, 1846, 1847, 1848, 1849, 1851, 1852, 1853, 1854, 1856, 1857, 1858, 1859, 1861, 1862, 1863, 1864, 1866, 1867, 1868, 1869, 1871, 1872, 1873, 1874, 1876, 1877, 1878, 1879, 1881, 1882, 1883, 1884, 1886, 1887, 1888, 1889, 1891, 1892, 1893, 1894 ];
gap> T := NumericalSemigroup(L);
<Numerical semigroup with 134 generators>
From the functions defined above,
gap> IsMultipleOfNumericalSemigroup(T, S);
true
gap> WhichIsMultipleOfNumericalSemigroup(T,S);
5, 1735 ] [
Therefore, \(T = 5\cdot S \cup \{1735, \rightarrow\}\).
References
https://gap-packages.github.io/
numericalsgps
.