passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-musllinux_1_2_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/aarch64-unknown-linux-musl-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1021 -0
- gap/pkg/semigroups/config.status +1131 -0
- gap/pkg/semigroups/config.sub +1960 -0
- gap/pkg/semigroups/configure +9742 -0
- gap/pkg/semigroups/configure.ac +71 -0
- gap/pkg/semigroups/data/doc/greens.pickle +1 -0
- gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
- gap/pkg/semigroups/data/tst/bipart4 +10 -0
- gap/pkg/semigroups/data/tst/pperm10 +1 -0
- gap/pkg/semigroups/data/tst/tables.gz +0 -0
- gap/pkg/semigroups/data/tst/testdata +1 -0
- gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
- gap/pkg/semigroups/data/tst/trans3 +7 -0
- gap/pkg/semigroups/data/tst/trans3-old +7 -0
- gap/pkg/semigroups/environment.yml +7 -0
- gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
- gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
- gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
- gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
- gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
- gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
- gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
- gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
- gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
- gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
- gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
- gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
- gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
- gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
- gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
- gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
- gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
- gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
- gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
- gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
- gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
- gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
- gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
- gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
- gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
- gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
- gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
- gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
- gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
- gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
- gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
- gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
- gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
- gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
- gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
- gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
- gap/pkg/semigroups/gap/elements/elements.gd +11 -0
- gap/pkg/semigroups/gap/elements/elements.gi +121 -0
- gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
- gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
- gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
- gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
- gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
- gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
- gap/pkg/semigroups/gap/elements/star.gd +21 -0
- gap/pkg/semigroups/gap/elements/star.gi +21 -0
- gap/pkg/semigroups/gap/elements/trans.gd +13 -0
- gap/pkg/semigroups/gap/elements/trans.gi +50 -0
- gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
- gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
- gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
- gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
- gap/pkg/semigroups/gap/fp/word.gd +15 -0
- gap/pkg/semigroups/gap/fp/word.gi +67 -0
- gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
- gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
- gap/pkg/semigroups/gap/greens/acting.gd +81 -0
- gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
- gap/pkg/semigroups/gap/greens/generic.gd +117 -0
- gap/pkg/semigroups/gap/greens/generic.gi +630 -0
- gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
- gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
- gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
- gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
- gap/pkg/semigroups/gap/main/acting.gd +36 -0
- gap/pkg/semigroups/gap/main/acting.gi +779 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
- gap/pkg/semigroups/gap/main/graded.gd +26 -0
- gap/pkg/semigroups/gap/main/graded.gi +355 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
- gap/pkg/semigroups/gap/main/orbits.gd +24 -0
- gap/pkg/semigroups/gap/main/orbits.gi +512 -0
- gap/pkg/semigroups/gap/main/semiact.gd +20 -0
- gap/pkg/semigroups/gap/main/semiact.gi +821 -0
- gap/pkg/semigroups/gap/main/setup.gd +61 -0
- gap/pkg/semigroups/gap/main/setup.gi +1094 -0
- gap/pkg/semigroups/gap/obsolete.gd +9 -0
- gap/pkg/semigroups/gap/obsolete.gi +14 -0
- gap/pkg/semigroups/gap/options.g +55 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
- gap/pkg/semigroups/gap/tools/display.gd +24 -0
- gap/pkg/semigroups/gap/tools/display.gi +749 -0
- gap/pkg/semigroups/gap/tools/io.gd +17 -0
- gap/pkg/semigroups/gap/tools/io.gi +543 -0
- gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
- gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
- gap/pkg/semigroups/gap/tools/utils.gd +19 -0
- gap/pkg/semigroups/gap/tools/utils.gi +756 -0
- gap/pkg/semigroups/gapbind14/.ccls +18 -0
- gap/pkg/semigroups/gapbind14/.clang-format +104 -0
- gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
- gap/pkg/semigroups/gapbind14/LICENSE +674 -0
- gap/pkg/semigroups/gapbind14/README.md +76 -0
- gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
- gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
- gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
- gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
- gap/pkg/semigroups/gapbind14/demo/configure +34 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
- gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
- gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
- gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
- gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
- gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
- gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
- gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
- gap/pkg/semigroups/init.g +150 -0
- gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
- gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
- gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
- gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
- gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
- gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
- gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
- gap/pkg/semigroups/m4/find_gap.m4 +94 -0
- gap/pkg/semigroups/makedoc.g +153 -0
- gap/pkg/semigroups/prerequisites.sh +62 -0
- gap/pkg/semigroups/read.g +105 -0
- gap/pkg/semigroups/release.toml +6 -0
- gap/pkg/semigroups/tst/extreme/README +2 -0
- gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
- gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
- gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
- gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
- gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
- gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
- gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
- gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
- gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
- gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
- gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
- gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
- gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
- gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
- gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
- gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
- gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
- gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
- gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
- gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
- gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
- gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
- gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
- gap/pkg/semigroups/tst/standard/README +2 -0
- gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
- gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
- gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
- gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
- gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
- gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
- gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
- gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
- gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
- gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
- gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
- gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
- gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
- gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
- gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
- gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
- gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
- gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
- gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
- gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
- gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
- gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
- gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
- gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
- gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
- gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
- gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
- gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
- gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
- gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
- gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
- gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
- gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
- gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
- gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
- gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
- gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
- gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
- gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
- gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
- gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
- gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
- gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
- gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
- gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
- gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
- gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
- gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
- gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
- gap/pkg/semigroups/tst/standard/options.tst +54 -0
- gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
- gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
- gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
- gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
- gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
- gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
- gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
- gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
- gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
- gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
- gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
- gap/pkg/semigroups/tst/testinstall.tst +1815 -0
- gap/pkg/semigroups/tst/teststandard.g +22 -0
- gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
- gap/pkg/semigroups/tst/workspaces/load.g +11 -0
- gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
- gap/pkg/semigroups/tst/workspaces/save.g +14 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +356 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +5 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_gap_pkg_semigroups.libs/libsemigroups-81d76771.so.2.0.0 +0 -0
- passagemath_gap_pkg_semigroups.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
- sage/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/gap_pkg_semigroups.abi3.so +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
###########################################################################
|
|
2
|
+
##
|
|
3
|
+
## ideals/froidure-pin.gd
|
|
4
|
+
## Copyright (C) 2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
DeclareAttribute("PositionsInSupersemigroup", IsSemigroupIdeal);
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
###########################################################################
|
|
2
|
+
##
|
|
3
|
+
## ideals/froidure-pin.gi
|
|
4
|
+
## Copyright (C) 2014-2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
# This file contains method specific to ideals of semigroups.
|
|
12
|
+
|
|
13
|
+
# We use the result of running the Froidure-Pin algorithm on the supersemigroup
|
|
14
|
+
# of an ideal to calculate elements, size, test membership, find idempotents,
|
|
15
|
+
# etc. We get a generating set and use that otherwise.
|
|
16
|
+
|
|
17
|
+
InstallMethod(PositionsInSupersemigroup,
|
|
18
|
+
"for a semigroup ideal with known generators",
|
|
19
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal and
|
|
20
|
+
CanUseFroidurePin],
|
|
21
|
+
function(I)
|
|
22
|
+
local S, L, R, D, result, pos, x;
|
|
23
|
+
S := SupersemigroupOfIdeal(I);
|
|
24
|
+
L := LeftCayleyDigraph(S);
|
|
25
|
+
R := RightCayleyDigraph(S);
|
|
26
|
+
D := DigraphEdgeUnion(L, R);
|
|
27
|
+
# This could be better, we could use the quotient of the above graph by its
|
|
28
|
+
# sccs.
|
|
29
|
+
|
|
30
|
+
result := [];
|
|
31
|
+
for x in GeneratorsOfSemigroupIdeal(I) do
|
|
32
|
+
pos := PositionCanonical(S, x);
|
|
33
|
+
if not pos in result then
|
|
34
|
+
AddSet(result, pos);
|
|
35
|
+
UniteSet(result, VerticesReachableFrom(D, pos));
|
|
36
|
+
fi;
|
|
37
|
+
od;
|
|
38
|
+
|
|
39
|
+
return result;
|
|
40
|
+
end);
|
|
41
|
+
|
|
42
|
+
InstallMethod(GeneratorsOfInverseSemigroup,
|
|
43
|
+
"for an inverse semigroup ideal with inverse op and generators",
|
|
44
|
+
[IsSemigroupIdeal and IsInverseSemigroup
|
|
45
|
+
and IsGeneratorsOfInverseSemigroup and HasGeneratorsOfSemigroupIdeal],
|
|
46
|
+
GeneratorsOfSemigroup);
|
|
47
|
+
|
|
48
|
+
InstallMethod(Enumerator,
|
|
49
|
+
"semigroup ideal with generators and CanUseFroidurePin",
|
|
50
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal and CanUseFroidurePin],
|
|
51
|
+
2, # To beat the method for IsSemigroup and CanUseFroidurePin
|
|
52
|
+
function(I)
|
|
53
|
+
local en, record;
|
|
54
|
+
en := EnumeratorCanonical(SupersemigroupOfIdeal(I));
|
|
55
|
+
|
|
56
|
+
record := rec();
|
|
57
|
+
# TODO store en in enum
|
|
58
|
+
record.NumberElement :=
|
|
59
|
+
{enum, elt} -> Position(PositionsInSupersemigroup(I), Position(en, elt));
|
|
60
|
+
|
|
61
|
+
record.ElementNumber := {enum, nr} -> en[PositionsInSupersemigroup(I)[nr]];
|
|
62
|
+
|
|
63
|
+
record.IsBound\[\] := {enum, nr} -> IsBound(PositionsInSupersemigroup(I)[nr]);
|
|
64
|
+
|
|
65
|
+
record.Length := enum -> Length(PositionsInSupersemigroup(I));
|
|
66
|
+
|
|
67
|
+
return EnumeratorByFunctions(I, record);
|
|
68
|
+
end);
|
|
69
|
+
|
|
70
|
+
InstallMethod(Size, "for a semigroup ideal with generators",
|
|
71
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
|
|
72
|
+
I -> Length(Enumerator(I)));
|
|
73
|
+
|
|
74
|
+
InstallMethod(\in,
|
|
75
|
+
"for a multiplicative element and semigroup ideal with generators",
|
|
76
|
+
[IsMultiplicativeElement,
|
|
77
|
+
IsSemigroup and CanUseFroidurePin and IsSemigroupIdeal
|
|
78
|
+
and HasGeneratorsOfSemigroupIdeal],
|
|
79
|
+
{x, I} -> Position(Enumerator(I), x) <> fail);
|
|
80
|
+
|
|
81
|
+
# The method for GeneratorsOfSemigroup for a semigroup ideal must
|
|
82
|
+
# not rely in any way on the output of the Froidure-Pin algorithm when run on
|
|
83
|
+
# the ideal. In order to run the Froidure-Pin algorithm requires its input
|
|
84
|
+
# semigroup (ideal) to have a generating set, and so if the method below
|
|
85
|
+
# requires the output of the F-P algorithm (Green's relations, etc), then we
|
|
86
|
+
# get caught in an infinite loop: finding the generating set calls the F-P
|
|
87
|
+
# algorithm which tries to find a generating set, and so on.
|
|
88
|
+
|
|
89
|
+
InstallMethod(GeneratorsOfSemigroup, "for a semigroup ideal with generators",
|
|
90
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
|
|
91
|
+
function(I)
|
|
92
|
+
local U;
|
|
93
|
+
U := ClosureSemigroup(Semigroup(MinimalIdealGeneratingSet(I)),
|
|
94
|
+
Enumerator(I));
|
|
95
|
+
return GeneratorsOfSemigroup(U);
|
|
96
|
+
end);
|
|
97
|
+
|
|
98
|
+
InstallMethod(Idempotents, "for a semigroup ideal with generators",
|
|
99
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal and CanUseFroidurePin],
|
|
100
|
+
function(I)
|
|
101
|
+
local S, en;
|
|
102
|
+
S := SupersemigroupOfIdeal(I);
|
|
103
|
+
en := EnumeratorCanonical(S);
|
|
104
|
+
return en{IdempotentsSubset(S, PositionsInSupersemigroup(I))};
|
|
105
|
+
end);
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## ideals/ideals.gd
|
|
4
|
+
## Copyright (C) 2013-2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
|
|
10
|
+
DeclareSynonymAttr("GeneratorsOfSemigroupIdeal", GeneratorsOfMagmaIdeal);
|
|
11
|
+
DeclareGlobalFunction("SemigroupIdeal");
|
|
12
|
+
|
|
13
|
+
DeclareOperation("SemigroupIdealByGenerators",
|
|
14
|
+
[IsSemigroup, IsListOrCollection]);
|
|
15
|
+
|
|
16
|
+
DeclareOperation("SemigroupIdealByGenerators",
|
|
17
|
+
[IsSemigroup, IsListOrCollection, IsRecord]);
|
|
18
|
+
|
|
19
|
+
DeclareOperation("SemigroupIdealByGeneratorsNC",
|
|
20
|
+
[IsSemigroup, IsListOrCollection, IsRecord]);
|
|
21
|
+
|
|
22
|
+
DeclareAttribute("MinimalIdealGeneratingSet", IsSemigroupIdeal);
|
|
23
|
+
|
|
24
|
+
# the <Parent> of an ideal is the semigroup in which the ideal was created,
|
|
25
|
+
# i.e. the first argument of <SemigroupIdeal(S, I)>. The
|
|
26
|
+
# <SupersemigroupOfIdeal> is the object containing <GeneratorsOfSemigroup>
|
|
27
|
+
# which are used to compute the ideal. For a regular semigroup ideal,
|
|
28
|
+
# <SupersemigroupOfIdeal> will always be the top most semigroup used to create
|
|
29
|
+
# any of the predecessors of the current ideal. For example, if <S> is a
|
|
30
|
+
# semigroup, <I> is a regular ideal of <S>, and <J> is an ideal of <I>, then
|
|
31
|
+
# <Parent(J)> is <I> and <SupersemigroupOfIdeal(J)> is <S>. This is to avoid
|
|
32
|
+
# computing a generating set for <I>, in this example, which is expensive and
|
|
33
|
+
# unnecessary since <I> is regular (in which case the Green's relations of <I>
|
|
34
|
+
# are just restrictions of the Green's relations on <S>).
|
|
35
|
+
#
|
|
36
|
+
# If <S> is a semigroup, <I> is a non-regular ideal of <S>, <J> is an ideal of
|
|
37
|
+
# <I>, then <SupersemigroupOfIdeal(J)> is <I>, since we anyway currently have
|
|
38
|
+
# to use a <GeneratorsOfSemigroup(I)> to compute anything about <I> other than
|
|
39
|
+
# its size and membership.
|
|
40
|
+
|
|
41
|
+
DeclareAttribute("SupersemigroupOfIdeal", IsSemigroupIdeal);
|
|
42
|
+
|
|
43
|
+
InstallTrueMethod(IsSemigroup, IsSemigroupIdeal);
|
|
44
|
+
|
|
45
|
+
DeclareAttribute("Ideals", IsSemigroup);
|
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## ideals/ideals.gi
|
|
4
|
+
## Copyright (C) 2013-2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
# This file contains methods for ideals of semigroups, which do not depend on
|
|
12
|
+
# the representation as IsActingSemigroup or CanUseFroidurePin.
|
|
13
|
+
|
|
14
|
+
InstallImmediateMethod(IsSemigroupIdeal, IsSemigroup, 0, IsMagmaIdeal);
|
|
15
|
+
InstallTrueMethod(IsSemigroupIdeal, IsMagmaIdeal and IsSemigroup);
|
|
16
|
+
InstallTrueMethod(IsSemigroup, IsSemigroupIdeal);
|
|
17
|
+
|
|
18
|
+
BindGlobal("_ViewStringForSemigroupsIdeals",
|
|
19
|
+
function(I)
|
|
20
|
+
local str, suffix, nrgens;
|
|
21
|
+
|
|
22
|
+
str := "\><";
|
|
23
|
+
|
|
24
|
+
if HasIsCommutative(I) and IsCommutative(I) then
|
|
25
|
+
Append(str, "\>commutative\< ");
|
|
26
|
+
fi;
|
|
27
|
+
|
|
28
|
+
if not IsGroup(I) then
|
|
29
|
+
if HasIsTrivial(I) and IsTrivial(I) then
|
|
30
|
+
# do nothing
|
|
31
|
+
elif HasIsZeroSimpleSemigroup(I) and IsZeroSimpleSemigroup(I) then
|
|
32
|
+
Append(str, "\>0-simple\< ");
|
|
33
|
+
elif HasIsSimpleSemigroup(I) and IsSimpleSemigroup(I) then
|
|
34
|
+
Append(str, "\>simple\< ");
|
|
35
|
+
fi;
|
|
36
|
+
|
|
37
|
+
if HasIsInverseSemigroup(I) and IsInverseSemigroup(I) then
|
|
38
|
+
Append(str, "\>inverse\< ");
|
|
39
|
+
elif HasIsRegularSemigroup(I)
|
|
40
|
+
and not (HasIsSimpleSemigroup(I) and IsSimpleSemigroup(I)) then
|
|
41
|
+
if IsRegularSemigroup(I) then
|
|
42
|
+
Append(str, "\>regular\< ");
|
|
43
|
+
else
|
|
44
|
+
Append(str, "\>non-regular\< ");
|
|
45
|
+
fi;
|
|
46
|
+
fi;
|
|
47
|
+
fi;
|
|
48
|
+
|
|
49
|
+
Append(str, SemigroupViewStringPrefix(I));
|
|
50
|
+
|
|
51
|
+
Append(str, "\>semigroup\< \>ideal\< ");
|
|
52
|
+
|
|
53
|
+
if HasIsTrivial(I) and not IsTrivial(I) and HasSize(I) then
|
|
54
|
+
Append(str, "\>of size\> ");
|
|
55
|
+
Append(str, ViewString(Size(I)));
|
|
56
|
+
Append(str, ",\<\< ");
|
|
57
|
+
fi;
|
|
58
|
+
|
|
59
|
+
suffix := SemigroupViewStringSuffix(I);
|
|
60
|
+
if suffix <> ""
|
|
61
|
+
and not (HasIsTrivial(I) and not IsTrivial(I) and HasSize(I)) then
|
|
62
|
+
suffix := Concatenation("of ", suffix);
|
|
63
|
+
fi;
|
|
64
|
+
Append(str, suffix);
|
|
65
|
+
|
|
66
|
+
nrgens := Length(GeneratorsOfSemigroupIdeal(I));
|
|
67
|
+
|
|
68
|
+
Append(str, "with\> ");
|
|
69
|
+
Append(str, ViewString(nrgens));
|
|
70
|
+
Append(str, "\< generator");
|
|
71
|
+
|
|
72
|
+
if nrgens > 1 or nrgens = 0 then
|
|
73
|
+
Append(str, "s\<");
|
|
74
|
+
else
|
|
75
|
+
Append(str, "\<");
|
|
76
|
+
fi;
|
|
77
|
+
Append(str, ">\<");
|
|
78
|
+
|
|
79
|
+
return str;
|
|
80
|
+
end);
|
|
81
|
+
|
|
82
|
+
InstallMethod(ViewString,
|
|
83
|
+
"for a semigroup ideal with ideal generators",
|
|
84
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
|
|
85
|
+
8, # to beat the library method
|
|
86
|
+
_ViewStringForSemigroupsIdeals);
|
|
87
|
+
|
|
88
|
+
InstallMethod(ViewString,
|
|
89
|
+
"for a semigroup ideal with ideal generators",
|
|
90
|
+
[IsPartialPermSemigroup and IsInverseSemigroup and IsSemigroupIdeal and
|
|
91
|
+
HasGeneratorsOfSemigroupIdeal], 1, # to beat the library method
|
|
92
|
+
_ViewStringForSemigroupsIdeals);
|
|
93
|
+
|
|
94
|
+
InstallMethod(ViewString,
|
|
95
|
+
"for a semigroup ideal with ideal generators",
|
|
96
|
+
[IsPartialPermMonoid and IsInverseMonoid and IsSemigroupIdeal and
|
|
97
|
+
HasGeneratorsOfSemigroupIdeal], 1, # to beat the library method
|
|
98
|
+
_ViewStringForSemigroupsIdeals);
|
|
99
|
+
|
|
100
|
+
MakeReadWriteGlobal("_ViewStringForSemigroupsIdeals");
|
|
101
|
+
Unbind(_ViewStringForSemigroupsIdeals);
|
|
102
|
+
|
|
103
|
+
# Can't currently test this
|
|
104
|
+
InstallMethod(PrintObj,
|
|
105
|
+
"for a semigroup ideal with ideal generators",
|
|
106
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
|
|
107
|
+
function(I)
|
|
108
|
+
Print(PrintString(I));
|
|
109
|
+
end);
|
|
110
|
+
|
|
111
|
+
InstallMethod(PrintString,
|
|
112
|
+
"for a semigroup ideal with ideal generators",
|
|
113
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
|
|
114
|
+
function(I)
|
|
115
|
+
local str;
|
|
116
|
+
|
|
117
|
+
str := "\>\>SemigroupIdeal(\< \>";
|
|
118
|
+
Append(str, PrintString(SupersemigroupOfIdeal(I)));
|
|
119
|
+
Append(str, ",\< \>");
|
|
120
|
+
Append(str, PrintString(GeneratorsOfSemigroupIdeal(I)));
|
|
121
|
+
Append(str, "\< )\<");
|
|
122
|
+
return str;
|
|
123
|
+
end);
|
|
124
|
+
|
|
125
|
+
# This is required since there is a method for ViewObj of a semigroup ideal
|
|
126
|
+
# with a higher rank than the default method which delegates from ViewObj to
|
|
127
|
+
# ViewString. Hence the method for ViewString is never invoked without the
|
|
128
|
+
# method below.
|
|
129
|
+
|
|
130
|
+
InstallMethod(ViewObj,
|
|
131
|
+
"for a semigroup ideal with ideal generators",
|
|
132
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal], 1,
|
|
133
|
+
function(I)
|
|
134
|
+
Print(ViewString(I));
|
|
135
|
+
end);
|
|
136
|
+
|
|
137
|
+
InstallMethod(\., "for a semigroup ideal with generators and pos int",
|
|
138
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal, IsPosInt],
|
|
139
|
+
function(S, n)
|
|
140
|
+
S := GeneratorsOfSemigroupIdeal(S);
|
|
141
|
+
n := NameRNam(n);
|
|
142
|
+
n := Int(n);
|
|
143
|
+
if n = fail or Length(S) < n then
|
|
144
|
+
ErrorNoReturn("the 2nd argument (a positive integer) exceeds ",
|
|
145
|
+
"the number of generators of the 1st argument (an ideal)");
|
|
146
|
+
fi;
|
|
147
|
+
return S[n];
|
|
148
|
+
end);
|
|
149
|
+
|
|
150
|
+
InstallMethod(\=, "for semigroup ideals",
|
|
151
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal,
|
|
152
|
+
IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
|
|
153
|
+
function(I, J)
|
|
154
|
+
|
|
155
|
+
if SupersemigroupOfIdeal(I) = SupersemigroupOfIdeal(J) then
|
|
156
|
+
return ForAll(GeneratorsOfMagmaIdeal(I), x -> x in J)
|
|
157
|
+
and ForAll(GeneratorsOfMagmaIdeal(J), x -> x in I);
|
|
158
|
+
fi;
|
|
159
|
+
return ForAll(GeneratorsOfSemigroup(I), x -> x in J)
|
|
160
|
+
and ForAll(GeneratorsOfSemigroup(J), x -> x in I);
|
|
161
|
+
end);
|
|
162
|
+
|
|
163
|
+
InstallMethod(\=, "for a semigroup ideal and finite semigroup with generators",
|
|
164
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal,
|
|
165
|
+
IsSemigroup and HasGeneratorsOfSemigroup and IsFinite],
|
|
166
|
+
function(I, S)
|
|
167
|
+
if ForAll(GeneratorsOfSemigroup(S), x -> x in I) then
|
|
168
|
+
if S = Parent(I) then
|
|
169
|
+
return true;
|
|
170
|
+
elif HasGeneratorsOfSemigroup(I) then
|
|
171
|
+
return ForAll(GeneratorsOfSemigroup(I), x -> x in S);
|
|
172
|
+
else
|
|
173
|
+
return Size(I) = Size(S);
|
|
174
|
+
fi;
|
|
175
|
+
fi;
|
|
176
|
+
return false;
|
|
177
|
+
end);
|
|
178
|
+
|
|
179
|
+
InstallMethod(\=, "for a semigroup with generators and a semigroup ideal",
|
|
180
|
+
[IsSemigroup and HasGeneratorsOfSemigroup,
|
|
181
|
+
IsSemigroupIdeal and HasGeneratorsOfMagmaIdeal],
|
|
182
|
+
{S, I} -> I = S);
|
|
183
|
+
|
|
184
|
+
InstallMethod(Representative, "for a semigroup ideal",
|
|
185
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
|
|
186
|
+
{I} -> Representative(GeneratorsOfMagmaIdeal(I)));
|
|
187
|
+
|
|
188
|
+
# a convenience, similar to the functions <Semigroup>, <Monoid>, etc
|
|
189
|
+
|
|
190
|
+
InstallGlobalFunction(SemigroupIdeal,
|
|
191
|
+
function(arg...)
|
|
192
|
+
local out, i;
|
|
193
|
+
|
|
194
|
+
if Length(arg) <= 1 then
|
|
195
|
+
ErrorNoReturn("there must be 2 or more arguments");
|
|
196
|
+
elif not IsSemigroup(arg[1]) then
|
|
197
|
+
ErrorNoReturn("the 1st argument is not a semigroup");
|
|
198
|
+
elif Length(arg) = 2 and IsMatrix(arg[2]) then
|
|
199
|
+
# special case for matrices, because they may look like lists
|
|
200
|
+
return SemigroupIdealByGenerators(arg[1], [arg[2]]);
|
|
201
|
+
|
|
202
|
+
elif Length(arg) = 2 and IsList(arg[2]) and 0 < Length(arg[2]) then
|
|
203
|
+
# list of generators
|
|
204
|
+
return SemigroupIdealByGenerators(arg[1], arg[2]);
|
|
205
|
+
elif (IsMultiplicativeElement(arg[2])
|
|
206
|
+
and IsGeneratorsOfSemigroup([arg[2]]))
|
|
207
|
+
or (IsListOrCollection(arg[2])
|
|
208
|
+
and IsGeneratorsOfSemigroup(arg[2]))
|
|
209
|
+
or (HasIsEmpty(arg[2]) and IsEmpty(arg[2])) then
|
|
210
|
+
# generators and collections of generators
|
|
211
|
+
out := [];
|
|
212
|
+
for i in [2 .. Length(arg)] do
|
|
213
|
+
# so that we can pass the options record
|
|
214
|
+
if i = Length(arg) and IsRecord(arg[i]) then
|
|
215
|
+
return SemigroupIdealByGenerators(arg[1], out, arg[i]);
|
|
216
|
+
elif IsMultiplicativeElement(arg[i]) and
|
|
217
|
+
IsGeneratorsOfSemigroup([arg[i]]) then
|
|
218
|
+
Add(out, arg[i]);
|
|
219
|
+
elif IsGeneratorsOfSemigroup(arg[i]) then
|
|
220
|
+
if HasGeneratorsOfSemigroupIdeal(arg[i]) then
|
|
221
|
+
Append(out, GeneratorsOfSemigroupIdeal(arg[i]));
|
|
222
|
+
elif HasGeneratorsOfSemigroup(arg[i]) then
|
|
223
|
+
Append(out, GeneratorsOfSemigroup(arg[i]));
|
|
224
|
+
elif IsList(arg[i]) then
|
|
225
|
+
Append(out, arg[i]);
|
|
226
|
+
else
|
|
227
|
+
Append(out, AsList(arg[i]));
|
|
228
|
+
fi;
|
|
229
|
+
else
|
|
230
|
+
ErrorNoReturn("the 2nd argument is not a combination ",
|
|
231
|
+
"of generators, lists of generators, ",
|
|
232
|
+
"nor semigroups");
|
|
233
|
+
fi;
|
|
234
|
+
od;
|
|
235
|
+
return SemigroupIdealByGenerators(arg[1], out);
|
|
236
|
+
fi;
|
|
237
|
+
ErrorNoReturn("invalid arguments");
|
|
238
|
+
end);
|
|
239
|
+
|
|
240
|
+
InstallMethod(SemigroupIdealByGenerators,
|
|
241
|
+
"for a semigroup and list or collections",
|
|
242
|
+
[IsSemigroup, IsListOrCollection],
|
|
243
|
+
{S, gens} -> SemigroupIdealByGenerators(S, gens, SEMIGROUPS.OptionsRec(S)));
|
|
244
|
+
|
|
245
|
+
InstallMethod(SemigroupIdealByGenerators,
|
|
246
|
+
"for semigroup, list or collection, and record",
|
|
247
|
+
[IsSemigroup, IsListOrCollection, IsRecord],
|
|
248
|
+
function(S, gens, opts)
|
|
249
|
+
if not ForAll(gens, x -> x in S) then
|
|
250
|
+
ErrorNoReturn("the 2nd argument (a mult. elt. coll.) do not all ",
|
|
251
|
+
"belong to the semigroup");
|
|
252
|
+
fi;
|
|
253
|
+
return SemigroupIdealByGeneratorsNC(S, gens, opts);
|
|
254
|
+
end);
|
|
255
|
+
|
|
256
|
+
InstallMethod(SemigroupIdealByGeneratorsNC,
|
|
257
|
+
"for a semigroup, list or collections, and record",
|
|
258
|
+
[IsSemigroup, IsListOrCollection, IsRecord],
|
|
259
|
+
function(S, gens, opts)
|
|
260
|
+
local filts, I;
|
|
261
|
+
opts := SEMIGROUPS.ProcessOptionsRec(SEMIGROUPS.DefaultOptionsRec, opts);
|
|
262
|
+
gens := AsList(gens);
|
|
263
|
+
|
|
264
|
+
filts := IsMagmaIdeal and IsAttributeStoringRep;
|
|
265
|
+
|
|
266
|
+
if opts.acting
|
|
267
|
+
and (IsActingSemigroup(S) or IsGeneratorsOfActingSemigroup(gens)) then
|
|
268
|
+
filts := filts and IsActingSemigroup;
|
|
269
|
+
if opts.regular then
|
|
270
|
+
filts := filts and IsRegularActingSemigroupRep;
|
|
271
|
+
fi;
|
|
272
|
+
fi;
|
|
273
|
+
|
|
274
|
+
if IsIntegerMatrixSemigroup(S) then
|
|
275
|
+
filts := filts and IsIntegerMatrixSemigroup;
|
|
276
|
+
elif IsMatrixOverFiniteFieldSemigroup(S) then
|
|
277
|
+
filts := filts and IsMatrixOverFiniteFieldSemigroup;
|
|
278
|
+
fi;
|
|
279
|
+
|
|
280
|
+
I := Objectify(NewType(FamilyObj(gens), filts), rec(opts := opts));
|
|
281
|
+
|
|
282
|
+
if IsInverseActingSemigroupRep(S) then
|
|
283
|
+
SetFilterObj(I, IsInverseActingSemigroupRep);
|
|
284
|
+
elif IsRegularActingSemigroupRep(S) then
|
|
285
|
+
SetFilterObj(I, IsRegularActingSemigroupRep);
|
|
286
|
+
fi;
|
|
287
|
+
|
|
288
|
+
if (HasIsInverseSemigroup(S) and IsInverseSemigroup(S)) then
|
|
289
|
+
SetIsInverseSemigroup(I, true);
|
|
290
|
+
if HasIsGeneratorsOfInverseSemigroup(S) then
|
|
291
|
+
SetIsGeneratorsOfInverseSemigroup(I, IsGeneratorsOfInverseSemigroup(S));
|
|
292
|
+
fi;
|
|
293
|
+
elif (HasIsRegularSemigroup(S) and IsRegularSemigroup(S)) then
|
|
294
|
+
SetIsRegularSemigroup(I, true);
|
|
295
|
+
fi;
|
|
296
|
+
|
|
297
|
+
if (HasIsStarSemigroup(S) and IsStarSemigroup(S)) then
|
|
298
|
+
SetIsStarSemigroup(I, true);
|
|
299
|
+
fi;
|
|
300
|
+
|
|
301
|
+
if (HasIsRegularSemigroup(S) and not IsRegularSemigroup(S)) then
|
|
302
|
+
# <S> is a non-regular semigroup or ideal
|
|
303
|
+
SetSupersemigroupOfIdeal(I, S);
|
|
304
|
+
elif HasSupersemigroupOfIdeal(S) then
|
|
305
|
+
# <S> is a regular ideal
|
|
306
|
+
|
|
307
|
+
# this takes precedence over the last case since we hope that the
|
|
308
|
+
# supersemigroup of an ideal has fewer generators than the ideal...
|
|
309
|
+
SetSupersemigroupOfIdeal(I, SupersemigroupOfIdeal(S));
|
|
310
|
+
else
|
|
311
|
+
# <S> is a regular semigroup
|
|
312
|
+
SetSupersemigroupOfIdeal(I, S);
|
|
313
|
+
fi;
|
|
314
|
+
|
|
315
|
+
SetParent(I, S);
|
|
316
|
+
SetGeneratorsOfMagmaIdeal(I, gens);
|
|
317
|
+
|
|
318
|
+
if not IsActingSemigroup(I) then
|
|
319
|
+
# to keep the craziness in the library happy!
|
|
320
|
+
SetActingDomain(I, S);
|
|
321
|
+
elif IsActingSemigroup(I)
|
|
322
|
+
and not (HasIsRegularSemigroup(I) and IsRegularSemigroup(I)) then
|
|
323
|
+
# this is done so that the ideal knows it is regular or non-regular from
|
|
324
|
+
# the point of creation...
|
|
325
|
+
Enumerate(SemigroupIdealData(I), infinity, ReturnFalse);
|
|
326
|
+
fi;
|
|
327
|
+
|
|
328
|
+
return I;
|
|
329
|
+
end);
|
|
330
|
+
|
|
331
|
+
InstallMethod(MinimalIdealGeneratingSet,
|
|
332
|
+
"for a semigroup ideal with generators",
|
|
333
|
+
[IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
|
|
334
|
+
function(I)
|
|
335
|
+
local S, dclasses, D, labels, x;
|
|
336
|
+
|
|
337
|
+
if Length(GeneratorsOfSemigroupIdeal(I)) = 1 then
|
|
338
|
+
return GeneratorsOfSemigroupIdeal(I);
|
|
339
|
+
fi;
|
|
340
|
+
|
|
341
|
+
S := SupersemigroupOfIdeal(I);
|
|
342
|
+
dclasses := [];
|
|
343
|
+
for x in GeneratorsOfSemigroupIdeal(I) do
|
|
344
|
+
if not ForAny(dclasses, D -> x in D) then
|
|
345
|
+
Add(dclasses, DClass(S, x));
|
|
346
|
+
fi;
|
|
347
|
+
od;
|
|
348
|
+
D := DigraphMutableCopy(PartialOrderOfDClasses(S));
|
|
349
|
+
ClearDigraphVertexLabels(D);
|
|
350
|
+
InducedSubdigraph(D, List(dclasses, x -> Position(DClasses(S), x)));
|
|
351
|
+
DigraphRemoveLoops(D);
|
|
352
|
+
labels := DigraphVertexLabels(D);
|
|
353
|
+
return List(DigraphSources(D), x -> Representative(DClasses(S)[labels[x]]));
|
|
354
|
+
end);
|
|
355
|
+
|
|
356
|
+
# JDM: is there a better method? Certainly for regular acting ideals
|
|
357
|
+
# there is
|
|
358
|
+
|
|
359
|
+
InstallMethod(InversesOfSemigroupElementNC,
|
|
360
|
+
"for a semigroup ideal and multiplicative element",
|
|
361
|
+
[IsSemigroupIdeal, IsMultiplicativeElement],
|
|
362
|
+
{I, x} -> InversesOfSemigroupElementNC(SupersemigroupOfIdeal(I), x));
|
|
363
|
+
|
|
364
|
+
InstallMethod(IsCommutativeSemigroup, "for a semigroup ideal",
|
|
365
|
+
[IsSemigroupIdeal],
|
|
366
|
+
function(I)
|
|
367
|
+
local x, y;
|
|
368
|
+
|
|
369
|
+
if HasParent(I) and HasIsCommutativeSemigroup(Parent(I))
|
|
370
|
+
and IsCommutativeSemigroup(Parent(I)) then
|
|
371
|
+
return true;
|
|
372
|
+
fi;
|
|
373
|
+
|
|
374
|
+
for x in GeneratorsOfSemigroupIdeal(I) do
|
|
375
|
+
for y in GeneratorsOfSemigroup(SupersemigroupOfIdeal(I)) do
|
|
376
|
+
if not x * y = y * x then
|
|
377
|
+
return false;
|
|
378
|
+
fi;
|
|
379
|
+
od;
|
|
380
|
+
od;
|
|
381
|
+
|
|
382
|
+
return true;
|
|
383
|
+
end);
|
|
384
|
+
|
|
385
|
+
InstallMethod(IsTrivial, "for a semigroup ideal",
|
|
386
|
+
[IsSemigroupIdeal],
|
|
387
|
+
function(I)
|
|
388
|
+
local gens;
|
|
389
|
+
|
|
390
|
+
if HasIsTrivial(Parent(I)) and IsTrivial(Parent(I)) then
|
|
391
|
+
return true;
|
|
392
|
+
fi;
|
|
393
|
+
|
|
394
|
+
gens := GeneratorsOfSemigroupIdeal(I);
|
|
395
|
+
return ForAll(gens, x -> gens[1] = x) and IsMultiplicativeZero(I, gens[1]);
|
|
396
|
+
end);
|
|
397
|
+
|
|
398
|
+
InstallMethod(IsFactorisableInverseMonoid, "for an inverse semigroup ideal",
|
|
399
|
+
[IsSemigroupIdeal and IsInverseSemigroup],
|
|
400
|
+
function(I)
|
|
401
|
+
if I = SupersemigroupOfIdeal(I) then
|
|
402
|
+
return IsFactorisableInverseMonoid(SupersemigroupOfIdeal(I));
|
|
403
|
+
fi;
|
|
404
|
+
return IsFactorisableInverseMonoid(
|
|
405
|
+
InverseSemigroup(GeneratorsOfSemigroup(I)));
|
|
406
|
+
end);
|
|
407
|
+
|
|
408
|
+
InstallMethod(Ideals, "for a finite semigroup",
|
|
409
|
+
[IsSemigroup and IsFinite],
|
|
410
|
+
function(S)
|
|
411
|
+
local reps, D, cliques;
|
|
412
|
+
|
|
413
|
+
# Groups have only one ideal
|
|
414
|
+
if IsGroup(S) or (HasIsGroupAsSemigroup(S) and IsGroupAsSemigroup(S)) then
|
|
415
|
+
return [SemigroupIdeal(S, S.1)];
|
|
416
|
+
fi;
|
|
417
|
+
reps := DClassReps(S);
|
|
418
|
+
# Digraph of D-class partial order
|
|
419
|
+
D := DigraphMutableCopy(PartialOrderOfDClasses(S));
|
|
420
|
+
# Graph with an edge between any two comparable D-classes
|
|
421
|
+
DigraphSymmetricClosure(DigraphReflexiveTransitiveClosure(D));
|
|
422
|
+
# Graph with an edge between any two non-comparable D-classes
|
|
423
|
+
DigraphDual(D);
|
|
424
|
+
# All non-empty sets of pairwise incomparable D-classes
|
|
425
|
+
cliques := DigraphCliques(D);
|
|
426
|
+
return List(cliques, clique -> SemigroupIdeal(S, reps{clique}));
|
|
427
|
+
end);
|
|
428
|
+
|
|
429
|
+
InstallMethod(IsMultiplicativeZero,
|
|
430
|
+
"for a semigroup ideal and multiplicative element",
|
|
431
|
+
[IsSemigroupIdeal, IsMultiplicativeElement],
|
|
432
|
+
function(I, x)
|
|
433
|
+
local gens;
|
|
434
|
+
if not x in I then
|
|
435
|
+
return false;
|
|
436
|
+
elif HasGeneratorsOfSemigroup(I) then
|
|
437
|
+
gens := GeneratorsOfSemigroup(I);
|
|
438
|
+
else
|
|
439
|
+
gens := GeneratorsOfSemigroup(SupersemigroupOfIdeal(I));
|
|
440
|
+
fi;
|
|
441
|
+
return ForAll(gens, g -> g * x = x and x * g = x);
|
|
442
|
+
end);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## ideals/lambda-rho.gd
|
|
4
|
+
## Copyright (C) 2013-2022 James D. Mitchell
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
DeclareFilter("IsIdealOrb", IsOrbit);
|
|
12
|
+
|
|
13
|
+
DeclareGlobalFunction("UpdateIdealLambdaOrb");
|
|
14
|
+
DeclareGlobalFunction("UpdateIdealRhoOrb");
|
|
15
|
+
|
|
16
|
+
DeclareOperation("Enumerate", [IsIdealOrb, IsCyclotomic, IsFunction]);
|