# -*- coding: utf-8 -*-
r"""
H-trivial semigroups
"""
#*****************************************************************************
#  Copyright (C) 2016 <NAME> <nthiery at users.sf.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#                  http://www.gnu.org/licenses/
#*****************************************************************************

from sage.categories.category_with_axiom import CategoryWithAxiom
from sage.categories.semigroups import Semigroups

class HTrivialSemigroups(CategoryWithAxiom):
    def Finite_extra_super_categories(self):
        r"""
        Implement the fact that a finite `H`-trivial is aperiodic

        EXAMPLES::

            sage: Semigroups().HTrivial().Finite_extra_super_categories()
            [Category of aperiodic semigroups]
            sage: Semigroups().HTrivial().Finite() is Semigroups().Aperiodic().Finite()
            True
        """
        return [Semigroups().Aperiodic()]

    def Inverse_extra_super_categories(self):
        r"""
        Implement the fact that an `H`-trivial inverse semigroup is `J`-trivial.

        .. TODO::

            Generalization for inverse semigroups.

            Recall that there are two invertibility axioms for a semigroup `S`:

            - One stating the existence, for all `x`, of a local inverse
              `y` satisfying `x=xyx` and `y=yxy`;
            - One stating the existence, for all `x`, of a global
              inverse `y` satisfying `xy=yx=1`, where `1` is the unit
              of `S` (which must of course exist).

            It is sufficient to have local inverses for `H`-triviality
            to imply `J`-triviality. However, at this stage, only the
            second axiom is implemented in Sage (see
            :meth:`Magmas.Unital.SubcategoryMethods.Inverse`). Therefore
            this fact is only implemented for semigroups with global
            inverses, that is groups. However the trivial group is the
            unique `H`-trivial group, so this is rather boring.

        EXAMPLES::

            sage: Semigroups().HTrivial().Inverse_extra_super_categories()
            [Category of j trivial semigroups]
            sage: Monoids().HTrivial().Inverse()
            Category of h trivial groups
        """
        return [self.JTrivial()]

# -*- coding: utf-8 -*-
r"""
H-trivial semigroups
"""
#*****************************************************************************
#  Copyright (C) 2016 <NAME> <nthiery at users.sf.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#                  http://www.gnu.org/licenses/
#*****************************************************************************

from sage.categories.category_with_axiom import CategoryWithAxiom
from sage.categories.semigroups import Semigroups

class HTrivialSemigroups(CategoryWithAxiom):
    def Finite_extra_super_categories(self):
        r"""
        Implement the fact that a finite `H`-trivial is aperiodic

        EXAMPLES::

            sage: Semigroups().HTrivial().Finite_extra_super_categories()
            [Category of aperiodic semigroups]
            sage: Semigroups().HTrivial().Finite() is Semigroups().Aperiodic().Finite()
            True
        """
        return [Semigroups().Aperiodic()]

    def Inverse_extra_super_categories(self):
        r"""
        Implement the fact that an `H`-trivial inverse semigroup is `J`-trivial.

        .. TODO::

            Generalization for inverse semigroups.

            Recall that there are two invertibility axioms for a semigroup `S`:

            - One stating the existence, for all `x`, of a local inverse
              `y` satisfying `x=xyx` and `y=yxy`;
            - One stating the existence, for all `x`, of a global
              inverse `y` satisfying `xy=yx=1`, where `1` is the unit
              of `S` (which must of course exist).

            It is sufficient to have local inverses for `H`-triviality
            to imply `J`-triviality. However, at this stage, only the
            second axiom is implemented in Sage (see
            :meth:`Magmas.Unital.SubcategoryMethods.Inverse`). Therefore
            this fact is only implemented for semigroups with global
            inverses, that is groups. However the trivial group is the
            unique `H`-trivial group, so this is rather boring.

        EXAMPLES::

            sage: Semigroups().HTrivial().Inverse_extra_super_categories()
            [Category of j trivial semigroups]
            sage: Monoids().HTrivial().Inverse()
            Category of h trivial groups
        """
        return [self.JTrivial()]

# -*- coding: utf-8 -*- H-trivial semigroups #***************************************************************************** #  Copyright (C) 2016 <NAME> <nthiery at users.sf.net> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. #                  http://www.gnu.org/licenses/ #***************************************************************************** Implement the fact that a finite `H`-trivial is aperiodic          EXAMPLES::              sage: Semigroups().HTrivial().Finite_extra_super_categories()             [Category of aperiodic semigroups]             sage: Semigroups().HTrivial().Finite() is Semigroups().Aperiodic().Finite()             True Implement the fact that an `H`-trivial inverse semigroup is `J`-trivial.          .. TODO::              Generalization for inverse semigroups.              Recall that there are two invertibility axioms for a semigroup `S`:              - One stating the existence, for all `x`, of a local inverse               `y` satisfying `x=xyx` and `y=yxy`;             - One stating the existence, for all `x`, of a global               inverse `y` satisfying `xy=yx=1`, where `1` is the unit               of `S` (which must of course exist).              It is sufficient to have local inverses for `H`-triviality             to imply `J`-triviality. However, at this stage, only the             second axiom is implemented in Sage (see             :meth:`Magmas.Unital.SubcategoryMethods.Inverse`). Therefore             this fact is only implemented for semigroups with global             inverses, that is groups. However the trivial group is the             unique `H`-trivial group, so this is rather boring.          EXAMPLES::              sage: Semigroups().HTrivial().Inverse_extra_super_categories()             [Category of j trivial semigroups]             sage: Monoids().HTrivial().Inverse()             Category of h trivial groups