<Section>
                <Heading>
                    Irreducible numerical semigroups
                </Heading>
                An irreducible numerical semigroup is a semigroup that cannot be expressed as the 
                intersection of numerical semigroups properly containing it. 
                <P/>
                
                It is not difficult to prove that a semigroup is irreducible if and only if it is 
                maximal (with respect to set inclusion) in the set of all numerical semigroup having
                its same Frobenius number (see <Cite Key="RB03"></Cite>). Hence, according to 
                <Cite Key="FGH87"></Cite> (respectively <Cite Key="BDF97"></Cite>), 
                symmetric (respectively pseudo-symmetric) numerical semigroups are those irreducible 
                numerical semigroups with odd (respectively even) Frobenius number.
                <P/>
                
                In <Cite Key="RGGJ03"></Cite> it is shown that a numerical semigroup is irreducible if and 
                only if it has only one special gap. We use this characterization.
                <P/>
                
                In this section we show how to construct the set of all numerical semigroups with a 
                given Frobenius number. First we construct an irreducible numerical semigroup with 
                the given Frobenius number (as explained in <Cite Key="RGS04"></Cite>), and then 
                we construct the rest from it. That is why we have separated both functions.
                <P/>
                
                Every numerical semigroup can be expressed as an intersection of irreducible 
                numerical semigroups. If <M>S</M> can be expressed as <M>S=S_1\cap \cdots\cap S_n</M>,
                with <M>S_i</M> irreducible numerical semigroups, and no factor can be removed, then
                we say that this decomposition is minimal. Minimal decompositions can be computed by 
                using Algorithm 26 in <Cite Key="RGGJ03"></Cite>.
                
                <ManSection>
                    <Func Arg="s" Name="IsIrreducibleNumericalSemigroup"></Func>
                    <Description>
                        <A>s</A> is a numerical semigroup. The output is true if <A>s</A> is irreducible, 
                        false otherwise.
                        <Example><![CDATA[
gap> IsIrreducibleNumericalSemigroup(NumericalSemigroup(4,6,9));
true
gap> IsIrreducibleNumericalSemigroup(NumericalSemigroup(4,6,7,9));
false
]]>
                        </Example>          
                    </Description>
                </ManSection>
                
                
                <ManSection>
                    <Func Arg="s" Name="IsSymmetricNumericalSemigroup"></Func>
                    <Description>
                        <A>s</A> is a numerical semigroup. The output is true if <A>s</A> is symmetric, 
                        false otherwise.
                        <Example><![CDATA[
gap> IsSymmetricNumericalSemigroup(NumericalSemigroup(10,23));      
true            
gap> IsSymmetricNumericalSemigroup(NumericalSemigroup(10,11,23));
false
]]>
                        </Example>          
                    </Description>
                </ManSection>
                
                <ManSection>
                    <Func Arg="s" Name="IsPseudoSymmetricNumericalSemigroup"></Func>
                    <Description>
                        <A>s</A> is a numerical semigroup. The output is true if <A>s</A> is pseudo-symmetric, 
                        false otherwise.
                        <Example><![CDATA[
gap> IsPseudoSymmetricNumericalSemigroup(NumericalSemigroup(6,7,8,9,11));
true
gap> IsPseudoSymmetricNumericalSemigroup(NumericalSemigroup(4,6,9));
false
]]>
                        </Example>          
                    </Description>
                </ManSection>
                
                
                <ManSection>
                    <Func Arg="f" Name="AnIrreducibleNumericalSemigroupWithFrobeniusNumber"></Func>
                    <Description>
                        <A>f</A> is an integer greater than or equal to -1. The output is an irreducible 
                        numerical semigroup with frobenius number <A> f</A>. From the way the procedure is
                        implemented, the resulting semigroup has at most four generators (see <Cite Key="RGS04"></Cite>).           
                        <Example><![CDATA[
gap> FrobeniusNumber(AnIrreducibleNumericalSemigroupWithFrobeniusNumber(28));
28
]]>
                        </Example>          
                    </Description>
                </ManSection>
                
                
                <ManSection>
                    <Func Arg="f" Name="IrreducibleNumericalSemigroupsWithFrobeniusNumber"></Func>
                    <Description>
                        <A>f</A> is an integer greater than or equal to -1. The output is the set of all
                        irreducible numerical semigroups with frobenius number <A>f</A>.         
                        <Example><![CDATA[
gap> Length(IrreducibleNumericalSemigroupsWithFrobeniusNumber(39));
227
]]>
                        </Example>          
                    </Description>
                </ManSection>
                
                <ManSection>
                    <Func Arg="s" Name="DecomposeIntoIrreducibles"></Func>
                    <Description>
                        <A>s</A> is a numerical semigroup. The output is a set of irreducible 
                        numerical semigroups containing it. These elements appear in a minimal
                        decomposition of <A>s</A> as intersection into irreducibles. 
                        <Example><![CDATA[
gap> DecomposeIntoIrreducibles(NumericalSemigroup(5,6,8));
[ <Numerical semigroup>, <Numerical semigroup> ]
]]>
                        </Example>          
                    </Description>
                </ManSection>
                
                
            </Section>
