-
Notifications
You must be signed in to change notification settings - Fork 33
/
ideals.gd
58 lines (45 loc) · 2.55 KB
/
ideals.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#############################################################################
##
## ideals/ideals.gd
## Copyright (C) 2013-2022 James D. Mitchell
##
## Licensing information can be found in the README file of this package.
##
#############################################################################
DeclareSynonymAttr("GeneratorsOfSemigroupIdeal", GeneratorsOfMagmaIdeal);
DeclareGlobalFunction("SemigroupIdeal");
DeclareGlobalFunction("LeftSemigroupIdeal");
DeclareGlobalFunction("RightSemigroupIdeal");
DeclareGlobalFunction("AnySemigroupIdealInputParsing");
DeclareOperation("AnySemigroupIdealByGenerators",
[IsSemigroup, IsOperation, IsListOrCollection]);
DeclareOperation("AnySemigroupIdealByGenerators",
[IsSemigroup, IsOperation, IsListOrCollection, IsRecord]);
DeclareOperation("AnySemigroupIdealByGeneratorsNC",
[IsSemigroup, IsOperation, IsListOrCollection, IsRecord]);
DeclareOperation("SemigroupIdealByGenerators",
[IsSemigroup, IsListOrCollection]);
DeclareOperation("SemigroupIdealByGenerators",
[IsSemigroup, IsListOrCollection, IsRecord]);
DeclareOperation("SemigroupIdealByGeneratorsNC",
[IsSemigroup, IsListOrCollection, IsRecord]);
DeclareAttribute("MinimalIdealGeneratingSet", IsSemigroupIdeal);
# the <Parent> of an ideal is the semigroup in which the ideal was created,
# i.e. the first argument of <SemigroupIdeal(S, I)>. The
# <SupersemigroupOfIdeal> is the object containing <GeneratorsOfSemigroup>
# which are used to compute the ideal. For a regular semigroup ideal,
# <SupersemigroupOfIdeal> will always be the top most semigroup used to create
# any of the predecessors of the current ideal. For example, if <S> is a
# semigroup, <I> is a regular ideal of <S>, and <J> is an ideal of <I>, then
# <Parent(J)> is <I> and <SupersemigroupOfIdeal(J)> is <S>. This is to avoid
# computing a generating set for <I>, in this example, which is expensive and
# unnecessary since <I> is regular (in which case the Green's relations of <I>
# are just restrictions of the Green's relations on <S>).
#
# If <S> is a semigroup, <I> is a non-regular ideal of <S>, <J> is an ideal of
# <I>, then <SupersemigroupOfIdeal(J)> is <I>, since we anyway currently have
# to use a <GeneratorsOfSemigroup(I)> to compute anything about <I> other than
# its size and membership.
DeclareAttribute("SupersemigroupOfIdeal", IsSemigroupIdeal);
InstallTrueMethod(IsSemigroup, IsSemigroupIdeal); # Duplicate with ideal.gi?
DeclareAttribute("Ideals", IsSemigroup);